透過調整 Metafont 參數來產生 Computer Modern 的精簡版本

透過調整 Metafont 參數來產生 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.2400pk首先,建立您的點陣圖版本cmr10.2400pkgftopk並將其保留在您的實際目錄中。然後你可以建立一個文件(比如說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文件。由於預設解析度為dvipng400,因此我們將字體縮放 6 倍(請參閱\font命令)以獲得結果中的解析度 2400。當--freetype0使用該選項時,然後使用點陣字體,它會以 6x400=2400 解析度搜尋字體並使用您準備的dvipg文件。cmr10.2400pk

相關內容