Come aggiungere \ newpage in Rmarkdown in modo intelligente?


114

Mi chiedo se si possa semplicemente usare il \newpagecomando LaTeX in R markdown v2 in un modo diverso da questo:

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

Produco pdf_output. Se any1 ha qualche idea, non esitare a commentare :)! Grazie

Creo pdf in questo modo:

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

Come stai creando il tuo output PDF?
Spacedman

Ho modificato la mia domanda. Ecco come creo il pdf.
Marcin Kosiński

E poi quali pacchetti / funzioni usi? O fai semplicemente clic sui pulsanti in RStudio?
Spacedman

Qual è la differenza? I miei pacchetti o funzioni non hanno nulla a che fare con il fatto che vorrei aggiungere newpage in alcune parti del codice.
Marcin Kosiński

È bello vedere il flusso di lavoro completo: ci sono vari modi per passare dal markdown al PDF. Senza quello, stiamo indovinando. Buona intuizione @tonytonov
Spacedman

Risposte:


177

Semplicemente \newpageo \pagebreakfunzionerà, ad es

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

Questa soluzione presuppone che tu stia lavorando a maglia in PDF. Per l'HTML, puoi ottenere un effetto simile aggiungendo un tag <P style="page-break-before: always">. Nota che probabilmente non vedrai un'interruzione di pagina nel tuo browser (gli HTML non hanno pagine di per sé), ma il layout di stampa lo avrà.


Posso chiudere l'argomento in qualche modo?
Marcin Kosiński

2
Prego! Hai già accettato la risposta (segno verde); questa è l'indicazione che il problema è risolto. È sufficiente per questa domanda, sebbene altri utenti possano comunque aggiungere le loro risposte o commenti. Qui sulle domande di chiusura di SO c'è uno strumento basato sul voto che blocca le domande non così buone o addirittura le elimina se non sono appropriate. La tua domanda va bene, quindi non devi chiuderla o eliminarla ora, lasciala così com'è.
tonytonov

Ha qualche effetto quando si lavora a maglia in html? Causa qualche errore?
gvrocha

Poiché è una domanda sulla creazione di una nuova pagina. Come creeresti una nuova pagina nell'output html?
Marcin Kosiński

1
@ MarcinKosiński Puoi inserire tag HTML direttamente: vedi modifica per chiarimenti.
tonytonov

22

Nel blocco di inizializzazione definisco una funzione

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

Nella parte markdown in cui voglio inserire un'interruzione di pagina, digito

`r pagebreak()`

13

Puoi condizionare l'interruzione di pagina al lavoro a maglia in PDF. Questo ha funzionato per me.

```{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')}
cat('\\pagebreak')
```

Funziona alla grande, crea un'interruzione di pagina nel PDF ma non restituisce nulla in HTML (dove le interruzioni di pagina non hanno senso). Sembra che sia necessario aggiornare la risposta principale per aggiungere questa possibilità.
Magnus

1
{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')} cat('\\pagebreak') i risultati però 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$getfunzionano bene nella console. ?
keithpjolley

aggiungi echo = FALSEal knitr le opzioni per evitare di ottenere l'istruzione cat('\\pagebreak')nel file di output.
Akronix

@ Akronix ho usato cat('\\pagebreak')in blocco e aggiunto echo = FALSEalle opzioni knitr, ma ottengo ancora "## \ newpage" nel mio pdf, qualche idea del perché?
Benjamin Telkamp,

1
```{r page break, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex'), echo = FALSE} cat('\\pagebreak') ```
Akronix
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.