Wie füge ich \ newpage in Rmarkdown auf intelligente Weise hinzu?

114

Ich frage mich, ob man den LaTeX- \newpageBefehl in R markdown v2 einfach anders verwenden könnte:

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

Ich produziere pdf_output. Wenn any1 eine Idee hat, zögern Sie bitte nicht zu kommentieren :)! Vielen Dank

Ich erstelle PDF wie folgt:

---
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
quelle
Wie erstellen Sie Ihre PDF-Ausgabe?
Spacedman
Ich habe meine Frage bearbeitet. So erstelle ich PDF.
Marcin Kosiński
Und welche Pakete / Funktionen verwenden Sie dann? Oder klicken Sie einfach auf Schaltflächen in RStudio?
Spacedman
Was ist der Unterschied? Meine Pakete oder Funktionen haben nichts damit zu tun, dass ich in einigen Teilen des Codes eine neue Seite hinzufügen möchte.
Marcin Kosiński
Es ist schön, den gesamten Workflow zu sehen - es gibt verschiedene Möglichkeiten, vom Markdown zum PDF zu gelangen. Ohne das raten wir. Gute Vermutung @tonytonov
Spacedman

Antworten:

177

Einfach \newpageoder \pagebreakwird funktionieren, z

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

Diese Lösung setzt voraus, dass Sie PDF stricken. Bei HTML können Sie einen ähnlichen Effekt erzielen, indem Sie ein Tag hinzufügen <P style="page-break-before: always">. Beachten Sie, dass in Ihrem Browser wahrscheinlich kein Seitenumbruch angezeigt wird (HTMLs haben keine Seiten an sich), das Drucklayout jedoch.

Tonytonov
quelle
Kann ich das Thema irgendwie schließen?
Marcin Kosiński
2
Bitte schön! Sie haben die Antwort bereits akzeptiert (grüne Markierung); Das ist der Hinweis darauf, dass das Problem gelöst ist. Es reicht für diese Frage, obwohl andere Benutzer möglicherweise noch ihre Antworten oder Kommentare hinzufügen. Hier auf SO schließen Fragen ist ein abstimmungsbasiertes Tool, das nicht so gute Fragen sperrt oder sogar löscht, wenn sie nicht angemessen sind. Ihre Frage ist in Ordnung, Sie müssen sie jetzt nicht schließen oder löschen. Lassen Sie sie einfach so, wie sie ist.
Tonytonov
Hat das irgendwelche Auswirkungen beim Stricken auf HTML? Verursacht es einen Fehler?
Gvrocha
Da geht es um das Erstellen einer neuen Seite. Wie würden Sie eine neue Seite in der HTML-Ausgabe erstellen?
Marcin Kosiński
1
@ MarcinKosiński Sie können HTML-Tags direkt einfügen: Weitere Informationen finden Sie unter Bearbeiten.
Tonytonov
22

Im Initialisierungsblock definiere ich eine Funktion

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

In den Markdown-Teil, in den ich einen Seitenumbruch einfügen möchte, gebe ich ein

`r pagebreak()`
Billy34
quelle
13

Sie können den Seitenumbruch vom Stricken in PDF abhängig machen. Das hat bei mir funktioniert.

```{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')}
cat('\\pagebreak')
```
Bravoking
quelle
Dies funktioniert hervorragend, erstellt einen Seitenumbruch in PDF, gibt jedoch nichts in HTML aus (wo Seitenumbrüche keinen Sinn ergeben). Scheint es wert zu sein, die Hauptantwort zu aktualisieren, um diese Möglichkeit hinzuzufügen.
Magnus
1
{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')} cat('\\pagebreak') führt jedoch dazu, dass 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$getdie Konsole einwandfrei funktioniert. ?
Keithpjolley
Fügen Sie echo = FALSEden Knitr-Optionen hinzu, um zu vermeiden, dass die Anweisung cat('\\pagebreak')in die Ausgabedatei aufgenommen wird.
Akronix
@Akronix Ich habe cat('\\pagebreak')in Chunk verwendet und echo = FALSEzu den Knitr-Optionen hinzugefügt , bekomme aber immer noch "## \ newpage" in meinem PDF, eine Idee warum?
Benjamin Telkamp
1
```{r page break, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex'), echo = FALSE} cat('\\pagebreak') ```
Akronix