不使用标题包删除图形标题中的冒号

不使用标题包删除图形标题中的冒号

我知道我能如果图片标题为空,则删除冒号当我简单地使用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

相关内容