mhchem/amsmath, похоже, изменяет макрос @eqnnum, поэтому я не могу изменить цвета номеров уравнений глобально. Как мне исправить эту проблему?

mhchem/amsmath, похоже, изменяет макрос @eqnnum, поэтому я не могу изменить цвета номеров уравнений глобально. Как мне исправить эту проблему?

Спасибо cfrКак мне максимально просто получить номера уравнений с индивидуальными цветами?за подсказку, как это сделать без установленных пакетов mhchem/amsmath. Чтобы понять, что я имею в виду, вот MWE. Если я закомментирую строку \usepackage[version=4]{mhchem}, я получу желаемый результат. Кажется, что mhchemнужно как-то переопределить \@eqnnumмакрос.

\documentclass{article}
\usepackage{xcolor,etoolbox}
\usepackage[version=4]{mhchem} 
\definecolor{SAEblue}{rgb}{0, .62, .91}
\makeatletter
\patchcmd{\@eqnnum}{\normalcolor}{\color{SAEblue}}{\typeout{eqnnum patch: OK!}}{\typeout{eqnnum patch: Oh, dear!}}
\begin{document}    
\begin{equation}
  1 + 2 = 3\label{eq:siml}
\end{equation}
\end{document}

Я искал mhchem.sty, mhchem.tex, hpstatement.sty, и rsphrase.sty. Это все немного выше моего понимания, но я не увидел ничего очевидного, что могло бы вызвать эту проблему. Моим следующим шагом было посмотреть, какие пакеты требуются mhchem, и я составил следующий список:

expl3, l3keys2e, l3regex, calc[1998/07/07], amsmath, chemgreek[2015/04/09], graphics, ifthen, textcomp, babel, twoopt

Ни один из них не вызывает проблем, за исключением amsmath. Следующий MWE работает нормально, пока вы не раскомментируете amsmathстроку:

\documentclass{article}
\usepackage{xcolor,etoolbox}
\usepackage{expl3}
\usepackage{l3keys2e}
\usepackage{l3regex}
\usepackage{calc}[1998/07/07]
%\usepackage{amsmath}
\usepackage{chemgreek}[2015/04/09]
\usepackage{graphics}
\usepackage{ifthen}
\usepackage{textcomp}
\usepackage[american]{babel}
\usepackage{twoopt}
%\usepackage[version=4]{mhchem} 
\definecolor{SAEblue}{rgb}{0, .62, .91}
\makeatletter
\patchcmd{\@eqnnum}{\normalcolor}{\color{SAEblue}}{\typeout{eqnnum patch: OK!}}{\typeout{eqnnum patch: Oh, dear!}}
\begin{document}
\begin{equation}
  1 + 2 = 3\label{eq:siml}
\end{equation}
\end{document}

Если раскомментировать, amsmathцвет снова станет черным (но ошибки не возникнет).

В amsmath.ins, я вижу следующее:

\iftagsleft@
  \def\@eqnnum{\hbox to1sp{}\rlap{\normalfont\normalcolor
    \hskip -\displaywidth\tagform@\theequation}}
\else
  \def\@eqnnum{{\normalfont\normalcolor \tagform@\theequation}}
\fi

Я бы подумал, что если я переопределю все \@eqnnumс помощью патча, это ничего не изменит, но, честно говоря, у меня есть лишь небольшое представление о том, как все это на самом деле работает.

На данном этапе я ищу совета у более опытных членов сообщества, чтобы заставить это работать с используемыми пакетами amsmath.mhchem

решение1

Вы используете неправильный патч, потому что при amsmathзагрузке печать номера уравнения \@eqnnumбольше не делегируется или, по крайней мере, делегируется другим способом. См., например,отрегулируйте выравнивание номеров уравнений с помощью leqno

\documentclass{article}
\usepackage{xcolor,etoolbox}
\usepackage[version=4]{mhchem}

\definecolor{SAEblue}{rgb}{0, .62, .91}

\makeatletter
% detach \eqref and \tag making
\renewcommand{\eqref}[1]{\textup{\eqreftagform@{\ref{#1}}}}
\let\eqreftagform@\tagform@
\def\tagform@#1{%
  \maketag@@@{\color{SAEblue}(\ignorespaces#1\unskip\@@italiccorr)}%
}
\makeatother

\begin{document}

In equation~\eqref{eq:siml} we state a truth.
\begin{equation}
  1 + 2 = 3\label{eq:siml}
\end{equation}

\end{document}

введите описание изображения здесь

Если вы хотите, чтобы \eqrefномер уравнения также был напечатан синим цветом, закомментируйте две строки перед \def\@tagform@.

решение2

У меня есть «хакерское» решение:

mhchemнагрузки amsmath, поэтому пропуск этого параметра amsmathв любом случае приведет к неправильной настройке цвета, если mhchemон включен.

Виновником , на мой взгляд, является то, что , не учитывается изменение цвета, сделанное \gdef\df@tag{\tagform@\theequation}. Я использовал другой патч и ввел общее , которое определено как цвет здесь.\endmathdisplay@\@eqnnum\mathtagcolorSAEblue

\documentclass{article}
\usepackage{xcolor}
\usepackage{xpatch}
\usepackage{expl3}
\usepackage{l3keys2e}
\usepackage{l3regex}
\usepackage{calc}[1998/07/07]

\usepackage{amsmath}
\usepackage{chemgreek}[2015/04/09]
\usepackage{graphicx}
\usepackage{ifthen}
\usepackage{textcomp}
\usepackage[american]{babel}
\usepackage{twoopt}

\newcommand{\mathtagcolor}{\normalcolor}

\definecolor{SAEblue}{rgb}{0, .62, .91}


\renewcommand{\mathtagcolor}{SAEblue}

\usepackage[version=4]{mhchem} 

\makeatletter
  \xpatchcmd{\@eqnnum}{\normalcolor}{\color{\mathtagcolor}}{\typeout{eqnnumpatch: OK!}}{\typeout{eqnnum patch: Oh, dear!}}
    \@ifpackageloaded{amsmath}{%
  \xpatchcmd{\endmathdisplay@a}{%
    \tagform@\theequation
  }{%
    \color{\mathtagcolor}\tagform@\theequation
  }{\typeout{patching \protect\endmathdisplay@a\ succeeded}}{\typeout{patching \protect\endmathdisplay@a\ failed}}
}{}
\makeatother

\begin{document}

\begin{equation}
  1 + 2 = 3\label{eq:siml}
\end{equation}
\end{document}

введите описание изображения здесь

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