我想重新定义一个包含环境 alignat* 的环境。
我发现我不能这样做:
\newenvironment{variables}
{ \paragraph{Variables :}
\begin{alignat*}{2} }
{ \end{endalignat*} }
所以我找到的解决方案是使用命令\alignat
,但是这样,方程式就被编号了,而我不会。
\newenvironment{variables}
{ \paragraph{Variables :}
\alignat*{2} }
{ \endalignat* }
那么我该如何做才能\alignat*
在新的环境中保留这颗星星呢?
答案1
为什么要定义\foo
?我可能漏掉了一些东西,但你可以\csname
在定义中包含
\newenvironment{variables}
{\paragraph{Variables :}
\csname alignat*\endcsname{2}}
{\csname endalignat*\endcsname}
答案2
\csname endalignat*\endcsname
\endalignat*
扩展为通常无法输入的命令。因此\foo
,这里有一个辅助宏,它生成您想要的环境定义,只是命令名称作为参数传递#1
,#2
然后\expandafter
用于生成命令名称 so,其构造与
\foo{\alignedat*}{\endalignedat*}
但 * 被解释为命令名称的一部分,就好像它是一个字母一样。
\documentclass{article}
\usepackage{amsmath}
\def\foo#1#2{%
\newenvironment{variables}
{\paragraph{Variables :}
#1{2}}
{#2}}
\expandafter\foo
\csname alignat*\expandafter\endcsname
\csname endalignat*\endcsname
\begin{document}
\begin{variables}
a&b\\
aaa&bbb
\end{variables}
\end{document}