![当前字体文件的完整路径](https://linux22.com/image/357369/%E5%BD%93%E5%89%8D%E5%AD%97%E4%BD%93%E6%96%87%E4%BB%B6%E7%9A%84%E5%AE%8C%E6%95%B4%E8%B7%AF%E5%BE%84.png)
有没有办法打印当前字体文件的完整路径(包括文件名和扩展名)?我对以下引擎感兴趣:pdfTeX、XeTeX、LuaTeX 及其对应的 LaTeX。我并不一定需要一种适用于所有这些引擎的方法;方法可能因引擎而异。
答案1
测试文件
\def\showcurrentfontpath{%
\immediate\write20{}%
\immediate\write20{Current font at line \the\inputlineno}%
\immediate\write18{kpsewhich \fontname\font.tfm}%
\immediate\write20{}%
}
abc\showcurrentfontpath
{\it abc\showcurrentfontpath}
\bye
编译后pdftex
控制台将显示
Current font at line 8
/usr/local/texlive/2017/texmf-dist/fonts/tfm/public/cm/cmr10.tfm
Current font at line 10
/usr/local/texlive/2017/texmf-dist/fonts/tfm/public/cm/cmti10.tfm
如果需要打印输出,请使用以下文件进行编译pdftex -shell-escape
\def\showcurrentfontpath{%
\begingroup\edef\x{\fontname\font.tfm}%
\par\noindent
\tt Current font at line \the\inputlineno:%
\par\noindent
\input"|kpsewhich \x"
\endgroup
}
abc\showcurrentfontpath
{\it abc\showcurrentfontpath}
\bye
-recorder
另一种方法是使用命令行选项运行引擎,这将写入一个.fls
包含每个输入文件信息的文件。但是,预加载的字体(如上述两种)不会显示,因为它们已在格式创建时输入。
对于 XeTeX,你需要挂接xdvipdfmx
,但不幸的是它不会显示.pfb
文件的完整路径:使用
xetex -output-driver="xdvipdfmx -vv" test
并且.tfm
文件将显示其完整路径以及 OpenType 或 TrueType 字体。.pfb
正如我所说,不是。
答案2
这是为了补充egreg 的精彩回答。
egreg 的宏会打印出文件的完整路径.tmf
,但不会打印出字形文件的完整路径。它适用于所有三个引擎。
要查看字形文件,请按以下步骤操作。
pdflatex
+lualatex
:字形文件的完整路径将写入文件.log
。(建议技术员(lualatex
) 和米科(pdflatex
)。)
或者,将-recorder
选项添加到命令行。完整路径将写入文件.fls
。(egreg 在他的回答中建议。)xelatex
\XeTeXtracingfonts=1
:在命令前添加\documentclass
。完整路径将写入.log
文件。(由 Ulrike Fischer 建议这里和这里。
* 感谢 David Carlisle让我意识到TeX 字体规范分布在tmf
文件和字形文件中。