一個例子:
沒有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
套件可以重新定義 Latex 的任何部分並產生任意結果。
例如將其另存為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}
\zzz
如果包 a 定義為紅色而包 b 定義為藍色,則包可能會產生不可調和的衝突,\zzz
那麼顯然不能讓這兩個包同時工作。如果根據實作細節載入這兩個包,您可能會收到錯誤,或者根據套件載入順序,您可能會看到紅色或藍色。由文件的作者決定載入需要的套件而不載入衝突的套件。