我正在使用 chemmacros 包中的反应环境来排版一些简单的化学反应。
我想自定义引用我的反应的方式。理想情况下,整个引用名称(以及超链接)应为“反应 {#1}”(是的,带有花括号,以与方程式标签保持一致)。
我无法使用 cleveref 包,因为它与我的文档的其余部分有奇怪的交互,我宁愿坚持使用 \ref 和 \autoref 命令。这是我的 MWE(请注意,如果它有任何变化,我实际上正在使用回忆录类文档):
\documentclass{article}
\usepackage{chemmacros}
\usepackage{hyperref}
\chemsetup{modules = all}
\begin{document}
Reaction \autoref{rxn:water} is good.
\begin{reaction}
H3O+ + HO- = 2 H2O "\label{rxn:water}"
\end{reaction}
\\
Reaction \ref{rxn:water} is just water...
\end{document}
提前致谢!
答案1
您可以通过测试是否以 开头来修改如何hyperref
选择在文件中写入的字符串,这就是修改它的方式。aux
\theHequation
R
chemmacros
\documentclass{article}
\usepackage{amsmath}
\usepackage{chemmacros}
\usepackage{hyperref}
\chemsetup{modules=all,greek=textgreek}
\makeatletter % patchcmd from etoolbox, loaded by chemmacros
\patchcmd{\hyper@makecurrent}
{\edef\Hy@param{#1}}
{\xHy@param@def{#1}}
{}{}
\def\xHy@param@def#1{%
\edef\@tempa{\csname theH#1\endcsname}%
\edef\@tempa{\expandafter\@car\@tempa\@nil}%
\edef\Hy@param{\if R\@tempa reaction\else#1\fi}%
}
\makeatother
\newcommand\reactionautorefname{Reaction}
\begin{document}
\autoref{rxn:water} is good.
\begin{reaction}
H3O+ + HO- = 2 H2O "\label{rxn:water}"
\end{reaction}
Reaction \ref{rxn:water} is just water...
\end{document}
答案2
您可以适应\ref{...}
仅用于化学反应:
\newcommand{\rxnref}[1]{Reaction~\{\#\ref{#1}\}}
但是,我想不出一个好的解决方案\autoref{...}
。通常,你会想用类似的东西来调整前缀\def\reactionautorefname{Reaction}
,但据我所知,\reactionautorefname{...}
一开始就没有。chemmacros
的环境是环境reaction
的包装器,因此你需要使用,但在这种情况下,反应和数学方程都收到“反应”前缀,这没有什么意义。因此,最好的解决方案可能是只使用:amsmath
align
\def\equationautorefname{Reaction}
rxnref{...}
\documentclass{article}
\usepackage{chemmacros}
\chemsetup{modules = all}
\usepackage{hyperref}
\newcommand{\rxnref}[1]{Reaction~\{\#\ref{#1}\}}
\begin{document}
\begin{reaction}
H3O+ + HO- = 2 H2O "\label{rxn:water}"
\end{reaction}
\rxnref{rxn:water} is just water...
\end{document}