编译 TEX 文档时,引擎会使用某个字体中的字形,而该字体必须位于某个位置。我期望字体的路径会写在 TEX 引擎的某个位置。如果是这样,那么字体在哪里?是否可以更改 TEX 引擎的设置,以便它会查找其他字体作为默认字体?如果我的期望是错误的,那么如何获取默认字体的字形?
编辑:默认字体是在文档中没有指示应使用哪种字体时使用的字体。
答案1
给定一个文档
\documentclass{article}
\begin{document}
hello
\end{document}
如果没有指定字体,则字体将按照文档类所指定的方式使用,或者如果没有指定字体系列,则采用 LaTeX 默认字体。
在这种情况下,article
指定默认大小为 10pt,但未指定字体系列,因此使用默认格式。
在 pdflatex 或 latex 中,编码 OT1 原始 7 位 TeX 编码和 cmr 系列(Computer Modern Roman)。如果您处理文档,日志末尾会显示
/usr/local/texlive/2021/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb
表明唯一使用的字体是 cmr10 的 Type1(PostScript)版本。
如果您使用 lualatex 处理相同的内容,那么您将获得默认编码格式 TU(Unicode)和默认格式lmr
(Latin Modern)。日志末尾再次显示了所使用的每种字体的完整路径(在本例中只有一个)
/usr/local/texlive/2021/texmf-dist/fonts/opentype/public/lm/lmroman10-regular.otf
显示 Latin Modern Roman 10 的 OpenType 版本
这些 OT1(或 TU)默认值在格式中设置,具体来说是base/fonttext.ltx
包含以下行的文件
\ifx\Umathcode\@undefined
\fontencoding{OT1}
\def\@fontenc@load@list{\@elt{T1,OT1}}
\def\rmsubstdefault{cmr}
\def\sfsubstdefault{cmss}
\def\ttsubstdefault{cmtt}
\LoadFontDefinitionFile{TS1}{cmr}
\else
\input {tuenc.def}
\fontencoding{TU}
\def\@fontenc@load@list{\@elt{TU}}
\DeclareFontSubstitution{TU}{lmr}{m}{n}
\LoadFontDefinitionFile{TU}{lmr}
\LoadFontDefinitionFile{TU}{lmss}
\LoadFontDefinitionFile{TU}{lmtt}
\def\rmsubstdefault{lmr}
\def\sfsubstdefault{lmss}
\def\ttsubstdefault{lmtt}
\LoadFontDefinitionFile{TS1}{lmr}
\DeclareFontSubstitution{TU}{lmr}{m}{n}
\fi
其中真的分支在 pdflatex 和 latex 中执行,并且错误的分支在lualatex和xelatex中执行。
在 原则您可以复制并修改它以使用不同的字体集,然后重建格式,如果文件存在,将优先使用该文件。但实际上您永远不应该这样做,它与简单地使用相同的命令fonttext.ltx
更改文档或自定义文档类中的字体相比没有任何优势,并且会使您的“latex”格式与其他所有 latex 安装不兼容。当我们在 20 世纪 90 年代初期添加此功能时,它还有一定的道理,当时还没有广泛使用的常见发行版,例如 miktex 和 texlive,不同的网站有不同的字体可用(更改文档中的字体可能需要几分钟而不是几分之一秒),但现在它应该被视为一个从未使用过的过时功能。fonttext.cfg
.cfg
.ltx
答案2
这取决于您使用的引擎。
出于这个原因,我倾向于使用xetex
,它允许您指定替代文本字体并允许使用 Unicode 字符。
https://plain-xetex.neocities.org/fonts.html
TeX 的默认设置很快就会变得深奥难懂;如果您想探索这一点,最好进行离线讨论。