Ubuntu系统下Rmarkdown代码字体匹配默认文本字体报错求助
这个报错的核心原因是:fontspec(Xelatex依赖的字体管理包)会去系统字体库查找你指定的字体名称,但Ubuntu默认并没有安装名为"Computer Modern"的系统级字体——Computer Modern是TeX发行版自带的传统字体,不属于系统字体范畴,所以直接写monofont: "Computer Modern"会找不到。
下面给你几个可行的解决方案,都能实现代码字体和正文Computer Modern字体统一:
方案1:改用Latin Modern Mono(推荐,最简单)
Latin Modern是Computer Modern的官方扩展版本,外观几乎完全一致,而且Ubuntu默认的TeX发行版(比如TeX Live)通常会附带安装这个字体,fontspec可以直接识别它。修改你的YAML配置如下:
--- date : 2018-May-27 output: pdf_document: latex_engine: xelatex monofont: "Latin Modern Mono" title: "Testing Rmarkdown" ---
方案2:直接引用TeX自带的Computer Modern等宽字体
如果你坚持要用原生的Computer Modern等宽字体,可以通过LaTeX命令指定TeX发行版内的字体,添加header-includes配置:
--- date : 2018-May-27 output: pdf_document: latex_engine: xelatex header-includes: - \setmonofont{CMU Typewriter Text} title: "Testing Rmarkdown" ---
CMU Typewriter Text是Computer Modern等宽字体的TeX内部名称,fontspec可以直接定位到TeX发行版中的这个字体文件。
方案3:切换回默认的Pdflatex引擎
如果不需要Xelatex的特殊功能(比如复杂的Unicode支持),最简单的方法就是去掉latex_engine: xelatex配置,用默认的Pdflatex编译。Pdflatex默认全套使用Computer Modern字体,代码块的等宽字体本来就是Computer Modern的变体,完全不需要额外设置:
--- date : 2018-May-27 output: pdf_document: title: "Testing Rmarkdown" ---
以上三种方法都能解决你的字体找不到错误,同时实现代码字体和正文字体的统一。
内容的提问来源于stack exchange,提问作者user2338823

