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