改变回忆录子浮动部分的引用样式

改变回忆录子浮动部分的引用样式

有没有办法配置对 memoir 内置子浮点数的引用样式,即使用\subcaptionref、 和时\ref?例如,是否可以删除括号?

来自回忆录的记录:

Figure \ref{fig:twosubfig} has two subfigures,
  namely \ref{sf:1}, \subcaptionref{sf:2}.

\begin{figure}
\centering
\subbottom[Subfigure 1]{\fbox{SUBFIGURE ONE}\label{sf:1}}
\hfill
\subbottom[Subfigure 2]{\fbox{SUBFIGURE TWO}\label{sf:2}}
\caption{Figure with two subfigures} \label{fig:twosubfig}
\end{figure}

生产

图10.19有两个子图,分别是10.19(a)、(b)。

这可以改为例如

图10.19有两个子图,分别是10.19a,b。

需要明确的是,更改最好仅适用于参考,而不是子标题本身。

答案1

下面更新了将子标题引用写入的方式.aux,使\subcaptionrefpull 成为适当的非括号引用:

在此处输入图片描述

\documentclass{memoir}

\usepackage{etoolbox}

\newsubfloat{figure}
\newcommand{\thesubfigureref}{\alph{subfigure}}
\makeatletter
\AtBeginDocument{
  \patchcmd{\sf@@memsub@label}% <cmd>
    {\@nameuse{@@thesub\@captype}}% <search>
    {\@nameuse{thesub\@captype ref}}% <replace>
    {}{}% <success><failure>
}
\makeatother

\begin{document}

\setcounter{chapter}{9}% Just for this example
\chapter{A chapter}
\setcounter{figure}{18}% Just for this example

Figure \ref{fig:twosubfig} has two subfigures,
  namely \ref{fig:twosubfig}\subcaptionref{sf:1}, \subcaptionref{sf:2}.

\begin{figure}[ht]
  \centering
  \subbottom[Subfigure 1]{\fbox{SUBFIGURE ONE}\label{sf:1}}
  \subbottom[Subfigure 2]{\fbox{SUBFIGURE TWO}\label{sf:2}}
  \caption{Figure with two subfigures} \label{fig:twosubfig}
\end{figure}

\end{document}

如果您正在加载hyperref包裹(或者nameref包裹) 也是如此。

答案2

根据 Werner 的回答以及一番挖掘memoir.cls,可以很容易地将计数器更改subfigure为所需的样式(例如,没有括号),然后使用宏修复子标题标签\@thesubfigure

更改了子图引用样式

\documentclass[oneside]{memoir}

% works with and without hyperref
%\usepackage{hyperref}

% create a figure subfloat
\newsubfloat{figure}

% change style
\makeatletter
\def\thesubfigure{\alph{subfigure}}
\def\@thesubfigure{(\alph{subfigure})%
            \if@tightsubcap\hskip\subfloatlabelskip\else\space\fi}
\makeatother

\begin{document}

Figure \ref{fig:twosubfig} has two subfigures,
  namely \ref{sf:1}, \subcaptionref{sf:2}.

\begin{figure}[h]
\centering
\subbottom[Subfigure 1]{\fbox{SUBFIGURE ONE}\label{sf:1}}
\hfill
\subbottom[Subfigure 2]{\fbox{SUBFIGURE TWO}\label{sf:2}}
\caption{Figure with two subfigures} \label{fig:twosubfig}
\end{figure}

\end{document}

相关内容