答案1
大部分程序与我的相同在我的回答中概述了有关 type1 字体。在这里,我将只关注处理 TTF 字体所涉及的额外复杂问题。我将忽略一些不适用于大多数情况的罕见复杂问题,而只关注标准复杂问题。
你有两个选择。
选项1
将字体转换为 type1 格式,然后按照其他答案中的描述进行操作。
优点:
- 与传统的 TeX 引擎兼容;
- 准备支持文件所涉及的复杂情况更少:您只需处理一个复杂情况(转换)即可完成。
缺点:
- 据我所知,转换不可避免地会导致一些质量损失,因为两种字体格式以不同的方式指定曲线;
- 字体许可证可能不允许转换。
有各种工具可用于执行转换。FontForge 可能是最明显的例子。如果字体合适,您也可以使用autoinst
它来转换它,准备大部分所需的文件并安装它。我autoinst
自己不太喜欢和朋友,但这种方法可能比路线更受欢迎,fontinst
因为它更自动化。
选项 2
使用 truetype 字体,无需转换为 type1。
优点:
- 无质量损失;
- 兼容更多字体许可证,但可能不是全部。
缺点:
- 不能与传统的 TeX 一起使用,但需要 pdfTeX;
- 稍微复杂一些,因为安装过程中的各个阶段都需要进行调整。
要使用此方法,我通常首先执行以下操作:
- 适当地重命名文件;
- 用于
ttf2afm
为每个 TTF 生成一个 AFM 文件。
通常,这很简单。偶尔,也会有复杂情况。ttf2afm
例如,可能会抱怨它不能容纳所有字距调整对。对此你无能为力,我只会继续。如果遇到更严重的问题,你可以尝试使用 FontForge 来制作 AFM,但更严重的错误通常意味着 TTF 设计太差,字体无可救药,最好放弃,不要再投入更多时间。
然后按照前面的步骤继续进行,fontinst
但需要进行以下更改:
XYZ-map.tex
应按如下方式调整:\input finstmsc.sty \resetstr{PSfontsuffix}{.ttf} \adddriver{dvips}{XYZ.map} \adddriver{pltotf}{XYZ-pltotf.sh} \input XYZ-rec.tex \donedrivers \bye
XYZ
您使用的前缀在哪里(例如sck
在链接的示例中)。XYZ.sty
应按如下方式调整:\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{XYZ}[2016/06/21 v1.0 XYZ] %%We don't want to add the map file through updmap because only pdftex can use truetype fonts. \pdfmapfile{+XYZ.map} \DeclareOption{default}{% \renewcommand{\sfdefault}{XYZ}} \ProcessOptions \DeclareRobustCommand{\XYZfamily}{% \fontseries{m}% \fontshape{n}% \fontfamily{XYZ}% \selectfont} \DeclareTextFontCommand{\XYZ}{\XYZfamily} \endinput
继续测试字体,\pdfmapfile{+XYZ.map}
从测试文档中删除它,因为它包含在包文件中。
如果一切顺利,请按照 type1 的方式安装字体,并进行以下更改:
代替
mkdir -p <TEXMFLOCAL>/fonts/type1/public/XYZ
和
mkdir -p <TEXMFLOCAL>/fonts/truetype/public/XYZ
和
mv *.pfb *.pfm <TEXMFLOCAL>/fonts/type1/public/XYZ/
和
mv *.ttf <TEXMFLOCAL>/fonts/truetype/public/XYZ/
做 不是 跑步
updmap-sys
!!
重新测试。
这里的想法是避免将字体包含在 TeX 使用的映射中,因为字体无法与传统引擎配合使用。相反,当以特定于 pdfTeX 的方式加载包时,会添加映射。如果使用传统引擎,这将生成错误,抱怨未定义的控制序列,其中包括字符串,pdf
这应该可以轻松诊断问题。