包可以覆盖 Latex 中的原始命令吗?

包可以覆盖 Latex 中的原始命令吗?

一个例子:

不含amsmath包装:

  1. 环境equation自动对方程式进行编号。

  2. align环境无法执行。

附带amsmath包装:

  1. alignequation在编号方程中无缝工作:我可以用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

一个包可以重新定义乳胶的任何部分并产生任意结果。

例如将其另存为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}

软件包可能会发生无法调和的冲突,如果软件包 a 定义\zzz为红色,而软件包 b 定义\zzz为蓝色,那么显然您无法同时使用这两个软件包。如果您根据实现细节加载这两个软件包,则可能会出现错误,或者根据软件包加载顺序,您可能会得到红色或蓝色。文档的作者应负责加载所需的软件包,而不是加载冲突的软件包。

相关内容