为什么 \newenvironment 不能按预期与 \alignat 一起工作?

为什么 \newenvironment 不能按预期与 \alignat 一起工作?

问题:我尝试这样做\newenvironment

\newenvironment{derivation}{ \begin{alignat*}{2}
\begin{split} }{ \end{split}
\end{alignat*} }

但当我这么做的时候

\begin{derivation}
    I(\mu) &= \dots
\end{derivation}

我得到了错误Paragraph ended before \alignat* was complete,,,,Missing $ inserted.Missing \endgroup inserted.Display math should end with $$.\begin{alignat*} on input line 405 ended by \end{document}.

是不是我使用的语法不\newenvironment正确?

试图:一开始我以为可能是{2}导致花括号不匹配,即它看起来像 变量enddef\newenvironment但实际上这没有意义。现在我只是困惑地盯着屏幕。

这似乎可能与这个问题,但该问题的答案并未解释为什么建议的解决方案不起作用,它们只是给出了可行的替代解决方案。我想知道为什么这不起作用,这样我就不会再尝试了。

动机: 为了节省编写此类方程的时间:

\begin{alignat*}{2}
    \begin{split}
    \frac{I_{\theta}(\theta)}{(h'(\theta))^2} &= \frac{    \frac{1}{ \theta}  }{ \left(  \frac{1}{\theta} \right)^2 } \\
    &= \frac{\theta^2}{ \theta}  = \theta = e^{\eta} = I_{\eta}(\eta) \,. \quad \square
    \end{split}
\end{alignat*}

答案1

\documentclass{article}

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{environ}

\NewEnviron{derivation}{%
  \begin{alignat*}{2}
    \begin{split}
      \BODY
    \end{split}
  \end{alignat*}%
}

\begin{document}

\begin{derivation}
  \frac{I_{\theta}(\theta)}{(h'(\theta))^2} &= \frac{\frac{1}{\theta}}{\left(\frac{1}{\theta}\right)^2} \\
  &= \frac{\theta^2}{\theta} = \theta = e^{\eta} = I_{\eta}(\eta) \,. \quad \square
\end{derivation}

\end{document}

在此处输入图片描述

我觉得这样格式化会更好

\documentclass{article}

\usepackage{amsmath}
\usepackage{amsthm}

\begin{document}

\begin{proof}
  \begin{align*}
    \frac{I_{\theta}(\theta)}{(h'(\theta))^2}
    &= \frac{1/\theta}{(1/\theta)^2} \\
    &= \frac{\theta^2}{\theta} = \theta = e^{\eta} = I_{\eta}(\eta) \,. \qedhere
  \end{align*}
\end{proof}

\end{document}

在此处输入图片描述

答案2

由于多种原因,您无法根据 来定义环境split。此外,根据align和类似环境来定义环境需要使用“内部形式”。

然而,在您的情况下,alignat*是完全多余的,可以用以下方式替换equation*:毕竟,split不能占用多个对齐点。

此外,嵌套split是无用的;两者之间没有任何区别

\begin{alignat*}{2}
    \begin{split}
    \frac{I_{\theta}(\theta)}{(h'(\theta))^2} &= \frac{    \frac{1}{ \theta}  }{ \left(  \frac{1}{\theta} \right)^2 } \\
    &= \frac{\theta^2}{ \theta}  = \theta = e^{\eta} = I_{\eta}(\eta) \,. \quad \square
    \end{split}
\end{alignat*}

\begin{alignat*}{2}
    \frac{I_{\theta}(\theta)}{(h'(\theta))^2} &= \frac{    \frac{1}{ \theta}  }{ \left(  \frac{1}{\theta} \right)^2 } \\
    &= \frac{\theta^2}{ \theta}  = \theta = e^{\eta} = I_{\eta}(\eta) \,. \quad \square
\end{alignat*}

您似乎想要的只是一个别名align*

\documentclass{article}
\usepackage{amsmath,amssymb,amsthm}

\newenvironment{derivation}
 {\csname align*\endcsname}
 {\endalign}
\makeatletter
\let\derivation@qed\align@qed
\makeatother

\begin{document}

\begin{proof}
Better using \verb|\qedhere|, though
\begin{derivation}
\frac{I_{\theta}(\theta)}{(h'(\theta))^2}
  &= \frac{\frac{1}{\theta}}{\bigl(\frac{1}{\theta}\bigr)^2} = \frac{1/\theta}{(1/\theta)^2} \\
  &= \frac{\theta^2}{\theta} = \theta = e^{\eta} = I_{\eta}(\eta) \,.\qedhere
\end{derivation}
\end{proof}

\end{document}

\qedhere正方形似乎表示证明的结束,但是在这种情况下最好使用。

在此处输入图片描述

我在四层部分附近添加了斜线形式:我更喜欢它。

相关内容