2017-04-12 20 views
6

मेरे पास this one जैसा कोई प्रश्न है, लेकिन मुझे एक अलग त्रुटि मिल रही है। मैं yaml में mainfont को roboto पर सेट करना चाहता हूं, लेकिन मुझे त्रुटि "fontspec त्रुटि:" फ़ॉन्ट-नहीं मिला "" जब मैं इसे पीडीएफ में बुनाता हूं।rmarkdown पीडीएफ फ़ॉन्ट उपलब्ध नहीं

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

क्या मैं mainfont और YAML में monofont के साथ कुछ गलत कर रहा हूँ?

उत्तर

5

यह विकल्प इंडेंट किया जाना चाहिए: नीचे सही हेडर है। यह तब काम करता था जब आपने latex_engine विकल्प को इंडेंट नहीं किया था क्योंकि इसे अनदेखा किया गया था और वास्तव में pdf_document() को तर्क के रूप में पारित नहीं किया गया था। आर 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 उपयोग किया जाता है।

मैं निश्चित रूप से नहीं कह सकता, लेकिन मेरा मानना ​​है कि रोबोटो पैकेज केवल पीडीएफएलएक्सएक्स के लिए है। आपका मूल उदाहरण है क्योंकि आप pdflatex और xelatex मिश्रित असफल रहा था: roboto pdflatex के लिए है, और mainfont विकल्प (जो fontspec पैकेज का उपयोग LaTeX कोड \setmainfont{roboto} लिए अनुवाद किया जाएगा) xelatex के लिए है। आप किसी भी तरह से चुन सकते हैं, लेकिन दोनों नहीं।

यदि आप xelatex का उपयोग करना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि आपने अपने सिस्टम में फ़ॉन्ट इंस्टॉल किया है, और आप सटीक फ़ॉन्ट नाम (केस-संवेदी) जानते हैं। मुझे लगता है कि नाम शायद Roboto है। जब तक आपके पास xelatex का उपयोग करने के अन्य कारण नहीं हैं (उदाहरण के लिए आप fontspec पैकेज को पर्याप्त रूप से जानते हैं और अधिक फोंट कॉन्फ़िगर करना चाहते हैं), तो मैं आपको रोबोटो पैकेज और pdflatex के साथ रहने के लिए अनुशंसा करता हूं क्योंकि यह काफी आसान है और आपको बहुत कम स्तर के तकनीकी विवरण सीखें।

आप YAML के बारे में एक मिनट पढ़ने यह पेज spedn हो सकता है: https://bookdown.org/yihui/bookdown/r-markdown.html

+1

बहुत उपयोगी, @Yihui। स्पष्टीकरण के लिए समय लेने के लिए धन्यवाद। –

1

अद्यतन: Yihui का जवाब व्यापक प्रश्न के पते

इस तरह RMarkdown YAML शीर्षलेख पार्स है की वजह से एक समस्या है। latex_engine को इंडेंट नहीं किया जाना चाहिए और फिर यह काम करेगा। वर्तमान में, मेरा मानना ​​है कि पैंडोक 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

यह ('तरह http://rmarkdown.rstudio.com/ latex_engine' [Rmarkdown प्रलेखन] के अनुसार तीसरे स्तर होना चाहिए मेरे लिए लग रहा है pdf_document_format.html # latex_engine)। –

+1

अच्छा बिंदु। जब मैंने इसे इंडेंट किया तो मुझे 'फ़ॉन्ट-नहीं-मिला' त्रुटि मिल रही थी, लेकिन जब मैं इसे एक स्तर पर ले गया तो यह ठीक से चला गया। मुझे यकीन नहीं है कि यह सिर्फ उनके कथन में एक quirk या एक टाइपो है। –

संबंधित मुद्दे