我有一些用 MultiMarkDown 编写的报告,想用 pandoc 将它们转换为 pdf(通过 xelatex)。由于我在专业环境中,所以必须使用某种字体系列。字体位于 windows/fonts 文件夹中,名为font-regular.otf
,font-italic.otf
等等。
我知道命令行开关-V mainfont:font-regular.otf
,我可以用它来切换字体,但这只能设置常规字体。我可以运行 a.tex
而不是 a .pdf
,然后手动编辑文件,例如
\setmainfont[
BoldFont = Font-Bold.otf,
ItalicFont = Font-Italic.otf,
BoldItalicFont = Font-BoldItalic.otf
]{Font-Regular.otf}
但这很麻烦,因为每个文档都需要转换,这需要额外的工作。
有没有办法:
- 轻松创建一个我可以传递的“字体系列”,或者
- 通过命令行传递 fout
.otf
(因此通过脚本或批处理)
答案1
YAML 标头
---
mainfont: Font-Regular.otf
mainfontoptions:
- BoldFont=Font-Bold.otf
- ItalicFont=Font-Italic.otf
- BoldItalicFont=Font-BoldItalic.otf
---
命令行
$ pandoc in.md --pdf-engine=xelatex \
-V 'mainfont:Font-Regular.otf' \
-V 'mainfontoptions:BoldFont=Font-Bold.otf, ItalicFont=Font-Italic.otf, BoldItalicFont=Font-BoldItalic.otf'
-o out.pdf
自从我回答了最初的问题后,很多事情都发生了变化。因此,这里是关于如何使用 pandoc 设置字体的更新。有几种方法可以更改字体,pandoc
而且它们都很好记录如今。以下是简要概述:
1.更改XeLaTeX和LuaLaTeX的字体:
您可以指定系统上可以使用的任何字体fontspec
在 markdown 文件的 YAML 标头中,为 XeLaTeX 设置如下变量:
---
mainfont: DejaVuSerif.ttf
sansfont: DejaVuSans.ttf
monofont: DejaVuSansMono.ttf
mathfont: texgyredejavu-math.otf
---
或者,对于 LuaLaTex:
---
mainfont: DejaVuSerif
sansfont: DejaVuSans
monofont: DejaVuSansMono
mathfont: TeXGyreDejaVuMath-Regular
---
如果需要更细粒度的控制,可以指定选项:
---
mainfont: DejaVuSerif
mainfontoptions:
- Extension=.ttf
- UprightFont=*
- BoldFont=*-Bold
- ItalicFont=*-Italic
- BoldItalicFont=*-BoldItalic
---
调用 pandoc 并将--pdf-engine
其设置为xelatex
或lualatex
:
$ pandoc in.md --pdf-engine=xelatex -o out.pdf
您也可以在命令行上设置字体:
$ pandoc in.md --pdf-engine=xelatex \
-V 'mainfont:DejaVuSerif.ttf' \
-V 'sansfont:DejaVuSans.ttf' \
-V 'monofont:DejaVuSansMono.ttf' \
-V 'mathfont:texgyredejavu-math.otf' \
-o out.pdf
或者
$ pandoc in.md --pdf-engine=lualatex \
-V 'mainfont:DejaVuSerif' \
-V 'sansfont:DejaVuSans' \
-V 'monofont:DejaVuSansMono' \
-V 'mathfont:TeXGyreDejaVuMath-Regular' \
-o out.pdf
再次,有选项:
$ pandoc in.md --pdf-engine=xelatex \
-V 'mainfont:DejaVuSerif' \
-V 'mainfontoptions:Extension=.ttf, UprightFont=*, BoldFont=*-Bold, ItalicFont=*-Italic, BoldItalicFont=*-BoldItalic' \
-V 'sansfont:DejaVuSans.ttf' \
-V 'monofont:DejaVuSansMono.ttf' \
-V 'mathfont:texgyredejavu-math.otf' \
-o out.pdf
注意,xelatex
需要文件名,而lualatex
包含字体系列名称。您可以使用信息网获取有关您将要使用的字体的名称和特征的更多信息。
2. 更改模板
一些软件包例如dejavu-otf
或libertinus-otf
为您执行 fontspec 设置,但您必须修改模板才能使它们工作。
获取默认模板并将其保存到某个文件:
$ pandoc -D latex > template.latex
打开文件并删除所有字体配置代码并替换为,例如:
\usepackage{dejavu-otf}
3. 设置fontfamily
pdflatex
如果您正在使用pdflatex
,则可以使用:
---
fontfamily: dejavu
---
或者
$ pandoc in.md --pdf-engine=pdflatex \
-V 'fontfamily:dejavu' \
-o demo.pdf
该选项fontfamily
尝试加载具有指定名称的包。这通常适用于 Type 1 字体,pdflatex
但也有一些包在从或fontspec
调用时在内部使用。lualatex
xelatex
4. 设置上下文字体
---
mainfont: DejaVuSerif
sansfont: DejaVuSans
monofont: DejaVuSansMono
mathfont: TeXGyreDejaVuMath
---
或者
$ pandoc in.md --pdf-engine=context \
-V 'mainfont:DejaVuSerif' \
-V 'sansfont:DejaVuSans' \
-V 'monofont:DejaVuSansMono' \
-V 'mathfont:TeXGyreDejaVuMath' \
-o out.odf
答案2
我刚刚在寻找如何使用 pandoc -> xelatex 设置标题字体时看到了这一点
可以使用元数据设置来设置 mainfont 和 mainfont 选项。例如,您的配置将如下所示:
mainfont: Font-Regular.otf
mainfontoptions: BoldFont=Font-Bold.otf
mainfontoptions: ItalicFont=Font-Italic.otf
mainfontoptions: BoldItalicFont=Font-BoldItalic.otf
您也可以使用字体的全名。以下是我将 Gentium Basic 设置为主要字体的方法:
mainfont: Gentium Basic
mainfontoptions: BoldFont=Gentium Basic Bold
mainfontoptions: ItalicFont=Gentium Basic Italic
mainfontoptions: BoldItalicFont=Gentium Basic Bold Italic
答案3
tex
通过运行从 pandoc获取默认模板pandoc -D latex
,然后将所需的字体定义添加到文档。另存为my-font.latex
。然后使用开关运行 pandoc --template=my-font
。