在rmarkdown/bookdown中使用D-Din字体:如何启用全字重及格式特性
解决D-DIN字体在LuaLaTeX中无法调用全字重和特殊格式的问题
你遇到的问题确实是因为明确指定了:style=Regular——这会强制LaTeX只锁定常规样式的字体,直接阻断了粗体、斜体等变体的调用路径,甚至会影响TeX原生的连字功能(比如短破折号)。下面是具体的解决步骤:
1. 移除固定样式限制
先修改R Markdown的YAML配置,删掉mainfont和sansfont后面的:style=Regular,让LaTeX能根据文本格式自动匹配对应的字体变体:
output: bookdown::pdf_document2: latex_engine: lualatex mainfont: D-DIN sansfont: D-DIN
2. 手动指定字体变体(可选但推荐)
部分字体的粗体/斜体变体命名可能不是标准的D-DIN Bold或D-DIN Italic,这时候需要先用fc-list确认准确的字体名称:
fc-list | grep "D-DIN"
从输出里找到粗体、斜体、粗斜体的完整名称,然后创建一个preamble.tex文件,通过fontspec包明确映射这些变体:
\usepackage{fontspec} \setmainfont[ BoldFont={D-DIN Bold}, # 替换为你实际查到的粗体字体名称 ItalicFont={D-DIN Italic}, # 替换为实际的斜体字体名称 BoldItalicFont={D-DIN Bold Italic}, # 替换为实际的粗斜体字体名称 Ligatures=TeX # 启用TeX风格连字,包含短破折号等特殊符号处理 ]{D-DIN} \setsansfont[ BoldFont={D-DIN Bold}, ItalicFont={D-DIN Italic}, BoldItalicFont={D-DIN Bold Italic}, Ligatures=TeX ]{D-DIN}
最后在YAML中引入这个前置文件:
output: bookdown::pdf_document2: latex_engine: lualatex includes: in_header: preamble.tex
3. 验证效果
重新编译文档后,测试以下内容是否正常工作:
- 粗体:
**测试粗体** - 斜体:
*测试斜体* - 短破折号:
--(应渲染为标准的en dash)
这样配置后,LuaLaTeX就能正确调用D-DIN字体的所有字重和TeX连字特性了。
内容的提问来源于stack exchange,提问作者balin
相关产品推荐
相关产品推荐

