一个命令/环境同时适用于方程和方程*

一个命令/环境同时适用于方程和方程*

我想根据内容是否包含为equation和定义一个新的命令/环境。对于以下等式,equation*\label

\begin{mymath}
f = g
\end{mymath}

环境mymath将被替换为equation*;但对于以下内容,

\begin{mymath}
\label{eq:test}
f = g
\end{mymath}

equation将改用环境。

我看到了这篇文章单一的方程和对齐环境并尝试使用\tl_if_in:nnTF {#1} {\label} {}{},但没有效果。

答案1

我认为这不是一个好办法,但你是法官。

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn

\NewDocumentEnvironment{mymath}{b}
 {
  \tl_if_in:nnTF { #1 } { \label }
   {
    \begin{equation} #1 \end{equation}
   }
   {
    \begin{equation*} #1 \end{equation*}
   }
 }
 {\ignorespacesafterend}

\ExplSyntaxOff

\begin{document}

This one is not numbered
\begin{mymath}
f = g
\end{mymath}
but this one is
\begin{mymath}
\label{eq:test}
f = g
\end{mymath}
and let's check that the line below starts at the left margin.

\noindent X\dotfill X

\end{document}

在此处输入图片描述

答案2

替代解决方案(与 egreg 类似,但使用命令而不是环境)。它将标签作为可选参数,并相应地使用 * 或不使用:

\documentclass{minimal}
\usepackage{amsmath}

\NewDocumentCommand{\myeq}{o m}{%
    \IfNoValueTF{#1}{%
            \begin{equation*}
                        #2
            \end{equation*}
    }
    {%
            \begin{equation}
                        #2
                        \label{#1}
            \end{equation}
    }
}

\begin{document}

\myeq{F = ma}

\myeq[newtons_law]{F = \frac{dp}{dt}}

See eq. \ref{newtons_law}

\end{document}

相关内容