これは pfb ファイルのバグですか、それとも metapost の「グリフ」のバグですか?

これは pfb ファイルのバグですか、それとも metapost の「グリフ」のバグですか?

私は最近始めたばかりです遊ぶmetapost の「グリフ」を使用しました。これらの実験から、cm フォント セットのセリフのパスに異常があることを発見しました (以下の MWE)。

出発点: metapost はフォントの .pfb ファイルからグリフを取得するようです (例.../texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb)。

私の質問は、次のどれが異常を引き起こしているのか、そしてバグレポートが必要かどうか、誰に送るべきかを判断することです...

  1. .pfbファイルにバグがあります。これはほとんどそれ自体が二重に繰り返され、ピクセルが埋められない可能性があるため、誰も気づきません。
  2. metapost がグリフをどこから取得するかについては私が間違っていますが、バグはそれがどこにあるのかに関係しています。
  3. metapost のグリフ コードにバグがあります。
  4. その他。

私がやったこと:

  1. これらのフォントを使用する他のプログラムが同じ .pfb ファイルを使用していることを確認し (はい、およびpdflatexについてはAFAICT latex|dvips|pstopdf)、これらの PDF 出力で大幅に拡大された文字を確認しましたが、運はありませんでした。
  2. .pfb からグリフを抽出する他のツールを探しましたが、見つかりません。(これに関するヒントがあると助かります)
  3. ストロークを確認しましたcmr.mf(実際はcmbase.mf) - Knuth のセリフは文字の残りの部分とは別のストロークなので、手がかりはありません。
  4. Knuth のソースからこれらの Type1 フォント (MFTOEPS など) を作成するために使用された可能性のあるさまざまなツールを調べましたが、それは私の専門外であると判断しました。
  5. texexchangeやさらに遠くまで見た
  6. バージョン情報 (MetaPost=v1.504、cmr10.pfb=v003.002) を確認し、より最近のメタポストの変更ログを確認しました。

私の MWE では、グリフの境界がオーバーシュートし、その後セリフで折り返され、 の「I」のグリフ内にわずかな余分な領域が表示されますcmr10。 のセリフの形状により、cmti10オーバーシュートはありますが余分な領域はありません。 これは、cm フォント セットの他のフォント (太字、傾斜) や、大文字と小文字の両方のセリフにも表示されます。

picture pic[];
path p[];
pair d;

pic0=btex  I\it I etex; % <---- the text to be analysed
_i:=1;
for $ within pic0:
    p[_i]=pathpart glyph (textpart $) of (fontpart $) scaled 1/100 shifted llcorner $ scaled 20;
    _i:=_i+1;
endfor

beginfig(1)
for i = 1 upto 20:
    if known p[i]:
        fill p[i] withcolor (.8,.8,.9);
        for j = 0 upto (length(p[i])-1):
            draw point j of p[i]--postcontrol j of p[i] dashed withdots scaled 1/4;
            draw point j+1 of p[i]--precontrol j+1 of p[i] dashed withdots scaled 1/4;
            fill fullcircle scaled 0.5mm shifted point j of (p[i]);
            d:=direction j of p[i];
            if abs(d)=0: d:=point j+4 of p[i] - point j-4 of p[i]; fi
            a:= if abs(d)=0: 0 else: angle(d) fi;
            draw thelabel.lft(decimal j infont "cmbx5",(0,0))
                rotated (a+90)
                shifted (point j of (p[i] )) withcolor blue;
        endfor
        draw p[i] withpen pencircle scaled 0.1;
    fi
endfor
endfig;

bye

ここに画像の説明を入力してください

答え1

pathpartこの問題は、 によって返される画像でのの使用に関連しているようですglyph。次のプログラムを検討してください。

prologues := 3;
outputtemplate := "glyph%c.eps";
beginfig(1);
  picture a;
  a = glyph "I" of "cmti12";
  draw a withcolor .9 white;
  draw pathpart a withcolor red;
endfig;
end.

すると、下の写真のような画像が出力されます。くぼんだセリフのギザギザがはっきりと見えます (赤色)。ただし、灰色の部分にはギザギザがないことに注意してください。

演算子glyphは、指定されたフォントで指定された文字の画像を返します。drawその画像だけの場合、アウトラインは正しく表示されます (画像の灰色の部分)。ただし、 によって返されたパスを描画すると、pathpart皿に余分なギザギザが表示されます。

pathpartこれは、フォント ファイルに問題があるのではなく、によって返された画像に適用されたときに問題があることを示していますglyph。私は MP 開発チームに問題を提起しました -> http://tracker.luatex.org/view.php?id=935

アップデート: 2015 年 5 月 15 日現在、このバグは修正されています。

ここに画像の説明を入力してください

mpost新しくコンパイルされたバージョン 1.999を使用した出力は次のとおりです。

ここに画像の説明を入力してください

関連情報