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

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


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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.