目前,我的图表/表格标题如下所示:应该以标签图 XX 开头,然后是文本,后面的标题行悬挂在标签后面。如果只有一行,则标题居中。
现在,我想在右侧添加一个与标题标签宽度相同的额外边距(即与标题第二/第三行的缩进宽度相同)。但如果只需要一行,我想保持原样:居中,没有额外的右侧边距。手动地,我可以通过为相应的标题添加边距来做到这一点,例如图 3.6:
\begin{figure}
\centering
\includegraphics{figure3.6.pdf}
\begin{addmargin}[0em]{\widthof{\small \textbf{Fig. 3.6: }}}
\caption{This is a long caption spanning multiple lines so that I would like this to be formatted as stated above. But no shorter captions, where this is unnecessary.}
\end{addmargin}
\end{figure}
现在的问题是,是否以及如何可以自动化(在序言中),以便我不必为每个图形或表格都执行此操作。
更新:有效的方法如下:
\newcommand{\myfigcaption}[2][\#2]{
\begin{addmargin}[0em]{\widthof{\small \textbf{Fig. \thefigure: }}}
\caption[#1]{#2}
\end{addmargin}
}
表格也一样。我还没有得到的是
(a)如何比较标题的长度(参数#2)与\textwidth
。我尝试了以下方法:
\newcommand{\myfigcaption}[2][\#2]{
\ifdim\widthof{{\small \textbf{Fig. \thefigure: }}#2}>\textwidth
\begin{addmargin}[0em]{\widthof{\small \textbf{Fig. \thefigure: }}}
\caption[#1]{#2}
\end{addmargin}
\else
\caption[#1]{#2}
\fi
}
(b) 如何确定我是否处于figure
或tabular
环境中。
或者有没有更简单的方法?
答案1
calcmargin=
正如我在上面的评论中所宣布的,这里有一个 MWE,它使用包的选项caption
来设置右边距,希望符合您的规范:
\documentclass{article}
\usepackage{calc}
\usepackage[figurename=Fig.]{caption}
\DeclareCaptionStyle{figstyle}
[format=plain,margin=0pt,justification=centering]
{format=hang,calcmargin={0pt,\widthof{\captionfont\captionlabelfont\figurename~\thefigure: }},
font=small,labelfont=bf}
\captionsetup[figure]{style=figstyle}
\begin{document}
\begin{figure}
\hrulefill
\caption{Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah\ldots}
\hrulefill
\end{figure}
\begin{figure}
\hrulefill
\caption{Blah blah blah blah blah blah blah blah blah blah blah\ldots}
\hrulefill
\end{figure}
\end{document}
该选项的语法calcmargin=
与相同,margin=
但其值不会立即设置,而是为每个单独的标题计算。(不幸的calcmargin=
是,尚未记录。)
例如,对于具有相同格式的表格,同样也可以实现这一点:
\DeclareCaptionStyle{tabstyle}
[format=plain,margin=0pt,justification=centering]
{format=hang,calcmargin={0pt,\widthof{\captionfont\captionlabelfont\tablename~\thetable: }},
font=small,labelfont=bf}
\captionsetup[table]{style=tabstyle}
对于格式为(a)
、(b)
等的子图,使用subcaption
包
\DeclareCaptionStyle{subfigstyle}
[format=plain,margin=0pt,justification=centering]
{format=hang,calcmargin={0pt,\widthof{\captionfont\captionlabelfont(\thesubfigure) }},
font=small,labelfont=bf}
\captionsetup[subfigure]{style=subfigstyle}
更新:我的第一个示例代码很糟糕,希望这个会更好。
更新 2(来自 riddleculous):为表格和子标题添加了相同的内容