我一直在尝试和METAPOST
,特别是luamplib
。我发现我无法使用/结构tex
来排版标签,而使用 显然是可以的。经过一番谷歌搜索后,我发现可以使用文件和相应的发现来使/工作btex
etex
METAPOST
btex
etex
luatexkomplib.tex
luatexkomplib.lua
这里我的用法如下:
\documentclass{article}
\usepackage{pdftexcmds}
\makeatletter
\let\pdfescapename=\pdf@escapename
\let\pdfstrcmp=\pdf@strcmp
\input{luatexkomplib}
\makeatother
\begin{document}
\begin{mplibcode}
beginfig(1)
u=50;
draw fullcircle scaled u;
pickup pencircle scaled 2;
draw (u/2,0); draw(0,u/2); draw(-u/2,0); draw(0,-u/2);
label.rt(btex $\theta = 0$ etex scaled .5, (u/2,0));
label.top(btex $\theta = \displaystyle{\frac{\pi}{2}}$ etex scaled .5, (0,u/2));
label.lft(btex $\theta = \pi$ etex scaled .5, (-u/2,0));
label.bot(btex $\theta =\displaystyle{\frac{3\pi}{2}}$ etex scaled .5, (0,-u/2));
endfig;
end;
\end{mplibcode}
\end{document}
这会产生带有标记点的预期圆tex
。我的问题是:使用这两个文件而不是使用包会破坏任何东西吗luamplib
?如果没有,那么我是否错过了某个更新的luamplib
包?
答案1
如果我再仔细用 Google 搜索一下,就会发现以下“TODO”页面luamplib
GitHub:
- 使用 infwarerr 和 ltxcmds 实现 Plain/LaTeX 兼容
- 使用自己的 LaTeX 逐字环境(就像 luacode 一样) 是的,这比使用 fancyvrb 要好得多
- 使得带有 \ { } 的 mplibcode 变体仍然特殊吗?
- 实际上,按照 Arno T 的要求,也可以使命令不改变 catcode。
- 扩展文档?
- 与上下文同步?
- 在测试文件中添加带有 mpfun 的图形
以下实现btex-etex命令: http://cvs.ktug.or.kr/viewcvs/ko.TeX/luatexko/luatexkomplib.tex http://cvs.ktug.or.kr/viewcvs/ko.TeX/luatexko/luatexkomplib.lua
由于提到这两个文件已经实现了btex
/etex
标签,我只是假设使用它们没有问题(并且想知道为什么包没有更新以包含它们)。
答案2
两年半后,由于 Dohyun Kim(文件作者luatexkomplib
)自己维护luamplib
,该领域的情况发生了很大变化。特别是,自 2.0 版(2013/05)以来,它btex…etex
直接支持标志。因此,以下代码足以以文档的当前字体生成所需的图形。
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1)
u=50;
draw fullcircle scaled u;
pickup pencircle scaled 2;
draw (u/2,0); draw(0,u/2); draw(-u/2,0); draw(0,-u/2);
label.rt(btex $\theta = 0$ etex scaled .5, (u/2,0));
label.top(btex $\theta = \displaystyle{\frac{\pi}{2}}$ etex scaled .5, (0,u/2));
label.lft(btex $\theta = \pi$ etex scaled .5, (-u/2,0));
label.bot(btex $\theta =\displaystyle{\frac{3\pi}{2}}$ etex scaled .5, (0,-u/2));
endfig;
end;
\end{mplibcode}
\end{document}
自版本 2.03 (2013/12) 起,luamplib
甚至支持textext
与其 ConTeXt 同名的宏。因此,以下代码产生完全相同的输出:
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1)
u=50;
draw fullcircle scaled u;
pickup pencircle scaled 2;
draw (u/2,0); draw(0,u/2); draw(-u/2,0); draw(0,-u/2);
label.rt(textext("$\theta = 0$") scaled .5, (u/2,0));
label.top(textext("$\theta = \displaystyle{\frac{\pi}{2}}$") scaled .5, (0,u/2));
label.lft(textext("$\theta = \pi$") scaled .5, (-u/2,0));
label.bot(textext("$\theta =\displaystyle{\frac{3\pi}{2}}$") scaled .5, (0,-u/2));
endfig;
\end{mplibcode}
\end{document}
textext
(或其同义词)的主要优点TEX
是它允许更轻松地处理标签中的变量。例如,以下代码
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
for i = 1 upto 5:
label(textext("$n_" & decimal i & "$"), (i*cm, 0));
endfor
endfig;
\end{mplibcode}
\end{document}
产生这个:
更方便的是,从 2.6.0 版(2014/03)开始,如果您\mplibtextextlabel{enable}
在序言中插入,标签的每个文本(仅以字符串形式提供)将自动排版textext
,并且仍使用文档的当前字体。因此,以下代码产生的输出与之前的代码相同。
\documentclass{article}
\usepackage{luamplib}
\mplibtextextlabel{enable}
\begin{document}
\begin{mplibcode}
beginfig(1);
for i = 1 upto 5:
label("$n_" & decimal i & "$", (i*cm, 0));
endfor
endfig;
\end{mplibcode}
\end{document}
看luamplib
的文档以获取更多(更多)信息。