Спасибо 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
\mathtagcolor
SAEblue
\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}