自定义“回忆录”中子标题的引用?

自定义“回忆录”中子标题的引用?

当我使用\subcaption{... \label{myfig}}inmemoir并引用它时,结果类似于“图 1(a)”。但我想通过删除括号来自定义引用,从而使其显示为“图 1a”。

我该怎么做memoir?我在手册中找不到任何内容。

答案1

可以使用一些字符串操作来实现这一点xstring包裹\StrBefore。使用和的组合\StrBetween,可以根据您的要求提取和打印“父”图和子图编号。但是,如果需要,这将需要更多的工作hyperref

下面是一个\subfigref{<label>}用于获取此输出的新宏,其中<label>是子图标题中使用的参考标签。它也适用于其他子浮点数。

在此处输入图片描述

\documentclass{memoir}% http://ctan.org/pkg/memoir
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{xstring}% http://ctan.org/pkg/xstring
\usepackage{xspace}% http://ctan.org/pkg/xspace
\newsubfloat{figure}% Allow subfigures using \subbottom/\subtop
\newcommand*{\subfigref}[1]{\StrBefore{\ref{#1}}{(}\StrBetween{\ref{#1}}{(}{)}\xspace}%
\begin{document}
\begin{figure}[ht]
  \centering
  \subbottom[This is a subfigure\label{fig:label:a}]{\includegraphics{figure1}} \qquad
  \subbottom[This is a subfigure\label{fig:label:b}]{\includegraphics{figure2}}
  \caption{This is a caption} \label{fig:label}
\end{figure}
See Figure~\ref{fig:label}. It has subfigures~\subfigref{fig:label:a} and~\subfigref{fig:label:b}.
\end{document}

答案2

受到 Werner 的启发,这里有一个适用于超链接

\documentclass{memoir}
\usepackage[demo]{graphicx}
\newsubfloat{figure}% Allow subfigures using \subbottom/\subtop

\usepackage{refcount}
\newcommand\sref[1]{\edef\next{\getrefnumber{#1}}%
  \begingroup\edef\x{\endgroup
    \noexpand\hyperref[#1]{\expandafter\stripparens\next()\nnil}}\x}

\def\stripparens#1(#2)#3\nnil{\if\relax\detokenize{#2}\relax??\else#1#2\fi}

\usepackage{hyperref}

\begin{document}
\begin{figure}[ht]
  \centering
  \subbottom[This is a subfigure\label{fig:label:a}]{\includegraphics{figure1}} \qquad
  \subbottom[This is a subfigure\label{fig:label:b}]{\includegraphics{figure2}}
  \caption{This is a caption} \label{fig:label}
\end{figure}
See Figure~\ref{fig:label}. It has subfigures~\sref{fig:label:a} and~\sref{fig:label:b}.

\end{document}

如果超链接未加载,则将的定义更改\sref

\newcommand\sref[1]{\edef\next{\getrefnumber{#1}}%
  \expandafter\stripparens\next()\nnil}

这是一个临时解决方案,需要\sref而不是\ref,但它似乎有效。当回忆录将被调整,以便对子浮点数的引用方面是可定制的,只需要说

\let\sref\ref

相关内容