确定字体编码中使用哪些字形

确定字体编码中使用哪些字形

我想使用我最喜欢的字体之一 Crimson,同时仍保持软件包的完全支持microtype。由于软件包不完全支持 XeTeX 和 LuaTeX microtype(从版本 2.5 beta 08 开始,“调整字间距和字距仅适用于 pdfTeX (≥ 1.40)”),我不得不将 Crimson 字体文件从格式转换OTF为 (pdf)TeX 使用的 Type 1 格式。在将字体文件转换为 Type1 格式的过程中otftotfm,我遇到了一些我想解决的问题。

  • 当我使用编码将OTF文件转换为 Type 1 格式时,显示以下警告。T1otftotfm

$ sudo otftotfm -e ec -fcalt -fdlig -ffrac -fkern -fonum -fordn -fpnum -fsinf -fsmcp -fsubs -fsups -fzero --vendor sebastiankosch Crimson-Roman.otf T1--Crimson--Roman

...
otftotfm: warning: not enough room in encoding, ignoring 8 glyphs
otftotfm: (This encoding doesn’t have room for all the glyphs used by the
otftotfm: font, so these have been left out:
otftotfm:   T_h f_f_b f_f_h f_f_j f_f_k f_h f_j f_k.
otftotfm: To select specific glyphs, add them to the input encoding.)
...

我知道 pdfTeX 将给定字体中的字形数量限制为 256 个,并且字体编码的目的是确定在 256 个位置中的每个位置使用的字符。但我想使用遗漏的连字符otftotfm。我怎样才能将这些额外的连字符包含在字体中而不产生任何副作用?如果这不可能,哪些字形可以安全地移动到另一种字体而不会影响连字之类的功能?我该如何做到这一点?

  • 如果我想包含旧式数字和其他符号(例如西里尔字母),我是否必须为此创建单独的字体?

  • 为什么 pdfTeX 中给定字体的字形限制为 8 位、256 个?这个限制似乎很愚蠢,而且完全是任意的 --- 为什么这个限制仍然存在?

答案1

每个字体 256 个插槽的限制源自 TFM 格式,对此我们无能为力。请记住,TeX 是在 80 年代完成的,当时的字体技术仅使用两个字节编码的字体。

的开发pdftex早于 OpenType 字体;开发人员选择与 TeX 的方案和 TFM 字体格式保持一致。

当 TeX 收到“打印一个字符”的指令时,它会从当前字体中获取相应的位置。因此,如果您希望从另一种字体中获取连字符,则必须明确更改当前字体。没有办法告诉 TeX“如果您发现ffk将字体更改为“Crimson 连字符”,并f_f_k从该字体排版连字符”。

因此,要么释放输出编码并删除不太有用的字符,要么放弃一些连字符。我知道这是一个很大的限制,但没有pdftex什么可做的。还请注意,pdftex如果字体发生变化,则不会对单词进行连字符处理。LuaTeX 提出了这一限制。

我认为,如果您确实需要花哨的连字、字体功能(例如旧式数字)和不同的字符集,那么最好的选择是切换到 Lua(La)TeX。 的 2.8 测试版microtype应该可以与 LuaLaTeX 几乎完全兼容,就其功能而言pdftex。相反,XeLaTeX 存在局限性。

答案2

请注意,旧式数字不是问题。您只需创建多个与您可能希望使用的不同数字集相对应的 1 型字体即可。因此,例如 A 和 a 适用于所有这些字体。旧式数字适用于一种字体,而 适用于另一种字体,依此类推。无论您需要什么。

连字更成问题。如果 LY1 编码涵盖了您想要排版的语言,那么它将允许包含更多连字,因为它有空闲插槽。否则,您必须开始从 T1 编码中释放插槽,以便为连字腾出空间。例如,花体和替代字符也会出现同样的问题。T1 编码没有空闲插槽,因此除了 ff、fi、ffi、fl 和 ffl 之外,获取连字或替代字符的唯一方法是释放插槽。

这些工具在过去几年中可能有所改进,但当我经常这样做时,我发现自动生成无法产生令人满意的结果,超出了基本范围。对于自动化过程来说,您需要做出太多决定 - 并且许多字体中存在太多怪癖 - 以生成支持更高级功能的输出。但是,也许我太轻易地放弃了这些工具!手动完成这项工作肯定是一项耗时且繁琐的工作......

相关内容