我正在寻找一个命令(比如\foo{}
)或一对命令(比如\foos
,\fooe
),其行为如下:
equation
\\
环境如果没有&
multline
如果有一个\\
align
&
如果有\\
此外,*
如果没有\label
命令,则会自动在变体之间切换。
这些命令应与常用软件包(等)兼容amsmath
,并应支持常用的\tag
、\label
、\ref
命令。需要明确的是,使用它不应明显减慢编译速度。
如果您还给我一个命令,让我\[
\]
在论文中来回切换从通常的行为到上述行为,我将不胜感激。
我经常在这三个环境之间切换,这真的很烦人。谢谢!
笔记:我告诉 LaTeX 在哪里拆分方程。我只希望 LaTeX 足够聪明,能够使用适当的环境!
答案1
不,没有这种“万能”环境。equation
、multline
和align
(gather
您忘记了这个)中的每一个都解决了由要显示的不同的数学模式材料集引起的不同问题。
打破数学模式材料需要机器所无法具备的判断力。
有以下包:纳特和布雷克尝试自动化这个过程,但我的观点是,没有简单的算法可以正确地进行破解,因为它需要看结果。
然而,这是一个工作doitall
环境:
\documentclass[a4paper]{article}
\usepackage{amsmath,environ,xstring}
\newif\iflabel
\newif\ifdbs
\newif\ifamp
\NewEnviron{doitall}{%
\noexpandarg
\expandafter\IfSubStr\expandafter{\BODY}{\label}{\labeltrue}{\labelfalse}%
\expandafter\IfSubStr\expandafter{\BODY}{\\}{\dbstrue}{\dbsfalse}%
\expandafter\IfSubStr\expandafter{\BODY}{&}{\amptrue}{\ampfalse}%
\iflabel\def\doitallstar{}\else\def\doitallstar{*}\fi
\ifdbs
\ifamp
\def\doitallname{align}%
\else
\def\doitallname{multline}%
\fi
\else
\def\doitallname{equation}
\fi
\begingroup\edef\x{\endgroup
\noexpand\begin{\doitallname\doitallstar}%
\noexpand\BODY
\noexpand\end{\doitallname\doitallstar}%
}\x
}
\begin{document}
Numbered
\begin{doitall}
a=b\label{1}
\end{doitall}
\begin{doitall}
a\\b\label{2}
\end{doitall}
\begin{doitall}
a&=b\label{3}\\
c&=dxxxxx
\end{doitall}
Now no numbers
\begin{doitall}
a=b
\end{doitall}
\begin{doitall}
a\\b
\end{doitall}
\begin{doitall}
a&=b\\
c&=dxxxxx
\end{doitall}
\end{document}
我可以理解您对一个万能环境的渴望;但是您正在丢失信息。
如果你想使用\[
and\]
作为分隔符,只需说
\def\[#1\]{\begin{doitall}#1\end{doitall}}
\[...\]
在序言中。当然,来回切换含义是完全没用的。
限制
您不能在环境中使用aligned
或gathered
环境doitall
,因为它们内部有&
和\\
。当然也不可能同时使用环境split
。