двухколоночные макеты в презентациях 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, но это, кажется, не так ...
  • LaTeX / beamer: я мог бы просто сочинить в Rnw (knitr-диалект Sweave), а не r markdown для начала. Это даст мне максимальную гибкость ...
    • несмотря на многие годы использования латекса, я нахожу латексную композицию более болезненной, чем композиция markdown.

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

любые другие советы будут оценены.

5 53

5 ответов:

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

используя формат 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 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

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

до сих пор я не был в состоянии сделать лучше, чем взлом моего собственного немного разметки на вершине : Я называю мой исходный файл 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 еще может быть ответом.