2017-04-12 86 views
6

我有一個類似的問題this one,但我收到了一個不同的錯誤。我想將yaml中的mainfont設置爲roboto,但是當我將它編織爲PDF時,出現「fontspec error:」font-not-found「」錯誤。rmarkdown pdf字體不可用

--- 
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 mainfontmonofont

回答

5

此選項必須縮進。當它沒有縮進選項latex_engine時,它的工作原因僅僅是因爲它被忽略,並沒有真正傳遞給pdf_document()作爲參數。 [R減價使用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。您的原始示例失敗,因爲您混淆了pdflatexxelatex:roboto代表pdflatex,而mainfont選項代表xelatex(將使用fontspec包將其轉換爲LaTeX代碼\setmainfont{roboto})。你可以選擇任何一種方式,但不能同時選擇。

如果您想使用xelatex,您必須確保已經在系統中安裝了字體,並且知道確切的字體名稱(區分大小寫)。我猜這個名字可能是Roboto。除非您有其他原因使用xelatex(例如,您已經知道fontspec軟件包並且想要配置更多字體),否則我建議您留在roboto包中,因爲它足夠簡單,您不必學習太多低級技術細節。

您可以spedn一分鐘閱讀此頁有關YAML:https://bookdown.org/yihui/bookdown/r-markdown.html

+1

非常有幫助,@易輝。感謝您花時間澄清。 –

1

更新:一輝的回答全面解決問題

這是由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 
--- 
+0

它看起來對我來說,'latex_engine'應根據[Rmarkdown文檔】是第三級(http://rmarkdown.rstudio.com/ pdf_document_format.html#latex_engine)。 –

+1

好點。當我縮進時,我收到了「字體未找到」的錯誤,但是當我將它移動到某個級別時,它會正常運行。我不確定這只是他們文檔中的一個怪癖或錯字。 –