我正在研究 Knuth 的 Metafont Book,为学习 Metapost 做准备,在研究他的“实验”时遇到了一些问题。我在我的系统上安装了最新的 TeX Live 2013 发行版,但遇到了问题。
以下是代码(包含在 Knuth 推荐的 io.mf 文件中):
mode_setup;
em#:=10pt#; cap#:=7pt#;
thin#:=1/3pt#; thick#:=5/6pt#;
o#:=1/5pt#;
define_pixels(em,cap);
define_blacker_pixels(thin,thick);
define_corrected_pixels(o);
curve_sidebar=round 1/18em;
beginchar("O", 0.8em#, cap#, 0); "The letter O";
penpos1(thick,10); penpos2(.1[thin,thick],90-10);
penpos3(thick,180+10); penpos4(thin,270-10);
x1l=w-x3l=curve_sidebar; x2=x4=.5w;
y1=.49h; y2l=-o; y3=.51h; y4l=h+o;
penstroke z1e{down}..z2e{right}
..z3e{up}..z4e{left}..cycle;
penlabels(1,2,3,4); endchar;
现在,运行mf
命令并加载此文件时,我得到的窗口很不幸是空的。应该出现一个大写字母“O”。
$ mf
This is METAFONT, Version 2.718281 (TeX Live 2013)
**io
(io.mf
The letter O [79])
*end
Output written on io.2602gf (1 character, 1724 bytes).
Transcript written on io.log.
$ gftodvi io.2602gf
gftodvi: fatal: tfm file `gray.tfm' not found.
然后,当我尝试使用该gftodvi
命令时出现上述错误。
- 有什么想法为什么我应该显示字母“O”的“窗口”是空白的?
- 我该如何解决gray.tfm 错误?
- 这两者有关系吗?
注意:我使用的是 Ubuntu 14.04,但 TeXLive 安装不是来自 Ubuntu 存储库。我使用了http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz并创建了本地“便携式”安装。
答案1
TeX Live 可以自动生成缺失的 TFM 文件:
mktextfm gray
mktextfm black
文档:帕西阿,第“2.2.9mktex
脚本”一节。
TeX 和朋友们正在使用 kpathsea 库进行文件查找。根据配置,该库会运行帮助程序mktex*
来创建缺失文件。例如,如果找不到文件mktextfm
,则会触发。.tfm
该答案的以下旧版本使用了这种间接触发。
旧版本
以下 TeX 文件test.tex
加载字体:
\font\gray=gray \gray
\font\black=black \black
\csname @@end\endcsname\end
运行tex
或latex
:
$ tex test
This is TeX, Version 3.14159265 (TeX Live 2014) (preloaded format=tex)
(./test.tex
kpathsea: Running mktextfm gray
mktextfm: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1; nonstopmode; input gray
This is METAFONT, Version 2.7182818 (TeX Live 2014) (preloaded base=mf)
([TEXMFDIST]/fonts/source/public/knuth-local/gray.mf
([TEXMFDIST]/fonts/source/public/knuth-local/graylj.mf
([TEXMFDIST]/fonts/source/public/knuth-lib/grayf.mf
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
[17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31]
[32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46]
[47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61]
[62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76]
[77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91]
[92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105]
[106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117]
[118] [119] [120] [121] [122] ) ) )
Font metrics written on gray.tfm.
Output written on gray.600gf (123 characters, 13144 bytes).
Transcript written on gray.log.
mktextfm: [TEXMFVAR]/fonts/tfm/public/knuth-local/gray.tfm: successfully generated.
)
No pages of output.
Transcript written on test.log.
(我省略了生成black.tfm
并用搜索路径变量的名称替换了路径。)
然后gftodvi
发现gray.tfm
。
答案2
正如 @egreg 指出的那样,gray.tfm 和 black.tfm 不再存在于 TeX Live 中。对于像我这样尝试使用 Metafont 书籍的人来说,这肯定是一个问题,而且据我所知,编译后的 .tfm 文件不在 CTAN 上(至少搜索 gray.tfm 没有任何结果)。
然而,互联网搜索确实让我找到了http://metafont.tutorial.free.fr/其中有一个 PDF 解释如何手动编译灰色(和黑色)字体。
在我安装 TeX Live 2013 的 OSX 上,步骤如下:
- 我通过输入以下内容找到了灰色和黑色的“源”文件
$ find /usr/local/texlive -name 'gray.mf'
——结果/usr/local/texlive/2013/texmf-dist/fonts/source/public/knuth-local/gray.mf
由于该位置不是用户可写的,所以我必须将该目录复制到可写位置:
$ cp -r /usr/local/texlive/2013/texmf-dist/fonts/source/public/knuth-local ~/
$ cd ~/knuth-local
教程 pdf 讨论了分辨率等问题,但据我所知,应该使用 600dpi,这是 HP LaserJet 4 打印机的原始分辨率。我想自那个时代以来,几乎所有激光打印机的分辨率都是 600dpi 或更高。
确认
gray.mf
设置为使用。这对应于设置为 600dpi 的graylj
模式:ljfour
$ cat gray.mf input graylj % 'standard' gray font is for the laserjet
$ mf "\mode=ljfour; input gray.mf"
编译字体。$ gftopk gray.600gf gray.pk
$ kpsewhich -var-value=TEXMF
这表明这~/Library/texmf
是我的“本地”更改目录。$ mkdir -p ~/Library/texmf/fonts/pk/ljfour/public/misc/dpi600/; cp gray.pk ~/Library/texmf/fonts/pk/ljfour/public/misc/dpi600/
$ mkdir -p ~/Library/texmf/fonts/tfm/public/misc/; cp gray.tfm ~/Library/texmf/fonts/tfm/public/misc/
重复步骤 5 到 10,让 black.mf 使用“烟雾”模式。
$ texhash
- 现在,我可以成功运行 gftodvi。
**
但是,我仍然无法解释为什么在从提示加载 io.mf 文件时会出现空白屏幕。
正如我的问题中提到的,我最初的问题发生在 Ubuntu 上,并且我验证了上述步骤在 Ubuntu 上也有效(尽管 TEXMF“本地”目录不同。)
所有上述步骤均在上述链接中的教程 pdf(附录 B)中以不同的细节进行描述。