如何在非投影仪文档中包含可点击缩放的缩略图?

如何在非投影仪文档中包含可点击缩放的缩略图?

用于演示的 Beamer 类提供了一种方法(使用 \framezoom 命令)在文档中包含一张图片,单击该图片即可放大,然后再次单击即可缩小。如何在非 Beamer 文档中获得相同的效果;更具体地说,在使用 XeLaTeX 编译的文章类文档中?

是否有一个包可以为文章类中的文档提供此功能?

答案1

这是一个适用于任何文档类中的 XeLaTeX 和 LaTeX->dvipdfmx 的解决方案。它使用了一些 JavaScript,因此在 Adob​​eReader 中效果最佳。只需将以下代码插入文档前言即可。代码定义了命令

\zoombox[框线宽度]{一般文本}

在本文件中使用。它使得一般文本可点击切换放大和缩小状态。在放大状态下一般文本被放大到刚好可以完全适合应用程序窗口。

就你的情况来说,一般文本应该是类似 \inlcudegraphics[scale=0.1]{picture} 的内容,其中包含原始分辨率的图片,但缩小到所需的缩略图大小。也就是说,只需要包含一个版本的图片。

请注意,该文档至少需要运行两次 (Xe)LaTeX。

亚历山大

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{hyperref}
\makeatletter
\InputIfFileExists{\jobname.zom}{}{}
\newsavebox\zbox
\newcounter{zoom}
\newwrite\zoomdat
\immediate\openout\zoomdat=\jobname.zom

\newcommand{\zoombox}[2][0]{%
  \sbox\zbox{#2}%
  \special{pdf: dest (zb\thezoom.out) [@thispage /Fit]}%
  \raisebox{-\dp\zbox}{\pdfsavepos}%
  \protected@write\zoomdat{}{%
    \string\expandafter\string\def\string\csname\space zb\thezoom.llx\string\endcsname{%
      \noexpand\number\pdflastxpos}%
    \string\expandafter\string\def\string\csname\space zb\thezoom.lly\string\endcsname{%
      \noexpand\number\pdflastypos}%
  }%
  \ifcsname zb\thezoom.llx\endcsname\ifcsname zb\thezoom.urx\endcsname%
    \special{pdf: dest (zb\thezoom.in) [ @thispage /FitR
      \hypercalcbp{\csname zb\thezoom.llx\endcsname sp}
      \hypercalcbp{\csname zb\thezoom.lly\endcsname sp}
      \hypercalcbp{\csname zb\thezoom.urx\endcsname sp}
      \hypercalcbp{\csname zb\thezoom.ury\endcsname sp}
    ]}%
    \special{pdf: ann
      width  \the\wd\zbox\space
      height \the\ht\zbox\space
      depth  \the\dp\zbox\space
    <<
      /Type/Annot/Subtype/Link/H/N
      /Border [0 0 #1 [1 2]]
      /A <<
        /S/JavaScript
        /JS (
          if(typeof(zoomed\thezoom)=='undefined'){
            this.gotoNamedDest('zb\thezoom.out');
            var zoomed\thezoom=false;
          }
        )
        /Next <<
          /S/GoTo/D (zb\thezoom.in)
          /Next <<
            /S/JavaScript
            /JS(
              if(zoomed\thezoom){
                 this.gotoNamedDest('zb\thezoom.out');
                 zoomed\thezoom=false;
              }else{
                 zoomed\thezoom=true;
              }
            )
          >>
        >>
      >>
    >>}%
  \fi\fi%
  \usebox{\zbox}\raisebox{\ht\zbox}{\pdfsavepos}%
  \protected@write\zoomdat{}{%
    \string\expandafter\string\def\string\csname\space zb\thezoom.urx\string\endcsname{%
      \noexpand\number\pdflastxpos}%
    \string\expandafter\string\def\string\csname\space zb\thezoom.ury\string\endcsname{%
      \noexpand\number\pdflastypos}%
  }%
  \stepcounter{zoom}%
}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

编辑:

可选参数box line width已添加到\zoombox宏中。在给定线宽的缩放区域周围添加虚线,以屏幕像素为单位。默认值:0(无可见框)。

该宏的 pdftex 版本\zoombox如下:PDF 中的自动“放大”超文本框

答案2

据我所知,\framezoom 命令不使用 javascript 或类似的东西,而只是生成两个幻灯片(一个带有大图片)和两个幻灯片之间的一些链接。这当然也可以用文章来实现:例如,您可以将大版本放在文章末尾的空白页上。

答案3

您可以使用ocg工具包。它提供了 \ocgpicture 命令。

相关内容