МетаПост

Язык программирования
МетаПост
Парадигмаимператив , набор текста
РазработаноДжон Д. Хобби
РазработчикTaco Hoekwater, Луиджи Скарсо
Впервые появился1994 ( 1994 )
Стабильный релиз
1.8 / 17 июня 2013 г. ; 11 лет назад ( 2013-06-17 )
Предварительный релиз
2.0rc2 / 19 февраля 2018 г. ; 6 лет назад ( 2018-02-19 )
Дисциплина набора текстаутка , динамичная , сильная
ОСКроссплатформенный
ЛицензияLGPL
Веб-сайтtug.org/metapost
Под влиянием
Метафонт

MetaPost относится как к языку программирования , так и к интерпретатору языка программирования MetaPost. Оба произошли от языка и интерпретатора Metafont Дональда Кнута . MetaPost создает векторные графические диаграммы из геометрического/алгебраического описания. Язык разделяет декларативный синтаксис Metafont для управления линиями, кривыми, точками и геометрическими преобразованиями. Однако,

  • Metafont настроен на создание шрифтов в виде файлов изображений (в формате .gf) с соответствующими файлами метрик шрифта (в формате .tfm), тогда как MetaPost создает файлы EPS , SVG или PNG .
  • Выходные данные Metafont состоят из шрифтов с фиксированным разрешением в растровом формате, тогда как выходные данные MetaPost представляют собой векторную графику (линии, кривые Безье ).
  • Вывод Metafont монохромный, тогда как MetaPost использует цвета RGB или CMYK .
  • Язык MetaPost может включать текстовые метки на диаграммах, как строки из указанного шрифта, так и что-либо еще, что можно набрать с помощью TeX .
  • Начиная с версии 1.8, Metapost позволяет выполнять арифметические операции с плавающей точкой с разрядностью 64 бита (по умолчанию: 32-битная арифметика с фиксированной точкой)

Многие ограничения MetaPost вытекают из особенностей Metafont. Например, MetaPost не поддерживает все особенности PostScript . В частности, контуры могут иметь только один сегмент (так что области просто соединены ), а области могут быть заполнены только однородными цветами. PostScript уровня 1 поддерживает мозаичные узоры, а PostScript 3 поддерживает затенение по Гуро .

Доступность и использование

MetaPost распространяется со многими дистрибутивами фреймворка TeX и Metafont, например, он включен в дистрибутивы MiKTeX и TeX Live .

Инкапсулированный постскриптум, созданный Metapost, может быть включен в документы LaTeX , ConTeXt и TeX с помощью стандартных команд включения графики. Инкапсулированный вывод постскриптума также может быть использован с движком PDFTeX , таким образом, напрямую давая PDF . Эта возможность реализована в ConTeXt и графическом пакете LaTeX и может быть использована из простого TeX с помощью макроса supp-pdf.tex.

ConTeXt и LuaTeX поддерживают включение кода MetaPost во входной файл. Включение кода MetaPost в LaTeX также возможно с помощью пакетов LaTeX, например gmpили mpgraphics.

Примеры

Это один файлпример.mpкоторый при обработке интерпретатором MetaPost (через команду mpostв Linux ) создает три файла epsпример.1,пример.2,пример.3. Они изображены справа.

примеры выходов
преобразовать  координаты страницы ; координаты страницы : = идентичность  масштабировано  на 10 мм  смещено  ( 100 мм , 150 мм ) ; beginfig  ( 1 )  fill  ( ( 0,0 ) - ( 2,0 ) - ( 2,1 ) - ( 1,1 ) - ( 1,2 ) - ( 0,2 ) -цикл ) преобразованные координаты страницы с цветом зеленый ; draw ( ( 2,0 ) .. ( 2,1 ) .. ( 1,1 ) .. ( 1,2 ) .. ( 0,2 ) ) преобразованные координаты страницы ; drawarrow ( ( 0,0 ) - ( 2,2 ) ) преобразованные координаты страницы ; endfig ;beginfig ( 2 ) нарисовать ( для i = 0 до 7 : dir ( 135 i ) -- endfor cycle ) преобразованные pagecoords ; endfig ; pagecoords := identity масштабировано на 15 мм смещено ( 100 мм , 150 мм ); beginfig ( 3 ); % объявить пути, которые будут использоваться path p [], p [] t ; % установить точки, определив отношения z1 =( 0 , 0 ); z2 = z1 + 2 up ; z3 = z1 + any * dir ( 60 )= z2 + any                                     * dir  ( - 50 );  z4 = z3 + ( - 1.5 , - . 5 );  z5 = z1 + dir  ( 135 );  z0 = any [ z1 , z2 ]= any [ z3 , z4 ];  % настройка путей  p0 = fullcircle  yscaled  . 5  rotated  45  shifted  z0  ;  p1 = z2 --- z4 .. z0 .. z3 --- z1 ;  p2 = p1  cutbefore  p0  cutafter  p0 ;  p3 = p0  cutbefore  p1  cutafter  p1 ;  p4 = p2 --- p3 --- cycle ;  % определение преобразованных версий путей и точек  для  i = 0  до  4 :  p [ i ] t = p [ i ]  transformed  pagecoords ;  endfor  для  i = 0  до  5 :  z [ i ] t = z [ i ]  преобразованные  координаты страницы ;  endfor  % сделать что-нибудь нарисовать  заполнить  p4t  цветом  ( 1 , 1 , 0.2 );  нарисовать  z1t --- z2t  цветом  . 5 белым ;  нарисовать  z3t --- z4t  цветом  . 5 белым ;  взять  ручкукруг ;  нарисовать  p0t  штриховой  с точками  масштабированными  . 3 ;  нарисовать  p1t  равномерно штриховой  ; нарисовать p2t синим цветом ; нарисовать p3t красным цветом        ;  label.lrt ( btex $ z_0 $ etex , z0t ) ; label.llft ( btex $ z_1 $ etex , z1t ) ; label.top ( btex $ z_2 $ etex , z2t ) ; label.rt ( btex $ z_3 $ etex , z3t ) ; label.llft ( btex $ z_4 $ etex , z4t ) ; для i = 0 до 4 : drawdot z [ i ] t withpen pencircle scaled 2 ; endfor endfig ; пока                        

Полученные три файла eps можно использовать в TeX с помощью команды LaTeX\includegraphics , ConTeXt , команды \externalfigurePlain TeX \epsfboxили (в Plain pdftex) \convertMPtoPDFкоманды изsupp-pdf.texДля просмотра или печати третьей диаграммы это включение необходимо, поскольку шрифты TeX ( Computer Modern ) не включены в файлы eps, создаваемые MetaPost по умолчанию.

Смотрите также

Ссылки

  • Хаген, Ганс. «МетаФун» (модули для Метапоста).
  • Кнут, Дональд (1986). Книга METAFONT . Компьютеры и набор текста . Том C. Addison-Wesley . ISBN 0-201-13444-6.
  • "Comprehensive TEX Archive Network" ( CTAN ). Репозиторий исходного кода TEX и сотен дополнений и файлов стилей.
  • "(La)TeX Navigator предоставляет 305 простых примеров MetaPost". Архивировано из оригинала 2013-07-27 . Получено 2006-11-17 .
  • Hoekwater, Taco (2006). «Разработки MetaPost — осень 2006» (PDF) . TUGboat . 27 (1).
  • Группа пользователей TeX ( TUG ) http://www.tug.org/ имеет страницу, посвященную MetaPost: http://www.tug.org/metapost.html
Взято с "https://en.wikipedia.org/w/index.php?title=MetaPost&oldid=1267041912"