Как грамотно добавить \ новую страницу в Rmarkdown?

114

Интересно, можно ли было просто использовать \newpageкоманду LaTeX в R markdown v2 иначе, чем это:

```{r, results='asis', echo=FALSE}
cat("\\newpage")
```

Производю pdf_output. Если у any1 есть идеи, не стесняйтесь комментировать :)! Спасибо

Я создаю pdf так:

---
title: " "
author: " "
date: "2014"
output: 
   pdf_document:
      includes:
         in_header: naglowek.tex
      highlight: pygments
      toc: true
      toc_depth: 3
      number_sections: true
      keep_tex: true
---
Марчин Косиньски
источник
Как вы создаете свой PDF-файл?
Spacedman
Я отредактировал свой вопрос. Вот как я создаю pdf.
Marcin Kosiński
И тогда какие пакеты / функции вы используете? Или вы просто нажимаете кнопки в RStudio?
Spacedman
Какая разница? Мои пакеты или функции не имеют ничего общего с тем, что я хотел бы добавить новую страницу в некоторые части кода.
Marcin Kosiński
Приятно видеть полный рабочий процесс - есть разные способы перейти от разметки до PDF. Без этого мы предполагаем. Хорошая догадка @tonytonov
Spacedman

Ответы:

177

Просто \newpageили \pagebreakбудет работать, например

hello world
\newpage
```{r, echo=FALSE}
1+1
```
\pagebreak
```{r, echo=FALSE}
plot(1:10)
```

Это решение предполагает, что вы вяжете PDF. Для HTML вы можете добиться аналогичного эффекта, добавив тег <P style="page-break-before: always">. Обратите внимание, что вы, скорее всего, не увидите разрыв страницы в своем браузере (HTML-код не имеет страниц как таковых), но в макете печати он будет.

Тонитонов
источник
Можно как-нибудь закрыть тему?
Марчин Косинский
2
Добро пожаловать! Вы уже приняли ответ (зеленая отметка); это показатель того, что проблема решена. Для этого вопроса достаточно, хотя другие пользователи могут добавлять свои ответы или комментарии. Здесь, в закрывающих вопросах SO, есть инструмент на основе голосования, который блокирует не очень хорошие вопросы или даже удаляет их, если они не подходят. Ваш вопрос в порядке, поэтому вам не нужно закрывать или удалять его сейчас, просто оставьте как есть.
tonytonov
Это как-то влияет при вязании на html? Это вызывает ошибку?
gvrocha
Поскольку речь идет о создании новой страницы. Как бы вы создали новую страницу в выводе html?
Марцин Косиньски
1
@ MarcinKosiński HTML-теги можно вставлять напрямую: см. Пояснения в разделе "Правка".
tonytonov
22

В блоке инициализации я определяю функцию

pagebreak <- function() {
  if(knitr::is_latex_output())
    return("\\newpage")
  else
    return('<div style="page-break-before: always;" />')
}

В той части уценки, где я хочу вставить разрыв страницы, я набираю

`r pagebreak()`
Билли34
источник
13

Вы можете сделать разрыв страницы условным при связывании с PDF. Это сработало для меня.

```{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')}
cat('\\pagebreak')
```
Bravoking
источник
Это отлично работает, создает разрыв страницы в PDF, но ничего не выводит в HTML (где разрывы страниц не имеют смысла). Кажется, нужно обновить основной ответ, чтобы добавить эту возможность.
Магнус
1
{r, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex')} cat('\\pagebreak') приводит к Error in eval(x, envir = envir) : object 'opts_knit' not found Calls: <Anonymous> ... process_group.block -> call_block -> eval_lang -> eval -> eval Execution halted opts_knit$getотлично работает в консоли. ?
keithpjolley
добавить echo = FALSEв параметры knitr, чтобы избежать cat('\\pagebreak')вывода инструкции в выходной файл.
Akronix
@Akronix Я использовал cat('\\pagebreak')chunk и добавил echo = FALSEв опции knitr, но все равно получил "## \ newpage" в моем PDF-файле, есть идеи, почему?
Бенджамин Телкамп
1
```{r page break, results='asis', eval=(opts_knit$get('rmarkdown.pandoc.to') == 'latex'), echo = FALSE} cat('\\pagebreak') ```
Akronix