当我尝试渲染凝固胶乳文档使用hypcap
和hyperref
。例如,即使是由以下内容组成的最小文档
\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.
是什么原因导致了此错误?我该如何避免它?
如果真的到了这个地步,我会放弃其中任何一个提供的一些功能hypcap
(hyperref
例如,链接到图表),如果这是为了保持稳定的话。我不想要放弃 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}