我知道我能如果图片标题为空,则删除冒号当我简单地使用caption
包时。但是假设我使用的是期刊特定的类(例如elsarticle
),它有自己的标题布局定义。因此添加caption
包会给我一个不受支持的文档类(或包)警告。
所以问题是 - 如果标题为空,我可以不使用包而从图形标题中删除冒号吗caption
?
答案1
初步说明:如果你要投稿的期刊要求你使用elsarticle
文档类别,那么它可能是一个糟糕的想法修改类定义的标题样式。您的期刊样式指南可能还会规定每个浮动都应该有一个(非空)标题,在这种情况下,浮动的数字和标题之间通常需要某种分隔符(例如冒号)。
\@makecaption
以下是文件中包含的命令的定义elsarticle.cls
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip\footnotesize
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa >\hsize
#1: #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
该宏的两个参数分别\@makecaption
是[Float] <num>
和标题的文本。[Float] 可以是“Figure”、“Table”或 LaTeX 识别的任何其他浮动环境的名称。
有两种方法可以抑制在浮点数名称和编号后面插入冒号。
方法 1:全局删除冒号因为强制参数(花括号内的内容)全部 \caption
命令将始终为空。为此,您可以加载etoolbox
包并发出以下命令:
\makeatletter
\patchcmd{\@makecaption}{#1: #2}{#1}{}{}
\makeatother
方法 2:删除冒号每当(且仅当)命令的强制参数\caption
为空时在这种情况下,您可能需要使用以下命令进行重新定义\@makecaption
:
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip\footnotesize
\sbox\@tempboxa{#2} % place contents of #2 into a scratch TeX box
\ifdim \wd\@tempboxa = 0pt % test if scratch box has zero width
\centering #1 \par % if yes, typeset only #1 (the float's name and number)
\else % if no, proceed with default definition
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa >\hsize
#1: #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\fi
\vskip\belowcaptionskip}
\makeatother
答案2
首先,我要说的是,如果你正在准备一篇论文提交给期刊,这样的改变可能会被删除(并会让负责生产的人恼火)。如果出版商的风格想要在那里加一个冒号,那就意味着不标题应为空。
无论如何,这里有一个补丁elsarticle
:
\documentclass{elsarticle}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@makecaption}{#1: #2}
{#1\sbox8{#2}\ifdim\wd8=\z@\else: #2\fi}
{}{\ddt}
\makeatother
\begin{document}
\begin{figure}
\caption{Here}
\end{figure}
\begin{figure}
\caption{}
\end{figure}
\end{document}
原始定义是
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip\footnotesize
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa >\hsize
#1: #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
所以我修补了命令,检查参数#2
(标题文本)是否为空。然而通常的\if\relax\detokenize{#2}\relax
做法会失败,因为标题文本总是以 开头\ignorespaces
。因此最好检查一下标题文本是否排版了某些内容。
答案3
如果您使用 elsarticle 类,那么您可以使用以下几行来(重新)格式化图形标题:
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip\footnotesize
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa >\hsize
#1: #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\makeatother