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
,但它似乎不是…
- 不幸的是,似乎没有内置的双列格式支持。 谢毅辉的HTML5例子并没有显示任何两列的例子,它声称(在幻灯片5中)单击RStudio中的“针织HTML”button相当于
- LaTeX / beamer:我可以简单地在
Rnw
(knitr-dialect Sweave)中编写,而不是以RRnw
开头。 这会给我最终的灵活性- 尽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
你会得到: