
Я надеюсь создать пользовательскую версию всех современных компьютерных глифов, где параметры настроены так, чтобы штрихи пера были очень тонкими (по сути, без заполнения, только центральные скелетные штрихи). Моя цель — использовать autotrace
для преобразования этих штрихов в контуры SVG, что приведет к одноштриховым глифам для использования в других программах (перьевые плоттеры, Mathjax и т. д.)
Книги Metafont и CM немного ошеломляют, поэтому я был бы признателен за советы или простые примеры, которые указали бы мне правильное направление, а именно:
Как можно создать все глифы CM, используя текущий дистрибутив TeX?
Где лучше всего найти все параметры, которые необходимо настроить для создания тонких штрихов постоянной ширины?
Редактировать:Чтобы прояснить ситуацию, вот описание того, что я ищу
Начиная с исходников 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), чтобы получить только центральную линию,
Теперь я хочу сделать это программно для более чем 2200 глифов из Computer Modern, и многие из них имеют штрихи, которые будут сбивать алгоритм с толку, поскольку они слишком сильно различаются по толщине. Я хотел бы помочь алгоритму автотрассировки, сначала создав версию глифов CM с почти однородными штрихами.
решение1
Исходники Metafont для шрифтов CM находятся 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
программное обеспечение. Сначала создайте свою версию bitmap из в 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
используется опция, then uses bitmap fonts, он ищет шрифты в разрешении 6x400=2400 и использует подготовленный вами dvipg
файл .cmr10.2400pk