Создание тонкой версии Computer Modern путем настройки параметров Metafont

Создание тонкой версии Computer Modern путем настройки параметров Metafont

Я надеюсь создать пользовательскую версию всех современных компьютерных глифов, где параметры настроены так, чтобы штрихи пера были очень тонкими (по сути, без заполнения, только центральные скелетные штрихи). Моя цель — использовать autotraceдля преобразования этих штрихов в контуры SVG, что приведет к одноштриховым глифам для использования в других программах (перьевые плоттеры, Mathjax и т. д.)

Книги Metafont и CM немного ошеломляют, поэтому я был бы признателен за советы или простые примеры, которые указали бы мне правильное направление, а именно:

  1. Как можно создать все глифы CM, используя текущий дистрибутив TeX?

  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), чтобы получить только центральную линию,

снимок экрана автотрассировки

Теперь я хочу сделать это программно для более чем 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

Связанный контент