一个例子:
不含amsmath
包装:
环境
equation
自动对方程式进行编号。该
align
环境无法执行。
附带amsmath
包装:
align
并equation
在编号方程中无缝工作:我可以用equation
它写出我的前两个方程,并align
写出我的第三个方程,而 Latex 仍然会正确地对它们进行编号。
我的问题是:
equation
加载包之后的命令的代码amsmath
是否与加载包之前的命令的代码相同?而且,如果是这样的话,一般来说,加载不同的包是否会引起冲突?我们又该如何避免呢?
答案1
每个人都可以重新定义命令或环境。这样的重新定义会更改代码。这可能会导致冲突或不必要的副作用。但通常包编写者都知道这一点,并会尽量避免此类冲突——毕竟没有人会被迫使用一个行为不端并破坏其他代码的包。
\documentclass{article}
\usepackage{xcolor}
\begin{document}
\begin{equation}
x=4
\end{equation}
\renewenvironment{equation}
{\par\color{red}\Huge\centering}
{\par}
\begin{equation}
x=4
\end{equation}
\end{document}
答案2
一个包可以重新定义乳胶的任何部分并产生任意结果。
例如将其另存为zzz.sty
\everypar{}
BOO!
\stop
并添加
\usepackage{zzz}
到任何乳胶文档。
事实上,equation
和align
按顺序编号不需要重新定义任何一个环境,本文档定义了一个zzz
按相同顺序编号的新环境,但不重新定义equation
或align
。
\documentclass{article}
\usepackage{amsmath}
\newenvironment{zzz}
{\par\refstepcounter{equation} \fbox{this is \theequation zzz}}
{zzz ends here\par}
\begin{document}
equation
\begin{equation}
1=1
\end{equation}
zzz
\begin{zzz}
qqq
\end{zzz}
align
\begin{align}
a&=1\\
b&=2
\end{align}
\end{document}
软件包可能会发生无法调和的冲突,如果软件包 a 定义\zzz
为红色,而软件包 b 定义\zzz
为蓝色,那么显然您无法同时使用这两个软件包。如果您根据实现细节加载这两个软件包,则可能会出现错误,或者根据软件包加载顺序,您可能会得到红色或蓝色。文档的作者应负责加载所需的软件包,而不是加载冲突的软件包。