Jak w inteligentny sposób dodać \ newpage do Rmarkdown?

114

Zastanawiam się, czy można po prostu użyć \newpagepolecenia LaTeX w R Markdown v2 w inny sposób niż ten:

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

Produkuję pdf_output. Jeśli ktoś ma jakiś pomysł, nie wahaj się skomentować :)! Dzięki

Tworzę pdf w ten sposób:

---
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
źródło
Jak tworzysz swoje wyjście PDF?
Spacedman,
Zredagowałem moje pytanie. Oto jak tworzę pdf.
Marcin Kosiński
A potem jakich pakietów / funkcji używasz? Czy po prostu klikasz przyciski w RStudio?
Spacedman,
Co za różnica? Moje pakiety lub funkcje nie mają nic wspólnego z tym, że chciałbym dodać nową stronę w niektórych częściach kodu.
Marcin Kosiński
Miło jest zobaczyć cały przepływ pracy - istnieją różne sposoby przejścia od przeceny do formatu PDF. Bez tego zgadujemy. Dobre przypuszczenie @tonytonov
Spacedman

Odpowiedzi:

177

Po prostu \newpagealbo \pagebreakzadziała np

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

To rozwiązanie zakłada, że ​​robisz na drutach plik PDF. W przypadku HTML podobny efekt można osiągnąć, dodając tag <P style="page-break-before: always">. Zwróć uwagę, że prawdopodobnie nie zobaczysz podziału strony w przeglądarce (HTML nie ma stron jako takich), ale układ drukowania będzie go miał.

tonytonov
źródło
Czy mogę jakoś zamknąć temat?
Marcin Kosiński
2
Zapraszamy! Zaakceptowałeś już odpowiedź (zielony znak); oznacza to, że problem został rozwiązany. Na to pytanie wystarczy, choć inni użytkownicy mogą nadal dodawać swoje odpowiedzi lub komentarze. Tutaj w pytaniach zamykających SO jest narzędzie oparte na głosowaniu, które blokuje niezbyt dobre pytania, a nawet usuwa je, jeśli nie są odpowiednie. Twoje pytanie jest w porządku, więc nie musisz go teraz zamykać ani usuwać, po prostu zostaw je tak, jak jest.
tonytonov
Czy ma to jakikolwiek wpływ podczas robienia na drutach html? Czy powoduje to jakiś błąd?
gvrocha
Ponieważ jest to kwestia tworzenia nowej strony. Jak utworzyłbyś nową stronę w wynikach HTML?
Marcin Kosiński
1
@ MarcinKosiński Możesz wstawiać tagi HTML bezpośrednio: zobacz edycję dla wyjaśnienia.
tonytonov
22

W porcji inicjalizacyjnej definiuję funkcję

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

W części dotyczącej promocji, w której chcę wstawić podział strony, piszę

`r pagebreak()`
Billy34
źródło
13

Możesz uzależnić podział strony od robienia na drutach pliku PDF. To zadziałało dla mnie.

```{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')}
cat('\\pagebreak')
```
Odważny
źródło
To działa świetnie, tworzy podział strony w pliku PDF, ale nie wyświetla niczego w formacie HTML (gdzie podziały stron nie mają sensu). Wydaje się, że zaktualizowałem główną odpowiedź, aby dodać tę możliwość.
Magnus
1
{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')} cat('\\pagebreak') powoduje jednak, że 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$getdziała dobrze w konsoli. ?
keithpjolley
dodaj echo = FALSEdo opcji knitr, aby uniknąć pobrania instrukcji cat('\\pagebreak')w pliku wyjściowym.
Akronix,
@Akronix Użyłem cat('\\pagebreak')w kawałku i dodałem echo = FALSEdo knitr opts, ale nadal otrzymuję "## \ newpage" w moim pdf, jakiś pomysł dlaczego?
Benjamin Telkamp
1
```{r page break, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex'), echo = FALSE} cat('\\pagebreak') ```
Akronix