Je me demande comment utiliser rmarkdown
pour générer un pdf qui a à la fois la mise en page portrait et paysage dans le même document. S’il existe une option de rmarkdown
pure, ce serait encore mieux que d’utiliser du latex.
Voici un petit exemple reproductible. Tout d’abord, le rendu de ce .Rmd
--- title: "All pages landscape" output: pdf_document classoption: landscape --- ```{r} summary(cars) ``` \newpage ```{r} summary(cars) ```
Ensuite, une tentative de créer un document qui mélange la mise en page portrait et paysage. La configuration de base dans le YAML
se fait selon la section “Inclut” ici . Le fichier in_header
‘header.tex’ ne contient que \usepackage{lscape}
, un paquetage suggéré pour la disposition de knitr
landscape ici . Le fichier .tex
trouve dans le même répertoire que le fichier .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) ```
Cependant, ce code génère une erreur:
# ! 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
Toute aide est très appréciée.
Ainsi, pandoc
pas le contenu des environnements latex, mais vous pouvez le tromper en redéfinissant les commandes de votre fichier header.tex
:
\usepackage{lscape} \newcommand{\blandscape}{\begin{landscape}} \newcommand{\elandscape}{\end{landscape}}
Ainsi, ici \begin{landscape}
est redéfini en \blandscape
et \end{landscape}
en \elandscape
. L’utilisation de la commande nouvellement définie dans le fichier .Rmd
semble fonctionner:
--- 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) ```
S’appuyant sur les solutions précédentes, la solution suivante ne nécessite pas de fichier header.tex
auxiliaire. Tous les contenus sont contenus dans le fichier .Rmd
. Les commandes LaTeX sont plutôt définies dans un bloc header-includes
dans l’en-tête YAML. Plus d’informations peuvent être trouvées ici .
En outre, j’ai remarqué que l’utilisation du lscape
LaTeX fait pivoter le contenu d’une page, mais pas la page PDF elle-même. Ceci est résolu à l’aide du package 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) ```
Pour les cas les plus courants
Il y a 3 conditions.
Réduisons à chaque condition.
Le premier, disons que nous avons un document de démarcation qui commence par le code ci-dessous. Et c’est le paramètre par défaut dans Rstudio lorsque vous créez un fichier rmd. Quand vous le sortingcotez Il supposera automatiquement que c’est un mode portrait sans aucun doute.
title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document
Lorsque vous souhaitez tracer le fichier PDF en mode paysage, la seule chose à append est l’option de classe: landscape
title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document classoption: landscape
Si vous voulez un mélange des deux, vous devrez append un fichier .tex dans YAML. En référençant le lien que j’ai mentionné ci-dessus. Vous pouvez télécharger le code .tex ici. http://goo.gl/cptOqg Ou copiez simplement le code et enregistrez-le sous header.tex. Ensuite, pour vous faciliter la vie, placez ce fichier .tex avec le fichier rmd à sortingcoter. Assurez-vous d’avoir fait ces deux choses: Copiez le fichier tex et déplacez-le avec le fichier rmd. Changer le début de rmd pour être:
title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document: includes: in_header: header.tex
Ceci est le résumé après avoir joué avec ce numéro et surtout bénéficié de la réponse de baptiste.
J’ai inclus des instantanés et des exemples dans mon blogueur mon blogueur .
J’espère que cela t’aides. Bonne chance.
Comme baptiste l’a mentionné, si vous incluez des commandes R dans un environnement LaTeX, pandoc ne les parsingra pas et les placera telles quelles dans le LaTeX généré: c’est ce qui cause l’erreur. Au-delà de la solution simple et simple de baptiste, vous pouvez utiliser le xtable
R, qui offre la possibilité de créer des tables LaTeX plus sexy à partir de la sortie R. Pour que l’exemple suivant fonctionne, vous devez append \usepackage{rotating}
dans le fichier 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) ```
Le second tableau sera imprimé dans l’environnement, plutôt que dans le table
habituel: il sera donc imprimé en mode paysage, dans une page séparée. Notez que les tableaux et les figures placés en mode paysage par le package lscape
ou l’environnement sideways
seront toujours placés dans une page séparée, voir page 91 de ce document très important:
http://www.tex.ac.uk/tex-archive/info/epslatex/english/epslatex.pdf
Comme je trouve cela un peu gênant, j’ai réussi à trouver un moyen de conserver les tableaux portrait et paysage dans la même page (je perdais tout mon après-midi dans le processus):
--- 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}")) ```
Pour la table paysage, j’ai utilisé la suggestion \rotatebox
fournie ici:
http://en.wikibooks.org/wiki/LaTeX/Rotations
Pour que cela fonctionne, je dois seulement générer la partie tabular
de la table avec l’ print(xtable(...
part, alors je dois capturer la sortie et l’entourer “manuellement” avec les commandes table
et rotatebox
, convertissant tout en une chaîne de sortie R pour que pandoc ne les voit pas comme des environnements LaTeX, pour une solution de pur rmarkdown … bonne chance!