![tex4ht:如果缺少字体该怎么办](https://linux22.com/image/454287/tex4ht%EF%BC%9A%E5%A6%82%E6%9E%9C%E7%BC%BA%E5%B0%91%E5%AD%97%E4%BD%93%E8%AF%A5%E6%80%8E%E4%B9%88%E5%8A%9E.png)
我刚刚开始学习该工具的功能tex4ht
。它工作正常,但有一个例外:编译
\documentclass{scrartcl}
\usepackage{igo}
\usepackage[T1]{fontenc}
%%
\begin{document}
%%
\begin{minipage}[c][1.0\height][r]{0.5\textwidth}
\cleargoban\gobansize{19}\igofontsize{8}
\black{e3,e4,b4,a3,a4,d4,g3,g2,c4,d2}
\white{b1,b3,f2,e2,d3,c3,a2}
\copytogoban{1111}
\shortstack{\showgoban[a1,t11]}\par
\texttt{P-001 (C): Black plays}\par
\end{minipage}
\end{document}
我tex4ht
收到错误消息
[37m[STATUS] [0mmake4ht: Conversion started
[37m[STATUS] [0mmake4ht: Input file: mwe-igo.tex
--- warning --- Couldn't find font `igowhitei8.htf' (char codes: 0--127)
稍后编译器尝试生成字体,但失败了,例如
kpathsea: Running mktexpk --mfmode cx --bdpi 300 --mag 1+276/300 --dpi 576 igowhitei8
mktexpk: don't know how to create bitmap font for igowhitei8.
mktexpk: perhaps igowhitei8 is missing from the map file.
我已正确安装所有程序,并且pdflatex
运行正常,没有任何错误消息。警告后还弹出以下(较长)消息:
----------------------------------------------------
environment file
----------------------------------------------------
% unix/tex4ht.env (2019-03-07), generated from tex4ht-env.tex, and
% modified by hand for TeX Live (unix).
% Copyright 2009-2019 TeX Users Group
% Copyright 1997-2009 Eitan M. Gurari
..
%
tpath/tex/texmf/fonts/tfm/!
我没有/tex/texmf/fonts/tfm
目录,一切都安装~/Library/texmf
在我的 iMac 上。四处寻找,我发现了一个讨论1,这表明我必须在某处更改目录注释。但如果我的猜测正确,该怎么办?
答案1
TeX4ht 需要它遇到的所有字体的字体映射表。它们将字体中的字符映射到 Unicode 字符。当缺少此类映射时,它将显示您看到的错误消息。
对于文本字体,我们有创建这些映射文件的辅助工具,特发。但对于更复杂的字体,比如数学字体或各种基于图片的字体,如果没有对应的 Unicode 字符,情况就更加困难,需要手动进行映射。
在您的示例中,软件包提供的字体igo
似乎仅用于游戏板的图片。必须将此游戏板转换为图片才能保持其外观。此图片转换由 DVI 到图片转换器(例如 Dvipng 或 Dvisvgm)完成。在这种情况下,您不需要映射,只需使用一个.htf
抑制错误消息的虚拟文件即可。
您可以.htf
使用以下命令创建虚拟文件:
for i in *.tfm; do echo ".lm-ec" > ${i%.*}.htf; done
如果您希望它们在您的系统上可用,请将这些文件放入您的本地 TEXMF 树,例如这个路径在我的系统上有效:
~/texmf/tex4ht/ht-fonts/unicode/igo/
我猜,这条路:
~/Library/texmf/tex4ht/ht-fonts/unicode/igo/
应该适合你。
要为游戏板创建图片,请使用以下文件igo.4ht
:
\NewConfigure{showgoban}{2}
\def\:tempa#1#2#3#4{\a:showgoban\o:igo@showgoban:{#1}{#2}{#3}{#4}\b:showgoban}
\HLet\igo@showgoban\:tempa
\Configure{showgoban}{\Picture*{}}{\EndPicture}
\Hinput{igo}
您可以将此文件放置到
~/Library/texmf/tex/generic/tex4ht/igo.4ht
它重新定义了用于打印板的命令,并调用\Picture
和\EndPicture
命令来请求将所包含的代码转换为图片。请参阅TeX4ht 文档了解有关.4ht
文件的更多信息。将此文件放在与您的文档相同的目录中。
使用以下方法编译您的文件:
make4ht -m draft mwe-igo.tex
结果如下:
答案2
根据上一条建议我做了以下事情:
创建
igobl10.mf
并使用包中的igowh10.mf
原始文件并生成等文件。mf
igo
tfm
創建
mwe-mf.tex
:
\documentclass{article}
\font\mybl=igobl10
\font\mywh=igowh10
\begin{document}
{\mybl \char0 \char10}
{\mywh \char1 \char10}
\end{document}
运行正常。
- 下一步是测试:
\documentclass{article}
\input showfonts.4ht
\begin{document}
\showfonts
{igobl10}
{igowh10}
{}
\end{document}
PDF 文件显示正确的字形。出现错误消息,提示缺少某些字符,例如Missing character: There is no ¡ in font igobl10!
。但这是意料之中的。 以下是 PDF 文件的一部分
- 然后我运行
make4ht -m draft mwe-mf.tex
并收到错误消息(例如)
--- warning --- Couldn't find font igowh10.htf (char codes: 0--127)`
- 我生成了
htf
文件igobl10.htf
并igowh10.htf
输入
igobl10 0 127 <-- line 1
’’ ’1’ <-- line 2
’’ ’1’
’’ ’1’
...
’’ ’1’ <-- line 129
igobl10 0 127 <-- line 130
其中第 2 行至第 129 行(= 127 - 0 + 1)包含'' '1'
并将它们存储在与TeX
文件相同的目录中
- 现在运行
make4ht
我收到错误消息
--- warning --- Improper signature at start of file `.htf'
--- warning --- File `igowh10.htf' starts/ends with character code 0 (instead of 127)
igowh10 0 127
0: ’’ ’1’
1: ’’ ’1’
2: ’’ ’1’
...
127: ’’ ’1’
128: igowh10 0 127--- error --- Improper file `igowh10.htf'
如果我注释掉{\mywh \char1 \char10}
TeX 文件中的这一行,我会得到
[STATUS] make4ht: Input file: mwe-mf.tex
--- warning --- Improper entry (line 0)
--- warning --- Improper entry (line 1)
....
--- warning --- Improper entry (line 125)
--- warning --- Improper entry (line 126)
igobl10 0 127
0: ’’ ’1’
1: ’’ ’1’
2: ’’ ’1’
...
126: ’’ ’1’
127: ’’ ’1’
128: igobl10 0 127--- error --- Improper file `igobl10.htf'
你能提示我我做错了什么吗?