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

여기에 이미지 설명을 입력하세요

관련 정보