Может ли пакет перезаписать исходные команды в 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

Упаковка может переопределить любую часть латекса и создать произвольные результаты.

Например, сохраните это как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как синий, то вы, очевидно, не можете заставить оба пакета работать одновременно. Если вы загружаете оба пакета в зависимости от деталей реализации, вы можете получить ошибку или можете получить красный или синий в зависимости от порядка загрузки пакетов. Автор документа должен загружать необходимые пакеты и не загружать конфликтующие пакеты.

Связанный контент