Como adicionar \ newpage no Rmarkdown de forma inteligente?

114

Eu me pergunto se alguém poderia simplesmente usar o \newpagecomando LaTeX no R markdown v2 de uma maneira diferente desta:

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

Eu produzo pdf_output. Se any1 tiver alguma ideia, por favor, não hesite em comentar :)! obrigado

Eu crio pdf assim:

---
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
fonte
Como você está criando sua saída em PDF?
Spacedman
Eu editei minha pergunta. É assim que eu crio pdf.
Marcin Kosiński
E então quais pacotes / funções você usa? Ou você apenas clica em botões no RStudio?
Spacedman
Qual é a diferença? Meus pacotes ou funções não têm nada a ver com o fato de eu querer adicionar newpage em algumas partes do código.
Marcin Kosiński
É bom ver o fluxo de trabalho completo - há várias maneiras de ir do markdown ao PDF. Sem isso, estamos adivinhando. Bom palpite @tonytonov
Spacedman

Respostas:

177

Simplesmente \newpageou \pagebreakfuncionará, por exemplo

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

Esta solução pressupõe que você está tricotando PDF. Para HTML, você pode obter um efeito semelhante adicionando uma tag <P style="page-break-before: always">. Observe que você provavelmente não verá uma quebra de página em seu navegador (HTMLs não têm páginas em si), mas o layout de impressão terá.

Tonytonov
fonte
Posso fechar o tópico de alguma forma?
Marcin Kosiński
2
Você é bem vindo! Você já aceitou a resposta (marca verde); essa é a indicação de que o problema está resolvido. É o suficiente para esta pergunta, embora outros usuários ainda possam adicionar suas respostas ou comentários. Aqui, nas perguntas de fechamento do SO, há uma ferramenta baseada em votos que bloqueia perguntas não tão boas ou mesmo as exclui se não forem apropriadas. Sua pergunta está bem, então você não precisa fechá-la ou excluí-la agora, apenas deixe-a como está.
tonytonov
Isso tem algum efeito ao tricotar em html? Isso causa algum erro?
gvrocha
Uma vez que é uma questão sobre como criar uma nova página. Como você criaria uma nova página na saída html?
Marcin Kosiński de
1
@ MarcinKosiński Você pode inserir tags HTML diretamente: veja a edição para esclarecimentos.
tonytonov
22

No bloco de inicialização, eu defino uma função

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

Na parte de remarcação onde desejo inserir uma quebra de página, eu digito

`r pagebreak()`
Billy34
fonte
13

Você pode fazer com que a quebra de página seja condicional ao tricô para PDF. Isso funcionou para mim.

```{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')}
cat('\\pagebreak')
```
Bravoking
fonte
Isso funciona muito bem, cria uma quebra de página em PDF, mas não produz nada em HTML (onde quebras de página não fazem sentido). Parece que devemos atualizar a resposta principal para adicionar essa possibilidade.
Magnus
1
{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')} cat('\\pagebreak') resulta em 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$getfunciona bem no console. ?
keithpjolley
adicione echo = FALSEàs opções do knitr para evitar obter a instrução cat('\\pagebreak')no arquivo de saída.
Akronix
@Akronix eu usei cat('\\pagebreak')no chunk e adicionei echo = FALSEao knitr opts, mas ainda consigo "## \ newpage" no meu pdf, alguma ideia do porquê?
Benjamin Telkamp
1
```{r page break, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex'), echo = FALSE} cat('\\pagebreak') ```
Akronix de