包可以覆蓋 Latex 中的原始命令嗎?

包可以覆蓋 Latex 中的原始命令嗎?

一個例子:

沒有amsmath包裝:

  1. 環境equation會自動對方程式進行編號。

  2. 環境align無法執行。

amsmath包:

  1. align並且equation在編號方程中無縫工作:我可以用來equation編寫前兩個方程,並align編寫第三個方程,Latex 仍然會正確地對它們進行編號。

我的問題是:

  1. equation載入包後的命令代碼amsmath是否與載入包之前相同?

  2. 而且,如果是這樣的話,那麼,一般情況下,載入不同的套件會不會造成衝突呢?我們該如何避免呢?

答案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}

任何乳膠文檔。

事實上equationalign順序中的數字不需要重新定義任一環境,本文檔定義了一個新的環境,zzz該環境以相同的順序編號,但不重新定義equationalign

在此輸入影像描述

\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那麼顯然不能讓這兩個包同時工作。如果根據實作細節載入這兩個包,您可能會收到錯誤,或者根據套件載入順序,您可能會看到紅色或藍色。由文件的作者決定載入需要的套件而不載入衝突的套件。

相關內容