我希望制作所有 Computer Modern 字形的自定义版本,其中的参数经过调整,使得笔划非常细(基本上没有填充,只有中央骨架笔划)。我的目标是将autotrace
这些笔划转换为 SVG 路径,从而生成单笔划字形,供其他程序(笔式绘图仪、Mathjax 等)使用。
Metafont 和 CM 书籍有点让人不知所措,所以我很希望得到建议/简单的例子来指引我正确的方向,具体来说:
使用当前的 TeX 分布,怎样才能生成所有 CM 的字形?
在哪里可以找到需要调整的所有参数,以制作细的、宽度恒定的笔画?
编辑:为了澄清起见,以下是我所追求的描述
从 Metafont 源开始(这里从维基百科复制而来)
%file name: beta.mf
%mode_setup;
% Define a beanlike shape for the character B
beginchar("B",11pt#,11pt#,0);
% Setup coordinates as an equation system
y1=y2=y3=0;
y4=y5=y6=h;
x1=x4=0;
x2=x5=w;
x3=x6=2*w;
% Define pen
pickup pencircle xscaled 0.2w yscaled 0.04w rotated 45;
% Draw the character curve
% z1 is the same as (x1, y1)
draw z1..z3..z6{z2-z6}..z5..{z4-z2}z4..cycle;
endchar;
end
可以生成一个字形(光栅或矢量,这并不重要),然后通过自动跟踪(例如通过 Inkscape)进行处理,以仅获取中心线,
现在,我希望以编程方式对 Computer Modern 中的 2200 多个字形执行此操作,其中许多字形的笔画会使算法感到困惑,因为它们的粗细差异太大。我希望通过首先生成具有几乎均匀笔画的 CM 字形版本来帮助自动跟踪算法。
答案1
CM 字体的 Metafont 源位于fonts/source/public/cm/
TeXlive 中。每个具有真实字体名称的文件(例如cmr10.mf
)都包含大约 60 个参数的设置,最后一行是generate roman
或generate textit
等等。这将运行所有字符都由程序描述的文件,这些程序使用上述参数作为全局变量。因此,如果您更改参数,则cmr10.mf
所有字符都会更改。
您可以运行mf '\mode=supre; mode_setup; input cmr10.mf'
以生成cmr10.2400gf
包含所有字符的位图的文件,分辨率为 2400 dpi。您可以申请gftopk cmr10.2400gf
在文件中创建 mf 输出的压缩格式cmr10.2400pk
。下一个自动跟踪过程需要高分辨率。
如果你希望通过单个命令生成所有 CM 字形,请尝试
for i in cm*.mf ; do mf '\mode=supre; mode_setup; input' $i; done
编辑如果您想要创建png
文件(每个文件一个字符),那么您可以使用软件。首先,使用来dvipng
创建位图版本并将其保留在您的实际目录中。然后您可以创建一个文件(例如):cmr10.2400pk
cmr10.2400pk
gftopk
cm.tex
\font\f=cmr10 scaled 6000
\f
\nopagenumbers
a
\vfil\break
b
\vfil\break % ... etc
\bye
运行tex cm
以创建cm.dvi
。每个字母都在一个页面上。最后运行dvipng --freetype0 cm
。它会创建一堆cm*.png
文件。由于的默认分辨率为dvipng
400,我们将字体缩放 6 倍(参见\font
命令)以获得结果中的分辨率 2400。当--freetype0
使用该选项时,然后使用位图字体,它会在 6x400=2400 分辨率中搜索字体并使用您准备的dvipg
文件。cmr10.2400pk