在 \minipage 标签上使用 \cref?

在 \minipage 标签上使用 \cref?

有几次我在使用 上的标签时遇到了麻烦minipage。我使用minipage创建子图 a) 和 b),每个子图都有自己的\subcaption\label,整个图也有一个\caption和一个\label。然后我想使用\cref来引用各个子图/子标题。但是当我使用\crefminipage 标签时,它引用放置图形的部分。

我的代码如下:

\begin{figure}[h!]
\begin{minipage}{0.5\textwidth}
    \def\svgwidth{0.9\columnwidth}
    \input{filepath}
    \subcaption{\textsl{Subfigure 1 text}}
    \label{fig:sub:subfigure1}
\end{minipage}
\begin{minipage}{0.5\textwidth}
    \def\svgwidth{0.9\columnwidth}
    \input{filepath}
    \subcaption{\textsl{Subfigure 2 text.}}
    \label{fig:sub:subfigure2}
\end{minipage}
\caption{\textsl{Figure text.}}
\label{fig:whole_figure}
\end{figure}

然后我使用\cref{fig:sub:subfigure1},它给出的是“第 2.3 节”,而不是“图 4.a”。

还应该注意,我使用了memoir类,也使用了.pdf_tex图形格式。

我尝试阅读一些\cref手册,但不明白如何解决我的问题,我也在谷歌上搜索了一些内容,但没有结果。你能帮我解决这个问题吗?

答案1

为了使 LaTeX 对某个编号“对象”的交叉引用正常工作,\label与该对象关联的命令通常还必须通过该\refstepcounter机制增加与该对象关联的计数器变量。由于minipage环境不会以这种方式自动编号,因此您会发现该命令最终会生成对最近通过 minipage 命令(在本例中为或对象)增加的对象(在发出minipage 命令时)\cref的交叉引用。\refstepcountersectionsubsection\label

幸运的是,有一个解决方案可以很好地解决聪明人包,它适用于memoir类和“标准” LaTeX 文档类(articlereportbook):加载副标题打包并使用它的subfigure环境而不是minipagesubfigure环境,对于所有实际目的来说,与环境相同minipage。唯一重要的区别是subfigure环境会自动与通过 增加的计数器变量相关联\refstepcounter。因此,对环境的交叉引用subfigure将完全按预期工作。

顺便说一句,如果你想让所有标题自动排版斜罗马字体文本,您可以通过提供指令来告诉 LaTeX 这样做\captionsetup{textfont = sl}。(\captionsetup宏由标题包会自动加载该subcaption字体)。全局执行此操作,而不是\textsl在每个标题中单独提供说明,不仅方便,而且在您决定使用其他字体形状时,将来还可以大大简化您的工作。

在此处输入图片描述

\documentclass{article}
\usepackage{subcaption}
   \captionsetup{textfont = sl} % use slanted font shape automatically for all captions
\usepackage[noabbrev]{cleveref}
\begin{document}
\setcounter{figure}{3} % just for this example
\begin{figure}[h!]
\begin{subfigure}{0.5\textwidth}
    \def\svgwidth{0.9\columnwidth}
    %\input{filepath}
    \caption{Subfigure 1 text}
    \label{fig:sub:subfigure1}
\end{subfigure}
\begin{subfigure}{0.5\textwidth}
    \def\svgwidth{0.9\columnwidth}
    %\input{filepath}
    \caption{Subfigure 2 text.}
    \label{fig:sub:subfigure2}
\end{subfigure}
\caption{Figure text.}
\label{fig:whole_figure}
\end{figure}
\cref{fig:sub:subfigure1}
\end{document}

附录:为了获得格式为“4.a”而不是“4a”的子图的交叉引用,您可以在序言中添加以下说明(加载之后subfigure和加载之前cleveref):

\makeatletter
\renewcommand{\p@subfigure}{\thefigure.}
\makeatletter

该宏\p@subfigure用于在涉及计数器的项目交叉引用中插入格式化的“前缀” subfigure。此处,“前缀”由图号后跟“.”(点)组成。

答案2

您需要放置\label 里面,然后\subcaption就可以正常工作了。您可以通过添加

\captiontitlefont{\slshape}
\subcaptionfont{\slshape}

作为 s 的替代minipage,您可以使用\subbottom,参见下面的代码。我将\input其替换为\rule{3cm}{1cm},从而创建一个黑色矩形。

\documentclass[a4paper]{memoir}
\newsubfloat{figure}
\captiontitlefont{\slshape}
\subcaptionfont{\slshape}

\usepackage{cleveref}

\begin{document}
\cref{fig:sub:subfigure1}

\cref{fig:sub:subfigure2}

\cref{fig:whole_figure}

\begin{figure}[h!]
  \begin{minipage}{0.5\textwidth}
    \centering
    \rule{3cm}{1cm}
    \subcaption{\textsl{Subfigure 1 text}\label{fig:sub:subfigure1}}
\end{minipage}
\begin{minipage}{0.5\textwidth}
  \centering
    \rule{3cm}{1cm}
    \subcaption{\textsl{Subfigure 2 text.}\label{fig:sub:subfigure2}}
\end{minipage}
\caption{\textsl{Figure text.}}
\label{fig:whole_figure}
\end{figure}

\begin{figure}[h!]
  \centering
  \subbottom[Subfigure 1 caption]{\rule{3cm}{1cm}\label{sub1}}
  \hspace{1cm}
  \subbottom[Subfigure 2 caption]{\rule{3cm}{1cm}\label{sube}}
\caption{Figure text.}
\label{fig:secondfig}
\end{figure}

\end{document}

在此处输入图片描述

答案3

在使用 memoir 包制作倾斜的标题和子标题(全局)时,应该使用\subcaptionfont{\slshape}(如 Torbjørn T. 所述) \captiontitlefont{\slshape}在序言中。这将使标题和副标题都倾斜,这与 Torbjørn 的示例相反,\textsl{}在 Torbjørn 的示例中,每个标题都手动设置了倾斜。

(这可能应该是一条评论,但我的声誉太低了。想知道为什么作为一个新手,我可以回答但不能评论?)

相关内容