有几次我在使用 上的标签时遇到了麻烦minipage
。我使用minipage
创建子图 a) 和 b),每个子图都有自己的\subcaption
和\label
,整个图也有一个\caption
和一个\label
。然后我想使用\cref
来引用各个子图/子标题。但是当我使用\cref
minipage 标签时,它引用放置图形的部分。
我的代码如下:
\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
的交叉引用。\refstepcounter
section
subsection
\label
幸运的是,有一个解决方案可以很好地解决聪明人包,它适用于memoir
类和“标准” LaTeX 文档类(article
、report
和book
):加载副标题打包并使用它的subfigure
环境而不是minipage
。subfigure
环境,对于所有实际目的来说,是与环境相同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 的示例中,每个标题都手动设置了倾斜。
(这可能应该是一条评论,但我的声誉太低了。想知道为什么作为一个新手,我可以回答但不能评论?)