![透過調整 Metafont 參數來產生 Computer Modern 的精簡版本](https://rvso.com/image/449616/%E9%80%8F%E9%81%8E%E8%AA%BF%E6%95%B4%20Metafont%20%E5%8F%83%E6%95%B8%E4%BE%86%E7%94%A2%E7%94%9F%20Computer%20Modern%20%E7%9A%84%E7%B2%BE%E7%B0%A1%E7%89%88%E6%9C%AC.png)
我希望製作所有電腦現代字形的自訂版本,其中參數經過調整,使得筆劃非常細(基本上沒有填充,只有中央骨架筆畫)。我的目標是將autotrace
這些筆劃轉換為 SVG 路徑,從而產生可在其他程式(筆式繪圖儀、Mathjax 等)中使用的單筆劃字形
Metafont 和 CM 書籍有點讓人不知所措,所以我希望得到建議/簡單的例子來為我指明正確的方向,特別是:
如何使用目前的 TeX 發行版來產生所有 CM 的字形?
哪裡是找到需要調整以製作細的、恆定寬度筆畫的所有參數的最佳位置?
編輯:為了澄清一下,這是我所追求的描述
從 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 roman
或generate 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.2400pk
,gftopk
並將其保留在您的實際目錄中。然後你可以建立一個文件(比如說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
文件。由於預設解析度為dvipng
400,因此我們將字體縮放 6 倍(請參閱\font
命令)以獲得結果中的解析度 2400。當--freetype0
使用該選項時,然後使用點陣字體,它會以 6x400=2400 解析度搜尋字體並使用您準備的dvipg
文件。cmr10.2400pk