luamplib 标签中的 btex 和 etex

luamplib 标签中的 btex 和 etex

我一直在尝试和METAPOST,特别是luamplib。我发现我无法使用/结构tex来排版标签,而使用 显然是可以的。经过一番谷歌搜索后,我发现可以使用文件和相应的发现来使/工作btexetexMETAPOSTbtexetexluatexkomplib.texluatexkomplib.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的文档以获取更多(更多)信息。

相关内容