Metafont Book - gray.tfm 的问题和显示“实验 2”

Metafont Book - gray.tfm 的问题和显示“实验 2”

我正在研究 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命令时出现上述错误。

  1. 有什么想法为什么我应该显示字母“O”的“窗口”是空白的?
  2. 我该如何解决gray.tfm 错误?
  3. 这两者有关系吗?

注意:我使用的是 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

运行texlatex

$ 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 上,步骤如下:

  1. 我通过输入以下内容找到了灰色和黑色的“源”文件$ find /usr/local/texlive -name 'gray.mf' ——结果/usr/local/texlive/2013/texmf-dist/fonts/source/public/knuth-local/gray.mf
  2. 由于该位置不是用户可写的,所以我必须将该目录复制到可写位置:

    $ cp -r /usr/local/texlive/2013/texmf-dist/fonts/source/public/knuth-local ~/
    
  3. $ cd ~/knuth-local

  4. 教程 pdf 讨论了分辨率等问题,但据我所知,应该使用 600dpi,这是 HP LaserJet 4 打印机的原始分辨率。我想自那个时代以来,几乎所有激光打印机的分辨率都是 600dpi 或更高。

  5. 确认gray.mf设置为使用。这对应于设置为 600dpi 的graylj模式:ljfour

    $ cat gray.mf
    
    input graylj % 'standard' gray font is for the laserjet
    
  6. $ mf "\mode=ljfour; input gray.mf"编译字体。

  7. $ gftopk gray.600gf gray.pk

  8. $ kpsewhich -var-value=TEXMF这表明这~/Library/texmf是我的“本地”更改目录。

  9. $ mkdir -p ~/Library/texmf/fonts/pk/ljfour/public/misc/dpi600/; cp gray.pk ~/Library/texmf/fonts/pk/ljfour/public/misc/dpi600/

  10. $ mkdir -p ~/Library/texmf/fonts/tfm/public/misc/; cp gray.tfm ~/Library/texmf/fonts/tfm/public/misc/

  11. 重复步骤 5 到 10,让 black.mf 使用“烟雾”模式。

  12. $ texhash

  13. 现在,我可以成功运行 gftodvi。

**但是,我仍然无法解释为什么在从提示加载 io.mf 文件时会出现空白屏幕。

正如我的问题中提到的,我最初的问题发生在 Ubuntu 上,并且我验证了上述步骤在 Ubuntu 上也有效(尽管 TEXMF“本地”目录不同。)

所有上述步骤均在上述链接中的教程 pdf(附录 B)中以不同的细节进行描述。

相关内容