Markdown
[toc]
Markdown的格式
- 简单的文本文件格式,通常保存为.md扩展名,中文内容使用UTF-8编码,有一些简单的格式标注方法:两个星号之间转换为斜体,缩进四个空格或者一个制表符的内容会堪称代码。
- 适用于简单的文章,源程序说明,不适合用于过多公式等复杂文档。可以转换为docx, pdf等格式。通过使用R 的扩展包knitr, rmarkdown, bookdown与pandoc软件一起大大扩展了markdown的适用范围。
- 如果需要作为一本书发布在网站上进行出版可以使用bookdown包,如果需要对出版格式进行精确控制,可以考虑使用LaTeX格式
Markdown格式文件的应用
- 在Rstudio中可以编辑Markdown文件和含有R代码的Markdown文件,可以一键将其转换为MS WORD DOCX文件,再单独安装的LaTeX编译软件的支持下还可以直接编译成PDF,Rstudio支持下的增强的Markdown格式被称为RMarkdown格式,以Rmd为扩展名,支持大多数的LaTeX公式,在bookdown扩展包下还支持公式,定理,图标等自动标号和引用,链接
Markdown格式的说明
段落
一个段落由一行或连续的多行组成,段落之间以空行分隔。同一段落内的不同行在转换成HTML或者DOCX格式时会重新进行排列,原来的段内行被当成了空格,这样的规定与LaTeX类似。普通段落不该用空格或者制表符来进行缩进,不应再行尾留有空格
为了在段内换行并且在转换后仍然保持段内换行,输入时在前面的行尾输入两个或者两个以上的空格,但这样的缺点是末尾的空格是不可见的,可以使用HTML的<br>标签在段内进行换行
123456
456
123456
456
段内文字格式
在一段内,用星号或下划线包围的内容如强调是强调格式。用双星号或双下划线包围的内容如加重是加重格式。san,san. 星号,下划线与要强调或加重的内容之间不要空开,否则会当作普通星号或下划线解释,在行首还会当作列表。为了插入普通的星号或下划线,可以使用反斜杠保护,或者携程段内代码格式
金融
金融可以用一对”~“作为界定符给出下标,如HO
2。可以用一对“^”作为界定符给出上标,如Cu^2+^。但是,数学公式一般还是应该使用LaTeX数学公式形式在普通段落内一部分内容希望显示成代码,对其中的特殊字符不做解释,只要包在两个反向单撇号内。如
if(_x_>0),y=1;
,如果内容本身含有`,则要使用更多个数的单撇号,如`x`
,注意留空格
标题和分割线
- #开始的是一级标题,两个就是二级标题……直到六个。标题行前面应该空一行,否则可能会把某些偶然出现在行首的#认为是标题行的标志
- 用三个或者三个以上的星号可以组成分割线
引用段落
可以使用类似Email的回复包含原始邮件内容的办法输入引用段落,即在段落的每行前面加一个大于号。
白日依山尽,黄河入海流
欲穷千里目,更上一层楼
注意引用的也是段落模式,内容中的换行不起作用,空行导致分段
张山说:里斯这样说过
不想当将军的木匠不是好厨子
列表
星号表示一个不编号的列表项,也可以替换成加号或者减号,后面必须有一个或者多个空格。每个列表项可以输入多行,隔行的内容最好左对齐,左对齐在使用文本格式时较易阅读,但不是必须的。两个列表项之间尽量不要空行
如果列表项目中有多个段落,两个列表项之间应该以空行分隔,每个项目除了第一行外,输入的每行内容应该缩进四个空格或者一个制表符。
列表项目内如果有引用段落,需要都缩进四个空格。如果有程序代码,需要缩进四个空格后用三个反单撇号表示开始与结束。
源程序
>x<-rnorm(100) >hist(x) <!--0-->
其中myfile.Rmd 是源文件,产生的HTML 文件带有图形、支持数学公式。
- 用RStudio 的Knit 图标一键编译与用rmarkdown::render() 命令编译有一个重要差别:
- 用Knit 图标编译,Rmd 文件中的程序会在一个崭新的会话中执行,当前会话中已经定义的函数、变量、导入的扩展包不会影响到编译结果;
- 用rmarkdown::render() 编译,Rmd 文件中的程序是在当前会话中执行的,会带来一定的兼容性问题,有可能在别人的环境下就不能正确执行或者会给出不同结果。但是,rmarkdown::render() 可以通过程序调用,比如,循环地从同一个Rmd 生成一系列不同的报告。为了不让当前会话
环境干扰结果,可以人为地打开一个新会话。 - 尽量用Rstudio
在R Markdown文件中插入R代码
行内代码
行内代码的结果插入到一个段落中间,代码以`r 开头,以`结尾,如r
sin(pi/2) 在结果中会显示为1。为了原样显示一个反向单撇号,可以在两边用双反向单撇号界定并用空格隔开内部的内容。代码块
代码块则把结果当作单独的段落,按照Markdown 格式的规定,代码块的前后需要有空行,但是R Markdown 实际上放松了这个要求,允许前后不空行。R代码段以单独的一行开头,此行以三个反单撇号开始,然后是{r},如```{r}。代码段以占据单独一行的三个反单撇号```结尾。
1
2
3set.seed(1)
x<-round(rnorm(10),2)
print(x)## [1] -0.63 0.18 -0.84 1.60 0.33 -0.82 0.49 0.74 0.58 -0.31
可以看出,代码段程序会被插入到最终结果中,代码段的文本型输出会插入到程序的后面。代码块也可以嵌入到引用、列表等环境中。代码块中作的图将自动插入到当前位置。
在RStudio 中,可以用Insert 快捷图标插入代码段,还可以用Ctrl+Alt+I 快捷键插入代码段。
输出表格
knitr包提供了一个kabble()函数可以用来把数据框或矩阵转化成有格式的表格,支持HTML,docx,LaTeX等格式。
R 扩展包xtable 提供了一个xtable() 函数,也可以用来生成HTML 格式和LaTeX 格式的表格,但是需要指定要输出的格式。xtable 对比较多的R 数据类型和输出类型提供了表格式显示功能,包括矩阵、数据框、回归分析结果、方差分析结果、主成分分析结果、若干分析结果的summary 结果等。
R 扩展包pander 提供了更好的表格能力,也能与knitr 包很好的合作输出。其pander() 函数可以将多种R 输出格式转换成knitr 需要的表格形式。
但是,经过试验发现,表中中有中文时pander 包会出错。
利用R程序插图
1、Rmd 文件的插图有两种,一种是已经保存为图形文件的,主要是png 和pdf图片;另一种是文中的R 代码生成的图形。已经有图形文件的,可以用markdown 格式原来的插图方法,见markdown 格式介绍。但是,这样做不能给图形自动编号,另外因为制作图书是有网页和PDF书两种主要输出格式的,原有的插图方式在这两种输出格式上有细微的不一致。所以,最好是统一使用Rmd 的插图方法。
2、Rmd 的插图方法就是写一段R 代码段来插图,如果是用程序作图,则代码中写作图的代码;如果是已有的图形文件,可以在一个单独的R 代码段中用类似下面的命令插图:
1 | knitr::include_graphics("figs/myfig01.png") |
3、其中figs 是存放图形文件的子目录名,myfig01.png 是要插入的图形文件
名。这样,如果同时还有myfig01.pdf 的话,则HTML 输出使用png 图片
而PDF 输出自动选用pdf 文件。另外,插图的选项在代码段的选项中规定:
用代码段的fig.with 和fig.height 选项指定作图的宽和高(英寸),用
out.width 和out.height 选项指定在输出中实际显示的宽和高,实际显示的
宽和高如果使用如”90%” 这样的百分数单位则可以自动适应输出的大小。
4、由于PDF 中的中文编码不能自动识别,所以在每个Rmd 源文件的开头应该加上如下的设置,使得生成PDF 图时中文能够正确显示:
1 | pdf.options(family="GB1") |
其中include=FALSE 表示要不显示代码段的代码,有运行结果也不插入到输
出结果中,是否运行视缺省的eval= 的值而定。