mhchem/amsmath parece alterar a macro @eqnnum, então não posso alterar as cores dos números da equação globalmente. Como eu resolveria esse problema?

mhchem/amsmath parece alterar a macro @eqnnum, então não posso alterar as cores dos números da equação globalmente. Como eu resolveria esse problema?

Graças ao CFRComo eu obteria números de equações com cores personalizadas da maneira mais simples possível?por fornecer uma dica sobre como fazer isso sem os pacotes mhchem/amsmath instalados. Para entender o que quero dizer, aqui está um MWE. Se eu comentar a \usepackage[version=4]{mhchem}linha, obtenho o resultado desejado. Parece que mhchemdevemos redefinir a \@eqnnummacro de alguma forma.

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

Eu pesquisei mhchem.sty, mhchem.tex, hpstatement.stye rsphrase.sty. Está tudo um pouco acima da minha cabeça, mas não vi nada óbvio que pudesse causar esse problema. Minha próxima etapa foi ver quais pacotes eram exigidos pelo mhchem, e criei a seguinte lista:

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

Nada disso causa problemas, exceto amsmath. O seguinte MWE funciona bem até você descomentar a amsmathlinha:

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

Remover o comentário amsmathfará com que a cor volte ao preto (mas não há erro).

No amsmath.ins, vejo o seguinte:

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

Eu pensaria que se eu redefinisse o \@eqnnumpatch, isso não faria diferença, mas honestamente tenho apenas uma pequena ideia de como tudo isso realmente funciona.

Neste ponto, estou buscando a orientação de membros mais experientes da comunidade para que isso funcione com os pacotes amsmath/ mhchemem uso.

Responder1

Você está usando o patch errado, pois, ao amsmathcarregar, a impressão do número da equação não é \@eqnnummais delegada ou, pelo menos, é de forma diferente. Veja, por exemplo,ajustar o alinhamento dos números das equações com 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}

insira a descrição da imagem aqui

Se você quiser que também \eqrefimprima o número da equação em azul, comente as duas linhas antes \def\@tagform@.

Responder2

Eu tenho uma solução 'hackeada':

mhchemcarrega amsmath, portanto, a omissão amsmathcausará a configuração de cor incorreta de qualquer maneira, se mhchemestiver incluída.

O culpado está \gdef\df@tag{\tagform@\theequation}, \endmathdisplay@no meu ponto de vista, em omitir a mudança de cor feita por \@eqnnum. Usei outro patch e introduzi um general \mathtagcolor, que é definido como a SAEbluecor aqui.

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

insira a descrição da imagem aqui

informação relacionada