Metapost 标签的 OpenType 字体

Metapost 标签的 OpenType 字体

是否可以在 MetaPost 标签中使用 OpenType 字体?

我使用 MiKTeX 2.9。我希望类似的软件mpost --tex=dvilualatex <myfile>.mp能起作用,但没有成功。

有什么建议吗?

我尝试了这个,但是即使我使用默认字体,我的标签所在的位置也出现一个空框。

\startMPdefinitions
\stopMPdefinitions


\starttext
\startMPpage
beginfig(1);
  draw(0, 0)--(200,200);
  dotlabel.bot("ABCDEFG", (100,100));
endfig;
\stopMPpage

\stoptext

答案1

除了 ConTeXt,如果您通过 Lua(La)TeX 使用 MetaPost,还可以在 MetaPost 标签中包含 OpenType 字体。

正如评论中所指出的,感谢 Dohyun Kim,btex … etex现在这些标志已被识别luamplib,但在最近的版本中,它的作用远不止于此:luamplib现在还包括一个textext与 MetaFun/ConTeXt 中同名的功能几乎相同的功能。

btex … etexflags 类似,textext()(以字符串作为参数)默认使用当前 Lua(La)TeX 文档的字体(无论是否为 OpenType)来排版标签。但是 flags 有两个很大的优势btex … etex

  • 它允许处理标签中的变量;参见基于变量值的 Metapost 标签
  • 如果您\mplibtextextlabel{enable}在前言中发出指令,则将字符串本身作为命令的参数就足够了labeltextext被调用来排版它,但在后台。如果您有大量标签需要排版,这非常方便!

因此,下面的程序:

\documentclass[12pt]{scrartcl}
\usepackage{unicode-math}
    \setmainfont{XITS}
    \setmathfont{XITS Math}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
    label(textext("Pythagorean addition: $a^2+b^2 = c^2$."), origin);
endfig;
\end{mplibcode}
\end{document}

给出的结果与以下完全相同:

\documentclass[12pt]{scrartcl}
\usepackage{unicode-math}
    \setmainfont{XITS}
    \setmathfont{XITS Math}
\usepackage{luamplib}
    \mplibtextextlabel{enable}
\begin{document}
\begin{mplibcode}
beginfig(1);
    label("Pythagorean addition: $a^2+b^2 = c^2$.", origin);
endfig;
\end{mplibcode}
\end{document}

无论哪种方式,您都可以在标签中从 XITS(它们本身就是 STIX 字体的改编版)获得 12pt 大小的 OpenType 文本和数学字体:

在此处输入图片描述

答案2

如果您不介意使用 ConTeXt 来生成元帖子图形,那么您可以使用:

% ConTeXt font setup. This is similar to fontspec
% \usemodule[simplefonts]
% \setmainfont[Pagella]

\startMPdefinitions
  % Common MP code for all figures
\stopMPdefinitions

\starttext
\startMPpage
 % MP figure. Text enclosed in btex ... etex is parsed using ConTeXt
\stopMPpage
...
\startMPpage
...
\stopMPpage
\stoptext    

然后使用 进行编译context filename

PS:我不确定 MikTeX 上 ConTeXt 的当前状态如何。如果 MikTeX 不包含 ConTeXt,您可以单独安装 ConTeXt(在并行树中),大约 250MB。

相关内容