¿Cómo agregar \ newpage en Rmarkdown de una manera inteligente?


114

Me pregunto si uno podría simplemente usar el \newpagecomando LaTeX en R markdown v2 de una manera diferente a esta:

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

Produzco pdf_output. Si alguien tiene alguna idea, no dude en comentar :)! Gracias

Creo pdf como este:

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

¿Cómo está creando su salida PDF?
Hombre espacial

Edité mi pregunta. Así es como creo pdf.
Marcin Kosiński

Y luego, ¿qué paquetes / funciones usas? ¿O simplemente hace clic en los botones de RStudio?
Hombre espacial

¿Cual es la diferencia? Mis paquetes o funciones no tienen nada que ver con eso me gustaría agregar una nueva página en algunas partes del código.
Marcin Kosiński

Es agradable ver el flujo de trabajo completo: hay varias formas de pasar de Markdown a PDF. Sin eso, estamos adivinando. Buena suposición @tonytonov
Spacedman

Respuestas:


177

Simplemente \newpageo \pagebreakfuncionará, por ejemplo

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

Esta solución asume que está tejiendo PDF. Para HTML, puede lograr un efecto similar agregando una etiqueta <P style="page-break-before: always">. Tenga en cuenta que es probable que no vea un salto de página en su navegador (los HTML no tienen páginas en sí), pero el diseño de impresión lo tendrá.


¿Puedo cerrar el tema de alguna manera?
Marcin Kosiński

2
¡De nada! Ya ha aceptado la respuesta (marca verde); esa es la indicación de que el problema está resuelto. Es suficiente para esta pregunta, aunque otros usuarios aún pueden agregar sus respuestas o comentarios. Aquí, en SO, las preguntas de cierre hay una herramienta basada en votos que bloquea las preguntas que no son tan buenas o incluso las elimina si no son apropiadas. Su pregunta está bien, por lo que no tiene que cerrarla o eliminarla ahora, simplemente déjela como está.
tonytonov

¿Eso tiene algún efecto al tejer en html? ¿Causa algún error?
gvrocha

Ya que se trata de crear una nueva página. ¿Cómo crearía una nueva página en la salida html?
Marcin Kosiński

1
@ MarcinKosiński Puede insertar etiquetas HTML directamente: consulte la edición para obtener más información.
tonytonov

22

En el fragmento de inicialización defino una función

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

En la parte de la rebaja donde quiero insertar un salto de página, escribo

`r pagebreak()`

13

Puede condicionar el salto de página a tejer en PDF. Esto funcionó para mí.

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

Esto funciona muy bien, crea un salto de página en PDF pero no genera nada en HTML (donde los saltos de página no tienen sentido). Parece que conviene actualizar la respuesta principal para agregar esta posibilidad.
Magnus

1
{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')} cat('\\pagebreak') Sin 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$getembargo, los resultados funcionan bien en la consola. ?
keithpjolley

add echo = FALSEto the knitr opta para evitar obtener la declaración cat('\\pagebreak')en el archivo de salida.
Akronix

@Akronix Lo usé cat('\\pagebreak')en trozos y lo agregué echo = FALSEa las opciones de knitr, pero aún obtengo "## \ newpage" en mi pdf, ¿alguna idea de por qué?
Benjamin Telkamp

1
```{r page break, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex'), echo = FALSE} cat('\\pagebreak') ```
Akronix
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.