![`\newenvironment` 抛出错误](https://linux22.com/image/448421/%60%5Cnewenvironment%60%20%E6%8A%9B%E5%87%BA%E9%94%99%E8%AF%AF.png)
我定义了一个环境:
% Custom environment
% \begin{subeqns}[eq:label]
% ...
% \end{subeqns}
\newenvironment{subeqns}[1][]
{
\begin{subequations} \ifthenelse{\isempty{#1}}{}{\label{#1}}
\begin{align}
}
{
\end{align}
\end{subequations}
}
并在文档中使用它:
\begin{subeqns}
hello &= 7 \\
3 &= 4
\end{subeqns}
并且它产生了所需的输出:
然而,这是抛出错误在 LaTeX 编译日志中:
1 main.tex|51 error| LaTeX Error: \begin{align} on input line 49 ended by \end{subeqns}.
3 main.tex|54 error| LaTeX Error: \begin{subequations} on input line 49 ended by \end{document}.
我怎样才能消除这些错误?
答案1
您不需要使用b
的说明符来收集整个环境\NewDocumentEnvironment
。虽然您无法隐藏\begin{align}
在自定义环境的启动代码中,但您能使用内部宏\align
(无耻的自我宣传:align 的缩写)。
\documentclass[twocolumn]{article}% twocolumn only for smaller snapshot
\usepackage{amsmath}
\makeatletter
\newenvironment{subeqns}[1][]{%
\subequations
\@ifnotempty{#1}{\label{#1}}%
\align
}{%
\endalign
\endsubequations
}
\makeatother
\begin{document}
Text text text text text text text text text
\begin{subeqns}[parent]
a&=b \label{a}\\
a&=b \label{b}
\end{subeqns}
Text text text text text text text text text.
Eq.~\eqref{parent} consists of Eqs.~\eqref{a}
and \eqref{b}.
\end{document}
答案2
使用 plante 建议的命令,
% Custom environment
% \begin{subeqns}[eq:label]
% ...
% \end{subeqns}
\NewDocumentEnvironment{subeqns}{o+b}
{
\begin{subequations} \IfNoValueF{#1}{\label{#1}}
\begin{align}
#2
\end{align}
\end{subequations}
}
{
}
输入:
\begin{subeqns}[myEqn]
hello &= 7 \\
3 &= 4 \\
\text{My eqref} &= \eqref{myEqn}
\end{subeqns}
输出:
注意:\usepackage{xparse}
和\usepackage{amsmath}
需要。