`\newenvironment` 抛出错误

`\newenvironment` 抛出错误

我定义了一个环境:

% 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}需要。

相关内容