這是 pfb 檔案中的錯誤還是 Metapost 的「字形」中的錯誤?

這是 pfb 檔案中的錯誤還是 Metapost 的「字形」中的錯誤?

我最近才開始與metapost的「字形」。我發現(MWE 下面)這些實驗中 cm 字體集的襯線路徑有異常。

起點:似乎 Metapost 從 .pfb 檔案中取得字體的字形(例如.../texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb)。

我的問題是以下哪一項導致了異常,因此我可以弄清楚是否有必要提交錯誤報告以及將其發送給誰...

  1. .pfb 檔案中存在錯誤。既然這是一條路徑幾乎自身加倍,這可能不會導致任何像素被填充,因此沒有人注意到。
  2. 我對 Metapost 從哪裡獲取字形的說法是錯誤的,而錯誤就在哪裡。
  3. Metapost 中的字形代碼存在錯誤。
  4. 還有別的事。

我做過的事:

  1. 檢查使用這些字體的其他程式是否使用相同的 .pfb 檔案(是的 AFAICT forpdflatex和 for 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)並檢查更新日誌以取得最新的 Metapost

我的 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 日,此錯誤現已修復。

在此輸入影像描述

這是使用新編譯的版本 1.999 的輸出mpost

在此輸入影像描述

相關內容