我以前有这样的代码:\caption{In \subref{fig:foo:a} you can see...}
。现在我改用 memoirssubtop/subbottom
命令而不是\subfigure
。我该如何引用该子图?
作为一个临时步骤,我将\subref
其改为\autoref
但结果输出如“在 1.1a 中您可以看到......”,我想要“在(a)中您可以看到......”。
答案1
memoir
为每个子浮点计数器定义一个“父”宏。更具体地说,当您发出命令时
\newsubfloat{figure}% Allow for subfigures
它创建subfigure
计数器以及p@subfigure
用于提取/打印父图形编号的宏。将此宏修改为空将删除此功能。如果您只想暂时禁用此“父”计数器删除,则应使用分组来限制宏重新定义的范围:
\documentclass{memoir}
\usepackage[margin=10mm]{geometry}% http://ctan.org/pkg/geometry
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
% Allow subfloats for the following floats via \subbottom and/or \subtop
\newsubfloat{figure} % Subfigures
\newsubfloat{table} % Subtables
\begin{document}
\begingroup
\makeatletter
\renewcommand{\p@subfigure}{}% Void parent macro for figures
\makeatother
\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{These are some awesome figures}
\label{fig:label1}
\end{figure}
See Figure~\ref{fig:label1}. It has subfigures~\ref{fig:label:a} and~\ref{fig:label:b}.
\endgroup
\begin{figure}[ht]
\centering
\subbottom[This is a subfigure\label{fig:label:c}]{\includegraphics{figure3}} \qquad
\subbottom[This is a subfigure\label{fig:label:d}]{\includegraphics{figure4}}
\caption{These are some awesome figures}
\label{fig:label2}
\end{figure}
See Figure~\ref{fig:label2}. It has subfigures~\ref{fig:label:c} and~\ref{fig:label:d}.
\begin{table}[ht]
\centering
\subbottom[This is a subtable\label{tbl:label:a}]{\includegraphics{table1}} \qquad
\subbottom[This is a subtable\label{tbl:label:b}]{\includegraphics{table2}}
\caption{These are some awesome tables}
\label{tbl:label}
\end{table}
See Table~\ref{tbl:label}. It has subtables~\ref{tbl:label:a} and~\ref{tbl:label:b}.
\end{document}
geometry
加载只是为了使最小示例适合放在单个页面上。
答案2
我不知道这是否是新增内容,但正如手册,在第 206 页,您可以使用 来实现这一点\subcaptionref
。以下是改编自手册的示例:
\documentclass{memoir}
\newsubfloat{figure} % Subfigures
\begin{document}
Figure \ref{fig:twosubfig} has two subfigures, namely \ref{sf:1} and \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}
\end{document}
输出:
答案3
一个解决方案是手动输入。这不是惯用的解决方案,而且显然不太好。很容易出错(例如,如果子图被移动)。
但是,这也不是完全不好,因为使用范围始终是局部的。我将在图形本身的标题中使用它,并从那里引用子图。如果我在正文中这样做,情况会有所不同。
将此答案视为提供更好答案的挑战。
答案4
改变subfigure.sty
...
...
\DeclareOption{figbotcap}{\figuretopcapfalse}
\DeclareOption{figtopcap}{\figuretopcaptrue}
...
为。。改变:
...
\DeclareOption{figbotcap}{\figuretopcaptrue}
\DeclareOption{figtopcap}{\figuretopcapfalse}
...