Me pregunto como usar rmarkdown
para generar un pdf que tiene un diseño vertical y horizontal en el mismo documento. Si hay una rmarkdown
opción pura , sería incluso mejor que usar látex.
Aquí hay un pequeño ejemplo reproducible. Primero, renderizar esto .Rmd
en RStudio (presione el botón Knit 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 combine el diseño vertical y horizontal. La configuración básica en YAML
se realiza de acuerdo con la sección 'Incluye' aquí . El in_header
archivo 'header.tex' solo contiene \usepackage{lscape}
un paquete sugerido para el knitr
diseño horizontal aquí . El .tex
archivo está en el mismo directorio que el.Rmd
archivo.
---
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.
latex
ignorancia también tiene la culpa..md
(bien, aquí), luego la conversión md-> tex (ahí es donde salió mal). El mensaje de error no fue útil porque ya es el siguiente paso (látex).Sobre la base de soluciones anteriores, la siguiente solución no requiere un
header.tex
archivo auxiliar . Todos los contenidos están incluidos en el.Rmd
archivo. En cambio, los comandos LaTeX se definen en unheader-includes
bloque en el encabezado YAML. Puede encontrar más información aquí .Además, noté que el uso del
lscape
paquete LaTeX rota el contenido de una página, pero no la página PDF en sí. Esto se resuelve usando elpdflscape
paquete.--- 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) ```
fuente
Para los casos más comunes.
Hay 3 condiciones.
Reduzcamos a cada condición.
El primero, digamos que tenemos un documento de rebajas, 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 tejer el archivo PDF en modo horizontal, lo único que necesita agregar es la opción de clasificación: paisaje
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 que se va a tejer. Asegúrese de hacer estas dos cosas: Copie el archivo tex y muévalo junto con el archivo rmd. Cambie el comienzo de rmd para que sea:
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 que jugué con este problema y me beneficié principalmente de la respuesta de baptiste.
Incluí algunas instantáneas y ejemplos en mi blogger mi blogger .
Espero que esto ayude. Buena suerte.
fuente
Como mencionó Baptiste, si incluye 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 simple y agradable de baptiste, puede usar el
xtable
paquete R, que ofrece la posibilidad de crear tablas LaTeX de aspecto más atractivo a partir de la salida R. Para que el siguiente ejemplo funcione, debe agregar\usepackage{rotating}
elheader.tex
archivo:--- 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
sidewaystable
entorno, en lugar de lo habitualtable
: por lo tanto, se imprimirá en modo paisaje, en una página aparte. Tenga en cuenta que las tablas y figuras que se colocan en modo horizontal por ellscape
paquete o en elsideways
entorno siempre se colocarán en una página separada, consulte la página 91 de este documento muy importante:http://www.tex.ac.uk/tex-archive/info/epslatex/english/epslatex.pdf
Como encuentro esto un poco molesto, logré encontrar una manera de mantener las tablas verticales y horizontales en 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
\rotatebox
sugerencia proporcionada aquí:http://en.wikibooks.org/wiki/LaTeX/Rotations
Para que esto funcione, solo tengo que generar la
tabular
parte de la tabla con laprint(xtable(...
parte, luego tengo que capturar la salida y rodearla "manualmente" con los comandostable
yrotatebox
, convirtiendo todo en una salida de cadena R para que pandoc no vea ellos como entornos LaTeX. Para una solución pura de rmarkdown ... ¡buena suerte!fuente