Rstudio rmarkdown: как портретный, так и альбомный макет в одном PDF-файле

Интересно, как использовать rmarkdown для создания pdfrmarkdown который имеет как портретную, так и ландшафтную компоновку в том же документе. Если есть чистый параметр 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} , пакет, предложенный для ландшафтного дизайна. Файл .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 

Буду признателен за любую оказанную помощь.

Таким образом, pandoc не анализирует содержимое латексных сред, но вы можете обмануть его, переопределив команды в файле header.tex :

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

Таким образом, здесь \begin{landscape} переопределяется в \blandscape и \end{landscape} в \elandscape . Использование этой новой команды в файле .Rmd похоже, работает:

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

Основываясь на предыдущих решениях, следующее решение не требует дополнительного файла header.tex . Все содержимое содержится в файле .Rmd . Команды LaTeX вместо этого определяются в блоке заголовка в заголовке YAML. Более подробную информацию можно найти здесь .

Кроме того, я заметил, что использование пакета lscape LaTeX приводит к lscape содержимого страницы, но не самой страницы PDF. Это разрешено с pdflscape пакета 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) ``` в --- 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 условия.

  1. Все в портретном режиме.
  2. Все в ландшафтном режиме.
  3. Смесь портретных и ландшафтных режимов.

Давайте сужимся до каждого условия.

  1. Первый, скажем, у нас есть документ с уценкой, начинающийся с кода ниже. И это значение по умолчанию в Rstudio при создании файла rmd. Когда ты вязаешь его. Он будет автоматически считать, что это портретный режим, без сомнения.

     title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document 
  2. Когда вы хотите вязать PDF-файл в альбомный режим, вам нужно добавить только class: пейзаж

      title: "Landscape and Portrait" author: "Jung-Han Wang" date: "Thursday, March 19, 2015" output: pdf_document classoption: landscape 
  3. Если вам нужна смесь обоих, вам нужно добавить файл .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: это и вызывает ошибку. Помимо простого и простого исправления xtable вы можете использовать пакет 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 пакета 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(... part, затем я должен захватить вывод и «вручную» окружить его командами table и rotatebox , преобразуя все в вывод строки R, чтобы pandoc не рассматривал их как среды LaTeX. Для чистого решения rmarkdown … удачи!

  • RStudio не выбирает кодировку, которую я говорю ей при чтении файла
  • Как добавить оглавление в Rmarkdown?
  • Rstudio дублирует команды в командной строке
  • Давайте будем гением компьютера.