Comment ajouter \ newpage dans Rmarkdown de manière intelligente?

114

Je me demande si l'on pourrait simplement utiliser la \newpagecommande LaTeX dans R markdown v2 d'une manière différente de celle-ci:

```{r, results='asis', echo=FALSE}
cat("\\newpage")
```

Je produis pdf_output. Si any1 a une idée, n'hésitez pas à commenter :)! Merci

Je crée un pdf comme ceci:

---
title: " "
author: " "
date: "2014"
output: 
   pdf_document:
      includes:
         in_header: naglowek.tex
      highlight: pygments
      toc: true
      toc_depth: 3
      number_sections: true
      keep_tex: true
---
Marcin Kosiński
la source
Comment créez-vous votre sortie PDF?
Spacedman
J'ai édité ma question. Il y a comment je crée des pdf.
Marcin Kosiński
Et puis quels packages / fonctions utilisez-vous? Ou cliquez-vous simplement sur les boutons de RStudio?
Spacedman
Quelle est la différence? Mes packages ou mes fonctions n'ont rien à voir avec le fait que j'aimerais ajouter une nouvelle page dans certaines parties du code.
Marcin Kosiński
Il est agréable de voir le flux de travail complet - il existe différentes façons de passer du démarquage au PDF. Sans cela, nous devinons. Good guess @tonytonov
Spacedman

Réponses:

177

Simplement \newpageou \pagebreakfonctionnera, par exemple

hello world
\newpage
```{r, echo=FALSE}
1+1
```
\pagebreak
```{r, echo=FALSE}
plot(1:10)
```

Cette solution suppose que vous tricotez un PDF. Pour HTML, vous pouvez obtenir un effet similaire en ajoutant une balise <P style="page-break-before: always">. Notez que vous ne verrez probablement pas de saut de page dans votre navigateur (les HTML n'ont pas de pages en soi), mais la mise en page d'impression l'aura.

Tonytonov
la source
Puis-je fermer le sujet d'une manière ou d'une autre?
Marcin Kosiński
2
Vous êtes les bienvenus! Vous avez déjà accepté la réponse (marque verte); c'est l'indication que le problème est résolu. Cela suffit pour cette question, bien que d'autres utilisateurs puissent toujours ajouter leurs réponses ou commentaires. Ici, sur les questions de clôture SO se trouve un outil basé sur le vote qui verrouille les questions moins bonnes ou même les supprime si elles ne sont pas appropriées. Votre question est correcte, vous n'avez donc pas besoin de la fermer ou de la supprimer maintenant, laissez-la simplement telle quelle.
tonytonov
Cela a-t-il un effet lors du tricotage en HTML? Cela cause-t-il une erreur?
gvrocha
Puisqu'il s'agit de créer une nouvelle page. Comment créeriez-vous une nouvelle page en sortie html?
Marcin Kosiński le
1
@ MarcinKosiński Vous pouvez insérer directement des balises HTML: voir modifier pour plus de précisions.
tonytonov
22

Dans le bloc d'initialisation, je définis une fonction

pagebreak <- function() {
  if(knitr::is_latex_output())
    return("\\newpage")
  else
    return('<div style="page-break-before: always;" />')
}

Dans la partie démarque où je veux insérer un saut de page, je tape

`r pagebreak()`
Billy34
la source
13

Vous pouvez conditionner le saut de page au tricotage au format PDF. Cela a fonctionné pour moi.

```{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')}
cat('\\pagebreak')
```
Bravoking
la source
Cela fonctionne très bien, crée un saut de page dans PDF mais ne produit rien en HTML (où les sauts de page n'ont pas de sens). Il semble qu'il mette à jour la réponse principale pour ajouter cette possibilité.
Magnus
1
{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')} cat('\\pagebreak') les résultats Error in eval(x, envir = envir) : object 'opts_knit' not found Calls: <Anonymous> ... process_group.block -> call_block -> eval_lang -> eval -> eval Execution halted opts_knit$getfonctionnent bien dans la console cependant. ?
keithpjolley
add echo = FALSEto the knitr opte pour éviter d'obtenir l'instruction cat('\\pagebreak')dans le fichier de sortie.
Akronix
@Akronix J'ai utilisé cat('\\pagebreak')en bloc et ajouté echo = FALSEaux options de knitr, mais j'ai toujours "## \ newpage" dans mon pdf, une idée pourquoi?
Benjamin Telkamp
1
```{r page break, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex'), echo = FALSE} cat('\\pagebreak') ```
Akronix