![Metafontパラメータを微調整してComputer Modernの薄型バージョンを作成する](https://rvso.com/image/449616/Metafont%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E5%BE%AE%E8%AA%BF%E6%95%B4%E3%81%97%E3%81%A6Computer%20Modern%E3%81%AE%E8%96%84%E5%9E%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B.png)
私は、すべての Computer Modern グリフのカスタム バージョンを作成したいと思っています。このバージョンでは、パラメータを調整して、ペン ストロークが非常に細くなるようにしています (基本的に塗りつぶしはなく、中央のスケルトン ストロークのみ)。私の目標は、autotrace
これらのストロークを SVG パスに変換し、他のプログラム (ペン プロッタ、Mathjax など) で使用できる単一ストロークのグリフを作成することです。
Metafont と CM の本は少々圧倒的なので、正しい方向を指し示すアドバイスや簡単な例をいただければ幸いです。具体的には、
現在の TeX ディストリビューションを使用して、CM のすべてのグリフを作成するにはどうすればよいでしょうか?
細く一定幅のストロークを描くために調整する必要があるすべてのパラメータを見つけるのに最適な場所はどこですか?
編集:明確にするために、私が求めているものを描写します
Metafontのソースから始めます(ここWikipediaからコピー)
%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
すべての文字が変更されます。
を実行すると、2400 dpi 解像度のすべての文字のビットマップを含むファイルmf '\mode=supre; mode_setup; input cmr10.mf'
が生成されます。を適用して、ファイル内の mf 出力の圧縮形式を作成できます。 次の自動トレース プロセスでは、高解像度が求められます。cmr10.2400gf
gftopk cmr10.2400gf
cmr10.2400pk
全てのCMグリフを1つのコマンドで生成したい場合は、
for i in cm*.mf ; do mf '\mode=supre; mode_setup; input' $i; done
編集png
ファイル (1 ファイルにつき 1 文字)を作成したい場合は、ソフトウェアを使用できます。まず、を使用してから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
各文字は 1 ページにあります。最後に を実行しますdvipng --freetype0 cm
。一連のcm*.png
ファイルが作成されます。 のデフォルトの解像度はdvipng
400 なので、フォントを 6 倍に拡大して (\font
コマンドを参照)、結果の解像度を 2400 にします。--freetype0
オプションを使用すると、dvipg
ビットマップ フォントが使用され、6x400=2400 解像度のフォントが検索され、ユーザーが準備したファイルが使用されますcmr10.2400pk
。