tutorial the sheet presentaciones guide examples español definitive cheat r pdf rstudio knitr r-markdown

the - r markdown tutorial pdf



Rstudio rmarkdown: diseño de retrato y paisaje en un solo PDF (4)

Me pregunto cómo usar rmarkdown para generar un pdf que tenga un diseño vertical y de paisaje en el mismo documento. Si hay una opción de rmarkdown pura, sería incluso mejor que usar látex.

Aquí hay un pequeño ejemplo reproducible. En primer lugar, renderizar .Rmd en RStudio (presionar el botón Tejer PDF ) da como resultado un pdf con todas las páginas en formato horizontal:

--- title: "All pages landscape" output: pdf_document classoption: landscape --- ```{r} summary(cars) ``` /newpage ```{r} summary(cars) ```

Luego, un intento de crear un documento que mezcle el retrato y el diseño del paisaje. La configuración básica en el YAML se realiza de acuerdo con la sección ''Incluye'' here . El archivo in_header ''header.tex'' solo contiene /usepackage{lscape} , un paquete sugerido para el knitr paisajes knitr here . El archivo .tex está en el mismo directorio que el archivo .Rmd .

--- title: "Mixing portrait and landscape" output: pdf_document: includes: in_header: header.tex --- Portrait: ```{r} summary(cars) ``` /newpage /begin{landscape} Landscape: ```{r} summary(cars) ``` /end{landscape} /newpage More portrait: ```{r} summary(cars) ```

Sin embargo, este código da como resultado un error:

# ! You can''t use `macro parameter character #'' in horizontal mode. # l.116 # # pandoc.exe: Error producing PDF from TeX source # Error: pandoc document conversion failed with error 43

Cualquier ayuda es muy apreciada.


Como bautista mencionó, si encierra los comandos R dentro de un entorno LaTeX, pandoc no los analizará y los colocará como están en el LaTeX generado: esto es lo que causa el error. Más allá de la solución agradable y simple de baptiste, puede usar el paquete xtable R, que ofrece la posibilidad de crear tablas LaTeX de aspecto más sexy a partir de la salida R. Para que funcione el siguiente ejemplo, debe agregar /usepackage{rotating} en el archivo header.tex :

--- title: "Mixing portrait and landscape" output: pdf_document: keep_tex: true includes: in_header: header.tex --- ```{r, echo=FALSE} library(xtable) ``` Portrait ```{r, results=''asis'', echo=FALSE} print(xtable(summary(cars), caption="Landscape table"), comment=FALSE) ``` Landscape: ```{r, results=''asis'', echo=FALSE} print(xtable(summary(cars), caption="Landscape table"), floating.environment="sidewaystable", comment=FALSE) ```

La segunda tabla se imprimirá dentro del entorno sidewaystable , en lugar de la table habitual: por lo tanto, se imprimirá en modo horizontal, en una página separada. Tenga en cuenta que las tablas y figuras que se colocan en modo horizontal por el paquete lscape o en el entorno sideways siempre se colocarán en una página separada, consulte la página 91 de este documento tan importante:

http://www.tex.ac.uk/tex-archive/info/epslatex/english/epslatex.pdf

Como encuentro esto un poco molesto, logré encontrar una forma de mantener tanto las tablas de retrato como las de paisaje dentro de la misma página (perdiendo toda la tarde en el proceso):

--- title: "Mixing portrait and landscape" output: pdf_document: keep_tex: true includes: in_header: header.tex --- ```{r, echo=FALSE} library(xtable) ``` Portrait: ```{r, results=''asis'', echo=FALSE} print(xtable(summary(cars), caption="Portrait table."), comment=FALSE) ``` Landscape: ```{r, results=''asis'', echo=FALSE} cat(paste0( "//begin{table}[ht]//centering//rotatebox{90}{", paste0(capture.output( print(xtable(summary(cars)), floating=FALSE, comment=FALSE)), collapse="/n"), "}//caption{Landscape table.}//end{table}")) ```

Para la tabla de paisaje, utilicé la sugerencia /rotatebox provista aquí:

http://en.wikibooks.org/wiki/LaTeX/Rotations

Para que esto funcione, solo tengo que generar la parte tabular de la tabla con la print(xtable(... parte, luego tengo que capturar la salida y rodearla "manualmente" con los comandos table y rotatebox , convirtiendo todo en una salida de cadena R para que pandoc no los vea como entornos LaTeX. Para una solución de resolución final pura ... ¡buena suerte!


Entonces, pandoc no analiza el contenido de los entornos de látex, pero puede engañarlo redefiniendo los comandos en su archivo header.tex :

/usepackage{lscape} /newcommand{/blandscape}{/begin{landscape}} /newcommand{/elandscape}{/end{landscape}}

Por lo tanto, aquí /begin{landscape} se redefine a /blandscape y /end{landscape} a /elandscape . El uso de esos comandos recién definidos en el archivo .Rmd parece funcionar:

--- title: "Mixing portrait and landscape" output: pdf_document: includes: in_header: header.tex --- Portrait ```{r} summary(cars) ``` /newpage /blandscape Landscape ```{r} summary(cars) ``` /elandscape /newpage More portrait ```{r} summary(cars) ```


Para los casos más comunes.

Hay 3 condiciones.

  1. Todo en modo retrato.
  2. Todo en modo paisaje.
  3. Mezcla de modos de retrato y paisaje.

Reduzcamos a cada condición.

  1. El primero, digamos que tenemos un documento de descuento comienza con el siguiente código. Y esta es la configuración predeterminada en Rstudio cuando crea un archivo rmd. Cuando lo tejes. Asumirá automáticamente que es un modo de retrato sin duda.

    title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document

  2. Cuando desee unir el archivo PDF al modo horizontal, lo único que debe agregar es classoption: landscape

    title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document classoption: landscape

  3. Si desea una combinación de ambos, deberá agregar el archivo .tex en YAML. Haciendo referencia al enlace que mencioné anteriormente. Puede descargar el código .tex aquí. http://goo.gl/cptOqg O simplemente copie el código y guárdelo como header.tex. Luego, para hacer la vida más fácil, coloque este archivo .tex junto con el archivo rmd para tricotar. Asegúrese de hacer estas dos cosas: Copie el archivo tex y muévalo junto con el archivo rmd. Cambia el comienzo de rmd por ser:

    title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document: includes: in_header: header.tex

Este es el resumen después de jugar con este tema y en su mayoría se benefició de la respuesta de Baptiste.

Incluí algunas instantáneas y ejemplos en mi blogger mi blogger .

Espero que esto ayude. Buena suerte.


Sobre la base de soluciones anteriores, la siguiente solución no requiere un archivo auxiliar header.tex . Todos los contenidos están contenidos en el archivo .Rmd . En su lugar, los comandos LaTeX se definen en un bloque header-includes en el encabezado YAML. Más información se puede encontrar here .

Además, noté que el uso del paquete lscape LaTeX rota el contenido de una página, pero no la página PDF en sí. Esto se resuelve usando el paquete pdflscape .

--- title: "Mixing portrait and landscape WITHOUT a header.tex file" header-includes: - /usepackage{pdflscape} - /newcommand{/blandscape}{/begin{landscape}} - /newcommand{/elandscape}{/end{landscape}} output: pdf_document --- Portrait ```{r} summary(cars) ``` /newpage /blandscape Landscape ```{r} summary(cars) ``` /elandscape /newpage More portrait ```{r} summary(cars) ```