Rmarkdown 输出中文 PDF 的基本设置

郝鸿涛 / 2021-06-08

你可以看这篇帖子的 PDF 版 以及它的源代码

最简设置 #

---
documentclass: article
title: "此处是标题"
author: "你的大名"
date: "2021年06月08日"
header-includes:
  - \usepackage{fontspec} # 使用 fontspec 包
  - \usepackage{xeCJK}    # 使用 xeCJK 包
  - \setCJKmainfont[Scale=1]{Songti SC}  # 设置中文字体
output: 
  pdf_document: 
    latex_engine: xelatex # 使用 xelatex 引擎
classoption: 12pt # 字体。只能在 10pt, 11pt, 和 12pt 选
geometry: margin=1in # 页边距,上下左右 1 英尺,大概 2.54 厘米。
linestretch: 1.2 # 行间距。数值越大,行间距越大。
---

然后写文章就好。

需要说明的是:

  1. \setCJKmainfont[Scale=1]{你的字体} 你所用的字体是你电脑字体簿中的字体。苹果电脑中,宋体是 STSong 或者 Songti SC, 黑体是 STHeiti 或 Heiti Sc, 楷体是 STKaiti 或 Kaiti SC。

  2. 如果 classoption: 12pt 你都觉得小,那么请修改 \setCJKmainfont[Scale=1]{你的字体} 中的 Scale,数值越大,字体越大。

这是最简配置,参考 ChenChingChih 的帖子

以下是稍微复杂一些的内容。

首行缩进 #

header-includes 部分加入:

  - \usepackage{indentfirst}
  - \setlength{\parindent}{2em}

引用语换字体 #

header-includes 部分加入:

  - \setCJKfamilyfont{zhkai}{Kaiti SC}
  - \AtBeginEnvironment{quote}{\CJKfamily{zhkai}}

引用语加边框、该背景色 #

header-includes:
- \usepackage{tcolorbox}
- \newtcolorbox{myquote}{colback=red!5!white, colframe=red!75!black}
- \renewenvironment{quote}{\begin{myquote}}{\end{myquote}}

以上代码出处:https://tex.stackexchange.com/a/522490

目录 #

header-includes:
  - \renewcommand{\contentsname}{目录}
output:
  pdf_document:
    toc: true
toccolor: 'orange' # 颜色可以自己换

其中,\renewcommand{\contentsname}{目录} 这行代码来自于 ccpaging 的博文:在LaTeX 与 LyX 中设置“Contents”为“目录” 。根据这篇博客,如果你有插图的话,需要用到 \renewcommand{\figurename}{图}

toccolor: 'orange' 把目录中的链接设置成橘黄色,代码来自 pollytatouin 在 Stackoverflow 上的答复orange 带不带引号都可以。

章节自动编号 #

output: 
  pdf_document:
    number_sections: true

这就和你的章节有关系了。如果你的内容是:

# 第一章
## 第一节
## 第二节

# 第二章
## 第一节
## 第二节

那么自动编号为:

1 第一章
  1.1 第一节
  1.2 第二节

2 第二章
  2.1 第一节
  2.2 第二节

链接颜色 #

上面提到了目录颜色用 toccolor 来设置。在正文中,一般用到两种链接,一种是外部链接,另一种是文档内部链接。

外部链接颜色设置方式: urlcolor: blue。比如,你在 Rmarkdown 中写,[我的博客](https://hongtaoh.com/cn/blog/),这个链接会变成蓝色。

文档内部链接颜色设置方式:linkcolor: red。比如,请看本文档[第二章](#Ch2),链接会变成红色。

以上代码参考 Dylan_Gomes 的答复

更多其他设置 #

总而言之,header-includes 里面的是 LaTex 代码。与 header-includesoutput 平行的部分,比如 classoptiongeometry 等是 Pandoc 转 PDF 时对 LaTex 的设置

此外,可以参考 R Markdown: The Definitive Guide 有关 PDF 转换的介绍

如果你是 LaTex 重度用户 #

如果你有更多、更复杂的 LaTex 设置,可以新建一个 preamble.tex,把它放到和你的 Rmarkdown 平行的位置,然后:

output:
  pdf_document:
    includes:
      in_header: preamble.tex

再把

  - \usepackage{fontspec} # 使用 fontspec 包
  - \usepackage{xeCJK}    # 使用 xeCJK 包
  - \setCJKmainfont[Scale=1]{Songti SC}  # 设置中文字体

这类的代码放到 preamble.tex 中。需要注意的是,- 是不需要的。

#编程

最后一次修改于 2022-07-03