我刚刚开始使用该软件包empheq
来创建一个围绕方程式的框。我想创建一对简短的新命令来进入和退出 empheq 环境,但遇到了错误。作为参考,这里有一个可以运行且我想修改的最小代码示例:
\documentclass{minimal}
\usepackage{empheq}
\newcommand*\widefbox[1]{\fbox{\hspace{2em}#1\hspace{2em}}}
\begin{document}
\begin{empheq}[box=\widefbox]{align}
Y & =Ak^{\alpha}L^{1-\beta}\\
C & =(1-s)Y\\
Y & =C + I + G\\
\Delta K & = I -\delta K
\end{empheq}
\end{document}
其结果为:
我想创建相同的输出,但不必每次都输入\begin{empheq}[box=\widefbox]{align}
。\end{empheq}
所以我尝试定义两个新命令:
\newcommand{\eqnboxbegin}{\begin{empheq}[box=\widefbox]{align}}
\newcommand{\eqnboxend}{\end{empheq}}
第一个命令按预期工作,但第二个命令有问题。也就是说,此代码可以工作:
\documentclass{minimal}
\usepackage{empheq}
\newcommand*\widefbox[1]{\fbox{\hspace{2em}#1\hspace{2em}}}
\newcommand{\eqnboxbegin}{\begin{empheq}[box=\widefbox]{align}}
\begin{document}
\eqnboxbegin
Y & =Ak^{\alpha}L^{1-\beta}\\
C & =(1-s)Y\\
Y & =C + I + G\\
\Delta K & = I -\delta K
\end{empheq}
\end{document}
但是此代码会产生错误:
\documentclass{minimal}
\usepackage{empheq}
\newcommand*\widefbox[1]{\fbox{\hspace{2em}#1\hspace{2em}}}
\newcommand{\eqnboxbegin}{\begin{empheq}[box=\widefbox]{align}}
\newcommand{\eqnboxend}{\end{empheq}}
\begin{document}
\eqnboxbegin
Y & =Ak^{\alpha}L^{1-\beta}\\
C & =(1-s)Y\\
Y & =C + I + G\\
\Delta K & = I -\delta K
\eqnboxend
\end{document}
错误信息如下:
paragraph ended before \empheq was complete.
我无法理解这一点。提前感谢您的帮助!
答案1
为了完成环境所做的事情,(我怀疑)它们将和empheq
之间的所有材料收集到一个框中。如果终止框集合的分隔符隐藏在未展开的宏中,则收集将持续到文档结尾。\begin{empheq}
\end{empheq}
这个新环境对我有用:
\newenvironment{empheqbox}{%
\empheq[box=\widefbox]{align}%
}{%
\endempheq%
}
您会注意到我正在使用直接环境命令,因为empheq
使用环境形式也会产生失控参数错误。
更新
阅读后empheq
包装文档,其中引用这个文件,AmS 存储环境内容的底层机制确实是错误的根源。
这与不幸的复杂技术有关:给定的环境必须将其内容读取为分隔的宏参数,因为它们使用从 Spivak 的 amstex.tex 继承的算法对内容进行多遍处理。显而易见的解决方案 — 用不同的算法替代多遍计算中的框改组而不是标记改组 — 需要从头开始重写这些显示环境;虽然这是一个值得追求的目标,但它超出了 AmS-LaTeX 项目的原始范围。
因此,看起来\begin{}
和\end{}
对于强大的使用来说是强制性的。
作者empheq
注意到了这一点,并建议将上面的环境写成
\newenvironment{empheqbox}{%
\setkeys{EmphEqEnv}{align}
\setkeys{EmphEqOpt}{box=\widefbox}
\EmphEqMainEnv%
}{%
\endEmphEqMainEnv%
}