RStudio演示文稿中的两列布局/ slidingify / pandoc

我试图想出一个很好的系统来生成幻灯片和相关的讲义。 理想的系统将具有以下属性:

  • (PDF / HTML)和讲义(PDF)布局都非常漂亮(讲义应该有logging的空间)
  • embedded的R块,数字,其他JPG / PNG图片等
  • 容易撰写
  • 使用命令行工具构build
  • 书目支持
  • pandoc幻灯片分隔符格式(在指定级别的标题后自动生成新的幻灯片)是首选
  • 我可以接受一点额外的处理(例如通过sed ),但是不希望写一个巨大的基础设施
  • 两列布局 :有一篇关于如何从pandoc获取多列幻灯片的SOpost ,但是它是LaTeX–而不是面向HTML的。
  • 能够调整embedded式图像(除R生成的graphics以外)的大小和列宽

以下是我迄今为止发现的各种选项:

  • 滑动
    • 虽然有一个解决方法 ,但不会做pandoc幻灯片分隔符格式
    • build立讲义的build议是打印成PDF格式; 我想留下便条的空间等(我可能想出一种方法来使用像PDFtk或psnup东西…)
  • RStudio演示文稿( .Rpres文件):
    • 做很多很好的事情,包括指定宽度的多列
    • 不支持pandoc幻灯片分隔符格式
    • 我无法弄清楚发生了什么事情。 有一些RStudio文档描述了普通HTML的翻译过程,但它似乎没有涵盖R表示格式(这是不完全相同的)。 (我之前已经花费了一些精力来弄清楚如何通过pandoc获得类似RStudio的输出 …),这意味着我无法从命令行生成幻灯片等。
  • RStudio的开发版本 (截至2014年3月)与Pandoc和rmarkdown版本2捆绑在一起。 它使用.Rpres格式解决了上述许多问题。
  • pandoc :可能是唯一一个具有脚注,书目支持等function的减价翻译器。我还可以使用pandoc生成LaTeX,使用tufte-handout类 ,它符合我的美的标准。
    • 不幸的是,似乎没有内置的双列格式支持。 谢毅辉的HTML5例子并没有显示任何两列的例子,它声称(在幻灯片5中)单击RStudio中的“针织HTML”button相当于pandoc -s -S -i -t dzslides --mathjax knitr-slides.md -o knitr-slides.html ,但它似乎不是…
  • LaTeX / beamer:我可以简单地在Rnw (knitr-dialect Sweave)中编写,而不是以R Rnw开头。 这会给我最终的灵活性
    • 尽pipeLaTeX使用多年,但我发现LaTeX的构成比减价组合更痛苦。

毕竟,我的具体问题是: 什么是最好(最简单)的方式来生成HTML输出的两列布局

任何其他的意见也将不胜感激。

这是一个古老的问题,但最近我被一个类似的问题困扰着,这就是我发现的:

使用RPres格式,可以像这样指定两列( 细节 )。 请注意,RPres只能通过单击RStudio中的button转换为HTML,似乎没有任何命令行方法,这有点烦人。 尽pipe如此,我认为这是目前使用markdown获得幻灯片列表最简单和最灵活的方法:

 === 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) ``` 

在这里输入图像说明

我们也可以使用RStudio中的beamer_presentation格式在一个Rmd文件中混合使用markdown和LaTeX来获得这样的两列,但不能在任何一列中运行任何代码,这是一个限制:

 --- 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,而不是这个降价混合(比较两列投影仪/有网格graphics的sweave幻灯片 )

在以上所有的图像可以放置在一列。

slidingify网站有两个栏目的说明: http ://slidify.org/customize.html,但不清楚为了使其工作而必须进入assets / layouts文件夹

我现在有我认为是一个合理的解决scheme,至less应该适用于基于ioslides的解决scheme,也许(?)其他基于HTML5的格式。 从这里开始,我补充道

 <style> div#before-column p.forceBreak { break-before: column; } div#after-column p.forceBreak { break-after: column; } </style> 

到我的文档的开始; 然后把{.columns-2} <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; } 

工作,而不是(我没有testing…)

到目前为止,我还没有能够比在rmd0格式上自己修改一些标记更好:我调用我的源文件rmd0并在调用knit之前运行包含此sed rmd0的脚本将其转换为rmd

 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)这是丑陋的和特殊的目的,我没有一个特别好的方法来允许可选参数(例如列的相对宽度,alignment方式等)。 (2)必须对每种输出格式进行调整(例如,如果我想要LaTeX / beamer输出,我需要replace\begin{columns}\begin{column}{5cm} ... \end{column}\begin{column}{5cm} ... \end{column}\end{columns} (因为事实certificate,当我制作LaTeX格式的讲义时,我想忽略两列的格式化,所以它更简单一些,丑陋)。

滑动可能还是答案。

我从这里得到一个想法,基本的解决scheme是:


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

有一个解决方法 beamer错误。

简而言之:错误与pandoc转换引擎有关,该引擎将\begin{...}\end{...}之间的所有内容都视为TeX 。 可以通过在yaml头文件中为begin{column}end{column}给出新的定义来避免。

创buildmystyle.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 

你会得到: 在这里输入图像说明