我正在使用 Tufte 文档类,需要手动加载,hyperref
而不是通过 Tufte 类加载。因此,我使用nohyper
文档类的选项,然后\usepackage{hyperref}
在代码中使用。
当我执行此操作时,标题(但不是脚注)的字体大小会更改为正文的字体大小:
\documentclass[nohyper]{tufte-handout}
\usepackage{inputenc}
\usepackage{graphicx}
\usepackage[pdftex,hyperfootnotes=false]{hyperref}
\begin{document}
Body text.
\begin{marginfigure}
\includegraphics[width=1\columnwidth]{agraphic}\caption{Caption text}
\end{marginfigure}
\end{document}
如果我删除该\usepackage[...]{hyperref}
行,则标题字体大小是正确的(无论我nohyper
是否指定)。据我所知,除了一些链接颜色细节和元数据分配外,我所做的与没有该选项的 Tufte 类所做的完全相同nohyper
。
答案1
我知道问题出在哪里,但我不确定我的解决方法是否正确。Hyperref 修改\caption
使用 diabonas 的评论更新代码
\documentclass[nohyper]{tufte-handout}
\usepackage{inputenc}
\usepackage{graphicx}
\makeatletter
\let\tufte@caption\@caption
\usepackage[hyperfootnotes=false]{hyperref}
\let\@caption\tufte@caption
\begin{document}
Body text.
\begin{marginfigure}
\includegraphics[width=1\columnwidth]{guilloche.png}\caption{Caption text}
\end{marginfigure}
\end{document}
答案2
hyperref
做确实需要修改\@caption
。如果只关心字体,那么以下补丁就足够了:
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
\patchcmd
{\@caption}% <cmd>
{\normalsize}% <search>
{\@tufte@caption@font\@tufte@caption@justification}% <replace>
{\typeout{caption patched}}% <success>
{}% <failure
\makeatother
它源于hyperref
发出\normalsize
within \@caption
(从 within 调用的辅助宏\caption
),该宏会重置字体。上面的补丁将其替换为常规 Tufte 类组件。
hyperref
为什么即使您执行的操作“与在类级别加载完全相同”,也需要这样做?因为类hyperref
首先加载,然后重新定义其自己的\caption
和\@caption
宏,并覆盖hyperref
。从这个意义上讲,@Altermundus 的回答也足够了。