重新定义 \thefigure、\ref 和 hyperref

重新定义 \thefigure、\ref 和 hyperref

对于我的文档中的每个图,我都需要有相应的补充图:例如,对于图 1,我可能有图 1 - S1,图 1 - S2,等等。

我使用 renewcommand 来获取这些名称。在 \thefigure 的新定义中,我只需使用 \ref* 指向主图形即可获取第一个数字。一切顺利。

但补充图片的链接指向了错误的地方。如果我尝试重新定义 \theHfigure,我收到各种奇怪的错误。

\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}

\begin{document}

\section*{Main text}

This is my \cref{figure}.

\begin{figure}[h!]
  %...
  \caption{Some figure.}
  \label{figure}
\end{figure}

\section*{Supplement}

This figure concerns the \cref{figure} and is the \cref{suppfigure}.

\setcounter{figure}{0}
\renewcommand\thefigure{\ref*{figure} -- S\arabic{figure}}
\renewcommand{\theHfigure}{S{\thefigure}}

\begin{figure}[h!]
  %...
  \caption{Juicy details.}
  \label{suppfigure}
\end{figure}

\end{document}

输出:

(...) ! \Hy@tempa 的参数有一个额外的 }。 \par l.382 }

该错误似乎是由 \thefigure 的新定义中的 \ref* 引起的,因为如果我删除它,它就可以正常工作。

有没有办法来解决这个问题?

答案1

您的定义\theHfigure太复杂了。由于它包含 \ref 命令,因此 hyperref 无法用它构建名称。所有\theH...定义都需要遵循两个规则:它们应该简单(可扩展)并且指向唯一的东西。因此使用例如

\renewcommand{\theHfigure}{S{\arabic{figure}}}

相关内容