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
---

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.


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()`

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')
```

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.