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.stymhchem

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方程式番号も青色で印刷したい場合は、 の前の 2 行をコメント アウトします\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}

ここに画像の説明を入力してください

関連情報