Ik vraag me af hoe ik rmarkdown
moet 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 .Rmd
in 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 YAML
wordt gedaan volgens het gedeelte ‘Includes’ hier. Het in_header
-bestand ‘header.tex’ bevat alleen \usepackage{lscape}
, een pakket voorgesteld voor knitr
liggende lay-out hier. Het bestand .tex
bevindt 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 pandoc
nietontleden de inhoud van latexomgevingen, maar je kunt het voor de gek houden door herdefiniëren van de commando’sin je header.tex
bestand:
\usepackage{lscape}
\newcommand{\blandscape}{\begin{landscape}}
\newcommand{\elandscape}{\end{landscape}}
Hier wordt \begin{landscape}
dus opnieuw gedefinieerd in \blandscape
en \end{landscape}
in \elandscape
. Het gebruik van die nieuw gedefinieerde commando’s in het bestand .Rmd
lijkt 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 lscape
LaTeX-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.
- Alles in portretmodus.
- Alles in liggende modus.
- Mengsel van portret- en landschapsmodi.
Laten we ons beperken tot elke voorwaarde.
-
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
-
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
-
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 xtable
R-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 table
en rotatebox
commando’s, alles omzettend in een string R output zodat pandoc ze niet ziet als LaTeX-omgevingen. oplossing… succes!