如何定义环绕 linenomath 的新环境

如何定义环绕 linenomath 的新环境

为了给显示的方程分配正确的行号,我需要将每个显示的方程环绕

\begin{linenomath*}
\end{linenomath*}

我想定义一个新的环境,将这两行包裹起来

\begin{align*}
\end{align*}

等等。这是我的不成功尝试实现这一点:

\documentclass[12pt,letterpaper]{amsart}

\usepackage{amssymb,lineno}
\linenumbers

\newenvironment{myeqn}
    {
      \begin{linenomath*}
        \begin{align}
        \end{align}
      \end{linenomath*}
    }

\begin{document}

What I want

\begin{linenomath*}
  \begin{align}
    x^n + y^n &= z^n
\label{one}
  \end{align}
\end{linenomath*}

What I got

\begin{myeqn}
  x^n + y^n &= z^n
\label{two}
\end{myeqn}

\end{document}

实现这一目标的正确方法是什么?非常感谢!

答案1

这类工作;至少输出是相同的(尽管有争议)。

\documentclass[12pt,letterpaper]{amsart}

\usepackage{amssymb,lineno}
\linenumbers

\newenvironment{myeqn}
 {\csname linenomath*\endcsname\align}
 {\endalign\csname endlinenomath*\endcsname}

\begin{document}

What I want
\begin{linenomath*}
  \begin{align}
    x^n + y^n &= z^n
\label{one}
  \end{align}
\end{linenomath*}

What I got

\begin{myeqn}
  x^n + y^n &= z^n
\label{two}
\end{myeqn}

\end{document}

在此处输入图片描述

当您在其他环境中包装时align,需要使用“内部形式”,而不是 with\begin\end


一个通用环境,其中所需的环境以参数形式给出。

\documentclass[12pt,letterpaper]{amsart}

\usepackage{amssymb,lineno}
\linenumbers

\NewDocumentEnvironment{linenodisplay}{mb}
 {\begin{linenomath*}\begin{#1}#2\end{#1}\end{linenomath*}}
 {}

\begin{document}

Here is \texttt{align}
\begin{linenodisplay}{align}
  x^n + y^n &= z^n \\
  x^n + y^n &= z^n
\end{linenodisplay}
and here is \texttt{align*}
\begin{linenodisplay}{align*}
  x^n + y^n &= z^n \\
  x^n + y^n &= z^n
\end{linenodisplay}
Also \texttt{equation}
\begin{linenodisplay}{equation}
a=b
\end{linenodisplay}
and \texttt{equation*}
\begin{linenodisplay}{equation*}
a=b
\end{linenodisplay}

\end{document}

\usepackage{xparse}如果您的 LaTeX 版本早于 2020-10-01,则可能需要添加。

在此处输入图片描述

相关内容