двухколоночные макеты в презентациях RStudio / slidify/pandoc
Я пытаюсь придумать хорошую систему для генерации слайдов и сопутствующих раздаточных материалов. Идеальная система будет иметь следующие свойства:
- красиво как в презентации (PDF / HTML), так и в макетах раздаточных материалов (раздаточные материалы должны иметь место для заметок)
- врезанные блоки R, диаграммы, другие изображения JPG / PNG, etc.
- легко составить
- построить с помощью средств командной строки
- библиография поддержка
-
pandoc
формат разделителя слайдов (автоматическое создание нового слайда после заголовков заданного уровня) является предпочтительным - я могу жить с немного дополнительной обработки (например, через
sed
), но предпочел бы не писать огромный инфраструктуры - двух колонок: есть сообщение SO о том, как получить многостолбцовые слайды из pandoc, но это латекс, а не HTML-ориентированный.
- возможность регулировки размеров встроенных изображений (кроме R-генерируемых фигур) и ширины столбцов на лету
вот что я обнаружил до сих пор о различных вариантах:
-
Slidify:
- не
pandoc
формат разделителя слайдов, хотя есть обходной путь - предложение по созданию раздаточных материалов-печатать в PDF; я хотел бы оставить место для заметок и т. д. (Я мог бы выяснить способ сделать что с помощью чего-то вроде PDFtk или
psnup
...)
- не
-
RStudio
презентаций (.Rpres
файлы):- делает много вещей красиво, в том числе несколько столбцов с заданной шириной
- не поддерживает
pandoc
формат разделителя слайдов - я не могу понять, что происходит под капотом. Есть документация RStudio это описывает процесс перевода для обычного HTML, но это не так кажется, чтобы покрыть формат презентации R (который не совсем то же самое). (Я ранее вложил некоторые усилия в выясняя, как получить RStudio-подобный выход через pandoc ...), что означает, что я не могу генерировать слайды и т. д. из командной строки.
-
версия разработки RStudio (по состоянию на март 2014 года) поставляется в комплекте с Pandoc и версии 2
rmarkdown
. Он решает многие из вышеперечисленных проблем с.Rpres
формат. -
pandoc
: может быть только уценки-переводчик, которая имеет функции, такие как сноски, библиография поддержки и т. д.. Я также могу использоватьpandoc
для создания LaTeX с помощью tufte-раздаточный класс, который соответствует моим критериям красоты.- к сожалению, он, кажется, не имеет встроенной поддержки формата двух столбцов. пример HTML5 Yihui Xie не показывает никаких примеров из двух столбцов, и он утверждает (на слайде 5), что щелчок " вязать HTML" кнопка в RStudio эквивалентна
pandoc -s -S -i -t dzslides --mathjax knitr-slides.md -o knitr-slides.html
, но это, кажется, не так ...
- к сожалению, он, кажется, не имеет встроенной поддержки формата двух столбцов. пример HTML5 Yihui Xie не показывает никаких примеров из двух столбцов, и он утверждает (на слайде 5), что щелчок " вязать HTML" кнопка в RStudio эквивалентна
- LaTeX / beamer: я мог бы просто сочинить в
Rnw
(knitr-диалект Sweave), а не r markdown для начала. Это даст мне максимальную гибкость ...- несмотря на многие годы использования латекса, я нахожу латексную композицию более болезненной, чем композиция markdown.
после всего этого, мой конкретный вопрос:что лучший (самый простой) способ создания двухколоночного макета для вывода HTML?
любые другие советы будут оценены.
5 ответов:
Это старый Q, но меня недавно мучил аналогичный вопрос, вот что я нашел:
используя формат RPres, можно указать два столбца следующим образом (подробности). Обратите внимание, что RPres можно преобразовать только в HTML, нажав кнопку в RStudio, похоже, нет никакого метода командной строки, что немного раздражает. Несмотря на то, что я бы сказал, что в настоящее время это самый простой и гибкий способ получения столбцов слайдов с уценкой:
=== Two Column Layout === This slide has two columns *** ```{r, echo=FALSE} plot(cars) ```
некоторая гибкость обеспечивается регулировкой пропорций столбцов:
=== Two Column Layout === left: 30% This slide has two columns *** ```{r, echo=FALSE} plot(cars) ```
С rmarkdown мы можем получить два столбца, но без контроля над тем, где перерыв, что является немного проблемой:
--- output: ioslides_presentation --- ## Two Column Layout {.columns-2} This slide has two columns ```{r, echo=FALSE} plot(cars) ```
мы также можем смешивать markdown и LaTeX в файле Rmd с помощью
beamer_presentation
формат в RStudio, чтобы получить два столбца, как это, но не может запустить какой-либо код в любом столбец, который является ограничением:--- output: beamer_presentation --- Two Column Layout ------- \begin{columns} \begin{column}{0.48\textwidth} This slide has two columns \end{column} \begin{column}{0.48\textwidth} If I put any code in here I get an error, see https://support.rstudio.com/hc/communities/public/questions/202717656-Can-we-have-columns-in-rmarkdown-beamer-presentations- \end{column} \end{columns}
похоже, что обычный rnw LaTeX doc-лучший способ получить столбцы, если вы хотите использовать LaTex, а не этот гибрид markdown (cf. два столбца лучемет/sweave слайд с графической сеткой)
во всем вышеперечисленном изображение может быть помещено в колонку.
на сайте slidify есть инструкции по созданию двух столбцов здесь:http://slidify.org/customize.html но это не так ясно, что должно войти в папку assets / layouts, чтобы заставить его работать
теперь у меня есть то, что я считаю разумным решением, которое должно применяться, по крайней мере, к
ioslides
- решения на основе, а может быть (?) в другие форматы на основе HTML5. Начиная здесь, я добавил<style> div#before-column p.forceBreak { break-before: column; } div#after-column p.forceBreak { break-after: column; } </style>
к началу моего документа; затем положить
<p class="forceBreak"></p>
внутри слайда с{.columns-2}
ломает столбец в этой точке, например## Latin hypercube sampling {.columns-2} - sample evenly, randomly across (potentially many) uncertain parameters <p class="forceBreak"></p> ![](LHScrop.png) [User:Saittam, Wikipedia](https://commons.wikimedia.org/wiki/File:LHSsampling.png#/media/File:LHSsampling.png)
может быть, есть еще лучший способ, но это не слишком больно.
@ChrisMerkord указывает в комментариях это
.forceBreak { -webkit-column-break-after: always; break-after: column; }
работал вместо этого (я не проверял ...)
У меня есть идея от здесь основные решения было:
### Function *inner_join* . . . `<div style="float: left; width: 50%;">` ``` {r, echo = FALSE, results = 'markup', eval = TRUE} kable(cbind(A,B)) ``` `</div>` `<div style="float: right; width: 50%;">` ```{r, echo = TRUE, results = 'markup', eval = TRUE} inner_join(A,B, by="C") ``` `</div>`
есть решение по ошибки бимер.
короче говоря: ошибка связана с механизмом преобразования pandoc, который обрабатывает все между
\begin{...}
и\end{...}
как TeX. Этого можно избежать, дав новое определение дляbegin{column}
иend{column}
в заголовке yaml.создать mystyle.текс и напиши там:
\def\begincols{\begin{columns}} \def\begincol{\begin{column}} \def\endcol{\end{column}} \def\endcols{\end{columns}}
в файле Rmd используйте эти новые определения
--- output: beamer_presentation: includes: in_header: mystyle.tex --- Two Column Layout ------- \begincols \begincol{.48\textwidth} This slide has two columns. \endcol \begincol{.48\textwidth} ```{r} #No error here i can run any r code plot(cars) ``` \endcol \endcols
до сих пор я не был в состоянии сделать лучше, чем взлом моего собственного немного разметки на вершине : Я называю мой исходный файл
rmd0
и запустить скрипт, включая этотsed
лакомый кусочек, чтобы перевести его вrmd
перед вызовомknit
:sed -e 's/BEGIN2COLS\(.*\)/<table><tr><td style="vertical-align:top; width=50%" >/' \ -e 's/SWITCH2COLS/<\/td><td style="vertical-align:top">/' \ -e 's/END2COLS/<\/td><\/tr><\/table>/' ...
есть несколько причин, по которым мне это не нравится. (1) это уродливо и специально, и у меня нет особенно хорошего способа разрешить дополнительные аргументы (например, относительную ширину столбцов, выравнивание и т. д.). (2) это должно быть изменено для каждого выходного формата (например, если бы я хотел вывести LaTeX / beamer, мне нужно было бы заменить
\begin{columns}\begin{column}{5cm} ... \end{column}\begin{column}{5cm} ... \end{column}\end{columns}
вместо этого (как оказалось, я хочу игнорировать форматирование двух столбцов, когда я делаю раздаточные материалы в формате LaTeX, поэтому это немного проще, но все равно уродливо).Slidify еще может быть ответом.