Что такое Metapost/Metafont и как начать его использовать?

Что такое Metapost/Metafont и как начать его использовать?

ВдохновленПочему Metapost дискриминирует?, я хотел бы узнать Metapostдалеколучше, чем сейчас. Все, что я действительно знаю, это то, что Metapost — это язык для описания графики, а Metafont используется специально для описания шрифтов.

Так что же такое Metapost/Metafont?

  • имеют ли Metafont/Metapost схожий синтаксис, как следует из названий?
  • Включены ли в популярные дистрибутивы TeX инструменты для работы с ними и их компиляции?
  • Есть ли что-то вроде «Hello World» для этих систем? (Различные примеры с Metapost можно найти по всему сайту, но, похоже, с Metafont их не так много.)
  • может ли pdfTeX использовать шрифты, созданные с помощью Metafont, без особых хлопот?
  • (то же самое касается Metapost, но, похоже, многочисленные примеры на этом сайте говорят сами за себя)

решение1

  1. METAFONT был разработан Кнутом как компаньон TeX. Его задача — создавать шрифты из «математически описанных» форм. Выходные данные METAFONT — это набор растровых глифов; задавая подходящие параметры и если описание символов тщательное, выходные данные можно настроить в соответствии с любым конкретным печатающим устройством (например, разрешение очень важно, но это не единственный аспект, о котором нужно заботиться).

  2. Metapost — это программа, напрямую полученная из METAFONT; изначально она была написана Джоном Хобби, который внес ценный вклад в METAFONT. Так что да, их синтаксис похож: язык фактически тот же, но Metapost добавляет несколько примитивов, а также типы данных (цвета RGB и CMYK — это соответственно тройки и четверки, которые не используются в METAFONT). И наоборот, некоторые функции METAFONT бессмысленны в Metapost

  3. Выходные данные Metapost представляют собой простую форму Postscript, и в этом заключается главное различие между двумя программами: выходные данные Metapost представляют собой векторную графику, тогда как METAFONT выводит только растры.

  4. Metapost может взаимодействовать с TeX для получения метрик символов и включения типа в свой вывод. Это невозможно в METAFONT (ну, есть несколько статей TUGboat, описывающих умное использование METAFONT).

  5. Шрифты, созданные METAFONT, можно использовать с pdftex: все, что возможно в Knuth TeX, возможно и с pdftex. Однако шрифты являются растровыми, поэтому для хорошего вывода необходимо генерировать их версии с высоким разрешением; pdftexдля этого есть несколько примитивов: \pdfpkresolutionи \pdfpkmode, которые используются для генерации растровых изображений по запросу из источников.

  6. Вывод Metapost, представляющий собой (инкапсулированный) Postscript, может быть напрямую включен в latex; но, поскольку он использует ограниченный набор функций Postscript, его также можно включить pdflatexчерез набор макросов TeX, изначально написанных для ConTeXt.

  7. «Hello world» для METAFONT можно найти в книге METAFONTbook, но она не так проста, как аналогичный тестовый документ для (La)TeX.

  8. "Hello world" для Metapost можно написать "легко". Напишите следующий hello.mpдокумент:

    prologues:=3;                % include all fonts
    outputtemplate:="%j-%c.mps"; % output file will be hello-1.mps
    beginfig(1);
    draw(0,0)--(3cm,0)--(3cm,3cm)--(0,3cm)--cycle;
    label(btex Hello world! etex, (1.5cm,1.5cm));
    endfig;
    end.
    

    Запустить mpost helloи затем epstopdf hello-1.mpsполучить hello-1.pdfдля предварительного просмотра

    введите описание изображения здесь

Полная документация по Metapost доступна в дистрибутивах TeX (для TeX Live сделайте texdoc metapost).

решение2

Интуитивно понятный визуальный обзор -http://www.metaflop.com/modulator- обязательно включите анатомию.

введите описание изображения здесь

решение3

Чтобы расширить комментарий Герберта и в качестве дополнения к комментарию egreg, вот фрагмент кода, который позволит напрямую обрабатывать MetaPostкод в LuaLaTeX, без необходимости во внешних инструментах. Частично благодаряluamplib, пакет/интерфейс поддержки для mplibбиблиотеки Lua, встроенная версия MetaPost:

\documentclass{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
label ("Insert MP code here", (10,10));
endfig;
\end{mplibcode}
\end{document}

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