通过调整 Metafont 参数制作精简版 Computer Modern

通过调整 Metafont 参数制作精简版 Computer Modern

我希望制作所有 Computer Modern 字形的自定义版本,其中的参数经过调整,使得笔划非常细(基本上没有填充,只有中央骨架笔划)。我的目标是将autotrace这些笔划转换为 SVG 路径,从而生成单笔划字形,供其他程序(笔式绘图仪、Mathjax 等)使用。

Metafont 和 CM 书籍有点让人不知所措,所以我很希望得到建议/简单的例子来指引我正确的方向,具体来说:

  1. 使用当前的 TeX 分布,怎样才能生成所有 CM 的字形?

  2. 在哪里可以找到需要调整的所有参数,以制作细的、宽度恒定的笔画?

编辑:为了澄清起见,以下是我所追求的描述

从 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 romangenerate 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.2400pkcmr10.2400pkgftopkcm.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文件。由于的默认分辨率为dvipng400,我们将字体缩放 6 倍(参见\font命令)以获得结果中的分辨率 2400。当--freetype0使用该选项时,然后使用位图字体,它会在 6x400=2400 分辨率中搜索字体并使用您准备的dvipg文件。cmr10.2400pk

相关内容