我正在尝试运行以下 tikz 文件
% Red-black tree
% Author: Madit
\documentclass{article}
\usepackage{tikz}
\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{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{document}
但我收到了错误:
Package pgfkeys Error: I do not know the key '/tikz/arn_r'
我从以下网址获取了此信息:
https://texample.net/tikz/examples/red-black-tree/
使用在线编译器似乎编译成功了。我看不出我的错误在哪里?
我认为我的错误与我将 .tikz 文件插入文档的方式有关。我以前也这样做过,但这次似乎不起作用:
\begin{figure*}[h]
\centering
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}c ccc c}
& &\includegraphics[height=4cm]{redblack.tikz} & &\\
\end{tabular*}
\caption{Balanced tree with coloured nodes indicating matching predictors. \cite{tikztree}}
\label{7:tree1}
\end{figure*}
以前我这样做的时候用的是\tikzstyle{}
not \tikzset{}
。我觉得我在这里遗漏了一些东西。
更改\includegraphics[height=4cm]{redblack.tikz}
为\input{/filepath/redblack.tex}
没有帮助,我得到了完全相同的错误,除了'treenode'之外的所有样式实例,它只在\tikzset{}
但是,编译独立文档确实有效。所以我猜想我插入 .tikz 文件和/或 .tex 文档的方式有问题?
答案1
我的问题在于我插入文档的方式。我使用的是原始文件,包括\documentclass
,以及和\begin
。\end
实际上,要使用\graphicspath
和,.tikz
您需要使用以下版本:
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 5cm/#1,
level distance = 1.5cm}]
%tikzset
\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
}
\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}
我希望这对某些人有帮助,因为它花了我几个小时。
答案2
我认为将 TikZ 图片包含到更大的文档中的最佳方法是standalone
文档类。
该类standalone
有两个主要用例,其中只有一个我认为最常用。最常见的用途是当您想要生成 TeX 输出的紧密裁剪的 PDF(例如,PDF 裁剪为 TikZ 图片的内容)。这由 调用documentclass
。这种方法的优点是它允许您在单个图片上进行迭代而无需编译整个文档。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\fill (0,0) circle (10pt);
\end{tikzpicture}
\end{document}
一个不太为人所知的功能,虽然它就在standalone
手册里,那就是,一个standalone
包含在更大的文档(加载包standalone
)中的类文档将消除序言和document
环境,并仅插入“独立文档”的文本。这样,您就可以将 TikZ 设置抽象为序言文件,将其包含在您制作的每个绘图中,并且仍然将它们包含在主文档中而无需额外努力。您甚至可以设置类standalone
来收集和排序所包含文件的序言,而不是删除它们。
举例来说,您可以像这样调整您的示例:
tikzsetup.tex:
\usepackage{tikz}
\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
}
红黑-tikz.tex:
\documentclass{standalone}
\include{tikzsetup.tex}
\begin{document}
\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{document}
红黑主.tex
% Red-black tree
% Author: Madit
\documentclass{article}
\usepackage{standalone}
\include{tikzsetup}
\begin{document}
Some main text describing red-black trees:
\include{red-black-tikz.tex}
\end{document}