knitr / Rmd: разрыв страницы после n строк / n расстояния

Позвольте мне предостеречь, сказав, что это может быть лучше подходит в качестве вопроса html / css, но (а) я не слишком знаком с этими методами и (б) я хотел сохранить все это в семье ( R), если возможно.

Я хотел бы использовать knitr для написания отчетов в академическом стиле (Руководство типа APA 6) с помощью Rmarkdown. У меня проработано большинство аспектов, но не разрывы страниц. Я могу вручную установить разрывы страниц, например:

# report

```{r setup, include=FALSE}
# set global chunk options
opts_chunk$set(cache=TRUE)
```
------
## Page 1

```{r plot1}
plot(1:10, 1:10)
```
------
## Page 2

В следующем .Rmd я хотел бы программно установить эти разрывы после расстояния n строк / n. Скажем, через 8 дюймов или 140 строк.

# report

```{r setup, include=FALSE}
# set global chunk options
opts_chunk$set(cache=TRUE)
```
Initial Text. Yay!

```{r plot1}
plot(1:10, 1:10)
```

More Text.  Outstanding.  What Hadley's not calling it plyr2?

```{r plot2, fig.width=4, fig.height=4}
plot(1:10, 1:10)
```

`r paste(rep("So much text so little time!", 10000))`

Как я могу программно установить разрывы страниц после n расстояния. Это похоже на то, как LaTeX разбивает файл на страницы, поэтому, если рисунок занимает слишком много места, он будет принудительно перейти на следующую страницу.

ИЗМЕНИТЬ. Обнаружил это у друга: http://www.w3.org/TR/css3-page/ может оказаться полезным.


person Tyler Rinker    schedule 23.04.2013    source источник
comment
Я предполагаю, что решение не существует, но я буду очень рад, если это произойдет! Похоже, что заново изобрели LaTeX с помощью HTML ...   -  person Yihui Xie    schedule 24.04.2013
comment
Я узнаю об этом, спрашивая HTML-людей, и они предлагают сделать это, используя java в качестве посредника, который вычисляет длину каждой html-страницы. Я пишу статью прямо сейчас, в которой аргументируется необходимость сделать это, и когда это будет сделано (он будет в формате html, но с перерывами вручную), я подготовлю прототип и, возможно, если люди будут заинтересованы, команда сможет собраться вместе, чтобы принять вызов.   -  person Tyler Rinker    schedule 24.04.2013
comment
@TylerRinker Вы имеете в виду javascript? Обратите внимание, что java и javascript - это не одно и то же.   -  person Dason    schedule 09.05.2013
comment
да, я действительно это имел в виду. Я всегда говорю java, когда имею в виду javascript из-за того, что не знаком с терминами / использованием.   -  person Tyler Rinker    schedule 09.05.2013
comment
@TylerRinker Мне не нужны значки. Улучшаю разборчивость описания.   -  person mcandre    schedule 16.05.2013
comment
Что является причиной этого? Для уменьшения размера загрузки страницы или для навигации?   -  person James    schedule 27.05.2013
comment
эстетика / навигация. Я, как намекал Yihui, интересуюсь академическими статьями, в которых используется HTML, но сохраняется эстетика LaTeX pdf. Я действительно сделал такой прототип документа, но автоматический перенос строки был проблемой. Также хорошо работает оправдание, за исключением последнего предложения на каждой странице.   -  person Tyler Rinker    schedule 27.05.2013
comment
@TylerRinker: вас также интересует пост-обработка файла? Вам нужны отдельные файлы для каждой страницы или просто добавление ------? Кстати, какой формат уценки поддерживает разрыв страницы? :) Мне очень не хватает этой функции от Pandoc.   -  person daroczig    schedule 03.08.2013
comment
@daroczig Моя мысль - один файл. Я уже делал это в статье, используя белые теги <div> для разделения страниц. Что вы имеете в виду под постобработкой? Вы уже можете скормить style.css в knitr + RStudio, так что я не думаю, что вы имеете в виду.   -  person Tyler Rinker    schedule 03.08.2013
comment
@TylerRinker: Я подумал о постобработке файла уценки перед преобразованием в HTML, как добавление ------ после каждых n строк. Я просто не уверен, что вы после этого обходного пути. Если так, то это можно сделать в мгновение ока.   -  person daroczig    schedule 03.08.2013
comment
Да, вот как я подошел к этому (или что-то в этом роде). Я хочу быть автоматическим (так как сложно сказать n строк, когда в смесь добавляются цифры). В идеале решение должно работать как LaTeX при создании PDF-файла.   -  person Tyler Rinker    schedule 03.08.2013
comment
Понятно, спасибо @TylerRinker за разъяснения. Не могли бы вы поделиться ссылкой на прототип документа для демонстрации?   -  person daroczig    schedule 04.08.2013
comment
Для разрыва страницы я использую стандартное выражение LaTeX: /newpage. Новая страница после n строк будет просто вставкой /vspace*{10cm} (размер vspace зависит от того, сколько n строк вы хотите пропустить), а после этого прямо `/ newpage. Я что-то упускаю?   -  person Maximilian    schedule 08.10.2013
comment
@Max это Rmd / html, а не tex / Rnw.   -  person Tyler Rinker    schedule 09.10.2013


Ответы (1)


Программно. Создайте HTML-код div. Установите ширину и высоту этого div на фиксированное значение и переполнение для прокрутки.

<div style="height:1000px; width: 500px; overflow-y: scroll;">
    ...
</div>

Преобразуйте свою уценку в элементы HTML. У меня есть 5 тегов h1 высотой 300 пикселей каждый.

<h1 style="height:300px;">First</h1>
<h1 style="height:300px;">Second</h1>
<h1 style="height:300px;">Third</h1>
<h1 style="height:300px;">Fourth</h1>
<h1 style="height:300px;">Fifth</h1>

Эти 5 h1 не умещаются на одной странице. Высота страницы всего 1000 пикселей. На этой странице поместятся только 3 тега h1. Нам нужно будет вставить разрыв страницы после третьего элемента.

Постепенно добавляйте каждый новый элемент в DOM. После вставки каждого элемента проверьте, присутствует ли полоса прокрутки браузера. Если это так, то мы знаем, что только что вставленный элемент слишком велик для этой страницы; удалите элемент и вставьте разрыв страницы.

До:

### First
### Second
### Third
### Fourth
### Fifth

После:

### First
### Second
### Third
------
### Fourth
### Fifth

Это будет работать для любого элемента, и вам не придется беспокоиться о высоте элемента. Потому что, если элемент, который вы только что вставили, заставил прокрутку HTML-блока, нам понадобится разрыв страницы. Изображения, видео, h1, h2, p, custom / dynamic css, что угодно.

ОБНОВЛЕНИЕ

Вы также можете рассчитать высоту каждого элемента div. http://api.jquery.com/height/. Таким образом, перерасчет 54-страничного документа потребует значительных усилий. Полегче.

person Travis    schedule 13.10.2013
comment
Это то, что я сейчас делаю, это требует ручного исправления. Я (и те, кто проголосовал за) ищу способ программно выполнить это так же, как Latex делает это с pdf. Я имею в виду, что мы можем вручную установить разрывы страниц в Latex, но сделаем это за вас (относительно разумным способом). При этом подход, который вы предлагаете (и я использую в настоящее время), плох, потому что, скажем, вы удаляете / добавляете абзац на странице 3 из 54-страничной статьи. это означает, что каждая последующая страница будет выполняться. - person Tyler Rinker; 13.10.2013
comment
... плохо, потому что, допустим, вы удаляете / добавляете абзац на странице 3 из 54-страничной статьи. это означает, что каждая последующая страница будет выполняться. - Я обновил свой ответ более эффективным решением, но я не вижу возможности пересчитывать оставшиеся X-страницы после внесения изменений. - person Travis; 14.10.2013