Rstudio rmarkdown: zowel staande als liggende lay-out in één PDF

Ik vraag me af hoe ik rmarkdownmoet gebruiken om een ​​pdf te genereren die zowel een staande als een liggende lay-out heeft in hetzelfde document. Als er een pure rmarkdown-optie is die zelfs beter zou zijn dan het gebruik van latex.

Hier is een klein, reproduceerbaar voorbeeld. Ten eerste resulteert het renderen van deze .Rmdin RStudio (druk op de knop Knit PDF) in een pdf met alle pagina’s in liggende opmaak:

---
title: "All pages landscape"
output: pdf_document
classoption: landscape
---
```{r}
summary(cars)
```
\newpage
```{r}
summary(cars)
```

Vervolgens een poging om een ​​document te maken waarin staande en liggende lay-out wordt gecombineerd. De basisconfiguratie in de YAMLwordt gedaan volgens het gedeelte ‘Includes’ hier. Het in_header-bestand ‘header.tex’ bevat alleen \usepackage{lscape}, een pakket voorgesteld voor knitrliggende lay-out hier. Het bestand .texbevindt zich in dezelfde map als het bestand .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)
```

Deze code resulteert echter in een fout:

# ! 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

Alle hulp wordt zeer op prijs gesteld.


Antwoord 1, autoriteit 100%

Dus pandocnietontleden de inhoud van latexomgevingen, maar je kunt het voor de gek houden door herdefiniëren van de commando’sin je header.texbestand:

\usepackage{lscape}
\newcommand{\blandscape}{\begin{landscape}}
\newcommand{\elandscape}{\end{landscape}}

Hier wordt \begin{landscape}dus opnieuw gedefinieerd in \blandscapeen \end{landscape}in \elandscape. Het gebruik van die nieuw gedefinieerde commando’s in het bestand .Rmdlijkt te werken:

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

Antwoord 2, autoriteit 67%

Voortbouwend op eerdere oplossingen, vereist de volgende oplossing geen hulpbestand header.tex. Alle inhoud is opgenomen in het bestand .Rmd. De LaTeX-commando’s worden in plaats daarvan gedefinieerd in een header-includes-blok in de YAML-header. Meer info vind je hier.

Ook merkte ik dat het gebruik van het lscapeLaTeX-pakket de inhoud van een pagina roteert, maar niet de PDF-pagina zelf. Dit wordt opgelost met het pakket 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)
```

Antwoord 3, autoriteit 27%

Voor de meest voorkomende gevallen.

Er zijn 3 voorwaarden.

  1. Alles in portretmodus.
  2. Alles in liggende modus.
  3. Mengsel van portret- en landschapsmodi.

Laten we ons beperken tot elke voorwaarde.

  1. De eerste, stel dat we een afwaarderingsdocument hebben, begint met de onderstaande code. En dit is de standaardinstelling in Rstudio wanneer u een rmd-bestand maakt. Als je het breit. Het zal zonder twijfel automatisch aannemen dat het een portretmodus is.

    title: "Landscape and Portrait"
        author: "Jung-Han Wang"
        date: "Thursday, March 19, 2015"
        output: pdf_document
    
  2. Als je het PDF-bestand naar de liggende modus wilt breien, hoef je alleen maar classoption toe te voegen: liggend

       title: "Landscape and Portrait"
        author: "Jung-Han Wang"
        date: "Thursday, March 19, 2015"
        output: pdf_document
        classoption: landscape
    
  3. Als je een combinatie van beide wilt, moet je een .tex-bestand in YAML toevoegen. Door te verwijzen naar de link die ik hierboven noemde. U kunt de .tex-code hier downloaden. http://goo.gl/cptOqgOf kopieer gewoon de code en sla deze op als header.tex. Om het leven gemakkelijker te maken, dit .tex-bestand samen met het te breien rmd-bestand. Zorg ervoor dat je deze twee dingen hebt gedaan:
    Kopieer het tex-bestand en verplaats het samen met het rmd-bestand.
    Verander het begin van rmd in:

    title: "Landscape and Portrait"
        author: "Jung-Han Wang"
        date: "Thursday, March 19, 2015"
        output:
          pdf_document:
            includes:
              in_header: header.tex
    

Dit is de samenvatting nadat ik met dit probleem speelde en vooral geprofiteerd had van het antwoord van baptiste.

Ik heb wat snapshots en voorbeelden opgenomen in mijn blogger mijn blogger.

Ik hoop dat dit helpt.
Veel succes.


Antwoord 4, autoriteit 4%

Zoals baptiste al zei, als je R-commando’s invoegt in een LaTeX-omgeving, zal pandoc ze niet ontleden en ze plaatsen zoals ze zijn in de gegenereerde LaTeX: dit is de oorzaak van de fout. Naast de mooie en eenvoudige oplossing van baptiste, zou je het xtableR-pakket kunnen gebruiken, dat de mogelijkheid biedt om sexyer uitziende LaTeX-tabellen te maken van R-uitvoer. Om het volgende voorbeeld te laten werken, moet u \usepackage{rotating}toevoegen aan het bestand 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)
```

De tweede tabel wordt afgedrukt in de sidewaystable-omgeving, in plaats van de gebruikelijke table: daarom wordt deze in liggende modus afgedrukt, op een aparte pagina. Merk op dat tabellen en figuren die in landscape-modus worden geplaatst door het lscape-pakket of in de sideways-omgeving altijd op een aparte pagina worden geplaatst, zie pagina 91 van deze zeer belangrijke document:

http://www.tex.ac. uk/tex-archive/info/epslatex/english/epslatex.pdf

Omdat ik dit een beetje vervelend vind, ben ik erin geslaagd een manier te vinden om zowel staande als liggende tabellen op dezelfde pagina te houden (waardoor mijn hele middag verspild wordt):

---
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}"))
```

Voor de liggende tabel heb ik de \rotatebox-suggestie gebruikt die hier wordt gegeven:

http://en.wikibooks.org/wiki/LaTeX/Rotations

Om dit te laten werken, hoef ik alleen het tabular-gedeelte van de tabel te genereren met het print(xtable(...-gedeelte), dan moet ik de output en “handmatig” omring het met de tableen rotateboxcommando’s, alles omzettend in een string R output zodat pandoc ze niet ziet als LaTeX-omgevingen. oplossing… succes!

Other episodes