如何在标题中引用子图

如何在标题中引用子图

我以前有这样的代码:\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}

...

相关内容