技术背景

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: --listings
includes:
in_header: mysty.tex
toc: true
number_sections: yes
slide_level: 2
theme: Dresden
colortheme: seagull
---

注意这里我们导入了latex的动图animate模块和子图subfigure模块,都是后面要用到的功能。

修改图片尺寸

# Test1
## Test2
\begin{figure}
\centerline{\includegraphics[width=1.0\textwidth]{./1.png}}
\end{figure}

这里我们使用的是Latex的图片导入方法,默认居中,可以通过调整上述代码中的width参数来控制图片打印的大小。

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
$$

此时编译出来的演示文档显示效果非常不佳:

这个时候可以选择使用行内公式,这样可以自动换行,很大概率是可以完整显示出来的:

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

行内公式的显示效果如下所示:

这样一来,我们就可以在演示文档上面看到完整的公式。

公式居中和缩放

续上一个章节内容,在公式使用行内显示之后,我们发现公式此时是居左显示的,而我们如果想要居中,在前面加一个\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$

居中显示效果如下:

在行内公式显示下,依然存在公式过长的问题,此时我们可以借鉴参考链接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$

缩小后的公式显示效果如下:

还有众多的大小范围可调(图片来自于参考链接1):

Beamer PDF中添加动图

在前面一篇博客中,我们介绍了在Latex生成PDF时我们也可以展示一些动态过程。这需要我们先用Python把一个动态图切割成很多个图片,放在一个指定文件夹下,然后调用Latex的animate宏包来构建这个动图。

# Test1
## Test2
\center \animategraphics[width=0.45\linewidth, autoplay=True, loop, controls]{24}{gif-2/}{0}{65}

这里065这两个参数表示切割图片的第一张的数字编号和最后一张的数字编号,加了loop参数之后会自动循环播放,同时我们还可以加上controls这个控件,用于控制动态图的进退等,非常的灵活方便。显示效果如下:

并排放置多张图片

我们可以用subgraph宏包的功能导入多张图片并排,这个默认都是在同一列显示的,但是子图就可以允许我们多张图片在同一行显示:

# Test1
## Test2
\begin{figure}
\centering
\subfigure[]{\includegraphics[width=1.2in]{./13.png}}
\subfigure[]{\includegraphics[width=2.8in]{./14.png}}
\end{figure}

显示效果如下:

总结概要

本文通过几个实际案例,介绍了RMarkdown在写Latex Beamer演示文档中有可能用到的一些进阶的操作。RMarkdown不仅仅继承了Markdown语言的简洁便利,还允许我们仍然使用Latex中的一些高级操作,甚至我们可以在生成的Beamer演示文档PDF中去展示一些动态的效果图,这是通过PPT等工具去生成PDF所不具备的功能(有可能有,只是我不了解,这里使用Latex Beamer来写演示文档仅仅是个人偏好)。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/advanced-rmarkdown.html

作者ID:DechinPhy

更多原著文章请参考:https://www.cnblogs.com/dechinphy/

打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958

CSDN同步链接:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343

51CTO同步链接:https://blog.51cto.com/u_15561675

参考链接

  1. https://www.huwenqiang.cn/articles/2020/10/22/1603372559446.html
  2. https://www.cnblogs.com/dechinphy/p/latex-gif.html

RMarkdown进阶操作的更多相关文章

  1. [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组

    1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...

  2. Django中的ORM进阶操作

    Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...

  3. Django之Models进阶操作(字段属性)

    字段属性详细介绍 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列, ...

  4. 第11章:sed进阶操作

    第11章:sed进阶操作 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为 ...

  5. 第10章:awk进阶操作

    第10章:awk进阶操作 在第4章:查找与替换简单的讲解了awk的使用,本章介绍详细讲解awk的使用.awk是一个强大的文本分析工具,简单的说awk就是把文件逐行的读入, 以空格为默认分隔符将每行切片 ...

  6. [学习笔记]LCT进阶操作

    LCT总结——应用篇(附题单)(LCT) 一般都是维护链的操作.split即可搞定. 进阶操作的话,处理好辅助树和原树的关系即可搞定. 其实,最大的区别就是,splay随便转,辅助树形态变了,但是原树 ...

  7. Django 之models进阶操作

    到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 ...

  8. Django 数据库进阶操作

    基本操作 # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj = models.T ...

  9. web框架-(七)Django补充---models进阶操作及modelform操作

    通过之前的课程我们可以对于Django的models进行简单的操作,今天了解下进阶操作和modelform: 1. Models进阶操作 1.1 字段操作 AutoField(Field) - int ...

随机推荐

  1. Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_138 其实很早以前就想搞一套完备的标签云架构了,迫于没有时间(其实就是懒),一直就没有弄出来完整的代码,说到底标签对于网站来说还是 ...

  2. Luogu1527 [国家集训队]矩阵乘法 (整体二分)(Unfinished)

    全线RE的代码... 先搁这吧,下次再说.flag //#include <iostream> #include <cstdio> //#include <cstring ...

  3. [CF1498D] Bananas in a Microwave (DP)

    题面&翻译 题解 虽然 m m m 很大,但是 n n n 很小,因此题目允许我们在 O ( n m ) O(nm) O(nm) 以内解决这道题. 定义一个 dp[i][j]=0/1 ? 如果 ...

  4. c++基础思维导图2

    c++基础思维导图2 结构体 结构体的基本概念:用户自定义的数据类型 结构体定义和使用 struct 结构体名{结构体成员} struct 结构体名 变量名: struct 结构体名 变量名 = {成 ...

  5. 配置Windows server dhcp与AD域对接并使用Win1创的用户登录Win2

    创建两台windows_server_2012 创建步骤链接(https://www.cnblogs.com/zhengyan6/p/16338084.html) 注意:所有虚拟机都要在同意网段 配置 ...

  6. KingbaseES where 条件解析顺序

    概述 KingbaseES 对于where 条件的解析严格遵守"从左到右"的原则,因此,对于选择性比较强的条件,进行最先过滤是有利于性能的. 一.KingbaseES 1.条件顺序 ...

  7. aardio 编程语言快速入门 —— 语法速览

    本文仅供有编程基础的用户快速了解常用语法.如果『没有编程基础』 ,那么您可以通过学习任何一门编程语言去弥补你的编程基础,不同编程语言虽然语法不同 -- 编程基础与经验都是可以互通的.我经常看到一些新手 ...

  8. yum install lrzsz

    yum install lrzsz rz:从本地上传文件至服务器 sz filename:从服务器下载文件至本地

  9. Mysql 实现 向上递归查找父节点并返回树结构

    需求:通过mysql 8.0以下版本实现,一个人多角色id,一个角色对应某个节点menu_id,根节点的父节点存储为NULL, 向上递归查找父节点并返回树结构. 如果只有叶子,剔除掉; 如果只有根,只 ...

  10. ASP.NET MVC 对于视图引擎的优化

    我经常使用asp.net MVC框架来做网站.总的来说,MVC框架是一个非常优秀的框架.相对于曾经的web form模式,我个人感觉分工更加合理思路也更加清晰,但是交给开发人员的工作也相对变多了. 当 ...