Макеты из двух колонок в презентациях 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 (по состоянию на март 2014 года) поставляется в комплекте с Pandoc и версией 2
rmarkdown
, Он решает многие из вышеуказанных проблем с.Rpres
формат. pandoc
: может быть единственным переводчиком уценок, который имеет такие функции, как сноски, поддержка библиографии и т. д. Я также могу использоватьpandoc
генерировать LaTeX с использованием класса tufte-handout, который соответствует моим критериям красоты.- К сожалению, в нем нет встроенной поддержки формата двух столбцов. В примере 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 уценки для начала. Это дало бы мне максимальную гибкость...- несмотря на многолетнее использование LaTeX, я нахожу композицию LaTeX более болезненной, чем композицию уценки.
После всего этого мой конкретный вопрос: каков наилучший (самый простой) способ создания двухколоночного макета для вывода HTML?
Любые другие советы также будут оценены.
5 ответов
Теперь у меня есть то, что я считаю разумным решением, которое должно применяться по крайней мере к 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; }
работал вместо этого (я не проверял...)
Это старый вопрос, но недавно меня мучил похожий вопрос, вот что я нашел:
Используя формат 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)
```
Мы также можем смешать уценку и 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 - это лучший способ получить столбцы, если вы хотите использовать LaTex, а не этот гибрид уценки (ср. Слайд с двумя столбцами beamer/sweave с графикой сетки)
Во всем вышеперечисленном изображение может быть размещено в столбце.
На веб-сайте slidify есть инструкции по созданию двух столбцов: http://slidify.org/customize.html но не ясно, что нужно сделать, чтобы в папку assets/layouts он работал
Ты можешь использовать 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
вариант, а также при создании HTML-слайдов. Таким образом, нам не нужно ни смешивать разметку и нотацию LaTeX в одном файле, ни добавлять дополнительные коды больше: просто свяжите файл, как вы связываете другой .Rmd
с другими вариантами.
Существует обходной путь для ошибки проектора.
Вкратце: ошибка связана с механизмом преобразования pandoc, который обрабатывает все, что находится между \begin{...}
а также \end{...}
как TeX. Этого можно избежать, дав новое определение begin{column}
а также end{column}
в заголовке ямл.
Создайте 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
Я получил идею от ЗДЕСЬ, основные решения были:
### 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>`
До сих пор я не смог добиться большего успеха, чем взломать свою небольшую разметку поверх rmd
Формат: я называю мой исходный файл rmd0
и запустить скрипт, включающий этот 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 еще может быть ответом.
Не прямое решение, но Yihui's Xaringan
пакет https://github.com/yihui/xaringan/ работает для меня. Это основано на remark.js
, В шаблоне по умолчанию вы можете использовать .pull-left[]
а также .pull-right[]
, Пример: https://slides.yihui.name/xaringan/. Вам нужно только минимальная настройка на существующий .rmd
файлы.