为了更好地理解所有 LaTeX 内容,我一直在尝试使用虚拟字体(例如。替换连字符和如何创建虚拟字体?)。然而,我无法让 LaTeX 识别我的新 TFM 文件,我认为问题在于我对该\pdfmapline
命令缺乏理解。
以下是我采取的步骤:
从我的 tex 目录中复制已知可用的字体:
cp /usr/share/texmf-texlive/fonts/tfm/public/cm/cmr10.tfm .
创建一种人类可读的格式:
tftopl cmb10 cmb10
编辑cmb10.pl
并将新文件保存到foobar.vpl
。在本例中,我映射了字母 b->a,只是为了看看我所做的是否有效果(参见第 6 节)这里)接下来我将文件编译为二进制格式:
vptovf foobar.vpl
这将创建foobar.tfm
和foobar.vf
。通过阅读,似乎位于\pdfmapline
本地目录中,因此暂时,我可以将文件保留在原处。现在我的 LaTeX 文档如下所示:
\documentclass{article}
\pdfmapline{=foorbar cmr10}
\begin{document}
aaaa bbbb aaaa
\font\test=foobar aaaa bbbb aaaa \the\font
\end{document}
这可以编译但是不会将任何 b 替换为 a。
答案1
正如帕特里克所观察到的,您不会切换到新字体。
确实,添加后
(MAPFONT D 0 (FONTNAME cmr10))
到生成的pl
文件中,将条目更改b
为
(CHARACTER C b
(CHARWD R 0.555557)
(CHARHT R 0.694445)
(MAP
(SELECTFONT D 0)
(SETCHAR C a)
)
)
并保存为文档foobar.vpl
后vptovf foobar
\pdfmapline{=foobar cmr10}
aaa bbb aaa
\font\test=foobar aaa bbb aaa
\test aaa bbb aaa
\bye
处理后将pdftex
给予
aaa bbb aaa
aaa bbb aaa
aaa aaa aaa
正如预期的那样(这里没有显示精确的对齐)。
该命令\the\font
不执行任何操作:它仅生成选择当前字体的相应声明。如果要打印.tfm
文件名,则必须说\fontname\font
。如果我们将此指令添加到以下三行中,aaa bbb aaa
我们将得到
aaa bbb aaa cmr10
aaa bbb aaa cmr10
aaa aaa aaa fooaar
(第三行在b
打印时将 改为 a )。