“您忘记使用 \caption”是什么意思?

“您忘记使用 \caption”是什么意思?

当我尝试渲染凝固胶乳文档使用hypcaphyperref。例如,即使是由以下内容组成的最小文档

\documentclass[nohyper]{tufte-handout}

\makeatletter
\let\tufte@caption\@caption    % Protect caption from hyperref 
\RequirePackage{hyperref}   
\let\@caption\tufte@caption    % See -- http://tex.stackexchange.com/a/46838 
\makeatother
\RequirePackage[all]{hypcap}   % See -- http://tex.stackexchange.com/a/27349

\begin{document}

\begin{figure}\caption{An empty figure.}\end{figure}

\end{document}

导致错误:

Package hypcap Error: You have forgotten to use \caption.

是什么原因导致了此错误?我该如何避免它?


如果真的到了这个地步,我会放弃其中任何一个提供的一些功能hypcaphyperref例如,链接到图表),如果这是为了保持稳定的话。我想要放弃 Tufte 风格所带来的可见效果。

答案1

你能在更大的东西上检查以下内容吗?我确信我们会失去nameref对此的支持(因为我想避免@caption 参数的问题),但可能会有更多的副作用,而且我对 tufte 不够熟悉,无法从空白页上的单个标题中发现问题:

\documentclass[nohyper]{tufte-handout}

\makeatletter
\let\mytufte@@caption\@caption    % Protect caption from hyperref 
\RequirePackage{hyperref}   

\RequirePackage[all]{hypcap}   % See -- http://tex.stackexchange.com/a/27349

\let\mytufte@caption\@tufte@caption
\def\@tufte@caption{%
  \global\@capstartfalse\mytufte@caption
}
% this should be highly conditional on presence
% of the right versions of hyperref et al.
\def\@caption{%
  \expandafter\ifx\csname if@capstart\expandafter\endcsname
                  \csname iftrue\endcsname
    \global\let\@currentHref\hc@currentHref
  \else
    \hyper@makecurrent{\@captype}%
  \fi
  \mytufte@@caption
}
\makeatother

\begin{document}
\begin{figure}
  \caption{An empty figure.}
\end{figure}

\end{document}

相关内容