Beamer 发现装饰错误

Beamer 发现装饰错误
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{pgf,tikz}
\usepackage{tikz}
\begin{document}

\frame{
\usetikzlibrary{decorations.pathmorphing}
\tikzstyle{kringel}=[decoration={random steps}]
\begin{tikzpicture}
 \draw[black] (3,2.5) decorate [kringel] {-- (2,5)};
\end{tikzpicture}

%\uncover<2->{test}
}
\end{document}

编译没有任何问题。如果我替换

%\uncover<2->{test}

\uncover<2->{test}

那么它就无法编译并出现以下错误:

./test.tex:18: Package tikz Error: You need to load a decoration library.

如果我移动这两条线

\usetikzlibrary{decorations.pathmorphing}
\tikzstyle{kringel}=[decoration={random steps}]

放入文档头中,即在

\begin{document}

然后它就可以编译并运行了。有人能向我解释一下这里发生了什么吗?

答案1

最终的结论是,您可能不应该尝试\usetikzlibrary在团体中使用。

稍微削减一下,错误已经发生在

\documentclass{article}
\usepackage{pgf,tikz}
\begin{document}

\begingroup
\usetikzlibrary{decorations.pathmorphing}
\endgroup

\tikzstyle{kringel}=[decoration={random steps}]
\begin{tikzpicture}
 \draw[black] (3,2.5) decorate [kringel] {-- (2,5)};
\end{tikzpicture}

\end{document}

只要您在一个框架中拥有多个覆盖层(例如通过使用)<2->,整个框架就会被解析多次,丢弃不适用于当前覆盖层的内容。每次迭代都是以组为单位进行的,以限制副作用的渗出。现在看来(我还没有深入研究过这个问题),它\usetikzlibrary足够聪明,不会两次加载任何内容。因此,您的库是为 overlay 加载的<1>,而不是为 overlay 加载的<2>,但它的定义不存在,因为它们不是全局的。

相关内容