投影机中的 Tikz 树

投影机中的 Tikz 树
% 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 参数(#1tikzpicture。从技术上讲:为了在样式定义中提供参数语法,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⟩} 帧的结束。

相关内容