Интересно, как использовать rmarkdown
для создания PDF-файла, который имеет как портретную, так и альбомную ориентацию в одном документе. Если есть чистый rmarkdown
вариант, это будет даже лучше, чем использование латекса.
Вот небольшой воспроизводимый пример. Во-первых, рендеринг этого .Rmd
в RStudio (нажмите кнопку Knit PDF ) приводит к созданию PDF- файла со всеми страницами в альбомной ориентации:
---
title: "All pages landscape"
output: pdf_document
classoption: landscape
---
```{r}
summary(cars)
```
\newpage
```{r}
summary(cars)
```
Затем попытка создать документ, сочетающий книжную и альбомную ориентацию. Базовая настройка YAML
выполняется в соответствии с разделом «Включает» здесь . in_header
Файл «header.tex» содержит только \usepackage{lscape}
, пакет , предложенный для knitr
ландшафтной планировки здесь . .tex
Файл находится в том же каталоге, что и .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)
```
Однако этот код приводит к ошибке:
# ! 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
Буду признателен за любую оказанную помощь.
latex
виновато и мое невежество..md
(хорошо, здесь), затем преобразование md-> tex (вот где все пошло не так). Сообщение об ошибке не помогло, потому что это уже следующий шаг (латекс).Основываясь на предыдущих решениях, следующее решение не требует вспомогательного
header.tex
файла. Все содержимое содержится в.Rmd
файле. Вместо этого команды LaTeX определены вheader-includes
блоке заголовка YAML. Более подробную информацию можно найти здесь .Также я заметил, что использование
lscape
пакета LaTeX поворачивает содержимое страницы, но не саму страницу PDF. Это решается с помощью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) ```
источник
Для самых распространенных случаев.
Есть 3 условия.
Давайте сузимся до каждого условия.
Первый, скажем, у нас есть документ с уценкой, начинающийся с кода ниже. И это настройка по умолчанию в Rstudio при создании файла rmd. Когда вы его вяжете. Без сомнения, он автоматически предположит, что это портретный режим.
title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document
Если вы хотите связать PDF-файл с альбомным режимом, единственное, что вам нужно добавить, это классификация: пейзаж
title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document classoption: landscape
Если вы хотите смешать и то, и другое, вам нужно будет добавить файл .tex в YAML. По ссылке, упомянутой выше. Вы можете скачать код .tex здесь. http://goo.gl/cptOqg Или просто скопируйте код и сохраните его как header.tex Затем, чтобы облегчить жизнь, поместите этот файл .tex вместе с файлом rmd для связывания. Убедитесь, что вы сделали эти две вещи: Скопируйте файл tex и переместите его вместе с файлом rmd. Измените начало rmd на:
title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document: includes: in_header: header.tex
Это резюме после того, как я поиграл с этим вопросом и в основном получил ответ от батиста.
Я включил несколько снимков и примеров в свой блогер мой блоггер .
Надеюсь это поможет. Удачи.
источник
Как упоминал батист, если вы заключите команды R в среду LaTeX, pandoc не будет их анализировать и поместит их в созданном LaTeX в том виде, в котором они есть: вот что вызывает ошибку. Помимо красивого и простого исправления baptiste, вы можете использовать
xtable
пакет R, который предлагает возможность создавать более привлекательные таблицы LaTeX из вывода R. Чтобы следующий пример работал, вам нужно добавить\usepackage{rotating}
в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) ```
Вторая таблица будет напечатана в
sidewaystable
окружении, а не в обычномtable
: поэтому она будет распечатана в альбомном режиме на отдельной странице. Обратите внимание, что таблицы и рисунки, которые помещаются в альбомном режимеlscape
пакетом или вsideways
среде, всегда будут помещены на отдельную страницу, см. Стр. 91 этого очень важного документа:http://www.tex.ac.uk/tex-archive/info/epslatex/english/epslatex.pdf
Поскольку меня это немного раздражает, мне удалось найти способ сохранить как портретные, так и альбомные таблицы на одной странице (потратив на это весь свой день):
--- 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}")) ```
Для таблицы с альбомной ориентацией я использовал
\rotatebox
предложенное здесь предложение:http://en.wikibooks.org/wiki/LaTeX/Rotations
Для этого , чтобы работать, я должен только генерировать
tabular
часть таблицы сprint(xtable(...
частью, то я должен перехватывать вывод и «вручную» окружать его сtable
иrotatebox
команд, превращая все в строку вывода R , так что pandoc не видит их как среды LaTeX. Для чистого решения rmarkdown ... удачи!источник