我想根据内容是否包含为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}