Jump to content

Метафонт

Метафонт
Разработчик(и) Дональд Кнут
Стабильная версия
2.71828182 / январь 2021 г .; 3 года назад ( 2021-01 )
Операционная система Кросс-платформенный
Тип Компьютерный язык
Лицензия Разрешительный

Метафонт — это язык описания , используемый для определения растровых шрифтов . Это также имя интерпретатора , который выполняет код Metafont, генерируя растровые шрифты, которые можно встроить, например, в PostScript . Metafont был разработан Дональдом Кнутом как дополнение к его системе набора текста TeX .

Одной из особенностей Metafont является то, что точки, определяющие форму глифов например, вершина основы или пересечение основы и перекладины — определяются с помощью геометрических уравнений; намерение, чтобы три основы буквы «м» были расположены на одинаковом расстоянии друг от друга по горизонтали, можно выразить как если точки 1, 2 и 3 находятся на нижних концах трех стеблей, тогда как намерение, чтобы все они заканчивались в одном и том же вертикальном положении, было бы .

Метафонт — это язык макросов , в котором такие операции, как «нарисовать верхнюю часть засечки в нижнем регистре в точке 4», могут отображаться как одна макрокоманда (с точкой в ​​качестве аргумента) в программе для буквы. Для описания фигур в Metafont имеется богатый набор операций построения траекторий , которые в основном избавляют пользователя от необходимости рассчитывать контрольные точки.

Многие семейства шрифтов Metafont настроены так, что основной исходный файл шрифта определяет только небольшое количество параметров дизайна ( высота x , ширина em, наклон, ширина вертикального штриха и т. д.), а затем вызывается отдельный исходный файл common. для целого ряда шрифтов для фактического рисования отдельных глифов; это метааспект системы.

Режимы работы [ править ]

Metafont чаще всего запускается как помощник для драйверов устройств вывода (принтер, экран); в этих случаях его работа состоит в том, чтобы генерировать растровые изображения для шрифта для определенной комбинации устройства вывода (называемого режимом в Metafont) и разрешения (видимого в имени выходного файла, см. ниже). Эти растровые изображения обычно сохраняются для последующего повторного использования, так что Metafont не нужно запускать каждый раз, когда отображается документ, но, с другой стороны, дистрибутивы TeX с компонентом Metafont обычно не включают какие-либо заранее созданные растровые шрифты, поскольку они были бы скорее велики по сравнению с источниками, из которых они могли быть созданы. Поскольку шрифты Metafont традиционно были шрифтами TeX по умолчанию, из которых другие форматы шрифтов были исключениями, неполная установка шрифта, отличного от Metafont, иногда может привести к вызову Metafont и выдаче сбивающего с толку сообщения об ошибке « somefont .mf not Found».

Не менее важно, но не так часто, использовать Metafont для создания файла метрики шрифта (TFM); Файл TFM создается только в том случае, если переменная создания шрифтов положительна. Традиционно дистрибутивы TeX часто поставляются со всеми заранее созданными файлами TFM (поскольку они довольно малы), но тот, кто устанавливает шрифт Metafont из исходных кодов, должен будет сгенерировать файл TFM, прежде чем TeX сможет его использовать.

Третий способ работы с Metafont — режим проверки : если переменная проверки положительна, то файл растрового шрифта также содержит дополнительную информацию, предоставляемую через special команды, в частности позиции и названия точек, которые дизайнер шрифтов считал важными для дизайна. Если использовать отдельный gftodvi утилита для генерации увеличенных изображений глифов шрифта, эта информация из спец. включена; Позиции точек не ограничиваются разрешением пикселей.

Metafont также может запускаться в интерактивном режиме и имеет команды для отображения на экране создаваемых им изображений. Кнут сказал, что он использует Metafont как своего рода настольный калькулятор для решения сложных уравнений, хотя теперь он использует MetaPost для математических иллюстраций.

Metafont может отображать любой графический вывод, а не только глифы. Однако MetaPost и Asymptote для математических иллюстраций предпочтительны . Metafont чаще всего вызывается без прямого запроса пользователя. Файлы DVI могут содержать только ссылки на гарнитуры, а не наборы растровых или векторных глифов, которые допускают другие форматы, такие как PostScript. Следовательно, к глифам в шрифтах необходимо обращаться каждый раз, когда делается запрос на просмотр, печать или преобразование файла DVI.

Выходные файлы [ править ]

Metafont выводит несколько типов файлов: для файла с именем NAME.mf он может выводить:

  • NAME.NNNNgf – Файл с растровым выводом с разрешением NNNN (по умолчанию 2602).
  • NAME.tfm — файл с информацией о метрике шрифта TeX , которая необходима TeX. Обычно метафонту нужно указать, чтобы он сгенерировал этот файл.
  • NAME.log – вывод файла журнала обработки.

После запуска Metafont обычно используется программа gftopk для преобразования файлов NNNNgf в формат pk (упакованный) (.NNNNpk). Формат pk был в первую очередь введен для уменьшения размера файла (примерно до половины), но ожидалось, что он также ускорит обработку, поскольку потребуется вводить/выводить меньше данных . Форматы GF и PK используют кодирование растровых изображений по длинам серий, но выполняют разные двоичные кодировки длин серий. Формат PK также выполняет некоторую предварительную обработку растровых изображений (ограничивающая рамка, исключение повторяющихся строк) и кодирует все строки символа как одну длинную битовую последовательность. [1]

В стандарте структуры каталогов TeX имена файлов ограничены 8+3 символами, поэтому файлы GF и PK будут иметь только расширения. .gf и .pk. Файлы для разных разрешений хранятся отдельно, помещаясь в отдельные каталоги с именами dpiНННН, например dpi300/cmr10.pk.

Язык [ править ]

Язык Метафонт — это интерпретируемый язык для программ, которые по своей сути являются скорее декларативными , чем императивными . [2]

Переменные и уравнения [ править ]

Переменные в Metafont могут быть восьми разных типов:

  • Числовые: с фиксированной точкой числа со знаком и эпсилоном . , ограниченное значением менее 4096 ( Q12.16 ). Это значение по умолчанию для переменных, не объявленных как относящиеся к другому типу.
  • Пара: пара чисел, используемая в основном для представления точек на плоскости.
  • Путь: как в PostScript / PDF / SVG , параметрическая кривая на плоскости, координатные функции которой представляют собой кусочные кубические полиномы. Как и в других системах, сегменты пути кодируются как кривые Безье с точки зрения узлов и контрольных точек.
  • Преобразование: аффинное преобразование плоскости, эквивалентное «матрице (преобразования)» в PostScript/PDF.
  • Перо: выпуклый многоугольник, представляющий форму «пера», используемого для рисования.
  • Изображение: растровое изображение с целочисленным значением со знаком для каждого пикселя.
  • логическое значение
  • Строка (из 8-битных символов)

Metapost добавляет цвет (тройку цифр) в качестве девятого типа и имеет совершенно другую (не растровую) модель для изображений; последнее является основным пунктом расхождения между двумя программами. Макросы Metafont vardef также живут в том же пространстве имен, что и переменные, и в некотором смысле могут рассматриваться как девятый тип переменных, хотя макросы не существуют в качестве значений первого класса в Metafont.

Необычно то, что имена переменных представляют собой не простые лексемы, а последовательности символьных лексем и числовых индексов; имя переменной x2r Таким образом, это не один буквенно-цифровой токен, а последовательность трех токенов. x (символический), 2 (числовой) и r (символично). Типы записей и массивов можно моделировать с помощью коллекций переменных, которые имеют общий префикс имени - идиома, поддерживаемая системой объявления типов, предоставляющая всем переменным, имена которых различаются только числовыми индексами, одного и того же типа (как и ожидалось для массивов), сохраняя при этом переменные целыми. name отличаются некоторым символическим токеном (как и ожидалось для записей).

Отличительной особенностью Метафонта является использование уравнений для определения переменных. Числовая переменная (или компонент пары или переменной преобразования) может находиться в трех состояниях: известное (установлено), неизвестное независимое (не задано) и неизвестное зависимое (не задано, но задается линейным выражением одного или нескольких независимых переменных). . Когда Metafont выполняет оператор уравнения, он превращает одну из задействованных независимых зависимостей в зависимую и исключает ее из выражений для всех других зависимых; когда в выражении для зависимой переменной не остается независимых переменных, эта переменная становится известной. Таким образом, решение линейных систем уравнений является встроенной функцией языка Metafont, и рекомендуемый метод присвоения большинства переменных (особенно тех, значения которых имеют геометрическое значение) состоит в формулировании уравнений, определяющих их значения. В системах уравнений часто числовые (скалярные) уравнения смешиваются с парными (векторными) уравнениями.

Исключением из вышесказанного является класс внутренних количественных переменных. Они имеют имена, состоящие всего из одного символического токена, всегда числовые и всегда известны. Они имеют более прямое внутреннее представление, чем обычные переменные, что позволяет примитивным операциям в Metafont (или его расширениях) использовать их неявно.

Синтаксис [ править ]

В Metafont есть числовые и строковые постоянные токены с общепринятым синтаксисом; строки разделяются " кавычки, числовые константы могут иметь десятичные дроби, но не экспоненту . Все остальные токены классифицируются как символические и могут быть переопределены произвольно; нет никаких ограничений на то, что токены с определенным значением должны иметь имена, состоящие из определенных символов. Во время выполнения дополнительно могут существовать капсульные токены, которые по сути являются токенами с постоянным значением произвольного типа; в исходном коде они отображаются как символические токены.

За исключением случаев, когда символы используются в числовых или строковых константах, размер токена, содержащего определенный символ, зависит от того, к какому классу принадлежит этот символ; в отличие от TeX , Metafont имеет фиксированные классы символов. Персонажи ,, ;, (, и ) являются «одиночками» и образуют только односимвольные токены. Для классов персонажей <=>:|, ‘’ (одинарные кавычки), +-, /*\, !?, #&@$, ^~, [, ], {}, и ., а также класс подчеркивания вместе с прописными и строчными буквами A–Z, токен состоит из самой длинной последовательной последовательности символов из одного и того же класса. Пробельные символы не вносят токенов. % запускает комментарий, продолжающийся до конца строки.

Примечательным применением этих правил является то, что # часто появляется как часть имен переменных в коде Metafont, например em# и pt#.

Разделители (например, круглые скобки) не имеют встроенного значения, вместо этого существует команда, которая превращает два символических токена в пару совпадающих разделителей, но обычно программы Metafont используют только обычные круглые скобки. Помимо переопределения приоритетов в выражениях, вокруг определенных типов макроаргументов также требуются разделители.

Графика [ править ]

Кривые в Metafont определяются как кубические сплайны, а не квадратичные, для большей универсальности за счет более сложной арифметики. [3]

В отличие от более распространенных форматов контурных шрифтов (таких как TrueType или PostScript Type 1 ), шрифт Metafont в основном состоит из штрихов с «перьями» конечной ширины и заполненных областей. Таким образом, вместо непосредственного описания контура глифа файл Metafont описывает пути пера. Некоторые более простые шрифты Metafont, такие как каллиграфические математические шрифты семейства Computer Modern , используют один штрих относительно большого пера для определения каждого визуального «штриха» глифов. В более сложных шрифтах, таких как латинские текстовые шрифты семейства Computer Modern, используется маленькая ручка, чтобы обвести контур визуальных «штрихов», которые затем заполняются; результат очень похож на контурный шрифт, но со слегка смягченными углами, определяемыми формой пера.

Поскольку формы шрифтов определяются уравнениями, а не напрямую закодированными числами, можно рассматривать такие параметры, как соотношение сторон, наклон шрифта, ширина штриха, размер засечек и т. д., как входные параметры в каждом определении глифа (которые затем определяют не один шрифт, а мета -шрифт). Таким образом, изменив значение одного из этих параметров в одном месте файла Metafont, можно произвести последовательное изменение во всем шрифте. Computer Modern Roman иллюстрирует множество вариантов использования этой функции; Типичная установка TeX включает в себя несколько версий шрифта с шагом от 5 до 17 символов на дюйм, с одинаковой шириной штриха для всех размеров (а не увеличением по мере увеличения шрифта). Кроме того, шрифты Computer Modern пишущая машинка и шрифты без засечек определяются с использованием по существу того же файла Metafont, что и шрифт Roman, но с другими глобальными параметрами.

Используйте [ править ]

Хотя известные дизайнеры шрифтов, такие как Герман Цапф , сотрудничали с Кнутом для создания новых шрифтов с использованием Metafont, система не получила широкого распространения среди профессиональных дизайнеров шрифтов. Кнут объясняет это тем, что «просить художника стать математиком настолько, чтобы понять, как написать шрифт с 60 параметрами, — это слишком». [4] Джонатан Хефлер отметил, что система Metafont в конечном итоге стала «технологией, лежащей в основе отсутствия ваших любимых шрифтов… Идея Кнута о том, что буквы начинаются со скелетных форм, ошибочна». [5] [ нужен лучший источник ]

Система Metafont позволяет обрабатывать шрифты необычными способами; в 1982 году Кнут показал, как его можно использовать для преобразования шрифтов: шрифт с засечками постепенно переходит в дизайн без засечек по ходу текста. [6]

История [ править ]

Дональд Кнут начал работу над программным обеспечением для создания шрифтов в 1977 году и выпустил первую версию Metafont в 1979 году. Из-за недостатков исходного языка Metafont Кнут разработал совершенно новую систему Metafont в 1984 году, и именно эта пересмотренная система используется сегодня. ; В Metafont есть система управления версиями, аналогичная системе TeX , где число асимптотически приближается к e с каждой ревизией. [7]

Пример [ править ]

В следующем примере создается замкнутая бобовидная форма для символа «B» шрифта:

%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

В результате получается следующий глиф:

Приведенный выше пример будет обработан с помощью командной строки, например: [8]

mf '\mode=ljfour; mode_setup; input beta.mf';
gftopk beta.600gf beta.600pk

Затем его можно использовать в файле LaTeX, например [8] (все файлы должны находиться в одном каталоге или система TeX должна быть проинформирована о них соответствующими методами):

\documentclass{article}

\newfont{\letterbeta}{beta}
\newcommand{\otherbeta}{{\letterbeta B}}

\begin{document}
Let's try having a strange \otherbeta\ here.
\end{document}

Полученный PDF-файл должен выглядеть следующим образом:

Type шрифтов PostScript Создание 1

Существует несколько инструментов для преобразования программ Metafont в PostScript Type 1 шрифты . Большинство из них используют способность MetaPost конвертировать подмножество языка Metafont в контуры EPS , которые впоследствии можно преобразовать в шрифты PostScript Type 1. Создание векторных контуров штрихов пером Metafont нетривиально, поскольку модель глифа Metafont представляет собой растровое изображение, а точные контуры большинства штрихов не являются кривыми Безье . [примечание 1]

  • Польская команда JNS разработала METATYPE1. [9] (на основе MetaPost) для создания шрифтов PostScript Type 1. Его большим недостатком является то, что нельзя использовать перья, что значительно снижает возможности языка Metafont. Первоначально инструмент использовался польской фабрикой шрифтов GUST для создания модернизированного и расширенного варианта Computer Modern , названного Latin Modern .
  • мф2пт1 , [10] который также основан на Metapost, был разработан Скоттом Пакином при участии Вернера Лемберга . Он также имеет несколько ограничений, подробно описанных в его руководстве, наиболее существенным из которых является ограничение, заключающееся в том, что каждый глиф должен быть полностью нарисован из закрытых путей. Чтобы преодолеть ограничения mf2pt1, вывод EPS Metapost может быть подвергнут постобработке с помощью FontForge , который способен интерпретировать сложные пути PostScript, сгенерированные Metapost из эллиптических перьев Metafont, а также способен удалять перекрытия контуров. Поскольку FontForge поддерживает создание сценариев, этот этап постобработки также можно автоматизировать. Этот подход использовался для создания контуров типа 1 для математического шрифта MnSymbol , разработанного Ахимом Блюменсатом; MnSymbol был разработан как дополнение к Minion Pro .
  • МетаФог [11] — это запатентованный конвертер, который может аналитически преобразовывать штрихи пера, но для исключения вырожденных случаев он требует ручной постобработки и не доступен публично. Он может обрабатывать только вывод Metapost. [12]

Распространенным подходом к созданию шрифтов Type 1 с помощью штрихов пером остается создание растрового изображения высокого разрешения, а затем использование автотрассировки , реализуемой такими пакетами, как mftrace. [13] и TeXtrace [14]

См. также [ править ]

Примечания [ править ]

  1. ^ Технически, Metafont действительно генерирует векторные контуры как промежуточный этап растрирования штриха, но эти промежуточные контуры адаптированы к текущему разрешению растра и не являются простыми как кривые, поэтому их очень далеко от того, чтобы их можно было использовать в качестве контуров типа 1. Эффектом сложности являются ложные пиксели на вогнутой стороне обводки, которым присваивается значение 2, а не 1, однако автоматическая отбраковка изображений, отправляемых в виде глифов в шрифте, обычно предотвращает их появление в окончательном варианте. растровое изображение.

Ссылки [ править ]

  1. ^ Рокицки, Томас (1985). «Формат файла шрифта упакованного (PK)» (PDF) . БУКСИР . 6 (3): 115–120. Архивировано (PDF) из оригинала 6 ноября 2011 г. Проверено 9 августа 2019 г.
  2. ^ Кнут, Дональд (1986). Книга МЕТАФОНТ . Эддисон Уэсли. ISBN  0-201-13445-4 .
  3. ^ Кнут, Дональд (25 января 2000 г.). «Интервью: Дональд Э. Кнут» (Интервью). Беседовал Адвокат. Архивировано из оригинала 22 января 2009 года . Проверено 13 января 2016 г. ...математика квадратичного уравнения действительно проста. Соответствующее явление для кубика в шесть раз сложнее...
  4. ^ CSTUG, Карлов университет, Прага, март 1996 г., Вопросы и ответы с профессором Дональдом Э. Кнутом, воспроизведено в TUGboat 17 (4) (1996), 355–67. Цитирование со страницы 361. Доступно в Интернете по адресу [1].
  5. ^ Хефлер, Джонатан. «Идея Кнута о том, что буквы начинаются со скелетных форм, ошибочна. Но его работа важна и имела длительное влияние» . Твиттер . Проверено 18 августа 2018 г.
  6. ^ Кнут, Дональд (1982). «Концепция меташрифта» (PDF) . Видимый язык . 16 (1): 3–27. Архивировано из оригинала (PDF) 7 июля 2020 г.
  7. ^ «Кнут: Компьютеры и набор текста» .
  8. Перейти обратно: Перейти обратно: а б Кристоф Грансир. «Урок МЕТАФОНТ» .
  9. ^ «CTAN: tex-archive/fonts/utilities/metatype1» .
  10. ^ «CTAN: tex-archive/support/mf2pt1» .
  11. ^ «Р. Дж. Кинч, «MetaFog: преобразование форм Metafont в контуры», TUGboat 16 (3) , 233–43 (1995)» (PDF) . Архивировано (PDF) из оригинала 5 октября 2000 г.
  12. ^ К. Пишка, 2004 г.
  13. ^ mftrace — небольшая программа на Python, которая позволяет преобразовать растровый шрифт TeX в шрифт PFA или PFB (масштабируемый шрифт PostScript Type1) или шрифт TTF (TrueType). Он распространяется под лицензией GNU GPL. Создатель Хан-Вэнь Ниенхейс. Версии до 1.0.5 назывались «pktrace».
  14. ^ TeXtrace - набор скриптов для UNIX, которые преобразуют любой шрифт TeX в контурный шрифт Type1 .pfb, который сразу же подходит для использования с dvips, pdftex, acroread (и многими другими программами). Создатель Питер Сабо.

Источники [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ca92fbf534eac7b8cea40b712cb15a13__1715107140
URL1:https://arc.ask3.ru/arc/aa/ca/13/ca92fbf534eac7b8cea40b712cb15a13.html
Заголовок, (Title) документа по адресу, URL1:
Metafont - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)