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.
- Todo en modo retrato.
- Todo en modo paisaje.
- Mezcla de modos de retrato y paisaje.
Reduzcamos a cada condición.
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
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
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)
```