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

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


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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.