众所周不知,tex.web通过weave和tangle得到两种不同的格式,比如:
weave tex.web #--> tex.tex
在tex.tex首行加入\input webmac
,编译:
pdftex tex.tex #--> tex.pdf
生成的pdf默认使用Computer Modern,曲线很漂亮但笔划太细不适合屏幕阅读,怎么换成其他字体呢?
把webmac
改成pdfwebmac
,添加一行,新的字体mapping:
\pdfmapline{cmr10 TeXGyrePagella-Regular "encqcs ReEncodeFont" </path/my-q-cs.enc <qplr.pfb}
命令 | 描述 |
---|---|
cmr10 | cmr10.tfm tex默认正文字体 |
TeXGyrePagella-Regular | 在PDF显示的字体名 |
encqcs ReEncodeFont | PS命令,映射编码 |
/path/my-q-cs.enc | 字符映射文件和路径 |
qplr.pfb | 字体实体 |
这里的q-cs.enc
可以通过:kpsewhich q-cs.enc
找到,将其复制出来命名为my-q-cs.enc
,用编辑器打开,把/backslash
和/quotedblleft
调换一下位置。这么做是因cmr10.pfb
和qplr.pfb
对应的enc文件里,这两个符号的位置不一致,更改后用pdftex编译。
cat $(kpsewhich psfonts.map) | grep 'cs-qplr'
问题已经基本解决,至于一些微调参数不需要考虑,能显示再说。接着还有一个问题,比如:
pdftex tex.tex
生成的pdf调用了点阵字体,是因为mapping不对,在\input webmac
再前面添加如下内容:
\pdfmapline{logo10 Logo10 < logo10.pfb}
\pdfmapline{cmtex10 CMTEX10 < cmtex10.pfb}
\pdfmapline{cmr9 CMR9 < cmr9.pfb}
\pdfmapline{cmtt10 CMTT10 < cmtt10.pfb}
\pdfmapline{cmex10 GCMEX10 < cmex10.pfb}
\pdfmapline{cmmi7 GCMMI7 < cmmi7.pfb}
\pdfmapline{cmsy7 GCMSY7 < cmsy7.pfb}
\pdfmapline{cmr7 GCMR7 < cmr7.pfb}
\pdfmapline{cmmi10 GCMMI10 < cmmi10.pfb}
\pdfmapline{cmti10 GCMTI10 < cmti10.pfb}
\pdfmapline{cmsl10 GCMSL10 < cmsl10.pfb}
\pdfmapline{cmbx10 GCMBX10 < cmbx10.pfb}
\pdfmapline{cmr8 GCMR8 < cmr8.pfb}
\pdfmapline{cmsy10 GCMSY10 < cmsy10.pfb}
不过,一开始使用pdftex编译的时候会显示错误,可以在missing.log文件查看缺失的字体:
mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 logo10
mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 cmtt10
mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 cmr9
mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 cmtex10
现在说回来,如果不改enc
文件呢?可以看到comipler前面的backslash怪怪的:
如果我们用pdftex tesetfont
--> cs-qplr
--> \table\bye
得到testfont.pdf,看看cs-qplr.tfm的映射表q-cs.enc
的字符:
cmr10 的字符:
明显可以看到,两个mapping文件是不一样的。这就是tex encoding过于复杂多变的另外一个体现。