XeLaTeX 阻止投影仪使用不同的背景

XeLaTeX 阻止投影仪使用不同的背景

我遇到了一个奇怪的问题---似乎XeLaTeX不能很好地与 配合使用beamer。我正在使用 MacTex 2011,并使用 TexLive 实用程序更新到最新的软件包。

问题是使用 XeLaTeX 进行编译使我无法\setbeamertemplate多次使用该命令。

举个例子,我想让两张幻灯片有不同的背景,比如一张是蓝色渐变,另一张是红色渐变。请参阅以下示例代码:

\documentclass[12 pt]{beamer}

\begin{document}


\setbeamertemplate{background canvas}[vertical shading][bottom=blue!30, top=white]

\begin{frame}[t]\frametitle{This should have a blue gradient}
    Since this is the first instance of \texttt{setbeamertemplate}, it works properly.
\end{frame}  

\setbeamertemplate{background canvas}[vertical shading][bottom=red!30, top=white]

\begin{frame}[t]\frametitle{This should have a red gradient}
    However, if \texttt{XeLaTeX} is run, this will still show as blue.
\end{frame}

\end{document}

如果我使用 PdfLaTeX 进行编译,那么这将按预期工作。但是,如果我使用 XeLaTeX 进行编译,那么两个幻灯片都有蓝色渐变背景。第二个\setbeamertemplate{background canvas}调用被忽略。

有人对此有什么建议或对正在发生的事情做出解释吗?

答案1

这似乎是定义上的问题pgfsysdriver-xetex。如果你把

\def\pgfsysdriver{pgfsys-dvipdfmx.def} 

在该\documentclass行之前,您会在 MWE 上获得正确的输出。

不过,我无法保证这是否会破坏其他功能。有一件事是行不通的,那就是涉及 TikZ/pgf 的任何事情remember picture。可能还有其他我不知道的事情不起作用。

如果确实遇到问题,另一种解决方法是使用lualatex而不是进行编译xelatex

答案2

您可以尝试仅加载所需的定义,而不是使用 xelatex 加载完整的定义pgfsys-dvipdfmx.def。例如,对于垂直阴影,定义一个计数器并复制以下定义似乎就足够了\pgfsys@vertshading

\documentclass[12 pt]{beamer}

\makeatletter
\newcount\pgfsys@objnum\pgfsys@objnum\@ne

\def\pgfsys@vertshading#1#2#3{%
  {%
    \pgf@parsefunc{#3}%
    \pgfmathparse{#2}%
    \pgf@process{\pgfpoint{\pgf@max}{#2}}%
    \edef\@tempa{\noexpand\pgfutil@insertatbegincurrentpagefrombox{%
      \special{pdf:bxobj @pgfshade\the\pgfsys@objnum\space width \pgfmathresult pt\space height \the\pgf@max}%
      \special{pdf:put @resources
      <<
        /Shading << /Sh << /ShadingType 2
        /ColorSpace /DeviceRGB
        /Domain [\pgf@pdfparseddomain]
        /Coords [0 \pgf@doma\space0 \pgf@domb]
        /Function \pgf@pdfparsedfunction
        /Extend [false false] >> >>
      >>}%
      \pgfsys@invoke{/Sh sh}%
      \special{pdf:exobj}}}\@tempa% <<
    \expandafter\xdef\csname @pgfshading#1!\endcsname{%
      \hbox to\pgfmathresult pt{\vbox to\the\pgf@max{\vfil\special{pdf:uxobj @pgfshade\the\pgfsys@objnum}}\hfil}}%
  }%
  \global\advance\pgfsys@objnum\@ne%
}
\makeatother

.... 

但真正缺少的是能够并愿意整理 xetex 驱动程序文件的人。如果更新驱动程序文件,目前缺少的大多数功能(例如图形剪辑)都可以正常工作。

相关内容