(这是一个年底的疯狂问题)
是否可以在 PDF 中嵌入 (可滚动) 框架或 PDF?如果可以,如何在 (pdf)LaTeX 中实现?
这在 HTML 中很常见(例如参见http://www.echoecho.com/htmlframes01.htm)这是一个网页带有 PDF 框架https://www.cs.tut.fi/~jkorpela/html/iframe-pdf.html
这是一个伪造的截图,这样你就明白了。
欢迎提供便携式和非便携式(例如仅限 Acrobat)的答案。
框架下方向下箭头的示例。向上箭头可以位于框架顶部,三角形指向上方。
答案1
基于animate
包的垂直滚动;命令的定义\smoothScroll
取自早期的邮政稍作修改。
作为示例文档,我们选取lppl.pdf
了TEXMF/doc/latex/base/lppl.pdf
其中略微经过修剪的页面。
更新 并采纳了以下建议:
通过单击“小部件”开始自动滚动,在“小部件”中按下鼠标时暂停自动滚动(并将鼠标移出,同时保持按下状态)。
单击“小部件”上方和下方的按钮即可浏览文档。
[Shift]+单击按钮可后退至文档顶部或跳至文档底部。
需要 Adobe Reader。打开 ↗分享LaTeX。
\documentclass[a5paper]{scrartcl}
\usepackage{multido}
\usepackage{graphicx}
\usepackage{MnSymbol} % \triangle, \triangledown
\usepackage{animate}
\usepackage{media9} % \mediabutton
\usepackage{xsavebox} % \xsbox{<xsbox id>}{<content>} , \the<xsbox id>
%%%%%%% docToBox %%%%%%%%
\newcommand\docToBox[3]{%
% #1 <file name (PDF)>
% #2 <left> <bot> <right> <top> % trim pages by given amounts (PS points)
% #3 <boxnum>
\pdfximage{#1}% just for counting pages
\multido{\i=1+1}{\pdflastximagepages}{%
\global\setbox#3=\vbox{%
\box#3%
\hbox to \textwidth{\includegraphics[page=\i,trim=#2,clip,width=\textwidth]{#1}}%
}%
}%
}
%%%%%%% /docToBox %%%%%%%%
%%%%%%% smoothScroll %%%%%
\newcommand\smoothScroll[5][]{%
% [#1] autoplay, controls, ... (see: texdoc animate)
% #2 <boxnum>
% #3 <viewport height>
% #4 <steps>
% #5 <steps per sec> while playing; >25 doesn't make sense
\edef\mywd{\the\wd#2}%
\edef\myht{\the\ht#2}%
\edef\mytht{\the\dimexpr\ht#2+\dp#2\relax}%
\xsbox{XFormOfDoc}{\usebox{#2}}% distill box into re-usable PDF XObject
\edef\portht{\the\dimexpr#3\relax}%
\begin{animateinline}[#1,width=\mywd,height=\portht]{#5}%
\multiframe{#4}{
dRaiseLen=\the\dimexpr-\myht+\portht\relax+\the\dimexpr(\mytht-\portht)/#4\relax
}{%
\begin{minipage}[b][\portht][b]{\mywd}%
\raisebox{\dRaiseLen}[0pt][0pt]{\theXFormOfDoc}%
\end{minipage}%
}%
\end{animateinline}%
}
%%%%%%% /smoothScroll %%%%%
\begin{document}\Huge
\newbox\lipsumbox
%load the document with trims into save-box
\docToBox{lppl.pdf}{131 110 115 121}{\lipsumbox}
\edef\boxwidth{\the\wd\lipsumbox}%
\noindent Before you consider using \LaTeX, read the fine-print:\\
\noindent\mediabutton[
jsaction={
if(event.shift){anim.lppl.pause();anim.lppl.frameNum=0;}
else try{anim.lppl.frameNum--}catch(e){}
}
]{\fboxsep=0pt\framebox[\boxwidth][c]{\tiny\strut$\triangle\triangle\triangle$}}
%the scrolling widget
\noindent{\fboxsep=-\fboxrule\fbox{\smoothScroll[label=lppl]{\lipsumbox}{0.79\textheight}{512}{25}}}
\vskip -0.8\baselineskip
\noindent\mediabutton[
jsaction={
if(event.shift){anim.lppl.pause();anim.lppl.frameNum=anim.lppl.numFrames-1;}
else try{anim.lppl.frameNum++}catch(e){}
}
]{\fboxsep=0pt\framebox[\boxwidth][c]{\tiny\strut$\triangledown\triangledown\triangledown$}}%
\end{document}