灵感来自为什么 Metapost 会歧视?,我想了解 Metapost远的比我现在知道的要多。我真正知道的是 Metapost 是一种描述图形的语言,而 Metafont 专门用于描述字体。
那么什么是 Metapost/Metafont?
- 正如名称所暗示的那样,Metafont/Metapost 是否具有类似的语法?
- 流行的 TeX 发行版中是否包含用于操作和编译它们的工具?
- 这些系统是否有类似‘Hello World’的东西?(整个站点上都可以找到各种使用 Metapost 的示例,但似乎没有太多 Metafont。)
- pdfTeX 可以轻松使用 Metafont 创建的字体吗?
- (Metapost 也是如此,但该网站上的多个示例似乎已经说明了一切)
答案1
METAFONT 由 Knuth 设计,作为 TeX 的配套产品。它的作用是从“数学描述”的形状生成字体。METAFONT 的输出是位图字形的集合;通过设置合适的参数,如果字符描述得当,则可以调整输出以适应任何特定的打印设备(例如,分辨率非常重要,但这不是需要注意的唯一方面)。
Metapost 是一个直接源自 METAFONT 的程序;它最初是由 John Hobby 编写的,他对 METAFONT 做出了宝贵的贡献。所以,是的,它们的语法是相似的:语言实际上是相同的,但 Metapost 增加了几个原语和数据类型(RGB 和 CMYK 颜色分别是 METAFONT 中未使用的三元组和四元组)。相反,METAFONT 的一些功能在 Metapost 中毫无意义
Metapost 的输出是 Postscript 的简单形式,这是两个程序之间的主要区别:Metapost 的输出是矢量图形,而 METAFONT 只输出光栅。
Metapost 可以与 TeX 交互以获取字符度量并在其输出中包含类型。这在 METAFONT 中是不可能的(好吧,有一些 TUGboat 论文描述了 METAFONT 的巧妙用法)。
METAFONT 创建的字体可用于
pdftex
:Knuth TeX 中所有可能的功能也可用于pdftex
。但是,字体是位图,因此如果想要获得良好的输出,必须生成高分辨率版本;pdftex
有几个用于此的原语:\pdfpkresolution
和\pdfpkmode
用于从源生成按需位图。Metapost 的输出是(封装的)Postscript,可以直接包含在内;但是,由于它使用一组受限的 Postscript 函数,因此也可以通过一组最初为 ConTeXt 编写的 TeX 宏
latex
包含在内。pdflatex
在 METAFONTbook 中可以找到 METAFONT 的“Hello world”,但它实际上并不像 (La)TeX 的类似测试文档那么简单。
为 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}