自定义反应环境参考

自定义反应环境参考

我正在使用 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\theHequationRchemmacros

\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的包装器,因此你需要使用,但在这种情况下,反应和数学方程都收到“反应”前缀,这没有什么意义。因此,最好的解决方案可能是只使用:amsmathalign\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}

在此处输入图片描述

答案3

使用最新版本chemmacros(v6.1 2022/02/13),开箱即可使用:

\documentclass{article}
\usepackage{chemmacros}
\usepackage{hyperref}

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

在此处输入图片描述

相关内容