hyperref、capt-of 和 @makecaption 重新定义的交互

hyperref、capt-of 和 @makecaption 重新定义的交互

可能重复:
不使用标题包删除图形标题中的冒号

这是一个非常难的问题,我在下面发布了最少的例子。

  1. 因为我不想让我的数字浮动,所以我使用中心环境和捕获包裹。
  2. 我已经调整了@makecaption当图形名称为空时,只显示图形名称(没有冒号)。
  3. 我也用超链接包裹。

工作时三者一起,我得到了一堆“额外\其他。“错误。你能找到问题吗?也许我重新定义了@makecaption很嚴重嗎?

问候。

\documentclass{article}
\usepackage{capt-of}

\usepackage{hyperref}

\makeatletter
% tweaked article.cls @makecaption: no caption text no ":" 
\newcommand*{\captionlabeldelim}{}
\long\def\@makecaption#1#2{%
  \ifx #2\ignorespaces 
   \renewcommand*{\captionlabeldelim}{}
  \else
   \renewcommand*{\captionlabeldelim}{:\ }
  \fi
  \vskip\abovecaptionskip
  \sbox\@tempboxa{#1\captionlabeldelim #2}%
  \ifdim \wd\@tempboxa >\hsize
    #1\captionlabeldelim #2\par
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi
  \vskip\belowcaptionskip}
\makeatother

\begin{document}

\begin{center}
\includegraphics[clip]{bla.eps}
\captionof{figure}{x}
\end{center}%

\begin{center}
\includegraphics[clip]{bla.eps}
\captionof{figure}{}
\end{center}%

\end{document}

答案1

正如在回答类似但不完全相同的问题\caption,如果(或)的参数\caption-of为空,则可以通过重新定义 来实现删除冒号的目的\@makecaption。 MWE 的以下修改形式显示了如何做到这一点。

\documentclass{article}
\usepackage{capt-of}
\usepackage[demo]{graphicx} % [demo] needed just for this MWE
\usepackage[colorlinks]{hyperref}

\makeatletter
\long\def\@makecaption#1#2{% % #2 is argument of \caption and \captionof command     
  \vskip\abovecaptionskip
  \sbox\@tempboxa{#2}        % place #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                      % else, 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

\begin{document}
\begin{center}
\includegraphics[clip]{bla.eps}
\captionof{figure}{xyz} \label{fig:bla1}
\end{center}%

\begin{center}
\includegraphics[clip]{bla.eps}
\captionof{figure}{} \label{fig:bla2}
\end{center}%

And here are cross-references to \autoref{fig:bla1} and \autoref{fig:bla2}.
\end{document}

在此处输入图片描述

相关内容