% Red-black tree
% Author: Madit
\documentclass[leqno,fleqn,table]{beamer}
\usepackage{tikz}
%%%<
%\usepackage{verbatim}
%\usepackage[active,tightpage]{preview}
%\PreviewEnvironment{tikzpicture}
%\setlength{\PreviewBorder}{10pt}%
%%%>
%\begin{comment}
%:Title: Red-black tree
%:Tags: Trees;Graphs
%:Author: Madit
%:Slug: red-black-tree
%
%A red-black tree is a special type of binary tree, used in computer science
%to organize pieces of comparable data, such as text fragments or numbers.
%(Wikipedia)
%\end{comment}
\usetikzlibrary{arrows}
\tikzset{
treenode/.style = {align=center, inner sep=0pt, text centered,
font=\sffamily},
arn_n/.style = {treenode, circle, white, font=\sffamily\bfseries, draw=black,
fill=black, text width=1.5em},% arbre rouge noir, noeud noir
arn_r/.style = {treenode, circle, red, draw=red,
text width=1.5em, very thick},% arbre rouge noir, noeud rouge
arn_x/.style = {treenode, rectangle, draw=black,
minimum width=0.5em, minimum height=0.5em}% arbre rouge noir, nil
}
\begin{document}
\begin{frame}
\begin{minipage}[c]{\textwidth}
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 5cm/#1,
level distance = 1.5cm}]
\node [arn_n] {33}
child{ node [arn_r] {15}
child{ node [arn_n] {10}
child{ node [arn_r] {5} edge from parent node[above left]
{$x$}} %for a named pointer
child{ node [arn_x] {}}
}
child{ node [arn_n] {20}
child{ node [arn_r] {18}}
child{ node [arn_x] {}}
}
}
child{ node [arn_r] {47}
child{ node [arn_n] {38}
child{ node [arn_r] {36}}
child{ node [arn_r] {39}}
}
child{ node [arn_n] {51}
child{ node [arn_r] {49}}
child{ node [arn_x] {}}
}
}
;
\end{tikzpicture}
\end{minipage}
\end{frame}
\end{document}
所以我在 beamer 中使用它,但出现错误(迭代定义中的参数编号非法)尽管当我删除框架并创建 documentclass 文章时它可以工作。是否可以在 beamer 中使其工作?
答案1
将[fragile]
选项传递给“框架”环境:
\begin{frame}[fragile]
...
% \end{frame} must be on a single line!
\end{frame}
在你的情况下,这是必要的,因为在 的样式定义中使用了 tex 参数(#1
)tikzpicture
。从技术上讲:为了在样式定义中提供参数语法,TikZ 需要更改 的 catcode #
,而这又需要使用环境fragile
的选项frame
。
背景
fragile
似乎是一个解决各种奇怪错误消息的“神奇”选项。基本上,它只是在需要逐字读取框架内容的某些部分时才使用,也就是说,不立即解释特殊字符(#1
在本例中)。
详细信息请参阅 beamer 用户指南第 8.1 节:
fragile[=singleslide]
告诉 beamer 框架内容是“脆弱的”。这意味着框架包含的文本不是“按常规解释的”。例如,这适用于逐字文本,显然,逐字文本的解释与正常文本略有不同。如果框架包含脆弱文本,则使用不同的内部机制来排版框架,以确保框架内的字符代码可以重置。切换到另一种内部机制的代价是,您无法使用覆盖,或者需要写入和读回外部文件(这并不总是可取的)。具体来说,当为普通 (pdf)LATEX 提供此选项时,将发生以下情况:扫描框架的内容,然后将其写入名为 ⟨jobname⟩.vrb 的特殊文件,或者,如果已为框架分配标签,则写入 ⟨jobname⟩.⟨current frame number⟩.vrb。然后,重新启动框架并读回此文件的内容。由于在读取文件时可以修改字符代码,因此您可以使用逐字文本和覆盖。
为了确定帧的结束,使用以下规则:第一次出现的单行恰好包含
\end{⟨frame environment name⟩}
帧的结束。