此代码尝试在 tikz 节点文本中使用 \multiincludexmpmulti
来包含一系列文件 pic-0.pdf、pic-1.pdf、... 等,但无法编译并抛出下面列出的错误。是否可以在 tikz 节点中使用 \multiinclude?如果可以,该怎么做?或者如果没有,是否有其他方法可以实现相同的效果:在 tikz 节点内显示一堆幻灯片?
\documentclass{beamer}
\usepackage{tikz}
\usepackage{xmpmulti}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\node {
\multiinclude[format=pdf,graphics={width=.45\textwidth}]{pic}
};
\end{tikzpicture}
\end{frame}
\end{document}
投影仪给出的误差是
! Package tikz Error: Giving up on this path. Did you forget a semicolon?.
See the tikz package documentation for explanation.
Type H <return> for immediate help.
...
l.14 \end{frame}
! You can't use `\lastskip' in restricted horizontal mode.
\@let@token ...{}\beamer@lastskipcover =\lastskip
\edef \beamer@lastskiptext...
l.14 \end{frame}
答案1
问题是,\multiinclude
内部使用\pause
命令在图片之间切换。\pause
在 TikZ 节点内部使用命令是危险的,因为它会使用各种诡计,导致节点崩溃。因此,有两种解决方案。一种是指定您自己的覆盖规范作为初始可选参数,例如:
\multiinclude[<+->][format=pdf,graphics={width=.45\textwidth}]{pic}
这可以避免这个\pause
问题,因为它会将图像放入actionenv
具有给定覆盖规范的 中。您需要进行实验才能确定正确的覆盖规范应该是什么。
另一个解决方案是将节点的内容放入另一个组内。这似乎解决了\pause
-in-node 问题。因此:
{\multiinclude[format=pdf,graphics={width=.45\textwidth}]{pic}}
不过,我对第二种方法持谨慎态度。\pause
命令是意味着在全球范围内发挥作用。在这种情况下,它不会这样做,但这些软件包的未来版本可能会改变。
要查看导致\pause
问题的原因,请尝试:
\documentclass{beamer}
% \url{https://tex.stackexchange.com/q/24085/86}
\usepackage{tikz}
\begin{document}
\begin{frame}
%{hello \pause world}
\begin{tikzpicture}
\node {%
hello \pause world
};
\end{tikzpicture}
hello world
\end{frame}
\end{document}
您将看到您得到了相同的错误。将节点内容放在组中,{...}
可以解决这个问题。要查看是否\pause
要全局执行,请取消注释之前的行\begin{tikzpicture}
。
为了完整起见,这里有一些相关问题: