我想知道如何使用 rmarkdown
生成一个在同一文档中同时具有纵向和横向布局的pdf . 如果有一个纯粹的 rmarkdown
选项比使用乳胶更好 .
这是一个小的,可重复的例子 . 首先,在RStudio中渲染此 .Rmd
(按 Knit PDF 按钮)会生成包含横向布局中所有页面的pdf:
---
title: "All pages landscape"
output: pdf_document
classoption: landscape
---
```{r}
summary(cars)
\newpage
summary(cars)
然后尝试创建一个混合纵向和横向布局的文档 . `YAML` 中的基本设置是根据'Includes'部分[here](http://rmarkdown.rstudio.com/pdf_document_format.html)完成的 . `in_header` 文件'header.tex'仅包含 `\usepackage{lscape}` ,建议用于 `knitr` 横向布局[here](https://github.com/yihui/knitr-examples/blob/master/030-landscape.Rnw)的包 . `.tex` 文件与 `.Rmd` 文件位于同一目录中 .
```java
---
title: "Mixing portrait and landscape"
output:
pdf_document:
includes:
in_header: header.tex
---
Portrait:
```{r}
summary(cars)
\newpage
\begin
Landscape:
summary(cars)
\end
\newpage
More portrait:
summary(cars)
但是,此代码会导致错误:
```java
# ! 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
任何帮助深表感谢 .
4 回答
所以,
pandoc
does not解析了乳胶环境的内容,但你可以通过header.tex
文件中的redefining the commands来欺骗它:因此,这里
\begin{landscape}
被重新定义为\blandscape
,\end{landscape}
被重新定义为\elandscape
. 在.Rmd
文件中使用这些新定义的命令似乎有效:\newpage
\blandscape
Landscape
\elandscape
\newpage
More portrait
基于以前的解决方案,以下解决方案不需要辅助
header.tex
文件 . 所有内容都包含在.Rmd
文件中 . 而是在YAML标头的header-includes
块中定义LaTeX命令 . 更多信息可以在here找到 .另外,我注意到使用
lscape
LaTeX包会旋转页面的内容,而不是PDF页面本身 . 这是使用pdflscape
包解决的 .\newpage
\blandscape
Landscape
\elandscape
\newpage
More portrait
对于最常见的情况 .
有3个条件 .
纵向模式下的所有内容 .
横向模式中的所有内容 .
纵向和横向模式的混合 .
让我们缩小到每个条件 .
这是我玩这个问题后的总结,大部分都受益于巴普蒂斯特的回答 .
我在博客my blogger中包含了一些快照和示例 .
希望这可以帮助 . 祝好运 .
正如baptiste所提到的,如果你将R命令包含在LaTeX环境中,pandoc将不会解析它们并将它们放入生成的LaTeX中:这就是导致错误的原因 . 除了baptiste的简单修复之外,您还可以使用
xtable
R包,它可以从R输出创建更性感的LaTeX表 . 要使以下示例起作用,您需要在header.tex
文件中添加\usepackage{rotating}
:Portrait
Landscape:
Portrait:
Landscape: