mhchem/amsmath parece cambiar la macro @eqnnum, por lo que no puedo cambiar los colores de los números de ecuación globalmente. ¿Cómo solucionaría este problema?

mhchem/amsmath parece cambiar la macro @eqnnum, por lo que no puedo cambiar los colores de los números de ecuación globalmente. ¿Cómo solucionaría este problema?

gracias a cfr¿Cómo puedo obtener números de ecuación con colores personalizados de la forma más sencilla posible?por proporcionar una pista sobre cómo hacer esto sin los paquetes mhchem/amsmath instalados. Para ver lo que quiero decir, aquí hay un MWE. Si comento la \usepackage[version=4]{mhchem}línea, obtengo el resultado deseado. Parece que mhchemhay que redefinir la \@eqnnummacro de alguna manera.

\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}

Busqué en mhchem.sty, mhchem.tex, hpstatement.styy rsphrase.sty. Está todo un poco por encima de mi cabeza, pero no vi nada obvio que pudiera causar este problema. Mi siguiente paso fue ver qué paquetes eran requeridos por mhchem, y se me ocurrió la siguiente lista:

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

Ninguno de estos causa problemas excepto amsmath. El siguiente MWE funciona bien hasta que descomentes la amsmathlínea:

\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}

Descomentar amsmathhará que el color vuelva a ser negro (pero no hay ningún error).

En el amsmath.ins, veo lo siguiente:

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

Pensaría que redefinir el \@eqnnumparche no haría ninguna diferencia, pero sinceramente sólo tengo una pequeña idea de cómo funciona realmente todo esto.

En este punto, estoy buscando la orientación de miembros de la comunidad con más experiencia para que esto funcione con los paquetes amsmath/ mhchemen uso.

Respuesta1

Estás usando el parche equivocado porque, cuando amsmathestá cargado, la impresión del número de ecuación no se delega a\@eqnnum ya no se delega o, al menos, es de otra forma. Véase, por ejemplo,ajustar la alineación de los números de ecuación con 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}

ingrese la descripción de la imagen aquí

Si desea que también \eqrefse imprima el número de ecuación en azul, comente las dos líneas anteriores \def\@tagform@.

Respuesta2

Tengo una solución 'hacky':

mhchemloads amsmath, por lo que omitirlo amsmathprovocará una configuración de color incorrecta de todos modos si mhchemse incluye.

El culpable está \gdef\df@tag{\tagform@\theequation}, \endmathdisplay@bajo mi punto de vista, en omitir el cambio de color realizado por \@eqnnum. Utilicé otro parche e introduje un general \mathtagcolor, que se define como el SAEbluecolor aquí.

\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}

ingrese la descripción de la imagen aquí

información relacionada