![Gráfico em camadas do manual Tikz](https://rvso.com/image/327796/Gr%C3%A1fico%20em%20camadas%20do%20manual%20Tikz.png)
Suponho que tenho alguma experiência com látex baunilha (que usei para escrever vários documentos), mas estou dando meus primeiros passos com o tikz. Em particular, estou tentando reproduzir o diagrama da página 363 do Manual da versão 3.0.1a de Till Tantau. Suponho que não estou configurando meu ambiente corretamente. Aqui está o código que estou usando (copie e cole do livro no que diz respeito à parte após o início {document})
\documentclass{article} % say
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{angles}
\usetikzlibrary{trees}
\usetikzlibrary{arrows,decorations.pathmorphing,
backgrounds,positioning,fit,petri}
\usetikzlibrary{graphs}
\usetikzlibrary{bending}
\usetikzlibrary{automata}
% \usetikzlibrary{graphdrawing,graphs}
% \usegdlibrary{layered}
\usetikzlibrary{shapes.multipart}
\begin{document}
\tikz [nodes={text height=.7em, text depth=.2em,
draw=black!20, thick, fill=white, font=\footnotesize},
>=spaced stealth’, rounded corners, semithick]
\graph [layered layout, level distance=1cm, sibling
sep=.5em,sibling distance=1cm] {
"5th Edition" -> { "6th Edition", "PWB 1.0" };
"6th Edition" -> { "LSX" [>child anchor=45], "1 BSD", "Mini Unix",
"Wollongong", "Interdata" };
"Interdata" -> { "Unix/TS 3.0", "PWB 2.0", "7th Edition" };
"7th Edition" -> { "8th Edition", "32V", "V7M", "Ultrix-11",
"Xenix", "UniPlus+" };
"V7M" -> "Ultrix-11";
"8th Edition" -> "9th Edition";
"1 BSD" -> "2 BSD" -> "2.8 BSD" -> { "Ultrix-11", "2.9 BSD" };
"32V" -> "3 BSD" -> "4 BSD" -> "4.1 BSD" -> { "4.2 BSD", "2.8 BSD",
"8th Edition" };
"4.2 BSD" -> { "4.3 BSD", "Ultrix-32" };
"PWB 1.0" -> { "PWB 1.2" -> "PWB 2.0", "USG 1.0" -> { "CB Unix 1",
"USG 2.0" }};
"CB Unix 1" -> "CB Unix 2" -> "CB Unix 3" -> { "Unix/TS++", "PDP-11
Sys V" };
{ "USG 2.0" -> "USG 3.0", "PWB 2.0", "Unix/TS 1.0" } -> "Unix/TS 3.0";
{ "Unix/TS++", "CB Unix 3", "Unix/TS 3.0" } -> "TS 4.0" -> "System
V.0" -> "System V.2" -> "System V.3";
};
mas isso me leva a uma série de erros quando pdflatex o script, em particular este
! Package pgf Error: Unknown arrow tip kind 'spaced stealth’'.
No entanto, mesmo se eu remover o bit furtivo, ainda recebo esta mensagem de erro
! Package pgfkeys Error: I do not know the key '/tikz/graphs
/layered layout' and I am going to ignore it. Perhaps you
misspelled it.
De acordo com o que encontrei aqui
Como faço para usar o pacote de desenho gráfico TikZ com KTikZ + LuaLaTeX?
é uma questão de usar \usegdlibrary{layered} no script. Nesse caso, porém, o pdflatex me diz que preciso recorrer ao lualatex. Resumindo: estou muito confuso neste momento. Alguma sugestão para facilitar minha vida?
Responder1
A biblioteca de desenho gráfico é provavelmente uma das partes mais complexas e, além disso, este diagrama específico também é um diagrama particularmente complexo.
Olhando seu código, posso identificar alguns problemas:
- Em primeiro lugar, existem algumas bibliotecas supérfluas. Isto não é prejudicial, mas também não é exatamente recomendado;
- Os algoritmos de desenho de gráficos são bastante complexos, e implementá-los em TeX puro seria desnecessariamente difícil (talvez LaTeX3 fosse melhor?), então eles são implementados em Lua. Como resultado, você precisa compilar com LuaLaTeX para gerar a saída. Você só precisa executar
lualatex document.tex
em vez depdflatex document.tex
, ou se estiver usando um IDE, deverá (espero) haver uma opção para selecionarlualatex
como compilador; - Existem dois problemas com
spaced stealth
a seta:- Em primeiro lugar, o estilo da seta não parece estar definido em nenhum lugar da documentação. Existe
stealth
e o correspondentestealth'
, mas não,spaced stealth
na verdade não sei por que eles o usam na documentação (editar: parece que isso foi obsoleto e deveria ter sido removido da documentação, veja o comentário de @cfr); - Em segundo lugar, mesmo que existisse, você tem
spaced stealth’
qual é diferentespaced stealth'
(observe a ligeira diferença no apóstrofo, na verdade são caracteres Unicode distintos). Este é um bug na documentação no momento em que'
é modificado dentro doverbatim
ambiente -like como se fosse um ambiente de texto. Como resultado, copiar e colar não funciona corretamente neste estágio. (Eles também tiveram um problema que--
se tornaria um travessão–
.)
- Em primeiro lugar, o estilo da seta não parece estar definido em nenhum lugar da documentação. Existe
- Você tem certas novas linhas no lugar errado. Por exemplo, a penúltima linha tem
"System\nV.0"
. Isso (provavelmente) interferirá no algoritmo gráfico, pois tratará esse nó como sendo distinto do"System V.0"
vértice.
Eu recomendaria que você começasse com um exemplo mais simples. Comece sentindo os layouts simples e depois comece a construir layouts cada vez mais complexos. Por exemplo, dê uma olhada em como os seguintes layouts mudam:
a -> b -> c,
b -> d,
a -> b -> {c, d}
a -> b -> {c -> x, d}
{a, b} -> {c -> x, d}
e assim por diante. Veja também como diferentes algoritmos funcionam com cada um dos layouts acima ( layered layout
, spring layout
, etc.)
Voltando ao seu exemplo original, aqui está o código corrigido e reformatado para torná-lo mais legível:
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{graphs}
\usetikzlibrary{graphdrawing}
\usegdlibrary{layered}
\begin{document}
\tikz [
nodes={
text height=.7em,
text depth=.2em,
draw=black!20,
thick,
fill=white,
font=\footnotesize
},
>=stealth',
rounded corners,
semithick
]
\graph [
layered layout,
level distance=1cm,
sibling sep=.5em,
sibling distance=1cm
] {
"5th Edition" -> {"6th Edition", "PWB 1.0" };
"6th Edition" -> {
"LSX" [>child anchor=45],
"1 BSD",
"Mini Unix",
"Wollongong",
"Interdata" };
"Interdata" -> {
"Unix/TS 3.0",
"PWB 2.0",
"7th Edition" };
"7th Edition" -> {
"8th Edition",
"32V",
"V7M",
"Ultrix-11",
"Xenix",
"UniPlus+" };
"V7M" -> "Ultrix-11";
"8th Edition" -> "9th Edition";
"1 BSD" -> "2 BSD"
-> "2.8 BSD"
-> { "Ultrix-11", "2.9 BSD" };
"32V" -> "3 BSD"
-> "4 BSD"
-> "4.1 BSD"
-> { "4.2 BSD", "2.8 BSD", "8th Edition" };
"4.2 BSD" -> { "4.3 BSD", "Ultrix-32" };
"PWB 1.0" -> {
"PWB 1.2" -> "PWB 2.0",
"USG 1.0" -> {
"CB Unix 1",
"USG 2.0" }};
"CB Unix 1" -> "CB Unix 2"
-> "CB Unix 3"
-> { "Unix/TS++", "PDP-11 Sys V" };
{
"USG 2.0" -> "USG 3.0",
"PWB 2.0",
"Unix/TS 1.0"
} -> "Unix/TS 3.0";
{
"Unix/TS++",
"CB Unix 3",
"Unix/TS 3.0"
} -> "TS 4.0"
-> "System
V.0" -> "System V.2"
-> "System V.3";
};
\end{document}
e aqui está a saída correspondente:
Nota: existe umincompatibilidade entre na standalone
classe e LuaLaTeX. Até que a standalone
classe seja atualizada, você precisará adicionar \RequirePackage{luatex85}
antes da declaração da classe do documento.
Responder2
Uma adição à resposta acima: O stealth espaçado pode ser importado usando:
\usetikzlibrary{arrows.spaced}