相关文章推荐
老实的哑铃  ·  使用 GitHub Codespaces ...·  4 月前    · 
活泼的茶壶  ·  pytorch ...·  2 月前    · 
活泼的水煮肉  ·  使用 SharePoint 中的 ...·  1 年前    · 
痴情的眼镜  ·  JDBC增删改查 && ...·  3 年前    · 
体贴的抽屉  ·  java读取dat文件乱码-掘金·  3 年前    · 
  • 44.2.1 cppFunction() 转换简单的C++函数—Fibnacci例子
  • 44.2.2 sourceCpp() 转换C++程序—正负交替迭代例子
  • 44.2.3 sourceCpp() 转换C++源文件中的程序—正负交替迭代例子
  • 44.2.4 sourceCpp() 转换C++源程序文件—卷积例子
  • 44.2.5 在Rmd文件中使用C++源程序文件
  • 45 R与C++的类型转换
  • 45.1 wrap() 把C++变量返回到R中
  • 45.2 as() 函数把R变量转换为C++类型
  • 45.3 as() wrap() 的隐含调用
  • 46 Rcpp 属性
  • 46.1 Rcpp属性介绍
  • 46.2 在C++源程序中指定要导出的C++函数
  • 46.3 在R中编译链接C++代码
  • 46.4 Rcpp属性的其它功能
  • 46.4.1 自变量有缺省值的函数
  • 46.4.2 允许用户中断
  • 46.4.3 把R代码写在C++源文件中
  • 46.4.4 在C++中调用R的随机数发生器
  • 47 Rcpp提供的C++数据类型
  • 47.1 RObject类
  • 47.2 IntegerVector类
  • 47.2.1 IntegerVector示例1:返回完全数
  • 47.2.2 IntegerVector示例2:输入整数向量
  • 47.3 NumericVector类
  • 47.3.1 示例1:计算元素 \(p\) 次方的和
  • 47.3.2 示例2: clone 函数
  • 47.3.3 示例3:向量子集
  • 47.4 NumericMatrix类
  • 47.4.1 示例1:计算矩阵各列模的最大值
  • 47.4.2 示例2:把输入矩阵制作副本计算元素平方根
  • 47.4.3 示例3:访问列子集
  • 47.5 Rcpp的其它向量类
  • 47.5.1 Rcpp的LogicalVector类
  • 47.5.2 Rcpp的CharacterVector类型
  • 47.6 Rcpp提供的其它数据类型
  • 47.6.1 Named类型
  • 47.6.2 List类型
  • 47.6.3 Rcpp的DataFrame类
  • 47.6.4 Rcpp的Function类
  • 47.6.5 Rcpp的Environment类
  • 48 Rcpp糖
  • 48.1 简单示例
  • 48.2 向量化的运算符
  • 48.2.1 向量化的四则运算
  • 48.2.2 向量化的二元逻辑运算
  • 48.2.3 向量化的一元运算符
  • 48.3 用Rcpp访问数学函数
  • 48.4 返回单一逻辑值的函数
  • 48.5 返回糖表达式的函数
  • 48.6 R与Rcpp不同语法示例
  • 49 用Rcpp帮助制作R扩展包
  • 49.1 不用扩展包共享C++代码的方法
  • 49.2 生成扩展包
  • 49.2.1 利用已有基于Rcpp属性的源程序制作扩展包
  • 49.2.2 DESCRIPTION文件
  • 49.2.3 NAMESPACE文件
  • 49.3 重新编译
  • 49.4 建立C++用的接口界面
  • 50 R编程例子
  • 50.1 R语言
  • 50.1.1 用向量作逆变换
  • 50.1.2 斐波那契数列计算
  • 50.1.3 穷举所有排列
  • 50.1.4 可重复分组方式穷举
  • 50.1.5 升降连计数
  • 50.1.6 高斯八皇后问题
  • 50.2 概率
  • 50.2.1 智者千虑必有一失
  • 50.2.2 圆桌夫妇座位问题
  • 50.3 科学计算
  • 50.3.1 城市间最短路径
  • 50.3.2 Daubechies小波函数计算
  • 50.3.3 房间加热温度变化
  • 50.4 统计计算
  • 50.4.1 线性回归实例
  • 50.4.2 核回归与核密度估计
  • 50.4.3 二维随机模拟积分
  • 50.4.4 潜周期估计
  • 50.4.5 ARMA(1,1)模型估计
  • 50.4.6 VAR模型平稳性
  • 50.4.7 贮存可靠性评估
  • 50.5 数据处理
  • 50.5.1 小题分题型分数汇总
  • 50.5.2 类别编号重排
  • 50.6 文本处理
  • 50.6.1 用R语言下载处理《红楼梦》htm文件
  • 51 使用经验
  • 51.1 文件管理
  • 51.1.1 文件备份
  • 51.1.2 工作空间
  • 51.2 程序格式
  • A R Markdown文件格式
  • A.1 R Markdown文件
  • A.2 R Markdown文件的编译
  • A.2.1 编译的实际过程
  • A.3 在R Markdown文件中插入R代码
  • A.4 输出表格
  • A.5 利用R程序插图
  • A.6 冗余输出控制
  • A.7 代码段选项
  • A.7.1 代码和文本输出结果格式
  • A.7.2 图形选项
  • A.7.3 缓存(cache)选项
  • A.8 章节目录链接问题
  • A.9 其它编程语言引擎
  • A.10 交互内容
  • A.11 属性设置
  • A.11.1 YAML元数据
  • A.11.2 输出格式
  • A.11.3 输出格式设置
  • A.11.4 目录设置
  • A.11.5 章节自动编号
  • A.11.6 Word输出章节自动编号及模板功能
  • A.11.7 HTML特有输出格式设置
  • A.11.8 关于数学公式支持的设置
  • A.11.9 输出设置文件
  • A.12 LaTeX和PDF输出
  • A.12.1 TinyTex的安装使用
  • A.12.2 Rmd中Latex设置
  • A.13 生成期刊文章
  • A.14 附录:经验与问题
  • A.14.1 Word模板制作
  • A.14.2 数学公式设置补充
  • B 用bookdown制作图书
  • B.1 介绍
  • B.2 一本书的设置
  • B.3 章节结构
  • B.4 书的编译
  • B.5 交叉引用
  • B.6 数学公式和公式编号
  • B.7 定理类编号
  • B.8 文献引用
  • B.9 插图
  • B.10 表格
  • B.10.1 Markdown表格
  • B.10.2 kable() 函数制作表格
  • B.10.3 R中其它制作表格的包
  • B.11 数学公式的设置
  • B.12 使用经验
  • B.12.1 学位论文
  • B.12.2 LaTeX
  • B.12.3 算法
  • B.12.4 中文乱码
  • B.12.5 图片格式
  • B.12.6 其它经验
  • B.13 bookdown的一些使用问题
  • C 用R Markdown制作简易网站
  • C.1 介绍
  • C.2 简易网站制作
  • C.2.1 网站结构
  • C.2.2 编译
  • C.2.3 内容文件
  • C.2.4 网站设置
  • C.3 用blogdown制作网站
  • C.3.1 生成新网站的框架
  • C.3.2 网页内容文件及其设置
  • C.3.3 初学者的工作流程
  • C.3.4 网站设置文件
  • C.3.5 静态文件
  • D 制作幻灯片
  • D.1 介绍
  • D.2 Slidy幻灯片
  • D.2.1 文件格式
  • D.2.2 幻灯片编译
  • D.2.3 播放控制
  • D.2.4 生成单页HTML
  • D.2.5 数学公式处理与输出设置文件
  • D.2.6 其它选项
  • D.2.7 slidy幻灯片激光笔失效问题的修改
  • D.3 MS PowerPoint幻灯片
  • D.4 Bearmer幻灯片格式
  • D.5 R Presentation格式
  • References
  • 编著:李东风
  • 支持各种编程语言语法彩色加亮显示,等等。

    knitr的详细文档参见网站 knitr文档 。 关于R Markdown可参考专著 ( Xie, Allaire, and Grolemund 2019 ) ( Xie, Dervieux, and Riederer 2020 ) 。 RStudio网站提供了一个R Markdown使用摘要下载: rmarkdown-2.0.pdf 。 Pandoc的文档见 pandoc网站

    一个Rmd文件中包含元数据(metadata)、正文内容和R代码三种成分, 比如,下面是一个简单的Rmd文件样例:

    A.11

    因为中文需要一些特殊的设置, 以及在网络条件不好的条件下支持数学公式显示, 本书作者提供了一个Rmarkdown模板, 下载链接为:

  • bookdown-template-v0-6.zip
  • 其中的Rmarkdown子目录包含了所需模板, 其它子目录有一些别的模板, 为了在本地支持网页中的数学公式显示还有一个MathJax目录。

    A.2 R Markdown文件的编译

    RStudio是一个集成的R软件环境, 可以用来编辑和执行R程序, 这个软件也可以用来编辑和编译R Markdown格式的文件, 使得R Markdown格式的文件变得容易使用。 在RStudio中可以直接用一个快捷图标一次性地把R代码结果插入内容中并编译为HTML或MS Word docx格式, 还支持Markdown中LaTeX格式的数学公式。 建议使用RStudio软件作为R Markdown文件的编辑器。

    在RStudio软件中,用菜单“File–New File–R Markdown”新建一个R Markdown文件,扩展名为 .Rmd 。 用快捷图标Knit可以将文件转换成HTML格式、PDF格式(需要安装LaTeX编译软件TinyTeX)、MS Word格式。

    从HTML格式可以转换成PDF格式。 安装Google的Chrome浏览器, 在Chrome中打开HTML文件后, 然后选择菜单“打印”, 选打印机为“另存为PDF”, 然后选“更多设置”, 将其中的“缩放”改为自定义, 比例改为“90%”, 就可以将HTML网页转换成PDF, 其中的数学公式、表格、图形都可以比较好地转换。 注意,如果不缩小打印, 数学公式的编号以及较长的数学公式可能会被裁剪掉。

    从Word文件也可以转换成PDF格式, 用MS Word软件的“文件-导出”或者“文件-另存为”功能即可。

    如果想将R Markdown文件借助于LaTeX格式转换为PDF, 需要在系统中安装一个TeX编译器。 rmarkdown包从第1.9版本开始要求使用tinytex扩展包以及配套的 TinyTeX 软件包, 没有提供用本机原有的LaTex编译系统的选择, 如果不安装tinytex,编译为PDF格式时会出错。 关于TinyTeX的安装和使用参见 A.12

    如果不借助于RStudio软件, 可以用R软件、knitr包、rmarkdown包、pandoc软件来完成R Markdown源文件的编译。 比如,假设 myfile.Rmd 是一个这样的R Markdown格式的文件, 注意一定要使用UTF-8编码保存, 可以在R或RStudio中运行如下命令以生成含有运行结果的html文件:

    编译Rmd文件, 一般是调用 rmarkdown::render() 函数执行任务。 编译的第一步, 会调用knitr包的 knit() 函数将代码段中的程序依次运行, 结果保存为一个临时.md文件中, 图形结果暂存在单独的图形文件中, 文字结果会直接保存在临时.md文件中。 编译的第二步, 调用外部程序Pandoc将临时的.md文件转换为要求的Word、HTML等输出格式; 如果要求的输出是 pdf_document , 则会调用Pandoc先将临时的.md文件转换为一个中间的.tex文件, 然后利用tinytex包调用外部的TinyTex软件将.tex文件编译为PDF结果。

    Pandoc 是一个功能强大的文件转换程序, 可以在多种不同的文件格式之间转换, 具有丰富的选项。 对于markdown格式, Pandoc也提供了丰富的扩充功能, 最重要的是支持LaTeX格式的数学公式。 见 21.4

    A.3 在R Markdown文件中插入R代码

    插入的R代码分为行内代码与代码块。

    行内代码的结果插入到一个段落中间, 代码以 `r 开头,以 ` 结尾, 如 `r sin(pi/2)` 在结果中会显示为1。 为了原样显示一个反向单撇号, 可以在两边用双反向单撇号界定并用空格隔开内部的内容。

    代码块则把结果当作单独的段落, 按照Markdown格式的规定, 代码块的前后需要有空行, 但是R Markdown实际上放松了这个要求, 允许前后不空行。 R代码段以单独的一行开头, 此行以三个反单撇号开始, 然后是 {r} ,如 ```{r} 。 代码段以占据单独一行的三个反单撇号 ``` 结尾。

    ```{r rmd-block01, cache=TRUE}
    set.seed(1)
    x <- round(rnorm(10), 2)
    print(x)
    

    结果将变成

    knitr包提供了一个 kable() 函数可以用来把数据框或矩阵转化成富文本格式的表格, 支持HTML、docx、LaTeX等格式。

    例如,计算线性回归后, summary()函数的输出中有coefficients一项,是一个矩阵, 如果直接文本显示比较难看:

    在交互运行时, R的函数调用输出的警告、提示信息是很有必要的。 在使用R Markdown制作论文、技术报告、图书时, 这些信息会分散注意力, 使得结果显得不够专业。 可以设法抑制这些信息的显示。

    函数suppressWarnings()可以抑制警告信息, suppressMessages()可以抑制提示信息, 某些函数本身也提供了一些抑制信息的选择。 library()函数在载入扩展包时往往显示许多提示、警告信息, 可以用类似如下程序的方法已知冗余的输出信息:

    独立代码段以```{r}开头, 在大括号内还可以写一些选项, 选项之间以及与开始的r之间用逗号分隔, 所有选项写在同一行内不要换行。 选项都使用“选项名=选项值”的格式, 选项值除了使用常量外也可以使用全局变量名或表达式。 在大括号内开头的 r空格后写一个由英文大小写字母、数字、减号组成的标识符, 作为代码段的标签。 标签中不要用其它类型的字符, 下划线也不要用。

    ```{r firstCode}
    cat('This is 第一段, 有标签.\n')  
    

    关于代码段选项, 详见https://yihui.name/knitr/options

    A.7.1 代码和文本输出结果格式

    R代码块和R代码块的运行结果通常是代码块原样输出, 运行结果用井号保护起来, 这样有利于从文章中复制粘贴代码。

    ```{r}
    s <- 0
    for(x in 1:5) s <- s + x^x
    

    转化后的R代码块缺省显示为彩色加亮形式。 用选项highlight=FALSE关闭彩色加亮功能。

    A.7.1.2 prompt和comment选项

    如果希望代码用R的大于号提示符开始, 用选项prompt=TRUE。 如果希望结果不用井号保护, 使用选项comment=''

    ```{r prompt=TRUE, comment=''}
    sum(1:5)
    

    如果希望不显示代码, 加选项echo=FALSE

    ```{r echo=FALSE}
    print(1:5)
    
    ## [1] 1 2 3 4 5

    A.7.1.4 tidy选项

    加选项tidy=TRUE可以自动重新排列代码段, 使得代码段格式更符合规范。例如:

    ```{r tidy=TRUE}
    s <- 0
    for(x in 1:5) {s <- s + x^x; print(s)}
    

    加选项eval=FALSE, 可以使得代码仅显示而不实际运行。 这样的代码段如果有标签, 可以在后续代码段中被引用。

    加选项include=FALSE, 则本代码段仅运行, 但是代码和结果都不写入到生成的文档中。

    A.7.1.6 child选项

    加选项child='文件名.Rmd'可以调入另一个.Rmd文件的内容。 如果有多个.Rmd文件依赖于相同的代码,可以用这样的方法。

    A.7.1.7 collapse选项

    一个代码块的代码、输出通常被分解为多个原样文本块中, 如果一个代码块希望所有的代码、输出都写到同一个原样文本块中, 加选项collapse=TRUE。 没有这个选项时:

    ```{r}
    sin(pi/2)
    cos(pi/2)
    

    用选项results=选择文本型结果的类型。

  • markup, 这是缺省选项, 会把文本型结果变成HTML的原样文本格式。
  • hide, 运行了代码后不显示运行结果。
  • hold, 一个代码块所有的代码都显示完, 才显示所有的结果。
  • asis, 文本型输出直接进入到HTML文件中, 这需要R代码直接生成HTML标签, knitr包的kable()函数可以把数据框转换为HTML代码的表格。
  • 例如:results='hold'的示例:

    ```{r collapse=TRUE, results='hold'}
    sin(pi/2)
    cos(pi/2)
    

    选项warning=FALSE使得代码段的警告信息不进入编译结果, 而是在控制台(console)中显示。 有一些扩展包的载入警告可以用这种办法屏蔽。

    选项error=FALSE可以使得错误信息不进入编译结果, 而是出错停止并将错误信息在控制台中显示。

    选项message=FALSE可以使得message级别的信息不进入编译结果, 而是在控制台中显示。

    A.7.1.10 控制普通文字结果宽度

    Rmd代码段选项中没有直接提供控制输出的普通文字结果行宽的功能, 但可以用代码行options(width=80)控制, 这里80可以替换成自己选择的每行字符个数。

    A.7.2.1 图形大小

    fig.width=指定生成的图形的宽度, 用fig.height=指定生成的图形的高度, 单位是英寸(1英寸等于2.54厘米)。

    下面给出一个长宽都是10厘米的图例。

    ```{r fig.width=10/2.54, fig.height=10/2.54}
    curve(exp(-0.1*x)*sin(x), 0, 4*pi)
    abline(h=0, lty=3)
    

    fig.keep=选项可以选择保留哪些R代码生成的图。 缺省是fig.keep="high", 即保留每个高级图形函数的结果图形, 低级图形函数对高级图形函数的更改不单独保存而汇总到高级图形函数结果中。

    如果编译输出目标是HTML, 程序产生的图形是PNG格式, 属于点阵图, 图中的任何中文内容不会有乱码问题。 如果输出目标是PDF, 程序将产生PDF格式的图形, 这种图形属于矢量图, 需要正确设置文字编码才能保证图中的中文不会乱码。 设置的办法是用pdf.options()函数作如下指定:

    当R Markdown文章比较长,包含的R代码比较多, 或者代码段运行需要比较长时间时, 反复编译整篇文章会造成不必要的计算, 因为有些代码段并没有修改, 依赖的数据也没有改变。 knitr提供了缓存功能, 代码段选项cache=TRUE对代码段打开缓存, 允许暂存上次运行的结果(包括产生的变量、函数、文本结果和图形) 而不需要重复运行代码段。 当代码段被修改时, 缓存被放弃, 编译时重新运行代码段。

    缓存这种功能需要慎重使用, 免得错误地使用了旧的结果。 另外,缓存功能现在还不够完善, 如果更新了R软件版本, 有可能缓存还依赖于老版本中的某些文件, 而这些文件已经被删除, 就会出错。 如果出现这种错误, 可以删除所有缓存文件,重新编译整个项目。

    当后面的代码段需要使用前面代码段结果时, 如果前面结果改了, 后面的代码段就不能使用缓存的结果而必须重新计算。 在后面的代码段中应该加上dependson=选项, 比如dependson=c("codeA", "codeB"), 其中codeAcodeB是前面的缓存了的代码段的标签, 其结果会用在本代码段中。 也可以使用代码段选项autodep=TRUE, knitr试图自动确定前后代码段之间的依赖关系, 每当前面的代码段改变时, 后面的用到其结果代码段也自动重新计算而不使用缓存的旧结果。

    建议仅对计算一次需要较长时间的代码段使用缓存功能, 后面依赖于其结果的代码一定要加上dependson=选项。 建议代码段尽可能有标签,这样在编译失败时能马上看出失败的地点。

    对于用options()par()等改变全局设置的代码段, 应不缓存, 缓存功能不能缓存这些全局设置的修改。

    为了保险起见, 可以尽量不使用缓存功能, 而是用save()功能将需要长时间结算的结果保存下来, 用load()载入然后输出到结果文档中。

    A.8 章节目录链接问题

    对于英文文件, R Markdown基于的pandoc软件可以自动从标题生成适当的链接标签, 将HTML输出或者PDF输出设置属性toc: true后可以生成可点击的章节目录。 Pandoc对于中文文件的支持差一些, 所以中文文件要自动生成可点击的目录, 需要在每个标题行的末尾,空格后添加{#label}, 其中label是自己指定的标签内容, 但是建议仅使用英文字母、数字、减号。 pandoc软件也在改进,这样的做法更为稳妥可靠。

    Rmd文件中除了R代码段以外, 还可以插入Rcpp、Python、Julia、SQL等许多编程语言的代码段, 常用编程语言还可以与R代码段进行信息交换。

    如果安装了多个Julia语言的版本, 需要在操作系统PATH环境变量中正确设置需要使用的版本的路径。

    A.10 交互内容

    在Rmd生成HTML结果时, 可以在结果中包含允许读者交互操作的内容, 用户修改模型参数, 使得模型报表、图形交互地改变。 有两种方法可以实现交互:

  • HTML小程序(widgets), 由R扩展包htmlwidgets实现, 利用JavaScript函数库进行交互。 在这一功能基础上有一些派生的扩展包, 如DT,leaflet, dygraph。
  • 利用shiny框架,这也是一个R扩展包, 交互功能由R的一个会话驱动。 Rmd文件的YAML元数据中需要设置runtime: shiny
  • A.11 属性设置

    A.11.1 YAML元数据

    可以在RStudio软件中编辑markdown文件与Rmarkdown文件, RStudio的markdown支持来自knitr、rmarkdown、bookdown扩展包和pandoc软件, .Rmd文件支持一些特殊的文件设置, 这些设置写在markdown文件和.Rmd文件的开头位置, 用三个减号组成的行作为开始标记与结束标记, 称为YAML元数据块(YAML meta data block), 块后面必须用空行分隔。 元数据块中可以用“设置属性名: 设置属性值”的办法设置属性, 用缩进表示属性内容,用上下对齐的行表示多项列表。 常用属性有title(标题)、author(作者)、date(日期)、output_format(输出格式)等,如

    .Rmd文件开头的YAML元数据中, 属性output选择输出的格式,

  • html_document是HTML输出;
  • pdf_document是PDF输出,通过系统中另外安装LaTeX编译系统转换;
  • word_document是docx格式的Word文件输出,等等。
  • 输出格式指定如:

    在每种输出格式后面还可以继续添加该输出特有属性。

    输出格式的toc: true选项指定自动生成目录, HTML输出、PDF输出、Word输出都支持此功能。

    输出格式的属性number_sectionstrue可以自动对章节编号。 HTML输出与PDF输出都支持此功能。

    在章节自动编号时, 如果不是利用bookdown包而是基于基本的R Markdown, 文中的分节最高层级最好用一个井号, 对应于节, 如果用两个井号, 编号会变成0.10.2这样。

    A.11.6 Word输出章节自动编号及模板功能

    Word文件不能自动编号, 解决办法是生成适当的模板文件, 如wordstyle.docx, 然后在Rmd文件的元数据部分为word_document输出增加reference_docx选项,如:

    wordstyle.docx

    A.11.7 HTML特有输出格式设置

    对于html_document输出类型, 可以用theme属性设置一个主题, 取值如default, cerulean, journal, flatly, darkly, readable, spacelab, united, cosmo, lumen, paper, sandstone, simplex, yeti。

    highlight属性设置程序语言语法高亮样式, 可取值有default, tango, pygments, kate, monochrome, espresso, zenburn, haddock, and textmate。 用null表示取消语法高亮。

    可以用css属性指定一个自定义的CSS样式表文件。 如果希望完全用自己的样式代替原有样式, 可以设置theme: null

    code_folding属性设置HTML结果中代码折叠选项, 取值hide可以隐藏代码, 但读者通过选项可见。 取值show可以显示代码, 但读者通过选项可隐藏代码显示。

    某些显示功能仅适用于HTML输出。 在使用rmarkdown、bookdown创作文章和书籍时, 因为同一源文件需要能同时支持HTML、LaTeX转换PDF, 可以在Rmd源文件开头运行命令:

    Rmd格式支持数学公式, 在生成的HTML、Word、PDF中都可以正常显示数学公式, RStudio软件内部的浏览器也可以直接显示数学公式。

    以HTML为输出时, 会使用MathJax库显示数学公式。 这是一个用于在浏览器中显示数学公式的Javascript程序库, 显示效果很好, 还支持多种显示实现方式, 支持包括LaTeX在内的多种数学公式输入方法。 R Markdown原来使用MathJax版本2, 现在MathJax已经发布了版本3, 有很大的改动, 我们这里应仍使用版本2。

    MathJax库很大, 所以一般是从其网站按需远程调用的, 但是远程调用MathJax库在网络不畅通时会使得公式显示极为缓慢甚至无法显示, 所以Rmd允许将MathJax本地化。 在.Rmd文件头部YAML元数据的某种HTML输出格式的属性中, 设置属性mathjax: local和就可以使得MathJax库被放在生成的HTML的一个下层目录中。

    如果一个项目包含多个.Rmd文件, 每个文件单独用YAML元数据进行设置比较繁琐, 修改时也很麻烦。 可以在项目目录中增加一个_output.yml文件, 其中包含所有.Rmd文件共用的output属性的设置, 各个.Rmd文件还可以有自己单独的output属性, .Rmd文件YAML元数据中的属性优先级高于共同设置的属性。

    例如,_output.yml文件内容如下:

    Rmd文件的pdf_document输出类型是先转换为LaTeX文件, 再借助tinytex扩展包和LaTeX编译程序包TinyTeX转换为PDF。 rmarkdown从第1.9版本开始不再支持使用本机系统中已有的LaTeX编译系统, 只允许使用TinyTeX。 TinyTeX优点是直接用R命令就可以安装, 更新也由R自动进行,不需要用户干预。

    A.12.1 TinyTex的安装使用

    为了安装R的tinytex扩展包和单独的TinyTeX编译软件, 如果已经安装了其它的LaTeX编译系统需要先卸载, 否则可能有冲突,然后在R中运行:

    https://www.tug.org/texlive/doc/tlmgr.html

    A.12.2 Rmd中Latex设置

    许多LaTeX相关的YAML元数据不是设置在输出属性中, 而是设置为文件的顶级元数据。

    A.12的办法可以用来生成LaTeX然后转换为PDF, 可以用来撰写学位论文和期刊论文。 但是学位论文和期刊论文都有比较严格的格式要求, 用节A.12的一般方法需要对LaTeX比较熟悉才能达到格式要求。

    用R扩展包rticles可以比较容易地将Rmd文件转换成期刊可接受的LaTeX和PDF格式。 见https://bookdown.org/yihui/rmarkdown/journals.html。 扩展包中对一些常见期刊提供了模板。

    首先要安装rticles扩展包,命令为

    https://bookdown.org/yihui/rmarkdown/document-templates.html

    A.14 附录:经验与问题

    A.14.1 Word模板制作

    如果有合适的Word格式样例, 可以在YAML元数据的word_document的属性中, 设置reference_docs属性指向该模板文件。

    为了制作Word模板, 不应该从头开始, 而是在没有模板的情况下从Rmd文件转换生成一个Word文件, 将其作为模板文件的基础进行修改。 在修改过程中, 应该制作过程的备份,以便修改错误时能退回上一个版本。

    如果文章的大标题样式不是“标题”, 将样式改为“标题”以免在后续的自动编号过程中参与编号。 修改的方法是选中大标题, 然后在Word软件主菜单的“开始–样式”选择框中选中“标题”, 就可以设置其样式。

    Word的目录是与“标题1”同级的, 这样会在自动编号时参与编号; 选中“Contents”, 然后在主菜单的“开始–样式”选择框中, 找到突出显示的“TOC标题”, 右键单击“修改”, 在弹出的对话框中将“样式基准”从“标题1”改为“标题”, 并在同一对话框中将适当调整样式, 如字体类型、大小、颜色、是否居中。 改完后保存并保存一个副本。

    如果需要修改“标题”,“作者”,“日期”,“标题1”等等的字体、大小、颜色、对齐方式, 可以选中该部分,并在“样式”中右键单击相应的样式,选择“修改”进行修改, 保存样式文件并试验Rmd文件是否正确地利用了修改的样式。

    为了实现自动编号, 先在正文中选中一个一级标题(不能是目录标题), 从Word的主菜单栏找到“开始——段落——多级列表——定义新的多级列表”, 在打开的对话框中点击“更多”选项, 逐一地选择“单击要修改的级别”, 将级别1、2、3等分别修改, 主要是修改“将级别链接到样式”使得”级别1“与“标题1”对应, “级别2”与“标题2”对应,等等。 注意这个修改要一次性完成, 不能保存了文件后再次定义新的多级列表。

    修改模板文件的页边距也会使得利用其为模板的Rmd文件转换结果被修改。 为了修改模板文件的页边距, 在主菜单“布局——页边距——自定义页边距”弹出的对话框中修改。

    生成的目录的标题内容是“Table of Contents”, 目前只能对Rmd输出的docx文件直接修改, 修改模板文件的标题内容并不能使得Rmd输出被修改。

    参考:Richard Layton的网站文章 https://rmarkdown.rstudio.com/articles_docx.html

    A.14.2 数学公式设置补充

    如果不使用RStudio, R扩展包rmarkdown的markdownToHTML()函数可以把含有数学公式的内容转换成可显示公式的HTML文件, R扩展包knitr的knit2html()也可以实现此功能。 用rmarkdown扩展包的markdownToHTML()函数生成的含有数学公式的内容。

    单独使用pandoc软件时, 也可以用普通文本编辑器在Markdown文件中输入LaTeX格式的数学公式, 然后用pandoc软件转化为带有数学公式的docx文件, 不需要额外选项。 但是,为了能够在转换的HTML文件中正常显示数学公式, 需要在运行Pandoc时增加运行选项--maxjax,如

      pandoc --mathjax -s -o test.html test.md

    经试验,这样转化的HTML文件可以在Firefox以及Microsoft的 Edge浏览器和Internet Explorer浏览器中正常显示数学公式。 如果公式中的中文显示不正常, 对显示的公式右键单击弹出选项菜单, 选择“Math Settings–Math Renderer–SVG”或者“HTML-CSS”。

    Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2019. R Markdown: The Definitive Guide. CRC Press.
    https://bookdown.org/yihui/rmarkdown/. Xie, Yihui, Christophe Dervieux, and Emily Riederer. 2020. R Markdown Cookbook. CRC Press. https://bookdown.org/yihui/rmarkdown-cookbook/.