什么是 Metapost/Metafont 以及如何开始使用它?

什么是 Metapost/Metafont 以及如何开始使用它?

灵感来自为什么 Metapost 会歧视?,我想了解 Metapost远的比我现在知道的要多。我真正知道的是 Metapost 是一种描述图形的语言,而 Metafont 专门用于描述字体。

那么什么是 Metapost/Metafont?

  • 正如名称所暗示的那样,Metafont/Metapost 是否具有类似的语法?
  • 流行的 TeX 发行版中是否包含用于操作和编译它们的工具?
  • 这些系统是否有类似‘Hello World’的东西?(整个站点上都可以找到各种使用 Metapost 的示例,但似乎没有太多 Metafont。)
  • pdfTeX 可以轻松使用 Metafont 创建的字体吗?
  • (Metapost 也是如此,但该网站上的多个示例似乎已经说明了一切)

答案1

  1. METAFONT 由 Knuth 设计,作为 TeX 的配套产品。它的作用是从“数学描述”的形状生成字体。METAFONT 的输出是位图字形的集合;通过设置合适的参数,如果字符描述得当,则可以调整输出以适应任何特定的打印设备(例如,分辨率非常重要,但这不是需要注意的唯一方面)。

  2. Metapost 是一个直接源自 METAFONT 的程序;它最初是由 John Hobby 编写的,他对 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,可以直接包含在内;但是,由于它使用一组受限的 Postscript 函数,因此也可以通过一组最初为 ConTeXt 编写的 TeX 宏latex包含在内。pdflatex

  7. 在 METAFONTbook 中可以找到 METAFONT 的“Hello world”,但它实际上并不像 (La)TeX 的类似测试文档那么简单。

  8. 为 Metapost 编写一个“Hello world”可以“轻松”完成。编写以下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

为了扩展 Herbert 的评论并作为 egreg 的补充,这里有一个代码片段,它允许人们直接MetaPost在 LuaLaTeX 中处理代码,而无需外部工具,部分感谢luamplib,Lua 库的包/支持接口mplib,MetaPost 的嵌入版本:

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

相关内容