本教程来自 华东师范大学汤银才教授

前言

今年接了5本与贝叶斯近似计算包INLA相关的翻译书,将由高等教育出版社出版。在准备翻译的时候,我静下来思考了一下二个问题。一是互联网时代在兼顾图书质量的同时怎么充分考虑读者阅读体验?二是什么是当下最为成熟的图书写作工具?特别是与数据科学密切相关的统计类图书的写作与出版。书稿模板的选择成为首先要考虑的事。

在书稿模板的选择与测试过程中遇到了很多的坑,幸运的是逐个踩过来了,但从TEXTEX到Rnw(Sweave+R), 再到Rmd (Knitr + R), 最后到Bookdown, 共经历了4个模板。快速、高效、高质量是写书人追求的目标。目前来看Bookdown是最好的选择,因为它满足我模板选择的快速编辑、高效生成、高质量输出的要求。

这本小册子可视为一个写中文书稿的Bokdown模板,也是中文Bookdown写作的一本说明书,其中汇总了书稿中几大核心要素的写作技巧。我主要参考了三个模板Bookdown模板和三本电子书,罗列如下,在此一并对谢益辉、李东风等表示感谢。

  1. 谢益辉, bookdown 中文范例
  2. 谢益辉, A bookdown example for Chapman & Hall books
  3. bookdown-chapterbib
  4. 谢益辉, bookdown: Authoring Books and Technical Documents with R Markdown, 2021-03-15.
  5. 李东风,R语言教程,第23章:用bookdown制作图书, 2020-12-28.
  6. Yihui Xie, J. J. Allaire, Garrett Grolemund, R Markdown: The Definitive Guide, 2020-12-14.

本文框架

由于内容较多,我们将通过三次推文进行发布,尽情期待。当然文末给出了原文链接,你可以直接学习。

本文框架

第 1 章 引言

这是第1章的内容,回顾中国图书发展的历史及最新趋势. (R Core Team, 2020; Xie, 2015a),

1.1 中国图书出版的变化

中国的图书出版经历一些折腾,方正系统一度非常流行,但现在看来是非常失败的,主要是它在解决公式排版的同时没有解决便利性,其本质上想实现在其自创的中文系统中将TEXTEX命令做一个映射以实现数学公式排版,同时完成格式的定制。

中国学术界也经历了一些折腾,如中科院张林波研究员等开发的CCT系统和华东师范大学肖刚与陈志杰等老师开发的天元系统,它们是TEXTEX系统汉化版,较好地解决了汉字生成与调用,但因没有考虑普适性或可拓展性而像方正系统一样随着CJK的逐渐成熟而逐渐被抛弃,均退出了历史舞台。而同期中科院吴凌云博士等在普及TEXTEX的同时开发的TEXTEX中文套餐CTEXCTEX相当成功,主要是针对汉字排版的ctex宏包,并对三个主流的文档类book, article, report进行了定制,推出了相应的中文文档类ctexbook, ctexart, ctexrep, 由此避免了传统的基于CJK宏包需要的大幅定制,同时保证了与原有TEXTEX系统的兼容性。这样我们始终可以使用跨平台的TeXLiVe进行排版或各类模板的开发,例如各个出版社的图书模板、各个期刊的模板、各高校的硕士和博士毕业论文模板等。

TEXTEX的出现1,而且始终屹立不倒的原因是什么? 第一个原因是它解决了一个Word之类文字编辑系统的痛点,即从所见所得(WYSIWYG, What you see is what you get)到所想所得(WYTIWYG), 即通过一些TEXTEX命令集构成一个完整的编程语言,由它完成一个封闭的体系,具有类似C语言一样非常强大的开发功能,由此形成了后来的latex, miktex, latex2.09, luatex, xetex等TEXTEX编译引擎,它们在充分利用电脑系统资源的同时实现高质量输出需要的精度。

TEXTEX屹立不倒的另一个原因是浮动对象的处理,即包括公式,表格、图形、页码、章节、文献、定理等的标签化与引用,实现文档内部的自由跳转,结合Acrobat Reader这样强大的pdf阅读器的支持,使得读者的阅读体验得到大幅改善,并为图书的电子化奠定了基础。

随着数据科学这一新兴学科的出现,开源的RPython (还有正在逐步流行的Julia)编程语言越来越强大。 为了增加这类图书的可读性,需要将代码较完整地呈现在读者面前,并且要求代码的即时可复现能力,即数据的变化,其分析的结果(包括图形和表格)也随之发生变化。这就是现在逐步流行的文学化编程(literate programming), 它实现上最早也是TEXTEX的鼻祖Knuth提出的, 后来被谢益辉得到重视并广泛推广,并通过Rstudio传递给R的用户。我们姑且把这种将写作与数据分析相结合的统计分析称为文学化统计编程(literate statistical programming), 在为数据科学爱好者带来便利的同时也通过Bookdown为图书的写作和电子化带来了极大的好处,越来越多的网页版电子书出现在(https://bookdown.org/)和(https://github.com/)等网站上。

现在写书选择什么类型的模板,下面我们来作进一步的探索与比较。

1.2 统计类图书的核心要素

统计类图书的排版除普通图书的页面及文字风格等静态元素外,核心要素体现在浮动的对象上,使得图书的阅读体验更好地发挥出来,即在不同页面之间快速切换、跟踪、搜索,必要的RPython代码以语法高亮方式显示。

  1. 章节标题是浮动的,最主要用于书签的生成;
  2. 公式是浮动的,这是数学、统计等理科书的特点,公式引用必不可少;
  3. 图形是浮动的,统计图形作为可视工具,在说明数据或展示分析结果时经常会引用相应的图形;
  4. 表格是浮动的,通常是原始数据或统计分析的结果以表格形式展示出来,它们可能被多次在不同的章节中引用;
  5. 定理是浮动的, 这里定理是指与之相关的一大类,包括常用的定理、引理、推论、命题、例子等,它们在文中也会被反复引用;
  6. 文本可以设置浮动标签后被引用,最为常见的是图形与表格的题图(caption)通过文本方式来引用;
  7. 文献是浮动的,这在是谈及前人的已有工作、成果比较或进行综述时经常要引用大量已经发表的论文、图书、会议报告等.

TEXTEX有一套成熟的浮动对象的排版方式,通过给浮动对象打标签(label),然后引用(ref), Bookdown思路一样,但比TEXTEX的处理稍复杂些(可能因不习惯引起)。我们在后面章节中分别举例说明。

1.3 统计数据分析类图书模板的选择

统计数据分析类图书既有理论或原理的讲解,又会有一些案例分析,包括这些案例分析实现的代码。我们可以考虑的模板主要有三种类型。

1.3.1 基于纯 TEXTEX 模板

全世界90%的书是由TEXTEX排版的,包括硕士和博士毕业论文模板,这要感谢鼻祖Knuth!开源成就了TEXTEX!

如果仅仅是统计理论方面的书集,这显然是最好的选择,因为高质量公式的排版离不开TEXTEX. 基于TEXTEX的排版存在三个明显的缺陷或不足:

  1. 大量的TEXTEX命令需要记忆;
  2. 对于代码的排版非常不便,特别是RPython代码执行后的输出,尤其是图形与表格;
  3. 代码以listing等包来呈现, 无法实时呈现代码运行的结果,不符合文学化编程的要求.

1.3.2 Rmarkdown与TEXTEX的结合

数据科学时代更注重文学化统计编程,代码伴随是这类图书的特点,自Springer出版R系列统计图书后,这种风格成为新趋势,大大方便了数据科学爱好者“便学习便练习”的学习方式。

针对代码伴随,早期对这类图书有二个解决方案:

  1. Sweave/knitr + R

本质上它是在 TEXTEX 嵌入R代码块,并由R在后台运行后将结果也嵌入到TEXTEX中,再由TEXTEX的编译引擎生成pdf。这个方案的基本沿用TEXTEX的方式,它仅解决了上面提到的第二个问题。在数据科学时代,报告的快速生成成为新的要求,效率优先!随着knitr的出现Sweave退出舞台.

  1. Rmarkdown + Mathjax/TEXTEX

Markdown作为一种轻量级的标记语言成为网页作为文字主要载体的互联网时代首先的写作工作,但它显然不适合数学与统计类论文或图书的撰写,但knitrpandoc的出现使不同风格的内容整合与转换成为可能,而不同风格的内容各有善长的工具实现,作为统计类专业论文或图书类文档主要的内容有:

  1. 文字, 由markdown完成
  2. 公式,由TEXTEX完成
  3. 代码,由R (或Python) 完成

要说明的是,在网页端,TEXTEX的实现可由Mathjax来完或渲染(转化或生成标准的公式),见第4章说明。

随着Rstudio的越来越成熟与强大(得益于许多优秀包的出现,如knitr, kableExtra), Rstudio不仅是一个很好的代码编辑器(Eidtor), 也是一个非常好的集成开发环境(IDE),同时正在成为一个非常优秀的论文、幻灯片及图书等撰写与出版系统(PUB)。后者的基本流程是

  1. rmd文件通过knitr完成初步集成
  2. pandoc完成由rmdmd的转化与融合
  3. pandoc完成由md转化为TEXTEX, 并由laTeX编译生成pdf (形式多样!)
  4. 或由pandocmd转化为html, 其中的数学公式由Mathjax完成渲染.

1.3.3 RmarkdownBookdown过渡

在科技高度发达的互联系时代,读者使用的媒介基本有三类:较为专业的电脑,较为轻便的平板(电脑)和全功能的智能手机。前者以pdf类图书为主呈现给读者,同时可以完成标注等工作;后者以文字型的电子图书为主,消磨时间为主;而平板的使用者逐渐成为电子类图书的新势力,包括pdfepub之类的电子书。 Bookdown注重不同类型读者的媒体使用的差异,并很好地实现统一编写与差异化输出。目前Bookdown可以生成三类图书:

  1. gitbook,可自由出版在git pages
  2. epub, 发表到大量的电子图书平台上
  3. pdf, 正规的图书出版公司以电子或纸质形式出版

第 2 章 bookdown速览

这是第2章的内容,概要性地讲解基于bookdown拓展包进行图书排版的整体思路与实现方式. (R Core Team, 2020; Xie, 2015a)

2.1 关于bookdown

bookdown扩展包(https://github.com/rstudio/bookdown) 是继knitrrmarkdown扩展包之后, 另一个增强markdown格式的扩展, 使得Rmd格式可以支持公式、定理、图表、文献自动编号和引用等适用于编写书籍的功能。 在bookdown的管理下一本书的内容可以按章节分解成多个Rmd文件, 其中可以包含可执行的R代码, R代码生成的统计汇总结果、表格、图形可以自动插入到生成的内容中, 表格和图形可以是浮动排版的。书的输出格式包括支持gitbook格式的网页图书, 也可以经LATEXLATEX编译器转换的PDF图书,还 可以生成ePub等格式的电子书。建议使用RStudio集成环境来编辑、管理和生成这样的图书,可通过其内建的一键式编译整本书的插件(build)实现。

2.2 快速排版的思路

  1. rmarkdown完成整个书稿的写作;

  2. _output.yml完成不同形式呈现的书稿的设计,其中bookdown::gitbook负责html形式的gitbook, bookdown::pdf_book 负责pdf形式的电子书(由TEXTEX支持);bookdown::epub_book负责epub电子书. 部分针对书稿简单设置可放在index.Rmd文件的yml头部(具体放在前面两组三个短线---之间);

  3. 书稿按章节进行拆分,借助js支持的html快速生成书稿的初稿,最后再进行整合,根据需要通过Build插件完成gitbook, pdf_book, epub的构建;

  4. 借助mathjax处理数学公式的渲染;

    尽快可通过联网由cdn上的mathjax.js进行渲染,但速度随因公式的增加,渲染变得很慢,甚至出错。mathjax的本地化是提速的主要解决方案. 详见第A章介绍;

  5. 重点做好章节、数学公式、表格、图形、定理、文献等浮动对象的处理,在编写过程中及时做好标签设定与引用,见2.6节的汇总表格及后续各章的介绍与示例.

2.3 书的基本设置

一本用bookdown管理的书, 一般放置在某个子目录下,并作为一个RStudio项目(project)用RStudio管理。该目录中的所有的文本文件都要使用UTF-8编码。

2.3.1 index.Rmd文件

一本bookdown书, 一般都需要有一个index.Rmd文件, 这是最后生成的网站的主页的原始文件. 这个文件的开始是YAML元数据部分, 进行全书的有关设置,包括标题、作者、日期及影响全书的一些选项等,放在三个减号组成的两行之间。然后写一些这本书的说明,如书的前言部分。index.RmdYAML元数据部分的一个例子如下:

title: "bookdown书稿模板"
author: "汤银才"
date: "2021-07-25"
documentclass: book
bibliography: [myrefs.bib]
biblio-style: apa
link-citations: yes
site: bookdown::bookdown_site
description: "bookdown写书体验非常好."

注意:

  1. site选项很重要, 一定要有, site: bookdown::bookdown_site使得RStudio能辨认这是一个bookdown图书项目, 从而为其生成一键编译的build快捷方式;
  2. bookdown项目中与index.Rmd同级的所有.Rmd文件都自动作为书的一章,其好处是作者可以任意地增删章节,编译整本书时将按照文件名的字典序依次进行。实际上, 也可以在_output.yml文件中设置一项rmd_files, 列出所有需要作为一章的文件,并以列出次序编译;
  3. index.Rmd的元数据中也可以指定一些LATEXLATEX的选项, 例如
fontsize: 12pt
indent: true
linestretch: 2.0
link-citations: yes
colorlinks: yes
lot: true
lof: true
geometry:
- a4paper
- tmargin=2.5cm
- bmargin=2.5cm
- lmargin=3.5cm
- rmargin=2.5cm

2.3.2 _bookdown.yml文件

一个bookdown图书项目除了index.Rmd文件之外,还有一些设置文件从index.Rmd文件的元数据部分抽离出来。 一个是_bookdown.yml文件, 它存放与整本书的处理有关的YAML元数据。 例如

book_filename: "bookdown-template"
new_session: yes
language:
  label:
    fig: "图 "
    tab: "表 "
    thm: '定理'
    def: '定义'
    exm: '例'
    proof: '证明: '
  ui:
    chapter_name: ["第 ", " 章"]

其中new_session: true设置很重要,这使得每一个Rmd文件中的R程序都在一个单独的R会话中独立地运行,避免了不同Rmd文件之间同名变量和同名标签的互相干扰。 book_filename是最终生成的PDF图书或者ePub电子书的主文件名。 language下可以定制一些与章节名、定理名等有关的名称。

2.3.3 _output.yml文件

另一个设置文件是_output.yml, 用于图书输出格式的设置2, 本小删子的_output.yml文件内容如下

bookdown::gitbook:
  css: css/style.css
  split_by: chapter
  includes:
    in_header: _header.html
  config:
    toc:
      collapse: subsection
      scroll_highlight: yes
      before: |
        <li><a href="./">bookdown排版模板</a></li>
      after: |
        <li><a href="https://bookdown.org" target="blank">本书由 bookdown 强力驱动</a></li>
    download: [pdf, epub]
    edit: https://github.com/yihui/bookdown-chinese/edit/master/%s
    sharing:
      github: yes
      facebook: no
  pandoc_args: [ "--csl", "apa-6th-edition-no-ampersand.csl" ]
bookdown::pdf_book:
  includes:
    in_header: latex/preamble.tex
    before_body: latex/before_body.tex
    after_body: latex/after_body.tex
  keep_tex: yes
  dev: "cairo_pdf"
  latex_engine: xelatex
  citation_package: biblatex
  template: latex/template.tex
  toc_depth: 3
  toc_unnumbered: no
  toc_appendix: yes
  quote_footer: ["\\begin{flushright}", "\\end{flushright}"]
  pandoc_args: [ "--top-level-division=chapter" ]
bookdown::epub_book:
  stylesheet: css/style.css
  pandoc_args: [ "--csl", "apa-6th-edition-no-ampersand.csl" ]

它分别对gitbookpdf_bookepub_book三种输出格式设置了一些输出选项。其中一些选项是通过文件形式给出设置的,我们再补充说明一下。

  1. style.css是自定义的CSS显示格式,在gitbookepub_book中使用;
  2. _header.html是插入了一部分个性化的HTML代码,其内容将出现在每个生成的HTML文件的head部分。我们在此文件中给出了使用本地的Mathjax实现数学公式离线显示的设置,内容为
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  jax: ["input/TeX","output/SVG"],
  extensions: ["tex2jax.js","MathMenu.js","MathZoom.js"],
  TeX: {
    Macros: {
      bm: ["{\\boldsymbol #1}",1],
    }, 
    extensions: ["AMSmath.js","AMSsymbols.js","noErrors.js","noUndefined.js"]
  }
});

</script>
<script type="text/javascript"
  src="http://127.0.0.1/MathJax/MathJax.js">
</script>

其中http://127.0.0.1/MathJax/是本地服务器上Mathjax的位置。有关Mathjax的本地安装与启动可参考第A章的介绍;

  1. apa-6th-edition-no-ampersand.cslgitbookepub_book处理文献使用的风格文件;
  2. preamble.tex是处理(编译)bookdown文件经pandoc转化生成的tex文件时导言区需要额外的宏包和设置;
  3. before_body.textex书稿类正文前面的设置,最基本的是
 \frontmatter
  1. after_body.textex书稿类正文之后的设置,最基本的是
\backmatter
7. `template.tex` 是针对`bookdown`编译经`pandoc`转化生成的`tex`文件时的模板,由它生成供`latex_engine`指定的编译方式(`xelatex`)编译的`tex`文件. `index.Rmd`及`_output.yml`中的设置会嵌入到这个模板中,生成完整的单文档`tex`源文件.   

其他选项说明:

  1. split_by: chapter: 按章分割书稿;
  2. collapse: subsection: 目录中隐藏子节(仅显示二级标题);
  3. scroll_highlight: yes: 目录滚动时高亮显示,便于定位;
  4. keep_tex: yes: 保留中间生成的tex源文件,便于查错;
  5. dev: "cairo_pdf": 使用cairo_pdf()生成 LATEXLATEX 编译需要的图片文件;
  6. latex_engine: xelatex: TeX文件的排版引擎为XeLATEXXeLATEX, 针对UTF-8编码;
  7. citation_package: biblatex: 文献引用库指定为biblatex, 另一个为natbib;
  8. toc_depth: 3: 目录提取至三级标题;
  9. toc_unnumbered: no: 指定目录编号;
  10. toc_appendix: yes: 附录添加到目录中.

2.4 章节结构

如前所述, 除了index.Rmd文件, 项目中每个.Rmd文件都作为一章,其第一行是以一个#号和空格开头的一级标题。

每一章可以有若干节与子节,分别用markdown的二级标题(二个#开始)和三级标题(三个#开始)编写。bookdown的章、节、子节标题单独成一行,其后可以添加标签, 章节的标签是标题后加空格,然后是大括号内以#号开头的标签, 如

# 引言 {#intro}

## 关于bookdown {#bookdown}

bookdown中有二个特殊的标题:

  1. 部分

    内容相近的章节可以作为一个“部分”。 为此,在一个部分的第一个章节文件的章标题前面增加一行, 以# (PART) 开头, 以{-}结尾,例如

   # (PART) bookdown中的浮动对象 {-}
  1. 附录

    一本书的最后可以有附录, 附录的章节将显示为A.1, B.1这样的格式。 为此, 在附录章节的第一个文件开头加如下的第一行标题行:

   # (APPENDIX) 附录 {-}

   # biblatex介绍 {#biber}

2.5 书的编译

index.Rmd或者_bookdown.yml中设置site: bookdown::bookdown_site后, RStudio就能识别这个项目是一个bookdown项目, 这时RStudio会有一个Build按钮,其中有Build book快捷图标, 从下拉菜单中选择一个输出格式(包括gitbookpdf_bookepub_book), 就可以编译整本书(见图2.1)。

R Bookdown编译界面.

图 2.1: R Bookdown编译界面.

build编译生成的图书默认保存在_book子目录中3

  1. gitbook格式(即HTML网页格式), 编译完成后会弹出一个预览窗口, 点击“Show in new window”按钮可以将内容在操作系统默认的网络浏览器中打开。我们也可以用其他浏览器(建议使用Google chrome浏览器)打开_book子目录中的index.html文件来查看gitbook格式的图书。
  2. 对于pdf_book格式,如果成功编译4, 也会弹出一个PDF预览窗口。 可以在_book子目录中找到这个PDF文件。
  3. 对于epub_book格式,如果成功编译,会在操作系统默认的ePub软件(如苹果电脑的book)中打开,并在_book子目录中找到这个ePub文件。

2.6 浮动对象标签与引用汇总

浮动对象 标签设置 引用格式
标题 (# label) \@ref(label)
公式 (\#eq:label) \@ref(eq:label)
图形 label="label" \@ref(fig:label)
表格 label="label" \@ref(tab:label)
定理 label="label" \@ref(prefix:label)
文本 (ref:label) (ref:label)
文献 biblabel @biblabel

注:

  1. 定理泛指定理类,包括定理(thm)、引理(lem)、推论(cor)、命题(prp)、设想(cnj)、定义(def)、例子(exm)、习题(exr)等, 其中括号中是引用时的前缀(prefix);
  2. 文本标签在单独一行中设定,可用在表格与图形的caption中引用,即在 fig.caption, tab.caption选项的设置中引用;
  3. 定理类环境标签前缀的汉化可在_bookdown.yml中通过language进行5,例如
language:
  label:
    fig: "图 "
    tab: "表 "
    thm: '定理'
    def: '定义'
    exm: '例'

  1. 这部分内容也可以包含在index.Rmd的元数据部分↩︎
  2. 可以在_bookdown.yml中设置output_dir项改变图书保存的子目录.↩︎
  3. 需要LATEXLATEX支持,建议安排TeXLive,也可以仅安装谢益辉为rmarkdown开发的tinytex↩︎
  4. 图形与表格也可同理汉化↩︎

第 3 章 Bookdow中 的章节标题

我们在第3章讲述章节标题的设置、标签与引用. (Xie, 2015a, 2016)

3.1 章节标题

章节标题用遵从markdown的规则,用#设置,

  • 一级标题用一个 #, 在bookdown中表示, 相当于TEXTEX中的\chapter{}
  • 二级标题用二个 #, 在bookdown中表示, 相当于TEXTEX中的\section{}
  • 三级标题用三个 #, 在bookdown中表示子节, 相当于TEXTEX中的\subsection{}

还可以有更深的标题.

3.2 章节标题标签的设定与引用

章节标题标签可在标题后用 {#label}来设定,引用方式为\@ref(label). 例如

第\@ref(sections)章\@ref(sec3-2)节讨论标题标签的设定与引用.

显示为:

33.2节讨论标题标签的设定与引用.

第 4 章 Bookdown中的公式与定理

这是第4 章的内容, 讲述浮动对象定理与公式的标签与引用. (Xie, 2015a, 2016)

4.1 公式标签的设定

Rmarkdown中公式除了无标号的公式(用一对$$实现),可以使用LaTeX中的equation环境, 尽管无法实现类似的WYSIWYG, 但可设置标签. 标签格式为 (\#eq:label), 其中eq是关键字,例如

\begin{equation} 
  f\left(k\right) = \binom{n}{k} p^k\left(1-p\right)^{n-k}
  (\#eq:binom)
\end{equation} 

显示为f(k)=(nk)pk(1−p)n−k(4.1)(4.1)f(k)=(nk)pk(1−p)n−k对于多行公式可以采用align环境,可对多个公式同时进行设置标签,不需要标签则用\notag,例如

\begin{align} 
g(X_{n}) &= g(\theta)+g'({\tilde{\theta}})(X_{n}-\theta) \notag \\
\sqrt{n}[g(X_{n})-g(\theta)] &= g'\left({\tilde{\theta}}\right)
  \sqrt{n}[X_{n}-\theta ] (\#eq:align)
\end{align}

显示为g(Xn)=g(θ)+g′(~θ)(Xn−θ)√n[g(Xn)−g(θ)]=g′(~θ)√nXn−θg(Xn)=g(θ)+g′(θ~)(Xn−θ)(4.2)n[g(Xn)−g(θ)]=g′(θ~)n[Xn−θ]

4.2 定理标签的设定

这里我们先叙述几个定义和定理,并给出几个例子.

引理4.1 A group having an infinite number of elements.

定理4.1 (无限群) A group having an infinite number of elements.

证明: The proof comes here.

定义4.1 A group having an infinite number of elements.

例4.1 The set (Z,+)(Z,+) is an infinite group.

4.3 定理与公式的引用

4.1, 定义4.1 定理4.1为定理类引用.

公式的引用采用 \@ref(eq:label), 例如上面的二个公式可引用为: 公式(4.1) 和公式 (4.2).

4.4 数学公式的扩展

有些公式无法用TEXTEX中包的命令来实现,例如粗体数学符号,尽管在TEXTEX中有个bm包在数学环境下通过\bm{\alpha} 来实现\boldsymbol{\alpha}的功能,但在html下需要给mathjax做个TEXTEX宏(macro)6:

  TeX: {
    extensions: ["AMSmath.js","AMSsymbols.js","noErrors.js","noUndefined.js"]
    Macros: {
      bm: ["{\\boldsymbol #1}",1],
    },
  }

此时由$\bm{\alpha}$出来的效果为 αα.

有关数据公式的标签与应用可参考mathjax官方文档, Mathjax的本地化安装参考第B章介绍.


  1. 配置在MathJax.Hub.Config下进行,具体参见Mathjax技术文档说明↩︎

第 5 章 Bookdown中的图形

5.1 由R生成单个图形示例

这是第5 章的内容, 讲述浮动对象图形的标签与引用. (Xie, 2015a, 2016)

图 5.1: iris数据集Petal.Length} ~ Species的箱线图.

图 5.1: iris数据集Petal.Length} ~ Species的箱线图.

5.2 由R生成两个图形并置示例

R的代码块选项中设置out.width='50%', fig.show='hold'就可获得二个图形的并置.

iris数据集Petal.Length} ~ Species 的散点图. 右侧的图像中散点类型通过Species因子的水平给出,见图例. 直线为数据集拟合线性模型的结果.

5.3 由R生成两个图形堆叠示例

R的代码块选项中设置out.width='90%', fig.show='hold'就可获得二个图形的并置.

5.4 静态图形示例

Bookdwon中插入本地图形可使用命令(示例为Rlogo)

knitr::include_graphics("figures/Rlogo.png")

R logo

图 5.4: R logo

5.5 图形引用

图形引用通过R代码块的标签引用, 并带前缀fig:, 例如

图\@ref(fig:fig4-2)和图\@ref(fig:fig4-3)为两个图的并置与堆叠. 

输出为:图5.2和图5.3为两个图的并置与堆叠。