• 52.2.1 evalCpp() 转换单一计算表达式
  • 52.2.2 cppFunction() 转换简单的C++函数—Fibnacci例子
  • 52.2.3 sourceCpp() 转换C++程序—正负交替迭代例子
  • 52.2.4 sourceCpp() 转换C++源文件中的程序—正负交替迭代例子
  • 52.2.5 sourceCpp() 转换C++源程序文件—卷积例子
  • 52.2.6 随机数例子
  • 52.2.7 bootstrap例子
  • 52.2.8 在Rmd文件中使用C++源程序文件
  • 53 R与C++的类型转换
  • 53.1 wrap() 把C++变量返回到R中
  • 53.2 as() 函数把R变量转换为C++类型
  • 53.3 as() wrap() 的隐含调用
  • 54 Rcpp 属性
  • 54.1 Rcpp属性介绍
  • 54.2 在C++源程序中指定要导出的C++函数
  • 54.2.1 特殊注释 //[[Rcpp::export]]
  • 54.2.2 修改导出的函数名
  • 54.2.3 可导出的函数
  • 54.3 在R中编译链接C++代码
  • 54.3.1 sourceCpp() 函数中直接包含C++源程序字符串
  • 54.3.2 cppFunction() 函数中直接包含C++函数源程序字符串
  • 54.3.3 evalCpp() 函数中直接包含C++源程序表达式字符串
  • 54.3.4 depends 指定要链接的库
  • 54.4 Rcpp属性的其它功能
  • 54.4.1 自变量有缺省值的函数
  • 54.4.2 异常传递
  • 54.4.3 允许用户中断
  • 54.4.4 把R代码写在C++源文件中
  • 54.4.5 invisible 要求函数结果不自动显示
  • 54.4.6 在C++中调用R的随机数发生器
  • 55 Rcpp提供的C++数据类型
  • 55.1 RObject类
  • 55.2 IntegerVector类
  • 55.2.1 IntegerVector示例1:返回完全数
  • 55.2.2 IntegerVector示例2:输入整数向量
  • 55.3 NumericVector类
  • 55.3.1 示例1:计算元素 \(p\) 次方的和
  • 55.3.2 示例2: clone 函数
  • 55.3.3 示例3:向量子集
  • 55.4 NumericMatrix类
  • 55.4.1 示例1:计算矩阵各列模的最大值
  • 55.4.2 示例2:把输入矩阵制作副本计算元素平方根
  • 55.4.3 示例3:访问列子集
  • 55.5 Rcpp的其它向量类
  • 55.5.1 Rcpp的LogicalVector类
  • 55.5.2 Rcpp的CharacterVector类型
  • 55.6 Rcpp提供的其它数据类型
  • 55.6.1 Named类型
  • 55.6.2 List类型
  • 55.6.3 Rcpp的DataFrame类
  • 55.6.4 Rcpp的Function类
  • 55.6.5 Rcpp的Environment类
  • 56 Rcpp糖
  • 56.1 简单示例
  • 56.2 向量化的运算符
  • 56.2.1 向量化的四则运算
  • 56.2.2 向量化的赋值运算
  • 56.2.3 向量化的二元逻辑运算
  • 56.2.4 向量化的一元运算符
  • 56.3 用Rcpp访问数学函数
  • 56.4 用Rcpp访问统计分布类函数
  • 56.5 在Rcpp中产生随机数
  • 56.6 返回单一逻辑值的函数
  • 56.7 返回糖表达式的函数
  • 56.7.1 is_na
  • 56.7.2 seq_along
  • 56.7.3 seq_len
  • 56.7.4 pmin pmax
  • 56.7.5 ifelse
  • 56.7.6 sapply lapply
  • 56.7.7 sign
  • 56.7.8 diff
  • 56.8 R与Rcpp不同语法示例
  • 56.9 用RcppArmadillo执行矩阵运算
  • 56.9.1 生成多元正态分布随机数
  • 56.9.2 快速计算线性回归
  • 57 用Rcpp帮助制作R扩展包
  • 57.1 不用扩展包共享C++代码的方法
  • 57.2 生成扩展包
  • 57.2.1 利用已有基于Rcpp属性的源程序制作扩展包
  • 57.2.2 DESCRIPTION文件
  • 57.2.3 NAMESPACE文件
  • 57.3 重新编译
  • 57.4 建立C++用的接口界面
  • XI 其它
  • 58 R编程例子
  • 58.1 R语言
  • 58.1.1 用向量作逆变换
  • 58.1.2 斐波那契数列计算
  • 58.1.3 穷举所有排列
  • 58.1.4 可重复分组方式穷举
  • 58.1.5 升降连计数
  • 58.1.6 高斯八皇后问题
  • 58.1.7 最小能量路径
  • 58.2 概率
  • 58.2.1 智者千虑必有一失
  • 58.2.2 圆桌夫妇座位问题
  • 58.3 科学计算
  • 58.3.1 城市间最短路径
  • 58.3.2 Daubechies小波函数计算
  • 58.3.3 房间加热温度变化
  • 58.4 统计计算
  • 58.4.1 线性回归实例
  • 58.4.2 核回归与核密度估计
  • 58.4.3 二维随机模拟积分
  • 58.4.4 潜周期估计
  • 58.4.5 ARMA(1,1)模型估计
  • 58.4.6 VAR模型平稳性
  • 58.4.7 贮存可靠性评估
  • 58.5 数据处理
  • 58.5.1 小题分题型分数汇总
  • 58.5.2 类别编号重排
  • 58.6 文本处理
  • 58.6.1 用R语言下载处理《红楼梦》htm文件
  • 59 使用经验
  • 59.1 文件管理
  • 59.1.1 工作空间
  • 59.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
  • 编著:李东风
  • 也可以转换为MS Word的docx格式, 通过docx格式可以转存为PDF格式。 Pandoc软件、Quarto软件、Jupyter笔记本软件、R的knitr等扩展包大大扩展了markdown格式的适用范围。

    这里介绍的markdown格式是Pandoc软件进行了功能扩充后的版本。

    21.2 Markdown格式文件的应用

    Markdown格式用在一些微博、论坛中作为缺省格式, 用户在网络浏览器软件的输入框中按照markdown格式输入, 网站自动将其转换为html富文本内容显示出来。 科学计算常用的Jupyter笔记本的文件格式也是基于markdown格式。

    因为markdown格式就是纯文本, 而且其格式十分简单, 所以可以仅仅用普通文本编辑器编写markdown格式的文件, 不需要转换为其它格式。

    有一些独立运行的编辑软件, 在其中输入了markdown格式文件后, 可以并列地显示转化为html富文本后的结果, 很多还支持自动备份到云服务中。 但是,这些独立运行的编辑器大都有商业因素。 比如,国内的印象笔记软件是提供了云存储的笔记软件, 在其PC端就支持创建markdown格式的笔记, 可以在输入时即时显示html效果。

    RStudio软件不是专用的Markdown编辑器, 它是一个R程序的集成编辑、运行环境, 对个人用户免费, 在R Studio中可以编辑Markdown文件和含有R代码的Markdown文件, 可以一键将其转化成HTML、MS Word docx文件, 在单独安装的LaTeX编译软件支持下还可以直接编译成PDF。 RStudio支持下的增强的Mardown格式, 称为RMarkdown格式, 以 .Rmd 为扩展名, 支持大多数的LaTeX公式, 在bookdown扩展包支持下还支持公式、定理、图表等自动编号和引用、链接。 这个格式的升级版本称为Quarto格式,以 .qmd 为扩展名。

    21.3 markdown格式说明

    这部分内容参考了markdown手册和Rstudio的文档, 以及 ( Xie, Allaire, and Grolemund 2019 )。

    21.3.1 概述

    Markdown格式是John Gruber于2004年创造的, Markdown 的目标是实现“易读易写”。 Markdown定义了一种简单好用的文本文件格式, 作为单独的文本文件, 此格式没有什么多余的标签, 又可以转化为很多其它的格式。

    Markdown 的语法全由一些符号所组成, 这些符号经过精挑细选,其作用一目了然。 比如:在文字两旁加上星号,看起来就像 强调 。 Markdown 的列表看起来就像我们平常在邮件中写一个列表的方法。 Markdown 的区块引用看起来就真的像是引用一段文字, 就像你曾在电子邮件中见过的那样。

    可以直接在markdown中写HTML标记内容。 markdown能实现的功能是HTML的一部分, 但是比HTML内容更干净, 没有掺杂过多的与要表达的意思无关的标签。 Markdown的理念是,能让文档更容易读、写和随意改。

    21.3.2 段落

    一个段落由一行或连续的多行组成。 段落之间以空行分隔。 同一段落内的不同行在转换成HTML或docx等格式后会重新排列, 原来的段内换行被当成了空格,这样的规定与LaTeX类似。 普通段落不该用空格或制表符来缩进, 不应在行尾留有空格。

    为了在段内换行并且转化后仍保持段内换行, 输入时在前面行的末尾输入两个或两个以上空格。例如:

    白日依山尽,黄河入海流。    
    欲穷千里目,更上一层楼。

    显示结果为:

    白日依山尽,黄河入海流。
    欲穷千里目,更上一层楼。

    这样做的缺点是末尾的空格时不可见的。 可以使用HTML的 <br> 标签在段内换行,如:

    白日依山尽,黄河入海流。<br>
    欲穷千里目,更上一层楼。

    白日依山尽,黄河入海流。
    欲穷千里目,更上一层楼。

    21.3.3 段内文字格式

    在一段内,用星号或下划线包围的内容如 *强调* 强调 格式。 用双星号或双下划线包围的内容如 **加重** 加重 格式。 星号、下划线与要强调或加重的内容之间不要空开, 否则会当作普通星号或下划线解释, 在行首还会当作列表。 为了插入普通的星号或下划线,可以使用反斜杠保护, 或者写成段内代码格式。

    可以用一对 ~ 作为界定符给出下标, 如 HO~2~ 会变成HO 2 。 可以用一对 ^ 作为界定符给出上标, 如 Cu^2+^ 会变成Cu 2+ 。 但是,数学公式一般还是应该使用LaTeX数学公式形式(见 22.10 )。

    在普通段落内一部分内容希望显示成代码, 对其中的特殊字符不进行解释, 只要包在两个反向单撇号内。 如 `if(_x_ > 0) y=1;` 会变成 if(_x_ > 0) y=1; 。 如果内容本身就包含反向单撇号, 可以在两边使用更多个数的反向单撇号, 如 `` `x` `` 会变成 `x`

    在Markdown文件中, 为了使得某些有特殊意义的字符不作特殊解释, 可以在该字符前面加上反斜杠 \ , 取消其特殊含义。

    为了原样显示反向单撇号, 可以在两边用双写的反向单撇号界定字符串。

    21.3.4 标题和分隔线

    以一个井号(“ # ”)开始的行是一级标题, 以两个井号(“ ## ”)开始的行是二级标题, …………, 以六个井号开始的行是六级标题。 标题行前面应该空一行, 否则可能把某些偶然出现在行首的“ # ”号误认为标题行的标志。

    对一级标题, 也可以用标题内容下面输入一行等于号“ = ”表示上一行内容是一级标题。 对二级标题, 可以用标题内容下面输入一行减号“ - ”表示上一行内容是二级标题。 等于号和减号的个数不限。

    用三个或三个以上连续的星号组成的行, 可以转换成分隔线。下面是一个分隔线:

    21.3.5 引用段落

    可以用类似Email的回复包含原始邮件内容的办法输入引用段落, 即,在段落的每行前面加一个大于号。 比如下面的诗:

    > 白日依山尽,黄河入海流。
    > 欲穷千里目,更上一层楼。

    白日依山尽,黄河入海流。 欲穷千里目,更上一层楼。

    注意引用也是段落模式,内容中的换行不起作用,空行导致分段。

    引用段落也可以仅在段落第一行写大于号, 其它行顶格写,例如下面的两段引用:

    > 远上寒山石径斜,
    白云生处有人家。
    > 停车坐爱枫林晚,
    霜叶红于二月花。

    远上寒山石径斜, 白云生处有人家。

    停车坐爱枫林晚, 霜叶红于二月花。

    引用也可以嵌套,如:

    > 张三说:李四这样说过
    >> 不想当将军的木匠不是好厨子。
    

    张三说:李四这样说过

    不想当将军的木匠不是好厨子。

    注意嵌套内容前后都有空的引用行,否则不能实现嵌套引用。

    引用内也可以嵌套其它的Markdown格式如标题、列表等。 引用前后应该有空行把引用内容与其他内容分隔开。

    为了在引用中换行, 就需要加引用空行。 为了排版诗、词之类的内容, 希望人为控制换行和引导空格, 可以将引用中的>替换成|,如:

    | 白日依山尽,
    | 黄河入海流。
    | 欲穷千里目,
    | 更上一层楼。
    白日依山尽,
    黄河入海流。
    欲穷千里目,
    更上一层楼。
    | 枯藤老树昏鸦,
    |   小桥流水人家,
    |   古道西风瘦马。
    | 夕阳西下,
    |   断肠人在天涯。
    枯藤老树昏鸦,
      小桥流水人家,
      古道西风瘦马。
    夕阳西下,
      断肠人在天涯。

    其中不用|开头的行仍会当作上一行的续行, 不会强行换行。

    21.3.6 列表

    列表分为不编号的列表和编号的列表。 不编号的列表转化后通常显示圆点开头的列表项。

    在Markdown中, 用星号表示一个不编号的列表项。 星号也可以替换成加号或减号, 后面必须有一个或多个空格。 每个列表项可以输入多行, 各行的内容最好左对齐, 左对齐在使用文本格式时较易阅读, 但不是必须的。 两个列表项之间不要空行。

    * 白日依山尽,
      黄河入海流。
    * 欲穷千里目,
      更上一层楼。
  • 白日依山尽, 黄河入海流。
  • 欲穷千里目, 更上一层楼。
  • 段落顶头的数字加句点和空格表示编号列表, 两个列表项之间尽量不要空行。

    1. 第一种解决方法,
       收买敌人的高官。
    2. 第二种解决方法,
       尽可能拖延。
  • 第一种解决方法, 收买敌人的高官。
  • 第二种解决方法, 尽可能拖延。
  • 标准的markdown编号列表不能自己定义数字的显示格式, 不允许开始值不等于1。 pandoc支持更自由的列表, 允许输入时有括号或右括号,允许使用字母和罗马数字,但是括号会被去掉。如

    (1) 顶层一;
        a) 内层二;
        b) 内层三;
    (2) 顶层二。

    为了避免错误地产生非本意的编号列表, 在行首写数字加句点和空格时,可以在句点前加反斜杠, 或者在句点前加空格。例如,下面是一个年号:

    2016\. 

    如上输入将不会错误地解释为有序列表。

    如果列表项目中有多个段落, 这时两个列表项之间应该以空行分隔, 每个项目除了第一行外,输入的每行内容都应该缩进4个空格或者一个制表符。

    *   R语言第一个版本开发于1976-1980,基于Fortran;
        于1980年移植到Unix, 并对外发布源代码。
        1984年出版的“棕皮书”
        总结了1984年为止的版本, 并开始发布授权的源代码。
        这个版本叫做旧S。与我们现在用的S语言有较大差别。
        1989--1988对S进行了较大更新,
        变成了我们现在使用的S语言,称为第二版。
        1988年出版的“蓝皮书”做了总结。
    *   1992年出版的“白皮书”描述了在S语言中实现的统计建模功能,
        增强了面向对象的特性。软件称为第三版,这是我们现在用的多数版本。
        1998年出版的“绿皮书”描述了第四版S语言,主要是编程功能的深层次改进。
        现行的S系统并没有都采用第四版,S-PLUS的第5版才采用了S语言第四版。
  • R语言第一个版本开发于1976-1980,基于Fortran; 于1980年移植到Unix, 并对外发布源代码。 1984年出版的“棕皮书” 总结了1984年为止的版本, 并开始发布授权的源代码。 这个版本叫做旧S。与我们现在用的S语言有较大差别。

    1989–1988对S进行了较大更新, 变成了我们现在使用的S语言,称为第二版。 1988年出版的“蓝皮书”做了总结。

  • 1992年出版的“白皮书”描述了在S语言中实现的统计建模功能, 增强了面向对象的特性。软件称为第三版,这是我们现在用的多数版本。

    1998年出版的“绿皮书”描述了第四版S语言,主要是编程功能的深层次改进。 现行的S系统并没有都采用第四版,S-PLUS的第5版才采用了S语言第四版。

  • 列表项目内如果有引用段落, 需要都缩进4个空格。 如果有程序代码, 需要缩进4个空格后用三个反单撇号表示开始与结束。

    列表可以嵌套, 嵌套的列表需要缩进4个空格, 中间不需要空行。

    1.  第一类工作包括:
        + 技术服务;
        + 咨询服务。
    2.  其它工作略。
  • 第一类工作包括:
  • 技术服务;
  • 咨询服务。
  • 其它工作略。
  • 如果需要把每个列表项当作段落排版,可以在每个列表项后空行。

    21.3.7 源程序

    为了让源程序能够自动显示成源程序的样式, 而不至于自动分行、特殊字符解释, 最初的markdown的规定是用空行把源程序与其它内容隔开, 并把源程序行都缩进4个空格(或以上)或者一个制表符。 源程序格式持续到不缩进4个空格的地方为止。

    例如,下面的输入:

        f <- function(x){
            n <- length(x)
            y <- numeric(n)
            y[x >= 0] <- 1
            ##y[x < 0] <- 0
    
    f <- function(x){
        n <- length(x)
        y <- numeric(n)
        y[x >= 0] <- 1
        ##y[x < 0] <- 0
    

    更适当的做法是用三个连续的反向单撇号表示代码开头与代码结束, 中间就会当作源程序代码处理。 例如下面的输入

    > x <- rnorm(100) > hist(x)
    > x <- rnorm(100)
    > hist(x)

    R的knitr包在Markdown格式的文件中插入R可执行代码时, 就用了这样的方法。 而且,R Markdown格式的代码块不需要用空行与前后分隔开。 如果代码内本身含有反向单撇号行, 只要使得开头与结尾标志中的反向单撇号个数更多就可以了。 这种做法称为“栅栏式”代码段。

    使用栅栏式代码段时可以在开始行的行尾写大括号, 在大括号内写选项。 其中一种选项是要求按照某种编程语言对结果进行彩色语法显示, 如.cpp表示C++,.c表示C,.r表示R,.python表示python等。 选项.numberLines要求该代码行编号。

    ```{.cpp .numberLines startFrom=101}
    #include <math.h>
    double sqr(double x){
      return(x*x);
    
    #include <math.h>
    double sqr(double x){
      return(x*x);
    

    21.3.8 链接

    最简单的链接是原样显示的可点击的链接, 只要把链接地址用小于号和大于号包在中间, 两边用空格和其它内容隔开。 如果是网页,需要加http://, 如果是邮箱,需要加mailto:。 例如,如下代码:

    北京大学的网页地址是: <http://www.pku.edu.cn/> 。

    北京大学的网页地址是: http://www.pku.edu.cn/

    除此之外, Markdown 还支持两种形式的链接语法: 行内式和引用式两种形式。 不管是哪一种,链接的显示文字都是用方括号[...]来标记。

    要建立一个行内式的链接, 只要在方括号内写链接的显示文字, 右方括号后面紧接着圆括号, 并在圆括号中间插入网址链接即可。 方括号部分与圆括号部分之间不能断开。

    请参考:[李东风的教学主页](http://www.math.pku.edu.cn/teachers/lidf/course/index.htm)

    请参考:李东风的教学主页

    在圆括号中,链接后面还可以包含用双撇号包围的标题文字, 与链接之间用空格分开。

    引用式的链接, 需要在某处(比如文章结尾)定义一些链接的标识符, 然后用方括号包围链接的显示文字, 后面紧接着方括号包围着链接的标识符。

    为了定义链接标识符, 用方括号包围链接标识符, 前面可以有至多3个空格缩进, 右方括号后面紧接着冒号和一个空格, 空格后写链接地址, 然后空格,在两个双撇号中间写一个链接地址的标题。

    [baidu]: http://baidu.com/ "百度"
    [pku]: http://www.pku.edu.cn/ "北大"

    这时,在文章中就可以用标识符调用链接, 如[北京大学主页][pku]将变成链接北京大学主页

    使用引用式的链接, 有些像论文中把所有参考文献排列在文章末尾, 文中用到某一篇文献只要提及其序号。

    还有一种链接是内部链接,用于文内跳转。 在各级标题行的末尾, 可以添加{#自定义标签}这样的内容, 其中“自定义标签”是自己写的一个标识符, 标识符仅使用英文字母、数字、下划线、减号, 用来区分不同的位置。 在Quarto文件中需要以“#sec-”开头 比如,本文第一节“介绍”添加了sec-markdown-intro为标签, 就可以用“[回到介绍](#sec-markdown-intro)”产生链接 回到介绍

    21.3.9 插入图形

    图形只能用链接形式, 不可能保存到一个纯文本文件内。 图形文件可以存在于远程服务器上, 也可以是与生成的HTML文件在同一目录结构中的文件。 语法仍使用行内式和参考式两种形式。 转化成HTML、PDF、Word格式后可以把图形内嵌在输出文件内部。

    行内式的图片链接, 是普通行内链接格式前面添加了一个叹号, 惊叹后面紧接着方括号, 方括号内写图片的标题,标题可以空缺, 在右方括号后面紧接着圆括号, 圆括号内写图片的链接。

    例如,下面的代码可以插入百度的一个logo,使用的是网上的资源:

    ![](http://www.baidu.com/img/baidu_jgylogo3.gif)

    为了插入保存在本地的与Markdown源文件在同一子目录或下级子目录的图形, 只要在圆括号中写图片文件名(如果与Markdown源文件在同一子目录)或相对路径。 例如,在D:\work\figs下的图形文件baidu_logo.gif在本Markdown源文件所在目录的figs子目录中, 可以用代码

    ![](figs/bd_logo.png)

    这样含有网上图片和本地图片的Markdown源文件转化为HTML和docx格式, 都可以正常显示插入的图片。

    与链接类似, 也可以在文章某处(比如末尾)定义图片的标识符, 然后把行内图片引用中图片地址替换成图片标识符即可。

    在使用RStudio的可视化方式编辑Quarto格式文件时, 可以直接将图形文件复制粘贴入正在编辑的文件中, 相应的图形文件自动复制保存在项目目录中, 这可以简化插入图片的操作。 Quarto中有选项可以调整图片大小、显示标题等属性。

    21.3.10 表格

    Markdown文本格式的表格就像是用减号、等号、竖线画的文本格式表格一样, 转化为HTML、docx等格式后就变成了富文本的表格。 有如下几种表格:

    21.3.10.1 管道表

    管道表在两列之间用竖线分开, 在列标题下面用减号画横线, 用如下方法指定各对齐方式:

  • 在列标题下的横线开始加冒号,表示左对齐;
  • 在列标题下的横线末尾加冒号,表示右对齐;
  • 在列标题下的横线两端加冒号,表示居中对齐;
  • 列标题下面仅有横线没有冒号,表示缺省对齐方式,一般是左对齐。
  • 在表格内容后面空一行后写用Table:开头的表格说明。

    这种方法不需要输入内容上下对齐,适用于中文内容。 后面所讲的简单表、换行表、有格表需要能够输入内容对齐, 对于中英文混合内容很难做到对齐, 所以仅管道表比较适合中文内容。

    | 姓名   |  收入      |    职业          | 颜色偏好  |
    |:------|-----------:|:---------------:|-----------|
    | 赵四海  |    123456  |   业务经理      |   红      |
    | 刘英    |        50   |     无        |   蓝      |
    | 钱德里  |      3200   |    保洁        |    灰     |
    Table: 管道表示例
    管道表示例
    Name        Income          Job              Color
    ------    --------     ------------------    -----
    Jane        123456     Research Assistant    red 
    John           50        N/A                 blue
    William      3200      Cleaner               blue
    Table: 一个简单表的例子
    一个简单表的例子 Income Color Subject Income Job color ------ -------- ------------------ ----- Jane 123456 Research red Ayer Assistant John 50 N/A blue Tukey William 3200 Cleaner blue ---------------------------------------------------- Table: 一个换行表的例子
    一个换行表的例子 +---------------+---------------+--------------------+ | Fruit | Price | Advantages | +===============+===============+====================+ | Bananas | $1.34 | - built-in wrapper | | | | - bright color | +---------------+---------------+--------------------+ | Oranges | $2.10 | - cures scurvy | | | | - tasty | +---------------+---------------+--------------------+
    有格表示例 比如markdown、LaTeX、MediaWiki、reStructured Text、 HTML、DocBook, 但是也可以输入MS Word docx、Open Office ODT、EPUB格式。 输出可以是这些文本格式, 也可以是MS Word docx、Open Office ODT、EPUB、LaTeX等格式, 在安装了LaTeX编译系统如MikTeX时可以输出为PDF。

    可以用普通文本编辑器编写markdown格式的文件, 用pandoc转换为HTML或MS Word docx等格式。 因为pandoc需要UTF-8编码的输入文件, 所以应该把markdown文件保存为UTF-8格式, MS Windows下的Notepad++软件可以很容易地编辑文本文件 并在各种编码之间转换。

    从pandoc网站下载并安装pandoc。 安装程序很奇怪地安装到了 C:\Users\登录用户名\AppData\Local\Pandoc中, 请将此子目录复制到一个合适的位置, 比如C:\Pandoc。 如果把此路径加入到Windows系统的可执行文件搜索路径中 (在“控制面板-系统和安全-系统-高级系统设置-环境变量”中, 为系统变量的Path添加一个分号分开的路径C:\Pandoc即可以不用全路径访问 pandoc.exe可执行文件。

    为了用pandoc转化某个markdown文件, 首先在该文件所在子目录打开一个Windows命令行窗口, 在MS Win10系统中只要在文件管理器的“文件”菜单选择 “打开Windows PowerShell”即可。 比如,文件名是test.md, 用如下pandoc命令可以转换为.docx文件(MS Word文件的新版本):

    C:\Pandoc\pandoc -o test.docx test.md 

    用如下pandoc命令可以转换为.html文件:

    C:\Pandoc\pandoc -s -o --mathjax test.html test.md

    如果把pandoc.exe加入了Windows操作系统的Path环境变量中, 上面的 C:\Pandoc\pandoc 可以简写为 pandoc

    如果使用RStudio编辑markdown文件、Quarto或者R Markdown文件, 它会自动调用内置的pandoc程序。