Je me demande comment utiliser rmarkdown
pour générer un pdf comportant à la fois une présentation en portrait et en paysage dans le même document. S'il existe une option pure rmarkdown
, ce serait encore mieux que d'utiliser du latex.
Voici un petit exemple reproductible. Tout d'abord, le rendu de ce .Rmd
Dans RStudio (bouton Tricoter PDF ) donne un pdf avec toutes les pages en format paysage:
---
title: "All pages landscape"
output: pdf_document
classoption: landscape
---
```{r}
summary(cars)
```
\newpage
```{r}
summary(cars)
```
Ensuite, essayez de créer un document qui mélange les dispositions portrait et paysage. La configuration de base dans le YAML
est effectuée conformément à la section 'Inclut' ici . Le fichier in_header
'Header.tex' ne contient que \usepackage{lscape}
, Un paquet suggéré pour knitr
layout pays ici . Le fichier .tex
Se 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.
Donc, pandoc
ne le fait pas , analysez le contenu des environnements en latex, mais vous pouvez le tromper par redéfinissant les commandes dans votre header.tex
fichier:
\usepackage{lscape}
\newcommand{\blandscape}{\begin{landscape}}
\newcommand{\elandscape}{\end{landscape}}
Ainsi, ici \begin{landscape}
est redéfini en \blandscape
, et \end{landscape}
à \elandscape
. Utiliser ces commandes nouvellement définies dans le .Rmd
fichier 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 d'auxiliaire header.tex
fichier. Tout le contenu est contenu dans le .Rmd
fichier. Les commandes LaTeX sont à la place définies dans un header-includes
bloc dans l'en-tête YAML. Plus d'informations peuvent être trouvées ici .
J'ai également remarqué que l'utilisation du package lscape
LaTeX fait pivoter le contenu d'une page, mais pas la page PDF elle-même. Cette opération est résolue à 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.
Limitons-nous à chaque condition.
Le premier, disons que nous avons un document démarqué commençant par le code ci-dessous. Et c’est le paramètre par défaut dans Rstudio lorsque vous créez un fichier rmd. Quand tu le tricotes. Il assumera automatiquement qu’il s’agit d’un mode portrait sans aucun doute.
title: "Landscape and Portrait"
author: "Jung-Han Wang"
date: "Thursday, March 19, 2015"
output: pdf_document
Lorsque vous voulez tricoter le fichier PDF en mode paysage, vous devez uniquement ajouter classoption: paysage
title: "Landscape and Portrait"
author: "Jung-Han Wang"
date: "Thursday, March 19, 2015"
output: pdf_document
classoption: landscape
Si vous voulez mélanger les deux, vous devrez ajouter 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. Pour vous simplifier la vie, insérez ce fichier .tex dans le fichier rmd à tricoter. 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é à ce problème 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 le mentionne baptiste, si vous incluez des commandes R dans un environnement LaTeX, PANDOC ne les analysera pas et les placera telles quelles dans le LaTeX généré: c’est ce qui cause l’erreur. Au-delà de la simple solution de baptiste, vous pouvez utiliser le paquetage 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 ajouter \usepackage{rotating}
dans le header.tex
fichier:
---
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 sidewaystable
plutôt que comme d'habitude table
: il sera donc imprimé en mode paysage, sur une page séparée. Notez que les tableaux et les figures placés en mode paysage par le package lscape
ou dans 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 garder les tableaux de portrait et de paysage dans la même page (perdre 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 de paysage, j'ai utilisé le \rotatebox
suggestion fournie ici:
http://en.wikibooks.org/wiki/LaTeX/Rotations
Pour que cela fonctionne, je ne dois générer que la partie tabular
de la table avec le print(xtable(...
partie, alors je dois capturer la sortie et l’entourer "manuellement" avec les commandes table
et rotatebox
, en convertissant le tout en une sortie chaîne R de sorte que pandoc ne les voit pas comme LaTeX environnements. Pour une solution pure de rmarkdown ... bonne chance!