在标题中添加右边距,其宽度与标题标签的宽度相同

在标题中添加右边距,其宽度与标题标签的宽度相同

目前,我的图表/表格标题如下所示:应该以标签图 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) 如何确定我是否处于figuretabular环境中。

或者有没有更简单的方法?

答案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):为表格和子标题添加了相同的内容

相关内容