web-dev-qa-db-fra.com

Rstudio rmarkdown: les portraits et les paysages en une seule PDF

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.

65
user3712688

Donc, pandocne 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)
```
64
baptiste

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)
```
32
Megatron

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.

Limitons-nous à chaque condition.

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

17
Jung-Han Wang

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 xtableR, 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!

2
renato vitolo