我使用 latex beamer 制作幻灯片,总共约有 180 张幻灯片,包含 40 多个视频。
我使用以下命令插入视频:
\begin{frame}
\framesubtitle{Demo}
\begin{figure}
\newcommand{\iheight}{\textheight}
\newcommand{\iwidth}{\textwidth}
\centering
\movie[label=show1,width=\iwidth, poster,
autostart, loop] {
\includegraphics[width=\iwidth, trim={0 0 0 0},
clip]{../videos/cover/demo32}
} {../videos/demo32.mpg}
\end{figure}
}
\end{frame}
在我嵌入的所有视频中,我都使用了上述样式。在演示过程中播放视频确实很困难,因为演示软件奥克拉尔意外崩溃。而且加载需要很长时间。
我发现如果我使用evince
VLC 之类的外部媒体播放器,这个问题就可以解决。为此,我必须通过添加externalviewer
属性来更新上面的代码片段,如下所示。
\begin{frame}
\framesubtitle{Demo}
\begin{figure}
\newcommand{\iheight}{\textheight}
\newcommand{\iwidth}{\textwidth}
\centering
\movie[label=show1,width=\iwidth, poster,
autostart, loop, externalviewer] {
\includegraphics[width=\iwidth, trim={0 0 0 0},
clip]{../videos/cover/demo32}
} {../videos/demo32.mpg}
\end{figure}
}
\end{frame}
供您参考,您可以找到以下文档电影15CTAN 包。
我的问题是,除了手动添加exteralviewer
,有没有办法可以设置外部查看器并且它对所有宏都有全局影响\movie[]{}
。
例如:要将所有的框架标题设置为粗体,我们这样做
\setbeamerfont{frametitle}{series=\bfseries}
电影也能做类似的事情吗?
答案1
您或许可以重新定义\movie
命令以将外部查看器设置为默认值:
\makeatletter
\renewcommand\movie[3][]{%
\leavevmode%
% Sanity check
\IfFileExists{\@currdir #3}{}{%
\PackageWarning{multimedia}{The movie file ``#3'' could not be
found in the current directory, where it must reside for
viewing.}%
}%
{%
% Calculate size of the poster
\setbox\@tempboxa=\hbox{#2}%
\@tempdima=\wd\@tempboxa%
\@tempdimb=\ht\@tempboxa%
\@tempdimc=\dp\@tempboxa%
\global\advance\mm@movie by1\relax%
\edef\mm@label{mmdefaultlabel\the\mm@movie}%
\def\mm@playmode{}%
\def\mm@duration{}%
\def\mm@start{}%
\def\mm@poster{}%
\def\mm@controls{}%
\mm@autostartfalse%
\mm@externaltrue% %%%%%%%%%%%%%%%%%%%%%%% <- change made here
\def\mm@bw{0}%
\setkeys{multimedia}{#1}%
\wd\@tempboxa=\@tempdima%
\ht\@tempboxa=\@tempdimb%
\dp\@tempboxa=\@tempdimc%
\ifmm@external%
\href{run:#3}{\box\@tempboxa}%
\else%
\mm@psorpdf{%
\pdfmark[{\box\@tempboxa}]{%
pdfmark=/ANN,%
Subtype=/Movie,%
Movie=<< /F (#3) \mm@poster\space >>,%
Annotations=<< \mm@start\space \mm@duration\space \mm@playmode\space \mm@controls\space>>,%
T=(\mm@label),
Border={0 0 \mm@bw}}%
}{%
\pdfannot width \@tempdima height \@tempdimb depth \@tempdimc
{
/Subtype /Movie
/T (\mm@label)
/Border [0 0 \mm@bw]
/Movie << /F (#3) \mm@poster\space >>
/A << \mm@start\space \mm@duration\space \mm@playmode\space \mm@controls\space >>
}%
}%
\mm@psorpdf{}{\box\@tempboxa}%
\ifmm@autostart%
\mm@psorpdf%
{%
\pdfmark{pdfmark=/PUT,%
Raw={{ThisPage} << /AA << /O << /S /Movie
/T (\mm@label) /Operation /Play >> >> >>}%
}}%
{%
\immediate\pdfobj {<< /S /Movie /T (\mm@label) /Operation /Play >>}%
\pdfannot width 0pt height 0pt depth 0pt {%
/Subtype/Widget
/FT/Btn/Ff 65537
/T (wid@\mm@label)
/AA <</PO \the\pdflastobj\space 0 R>>% attention: /O --> /PO for Widget annots
}%
}%
\fi%
\fi%
}%
}
\makeatother
或使用xpatch
更短的代码。
(未经测试,因为问题不包含可编译的示例)