RMarkdown进阶操作

技术背景Markdown大家都比较熟悉了,特别是在写程序文档和写数学公式时,拥有着无与伦比的便利性 。同时在前面的一篇博客中我们介绍了使用RMarkdown去写Latex Beamer演示文档的方法,RMarkdown是由谢益辉等大神对Markdown、Latex和R语言等常用高级编程语言的结合,使得我们可以同时用这几种语言去构造一个Beamer风格的演示文档 。本文主要介绍一些比较偏门的、但是经常可能用到的RMarkdown进阶操作 。
导入Latex宏包在RMarkdown标题处,我们可以自己写一个普通的Latex文档mysty.tex如下:
\usepackage{graphicx}\usepackage{animate}\usepackage{subfigure}\lstset{breaklines=true,basicstyle=\ttfamily}然后在RMarkdown的标题处引入该tex文件:
---title: "Your Title"author: "Dechin"date: "`2022.10.15`"output:beamer_presentation:pandoc_args: --listingsincludes:in_header: mysty.textoc: truenumber_sections: yesslide_level: 2theme: Dresdencolortheme: seagull---注意这里我们导入了latex的动图animate模块和子图subfigure模块,都是后面要用到的功能 。
修改图片尺寸# Test1## Test2\begin{figure}\centerline{\includegraphics[width=1.0\textwidth]{./1.png}}\end{figure}这里我们使用的是Latex的图片导入方法,默认居中,可以通过调整上述代码中的width参数来控制图片打印的大小 。

RMarkdown进阶操作

文章插图
RMarkdown加注释从来没想过在Markdown里面还可以加注释,但事实上确实可以操作的,可以在需要注释的行前加上[comment]:即可:
[comment]:# Test1[comment]:## Test2[comment]:\begin{figure}[comment]:\centerline{\includegraphics[width=1.0\textwidth]{./1.png}}[comment]:\end{figure}虽然编译过程中会出现一系列的告警 , 但是我们可以不管 。
长公式显示有时候我们的数学公式可能会比较长,这样在演示文档中可能会被自动截断:
# Test1## Test2$$[q_1, q_2]=q_1q_2-q_2q_1=(s_1s_2-x_1x_2-y_1y_2-z_1z_2)+i(s_1x_2+s_2x_1+y_1z_2-y_2z_1)+j(s_1y_2+s_2y_1+x_2z_1-x_1z_2)+k(s_1z_2+s_2z_1+x_1y_2-x_2y_1)-(s_2s_1-x_2x_1-y_2y_1-z_2z_1)-i(s_2x_1+s_1x_2+y_2z_1-y_1z_2)-j(s_2y_1+s_1y_2+x_1z_2-x_2z_1)-k(s_2z_1+s_1z_2+x_2y_1-x_1y_2)=2i(y_1z_2-y_2z_1)+2j(x_2z_1-x_1z_2)+2k(x_1y_2-x_2y_1)\neq0$$此时编译出来的演示文档显示效果非常不佳:

RMarkdown进阶操作

文章插图
这个时候可以选择使用行内公式 , 这样可以自动换行,很大概率是可以完整显示出来的:
# Test1## Test2$[q_1, q_2]=q_1q_2-q_2q_1=(s_1s_2-x_1x_2-y_1y_2-z_1z_2)+i(s_1x_2+s_2x_1+y_1z_2-y_2z_1)+j(s_1y_2+s_2y_1+x_2z_1-x_1z_2)+k(s_1z_2+s_2z_1+x_1y_2-x_2y_1)-(s_2s_1-x_2x_1-y_2y_1-z_2z_1)-i(s_2x_1+s_1x_2+y_2z_1-y_1z_2)-j(s_2y_1+s_1y_2+x_1z_2-x_2z_1)-k(s_2z_1+s_1z_2+x_2y_1-x_1y_2)=2i(y_1z_2-y_2z_1)+2j(x_2z_1-x_1z_2)+2k(x_1y_2-x_2y_1)\neq0$行内公式的显示效果如下所示:

RMarkdown进阶操作

文章插图
这样一来,我们就可以在演示文档上面看到完整的公式 。
公式居中和缩放续上一个章节内容,在公式使用行内显示之后,我们发现公式此时是居左显示的,而我们如果想要居中,在前面加一个\center标签即可:
# Test1## Test2\center $[q_1, q_2]=q_1q_2-q_2q_1=(s_1s_2-x_1x_2-y_1y_2-z_1z_2)+i(s_1x_2+s_2x_1+y_1z_2-y_2z_1)+j(s_1y_2+s_2y_1+x_2z_1-x_1z_2)+k(s_1z_2+s_2z_1+x_1y_2-x_2y_1)-(s_2s_1-x_2x_1-y_2y_1-z_2z_1)-i(s_2x_1+s_1x_2+y_2z_1-y_1z_2)-j(s_2y_1+s_1y_2+x_1z_2-x_2z_1)-k(s_2z_1+s_1z_2+x_2y_1-x_1y_2)=2i(y_1z_2-y_2z_1)+2j(x_2z_1-x_1z_2)+2k(x_1y_2-x_2y_1)\neq0$居中显示效果如下:

RMarkdown进阶操作

文章插图
在行内公式显示下,依然存在公式过长的问题,此时我们可以借鉴参考链接1中的方法,在公式前面再加一个\tiny的标签:
# Test1## Test2\tiny \center $[q_1, q_2]=q_1q_2-q_2q_1=(s_1s_2-x_1x_2-y_1y_2-z_1z_2)+i(s_1x_2+s_2x_1+y_1z_2-y_2z_1)+j(s_1y_2+s_2y_1+x_2z_1-x_1z_2)+k(s_1z_2+s_2z_1+x_1y_2-x_2y_1)-(s_2s_1-x_2x_1-y_2y_1-z_2z_1)-i(s_2x_1+s_1x_2+y_2z_1-y_1z_2)-j(s_2y_1+s_1y_2+x_1z_2-x_2z_1)-k(s_2z_1+s_1z_2+x_2y_1-x_1y_2)=2i(y_1z_2-y_2z_1)+2j(x_2z_1-x_1z_2)+2k(x_1y_2-x_2y_1)\neq0$缩小后的公式显示效果如下:

RMarkdown进阶操作

文章插图
【RMarkdown进阶操作】还有众多的大小范围可调(图片来自于参考链接1):

RMarkdown进阶操作

文章插图

推荐阅读