如何设置 Latex 中嵌入电影的全局设置?

如何设置 Latex 中嵌入电影的全局设置?

我使用 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}

在我嵌入的所有视频中,我都使用了上述样式。在演示过程中播放视频确实很困难,因为演示软件奥克拉尔意外崩溃。而且加载需要很长时间。

我发现如果我使用evinceVLC 之类的外部媒体播放器,这个问题就可以解决。为此,我必须通过添加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更短的代码。

(未经测试,因为问题不包含可编译的示例)

相关内容