当我使用\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