Подтвердить что ты не робот

Двухстолбцовые макеты в презентациях RStudio/slidify/pandoc

Я пытаюсь создать хорошую систему для создания слайдов и сопроводительных раздаточных материалов. Идеальная система будет иметь следующие свойства:

  • красивый как в презентации (PDF/HTML), так и в раздаточных материалах (PDF) (в раздаточных материалах должно быть место для заметок).
  • встроенные фрагменты R, рисунки, другие изображения JPG/PNG и т.д.
  • легко составить
  • сборка с использованием инструментов командной строки
  • поддержка библиографии
  • pandoc формат разделителя слайдов (автоматически генерировать новый слайд после заголовков заданного уровня).
  • Я могу жить с небольшой дополнительной обработкой (например, через sed), но предпочел бы не писать огромную инфраструктуру
  • двухстолбцовые макеты: есть сообщение SO о том, как получить слайды с несколькими столбцами из pandoc, но это LaTeX- а не HTML-ориентированный.
  • возможность регулировки размеров встроенных изображений (кроме R-генерируемых фигур) и ширины столбцов на лету

Вот что я обнаружил до сих пор о различных вариантах:

  • Slidify:
    • не делает pandoc формат разделителя слайдов, хотя существует обходное решение
    • предложение о создании раздаточных материалов - это печать в формате PDF; Я бы хотел оставить место для заметок и т.д. (Я, вероятно, мог бы найти способ сделать это, используя что-то вроде PDFtk или psnup...)
  • RStudio презентаций (.Rpres файлов):
    • делает много вещей красиво, включая несколько столбцов с указанной шириной
    • не поддерживает pandoc формат разделителя слайдов
    • Я не могу понять, что происходит под капотом. Существует документация RStudio, которая описывает процесс перевода для обычного HTML, но, похоже, не охватывает формат представления R (что не совсем тоже самое). (Я ранее вложил несколько усилий в выяснить, как получить RStudio-подобный вывод через pandoc..., что означает, что я не могу сгенерировать слайды и т.д. из командной строки.
  • RStudio Development Version (по состоянию на март 2014 года) поставляется в комплекте с Pandoc и версией 2 rmarkdown. Он затрагивает многие из вышеперечисленных проблем в формате .Rpres.
  • pandoc: может быть единственным указателем-указателем, который имеет такие функции, как сноски, поддержка библиографии и т.д. Я также могу использовать pandoc для создания LaTeX с помощью класс tufte-handout, который соответствует моим критериям красоты.
    • К сожалению, похоже, что у него нет встроенной поддержки двух столбцов. Пример Yihui Xie HTML5 не показывает никаких двухстолбцовых примеров, и он утверждает (на слайде 5), что нажатие кнопки "Вязать HTML" в RStudio эквивалентен pandoc -s -S -i -t dzslides --mathjax knitr-slides.md -o knitr-slides.html, но он не кажется...
  • LaTeX/beamer: я мог бы просто составить в Rnw (knitr-dialect Sweave), а не R-уценку. Это даст мне максимальную гибкость...
    • Несмотря на многолетнее использование LaTeX, я нахожу LaTeX-композицию более болезненной, чем композиция уценки.

В конце концов, мой конкретный вопрос: какой лучший (самый простой) способ создания двухколоночного макета для вывода HTML?

Также будут оценены любые другие рекомендации.

4b9b3361

Ответ 1

Теперь у меня есть то, что я считаю разумным решением, которое должно применяться, по крайней мере, к решениям на основе 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; }

работал (я не тестировал...)

Ответ 2

Это старый вопрос, но недавно меня мучил похожий вопрос, вот что я нашел:

Используя формат RPres, можно указать два столбца следующим образом (подробности). Обратите внимание, что RPres можно преобразовать только в HTML, нажав кнопку в RStudio. Кажется, что нет никакого метода командной строки, что немного раздражает. Несмотря на это, я бы сказал, что в настоящее время это самый простой и гибкий способ получения столбцов слайдов с уценкой:

=== 

Two Column Layout  
===

This slide has two columns

***

'''{r, echo=FALSE}
plot(cars)
'''

enter image description here

Некоторая гибкость обеспечивается путем корректировки пропорций столбца:

===

Two Column Layout  
===
left: 30%
This slide has two columns

***

'''{r, echo=FALSE}
plot(cars)
'''

enter image description here

С помощью rmarkdown мы можем получить два столбца, но без контроля того, где находится разрыв, что представляет собой небольшую проблему:

---
output: ioslides_presentation
---


## Two Column Layout  {.columns-2}

This slide has two columns


'''{r, echo=FALSE}
plot(cars)
'''

enter image description here

Мы также можем смешать 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}

enter image description here

Похоже, что обычный документ Rnw LaTeX - лучший способ получить столбцы, если вы хотите использовать LaTex, а не этот гибрид уценки (см. Слайдер с двумя столбцами beamer/sweave с графикой сетки)

Во всем вышеперечисленном изображение может быть размещено в столбце.

На веб-сайте slidify есть инструкции по созданию двух столбцов: http://slidify.org/customize.html, но не ясно, что нужно сделать, чтобы в папку assets/layouts он работал.

Ответ 3

Я получил идею от ЗДЕСЬ, основные решения были:


### 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>'

Ответ 4

Существует обходной путь для ошибки проектора.

Вкратце: Ошибка связана с механизмом преобразования pandoc, который обрабатывает все между \begin{...} и \end{...} как TeX. Этого можно избежать, дав новое определение для begin{column} и end{column} в заголовке yaml.

Создайте mystyle.tex и напишите там:

\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

И вы получите: enter image description here

Ответ 5

До сих пор мне не удалось сделать что-то лучше, чем взломать мою небольшую разметку поверх формата rmd: я вызываю свой исходный файл rmd0 и запускаю script, включая этот sed tidbit, чтобы перевести его на rmd перед вызовом knit:

sed -e 's/BEGIN2COLS\(.*\)/<table><tr><td style="vertical-align:top; width=50%" \1>/' \
    -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 может быть ответом.

Ответ 6

Вы можете использовать обозначение fenced_divs или : для создания столбцов или "Макет с двумя содержимым". Смотрите также эту страницу, чтобы узнать больше о нотации.

## Slide With Image Left

::: columns

:::: column
left
::::

:::: column
right

'''{r your-chunk-name, echo=FALSE, fig.cap="your-caption-name"}
knitr::include_graphics("your/figure/path/to/the-image.pdf")

#The figure will appear on the right side of the slide...
'''
::::

:::

Поскольку pandoc 2+, который поддерживает обозначения, был реализован в RStudio v1.2+, вам может потребоваться сначала установить RStudio v1.2+. Установка достаточно проста (по крайней мере, в моем случае); Просто скачайте и установите RStudio v1.2+. В процессе установки прежняя версия RStudio на вашем компьютере будет заменена на новую, не удаляя ее вручную.

Нотация : может использоваться даже при .Rmd файлов beamer_presentation опцией beamer_presentation, а также при создании HTML-слайдов. Таким образом, нам не нужно ни смешивать нотации уценки и LaTeX в одном файле, ни добавлять дополнительные коды больше: просто .Rmd файл, как вы .Rmd другой .Rmd с другими опциями.

Ответ 7

Не прямое решение, но пакет Xaringan https://github.com/yihui/xaringan/ работает для меня. Это основано на remark.js. В шаблоне по умолчанию вы можете использовать .pull-left[] и .pull-right[]. Пример: https://slides.yihui.name/xaringan/#15. Вам нужно только минимальная настройка существующих .rmd файлов.