在 R Markdown 输出的 latex-pdf 中自定义 CJK 字体

在 R Markdown 输出的 latex-pdf 中自定义 CJK 字体

—使用 xeCJK 时的一点小坑

2021-03-20 21:28:29 +0800

前提

  • RStudio
  • tinytex R包
  • xeCJK

实现

参考了一篇日文的博客. 其中用的是 zxjatype , 不过也提到可以用 xeCJK; 我还是用了更常见的 xeCJK.

\usepackage{xeCJK}

然后是字体. 问题是, 我用 \setCJKmainfont 死活设置不了, 用字体名(Noto Serif CJK SC)也不行, 加上"regular"也不行, 用字体文件名还是不行; 于是搜了一下, 找到一篇百度LaTeX吧的求助贴. 其中4楼提到:

不过我一般都喜欢把字体文件放在文档同目录下的Fonts文件夹内。

然后这样调用:
\setCJKmainfont[Path=Fonts/]{SourceHanSansCN-Normal.otf}

我意识到, 可能是路径的问题. 我把字体文件复制到了 .Rmd 文件的同目录, 用字体名的方式就可以成功导出 pdf 了.

而后来再使用 \setmainfont{Noto Serif} 却一次就成功了, 这是为什么呢? 我据此得出两条结论:

  1. 我看到的字体名"Noto Sans CJK SC Regular"并非 NotoSerifCJKsc-Regular.otf 这个字体文件所对应的字体的"真名", 也即字体的内置名称.
  2. 当使用字体文件名时, 需要指定路径, 否则会默认是在同一路径下. 而此时如果同一路径下不存在该字体文件, 生成时会报错.

最后的(阶段性)成果是这样的:

output: 
  pdf_document:
    latex_engine: xelatex
header-includes: |
  \usepackage{xeCJK}
  \setmainfont{Noto Serif}
  \setCJKmainfont{NotoSerifCJKsc-Regular.otf} % NOTE: under the same directory

我据此扩充, 写了一个小模板, 姑且根据自己的习惯和偏好(衬线和无衬线字体用 Noto 系列, 等宽字体用 Iosevka / Sarasa Mono)囊括了一般需要定义的字体项. 已经托管到 Gitee, 欢迎随意取用.

其实也没多少内容, 干脆贴在下面吧:

---
title: ""
author: ""
date: ""
output: 
  pdf_document:
    latex_engine: xelatex
header-includes: |
  \usepackage{xeCJK}
  \setmainfont{Noto Serif}
  \setsansfont{Noto Sans}
  \setmonofont{Iosevka}
  \setCJKmainfont[BoldFont=NotoSansCJKsc-Regular.otf]{NotoSerifCJKsc-Regular.otf} % NOTE: under the same directory
  \setCJKsansfont{NotoSansCJKsc-Regular.otf}
  \setCJKmonofont{sarasa-gothic-sc-regular.ttf}
---
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值