在 Lua 等时代,Metapost 仍然有用吗?

在 Lua 等时代,Metapost 仍然有用吗?

免责声明:我不确定我是否“被允许”提出这样的问题,但我也不确定它是否属于 Meta。

  • 通常,当有人问一个tikz以 - 为重点的问题时,一些用户会不断提供Metapost替代方案,只是为了进行比较——这很好——参见这里例如。
  • 问:从面向未来的角度来看,初学者花时间学习是否仍然有益Metapost
  • 一个可能的答案是,它没有好处,因为 LaTeX 核心团队Metapost在他们未来的发展中没有考虑到这一点(我只是编造了这个例子答案!)。

答案1

我曾经是回答链接问题的人之一,用 metapost/metafun 示例回答了 tikz 问题,现在我发现另一个 metapost 答案实际上被选中了。我不明白为什么 metapost 不应该相关(我真心希望 tikz、metapost、asymptote 和 pstricks 都能生存下来并拥有美好的未来。)初学者可以选择其中任何一个并很快上手。

让我给出几个支持 metapost 的理由(当然有点主观):

  • 在“lua时代”,它已经与lua集成:luamplib这样就可以轻松地直接将 metapost 与 lualatex 一起使用。
  • 与例如 tikz 相比,它相对简单。
  • 它很快,至少这是我的经验(作为 ConTeXt 的主要用户)。我记得在一个大型 latex 项目中尝试过 tikz,我记得它大大减慢了编译速度。那是很久以前的事了,我知道可以外部化等等,所以...
  • 它正在积极开发中。
  • 结果非常令人满意(人们可能会问为什么在你链接的问题中选择了metapost答案......)。
  • 使用起来非常有趣。可能是因为它的设计采用了线性方程求解器和循环等简单编程。
  • (仅供娱乐)我听过传言说,像 DEK 这样的酷人确实使用 metapost 来绘画。

了解 LaTeX 核心团队的计划可能会很有趣,但他们通常努力实现向后兼容,所以我看不出他们会因为任何原因放弃 metapost,就像他们希望不会放弃 tikz、pstricks 或 asymptote 一样。(他们为什么(以及如何)放弃?)

我使用 ConTeXt,因此我认为 metapost 及其扩展 metafun 是非常自然的选择,因为它非常集成。一个简单的集成用法示例如下:这里在最近的一个问题中。

答案2

问题分为两部分:“从面向未来的角度来看,初学者学习 Metapost 是否仍然有益?”以及“在 lua 时代,Metapost 是否仍然有用?”。

总结—— 是的,无论你以哪种方式提问。

我们首先来看一下 Metapost 项目的现状。Metapost 是首次发布在经历了长达六年的酝酿期后,于 1995 年正式发布。John Hobby 曾与 Knuth 一起开发 TeX 和 Metafont,并为 Metafont 构建了优雅的三次样条曲线系统;1989 年,他想到可以对该系统进行调整,以生成 PostScript 输出,这样他就可以制作更好的图形他的研究论文几年后,Hobby 将该项目传给了其他人,2007 年,Taco Hoekwater 将其分为前端和后端库,并添加了对扩展浮点运算的支持。该项目仍由小团队他们对邮件列表中的问题反应非常积极。您可以在项目主页在 Tug。

拆分成单独的库是重要的一步,因为它允许系统链接到lualatex。这大大简化了工作流程。如果我今天想制作一个独立的 MP 图形,我会使用这个模板文件:

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);

endfig;
\end{mplibcode}
\end{document}

并将其编译以lualatex生成一个独立的 PDF 文件。我的工作流程看起来有点像这样:

在此处输入图片描述

启用该\mplibtextextlabel选项后,您将获得与常规 LaTeX 排版的完全集成。您可以在模板中包含任何您想要的 LaTeX 包,并使用 支持的所有现代字体fontspec。您甚至可以在 TeX 标签中包含图像文件并在其上绘图(这在常规老式 Metapost 中非常困难)。如果您想了解有关工作流程和与 TeX 集成的更多信息,您可能想阅读我的第 12 章使用 Metapost 绘图项目。

但您并不局限于制作单张图片的 PDF。只要您愿意切换到现代字体世界fontspec,您就会发现它lualatex非常适合制作大型文档,并将所有 Metapost 插图包含在单个源文件中。我在我的另一个宠物项目中有一些您可以做的事情的例子,这里. 关于如何将图形集成到 TeX 源的详细信息,请参阅(诚然很少)的文档。luamplibCTAN 上的包。

所有这些都表明(在我看来)MP 在 2023 年仍然活跃且健康,你可以投入时间和精力去学习它,并确信只要 TeX 还存在,该系统就会一直存在。

然而,这些都没有涉及到为什么你可能会喜欢去学习它。因此,这里只有两个可能的原因与@mickep 的答案中列出的要点相呼应。

  • 这是一种设计精良的语言。我对 tikz-pgf 团队充满敬佩,但我从未真正享受过使用 TikZ 的乐趣,因为它似乎有无穷无尽的特殊用途符号和图层。Plain Metapost 是一种相当小的语言,非常适合半数字绘图。

  • 它很简单,但也很微妙和有趣。我意识到这对某些人来说可能听起来很奇怪,但你实际上可能会从用自己的方式解决 MP 中的几何难题中获得一种治疗乐趣。它用起来很愉快,就像一个精心设计的手动工具。

最后,这里有一个它擅长的绘画类型的示例。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\usepackage{unicode-math}
\setmathfont{TeX Gyre Termes Math}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
input colorbrewer-rgb
beginfig(1);
    path C, vv, aa, oo;
    C = fullcircle scaled 4cm;
    linejoin := 0;
    linecap := 0;
    for t=0 upto 2:
      p := 8/3t+2;
      drawarrow subpath (p-4/3,p+4/3) of C withcolor Blues 8 7;
      vv := (origin -- unitvector(direction p of C) scaled 2cm)            shifted point p of C;
      aa := (origin -- unitvector(direction p of C) scaled 1cm rotated 90) shifted point p of C;
      drawarrow vv withpen pencircle scaled 2 withcolor Greens 8 6;
      drawarrow aa withpen pencircle scaled 2 withcolor Oranges 8 6;
      label("$\vec{v}$", unitvector(direction 3/4 of vv) rotated -90 scaled 7 shifted point 3/4 of vv); 
      label("$\vec{a}$", unitvector(direction 2/3 of aa) rotated +90 scaled 7 shifted point 2/3 of aa); 
      fill fullcircle scaled 5 shifted point p of C;
    endfor
    oo = subpath(3.4,4.2) of C scaled 1.12;
    drawarrow oo withpen pencircle scaled 4 withcolor Blues 8 3;
    label.lft("$\omega$", point 2/3 of oo);
endfig;
\end{mplibcode}
\end{document}

相关内容