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.