Rstudio rmarkdown: mise en page portrait et paysage en un seul PDF

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.

  1. Tout en mode portrait.
  2. Tout en mode paysage.
  3. Mélange de modes portrait et paysage.

Réduisons à chaque condition.

  1. 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 
  2. 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 
  3. 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!