在我之前的问题中thumbs.sty
,我实现了一个允许创建投影机中其他帧的缩略图(如果您想读那篇文章,您最好泡点新鲜的咖啡:))。
但是,我仍然有一个错误:如果缩略图跨越多个框架,在某些情况下 hyperref 会尝试在第一框架中创建链接,但内容会被推送(整个,它是一个tikzpicture
)到第二框架,因此链接跨越两个“页面”,并且 pdftex 会崩溃并显示消息(来源:这条老旧的闲聊消息):
! pdfTeX error (ext4): \pdfendlink ended up in different nesting level than \pdfstartlink.
\@EveryShipout@Output ...@Org@Shipout \box \@cclv
l.20 \end{frame}
! ==> Fatal error occurred, no output PDF file produced!
妇女权利委员会:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}[allowframebreaks]
\pgfmathsetmacro\thumbwidth{0.2*\linewidth}
\pgfmathsetmacro\thumbheight{\thumbwidth/\paperwidth*\paperheight}
\begin{center}
\foreach \thid in {1,...,30} {%
\hyperlink{page.1}{% Comment this line
\begin{tikzpicture}[baseline={([yshift={-\ht\strutbox}]current bounding box.north)}]
\node[draw, inner sep=0pt] (thumb) {
\begin{minipage}[t][\thumbheight pt]{\thumbwidth pt}\vfill Thumbnail\vfill\end{minipage}
};
\node[anchor=north, font=\tiny, inner xsep=0pt, inner ysep=0.1cm, yshift=-0.05cm, text width=\thumbwidth pt, align=center] at (thumb.south) {Frame \thid};
\end{tikzpicture} % space here
}% Comment this line
}
\end{center}
\end{frame}
\end{document}
如果注释掉标有 的两行,则不会创建超链接,一切正常。如果将最大值从 30 更改为 10,% Comment this line
情况也是如此。\foreach
我认为这个问题可以通过使用一些 tikzoverlay
技巧来解决,或者以某种方式在物理框架的末尾添加超链接(使用类似的钩子\setbeamertemplate{background}{Add hyperlinks here for thumbnails that got into the current frame}
),或者以某种方式在 hyperref 启动之前强制修复布局。
我不愿意采用固定的布局并手动更改框架,因为缩略图的高度和宽度是(将)可配置的,并且我以后可能会使用一些更复杂(非网格)的布局(比如与缩略图混合的目录)。
现在是早上 6 点,所以我发布此信息,希望比我更清醒的人可以找到解决方案 :) 并且我认为这个问题应该在 TeX.SX 上记录下来。
答案1
解决方案很简单,不要在链接内包含断点。特别是,在链接外面留出空格,因为它会插入断点。
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}[allowframebreaks]
\pgfmathsetmacro\thumbwidth{0.2*\linewidth}
\pgfmathsetmacro\thumbheight{\thumbwidth/\paperwidth*\paperheight}
\begin{center}
\foreach \thid in {1,...,30} {%
\hyperlink{page.1}{%
\begin{tikzpicture}[baseline={([yshift={-\ht\strutbox}]current bounding box.north)}]
\node[draw, inner sep=0pt] (thumb) {
\begin{minipage}[t][\thumbheight pt]{\thumbwidth pt}\vfill Thumbnail\vfill\end{minipage}
};
\node[anchor=north, font=\tiny, inner xsep=0pt, inner ysep=0.1cm,
yshift=-0.05cm, text width=\thumbwidth pt, align=center]
at (thumb.south) {Frame \thid};
\end{tikzpicture}%
} % space here
}% only one space is removed at paragraph end
\end{center}
\end{frame}
\end{document}