gmp
包装不能与\sqrt
标签配合,这很奇怪。背面:
\documentclass{article}
\usepackage[shellescape,latex]{gmp}%nowrite
\usempxclass{amsart}
\usempxpackage{amssymb}
\title{Metapost+gmp}
\begin{document}
\maketitle
\begin{figure}[htbp]
\centering
\begin{mpost}
draw fullcircle scaled 100pt;
label(btex $r=10$ etex, origin);
%to test, un-comment the following line:
%label(btex $r=\sqrt{100}$ etex, origin);
\end{mpost}
\caption{Caption}
\label{fig:my_label}
\end{figure}
\end{document}
我测试过,问题没有出现在 中mpgraphics
。这是 的一个错误吗gmp
?
更新:
错误信息:
l.17 label(btex
$r=\protect \let \reserved@d =[\def \begingroup \def ##1,{}...
The two files given above are one of your source files
and an auxiliary file I need to read to find out what your
btex..etex blocks mean. If you don't know why I had trouble,
try running it manually through MPtoTeX, TeX, and DVItoMP
答案1
当 中需要 LaTeX 宏时label
,请使用\btex
,而不是btex
:
\begin{mpost}
draw fullcircle scaled 100pt;
label(\btex $r=\sqrt{100}$ etex, origin);
\end{mpost}
它已经在文档第 1 页底部公布
这会产生一些后果;例如,METAPOST 标签通常会放在
\btex ... etex
另请参见图 6 中的示例并\btex
在手册中查找。
为什么是\btex
必要的?因为的目的之一gmp
是能够将 LaTeX 宏传递给环境mpost
,主要是为了根据上下文使用长度。因此.mp
文件是用全面扩张。一些宏不会受到此影响,但标签使用btex...etex
通常包含需要防止过早扩展的内容。
\btex...etex
因此,我们设计了这种方法;基本上它变成了
btex \unexpanded{...} etex
当它被传递以写入文件时,其效果是“逐字地”.mp
写入构造。btex ... etex
在标准.mp
文件中\btex
,完全等同于btex
,因为\
定义为,因此可以relax
复制并粘贴到另一个文件。.mp
答案2
或者如果lualatex
这对于您来说是一个合适的选择,您可能想尝试这种luamplib
方法。
\documentclass{amsart}
%-----------
\usepackage{luatex85}
\usepackage{luamplib}
\everymplib{verbatimtex \leavevmode etex; beginfig(0);}
\everyendmplib{endfig;}
\mplibtextextlabel{enable}
% see: `texdoc luamplib` for details...
%----------
\usepackage{amssymb}
\title{Metapost+luamplib}
\begin{document}
\maketitle
\begin{figure}[htbp]
\centering
\begin{mplibcode}
draw fullcircle scaled 100pt;
label("$r=10$", 20 up);
label("$r=\sqrt{100}$", origin);
\end{mplibcode}
\caption{Caption}
\label{fig:my_label}
\end{figure}
\end{document}
通过该\mplibtextextlabel{enable}
选项,您可以直接使用字符串来代替btex .. etex
机制,而不需要任何特殊的转义。