我使用 metafont 创建了一个业余字体。我想在字体中包含一些重音符号,但我不确定实现该目标的标准方法是什么(gogle 没什么帮助),以便字体可以与 LaTeX(如果需要,可以使用 pdflatex)配合使用。
如何在 LaTeX 中加载字体,以便将其用于其定义的字符,并将其余的字符使用一些后备字体(带有警告)?(简单地说,我只是这样做
\font\myFont=myFont \myFont
,但未定义的字符根本没有排版)如何定义重音符号的形状,放置在带有
\'
, ... 的字形之上?我猜想这与字体编码有关,例如T1
?我发现虚拟字体指南,其中只提到了从 PS 字体创建虚拟字体。我也可以使用 metafont 生成的字体吗?
我需要虚拟字体吗?或者有更简单的替代方案?
编辑:我正在考虑使用 Lilypond 的方法(和一些脚本):使用 mftrace 跟踪 metafont,然后使用 fontforge 脚本创建 OpenType 字体。(它需要 mf 日志读取技巧,但可以工作)如果我将重音符号作为组合字符包含在 OTF 中,它们会自动与 XeTeX 一起使用吗?现在看起来是最简单的,我只是被躲避了吗?
如果问题让你困惑,我很抱歉,因为我对字体还不熟悉。谢谢大家的指点——
附言:我尝试使用 XeLaTeX+fontspec 加载字体,但得到(ignota.tfm 在当前目录中):
fontspec.cfg loaded.
(/usr/share/texmf-texlive/tex/xelatex/fontspec/fontspec.cfg))
! Undefined control sequence.
\zf@set@font@type ...onttype \zf@basefont \zf@tfm
\or \zf@atsuitrue \ifnum \...
l.4 \setmainfont{ignota}
备注:每个人都喜欢截图 :-)
答案1
同时,我找到了一个部分解决方案。使用T1
(=Cork?) 编码,它是 8 位的,但足以覆盖西欧/中欧语言(我现在需要的全部)。
在 Metafont 文件中,将字符定义为
beginchar(##,...)
,其中##
是 T1 编码中的数字(例如此处,第 23 页或tex256.enc),例如é是233等等。未直接覆盖的重音字母(如 ā)
T1
由字体内的重音符号组成(位置 0-11)然后,将字体引入 LaTeX(我使用了书法作为模板)并定义一个激活它的简写:
% 10.0 is scaling factor; I guess I have something wrong as it is must be that big... \DeclareFontShape{T1}{ignota}{m}{n}{<->s*[10.0]ignota}{} \DeclareRobustCommand\ignota{ \fontfamily{ignota}% \fontencoding{T1}% \selectfont }
kpathsea 自动处理从 ignota.mf 生成的度量和位图字体。
以下文本使用\usepackage[T1]{fontenc}
、\usepackage[utf8x]{inputenc}
和\usepackage{ignota}
;重音符号全部输入为 utf8 重音符号;适用于 LaTeX 和 pdfLaTeX。哦,是的,我知道它在印刷上看起来很糟糕:
我仍然不清楚:如何将字体转换为轮廓字体?运行mftrace
就够了吗?我可以直接在 XeTeX 中使用字体,而无需进行其他转换吗?