(避免)跨页面的超链接,并自动生成内容

(避免)跨页面的超链接,并自动生成内容

在我之前的问题中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}

相关内容