我有一个与this one类似的问题,但我得到了一个不同的错误。我想将yaml中的mainfont
设置为roboto,但是当我将其编织为PDF时,我收到错误“fontspec error:”font-not-found“”。
---
title: "My Title"
header-includes:
- \usepackage[sfdefault]{roboto}
- \usepackage[T1]{fontenc}
output:
pdf_document:
latex_engine: xelatex
mainfont: roboto
---
运行MacTex 2016
sessionInfo()
#R version 3.3.2 (2016-10-31)
#Platform: x86_64-apple-darwin13.4.0 (64-bit)
#Running under: macOS Sierra 10.12.4
更新1
它可以在header-includes
中定义字体,但似乎mainfont
规范也应该有效:
---
title: "My Title"
header-includes:
- \usepackage[sfdefault]{roboto}
- \renewcommand{\familydefault}{\sfdefault}
output:
pdf_document:
latex_engine: xelatex
---
更新2
monofont
对我来说也失败了,但是header-includes
工作了:
---
title: "My Title"
header-includes:
- \usepackage{fontspec}
- \setmonofont[Mapping=tex-text]{inconsolata}
- \usepackage[sfdefault]{roboto}
- \renewcommand{\familydefault}{\sfdefault}
output:
pdf_document:
latex_engine: xelatex
---
我在yaml中mainfont
和monofont
做错了什么?
答案 0 :(得分:7)
此选项必须缩进。当你没有缩进选项latex_engine
时它只是因为它被忽略而没有真正传递给pdf_document()
作为参数。 R Markdown使用 yaml 包解析YAML,您可以比较latex_engine
缩进时的输出:
yaml::yaml.load(
'output:
pdf_document:
latex_engine: xelatex
mainfont: roboto')
输出:
$output
$output$pdf_document
$output$pdf_document$latex_engine
[1] "xelatex"
$mainfont
[1] "roboto"
如果没有缩进,您实际上是在调用rmarkdown::render(, pdf_document())
:
yaml::yaml.load(
'output:
pdf_document:
latex_engine: xelatex
mainfont: roboto')
输出:
$output
$output$pdf_document
NULL
$output$latex_engine
[1] "xelatex"
$mainfont
[1] "roboto"
在这种情况下,会使用pdf_document
的默认引擎pdflatex
。
我不能肯定地说,但我相信roboto包仅适用于pdflatex。您的原始示例失败了,因为您混淆了pdflatex
和xelatex
:roboto用于pdflatex
,而mainfont
选项用于xelatex
(将被翻译)使用fontspec包到LaTeX代码\setmainfont{roboto}
。你可以选择任何一种方式,但不能两种方式。
如果您想使用xelatex,您必须确保已在系统中安装了该字体,并且您知道确切的字体名称(区分大小写)。我猜这个名字可能是Roboto
。除非你有其他理由使用xelatex
(例如你已经足够了解fontspec包并希望配置更多字体),我建议你继续使用roboto包和pdflatex
,因为它很简单足够了,你不必学习太多的低级技术细节。
您可能需要花一分钟时间阅读本页有关YAML:https://bookdown.org/yihui/bookdown/r-markdown.html
的信息答案 1 :(得分:1)
更新:Yihui的回答全面解决了这个问题
这是由RMarkdown解析YAML标头的方式引起的问题。 latex_engine
不应缩进,然后才能工作。目前,我认为pandoc忽略了latex_engine
命令,因为当它是pdf_output
部分的一部分时,它嵌套在output
中。以下是正确的标题:
---
title: "My Title"
header-includes:
- \usepackage[sfdefault]{roboto}
- \usepackage[T1]{fontenc}
output:
pdf_document:
latex_engine: xelatex
mainfont: roboto
---