带括号的子图引用(除非已经在括号中)

带括号的子图引用(除非已经在括号中)

我想将子图引用的样式设置为Fig. 1(a)连续文本和(Fig. 1a)括号中的样式。子图标签是使用以下方式创建的:此代码.(我更喜欢subcaption使用在这个答案中,但它会导致我所坚持的严重过时的日记类别发出警告。)

使用第一种格式很容易获得\renewcommand{\thesubfigure}{\thefigure(\alph{subfigure})},我尝试遵循这个答案对于第二步,但无论我怎么尝试,它似乎都没有作用。

\documentclass{article}

\usepackage{hyperref}
\usepackage{cleveref}

% Sub-figure references b/c class is broken. See link above.
\makeatletter
\newcounter{subfigure}[figure]
\renewcommand{\thesubfigure}{\thefigure(\alph{subfigure})}
\newcommand{\subfigure}{%
    \H@refstepcounter{subfigure}%
    \ifHy@hypertexnames%
            \hyper@makecurrent\@captype%
    \else%
            \global\let\@currentHref\hc@currentHref%
    \fi%
}
\makeatother

% Special format when within enclosing parentheses
\newcommand{\crefp}[1]{%
  \begingroup%
    \renewcommand{\thesubfigure}{\thefigure\alph{subfigure}}%
    (\cref{#1})%
  \endgroup%
}

\begin{document}

\begin{figure}
  \framebox[\textwidth]{Something}
  \caption{Caption}
  \label{fig:example}
  \subfigure\label{fig:example-1}
\end{figure}

Some text referencing the figure: \cref{fig:example},
and in parentheses: \crefp{fig:example}.
Some text referencing the subfigure: \cref{fig:example-1},
and in parentheses: \crefp{fig:example-1}.
\end{document}

结果是:

Some text referencing the figure: fig. 1, and in parentheses: (fig. 1). Some
text referencing the subfigure: fig. 1(a), and in parentheses: (fig. 1(a)).

我也尝试过弄乱\p@subfigure或添加额外的宏,但到目前为止还没有成功。

(注意:我也可以将 hyperref 或 cleveref 排除在 MWE 之外,但由于它们对引用有神奇的作用,而且我无论如何都要使用它们,所以我将它们保留了下来。)

相关内容