是否可以在 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 … etex
flags 类似,textext()
(以字符串作为参数)默认使用当前 Lua(La)TeX 文档的字体(无论是否为 OpenType)来排版标签。但是 flags 有两个很大的优势btex … etex
:
- 它允许处理标签中的变量;参见基于变量值的 Metapost 标签;
- 如果您
\mplibtextextlabel{enable}
在前言中发出指令,则将字符串本身作为命令的参数就足够了label
;textext
被调用来排版它,但在后台。如果您有大量标签需要排版,这非常方便!
因此,下面的程序:
\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。