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