Ich schätze, ich habe ziemlich viel Erfahrung mit Vanilla Latex (das ich zum Schreiben mehrerer Dokumente verwendet habe), aber ich mache meine ersten Babyschritte mit Tikz. Insbesondere versuche ich, das Diagramm auf Seite 363 des Handbuchs für Version 3.0.1a von Till Tantau zu reproduzieren. Ich schätze, ich richte meine Umgebung nicht richtig ein. Hier ist der Code, den ich verwende (ein Kopieren und Einfügen aus dem Buch, soweit es den Teil nach begin{document} betrifft)
\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";
};
aber das führt bei mir zu einer Reihe von Fehlern, wenn ich das Skript pdflatex, insbesondere diesen
! Package pgf Error: Unknown arrow tip kind 'spaced stealth’'.
Aber auch wenn ich das Stealth-Bit entferne, erhalte ich immer noch diese Fehlermeldung
! Package pgfkeys Error: I do not know the key '/tikz/graphs
/layered layout' and I am going to ignore it. Perhaps you
misspelled it.
Nach dem, was ich hier gefunden habe
Wie verwende ich das TikZ-Graphzeichnungspaket mit KTikZ+LuaLaTeX?
es geht darum, \usegdlibrary{layered} im Skript zu verwenden. In diesem Fall sagt mir pdflatex jedoch, dass ich auf lualatex zurückgreifen muss. Fazit: Ich bin an diesem Punkt sehr verwirrt. Irgendwelche Vorschläge, um mir das Leben leichter zu machen?
Antwort1
Die Bibliothek zum Zeichnen von Diagrammen ist wahrscheinlich einer der komplexeren Teile, und außerdem ist dieses spezielle Diagramm auch ein besonders komplexes Diagramm.
Beim Durchsehen Ihres Codes sind mir einige Probleme aufgefallen:
- Erstens gibt es eine ganze Reihe überflüssiger Bibliotheken. Das ist zwar nicht schädlich, aber auch nicht unbedingt empfehlenswert;
- Die Algorithmen zum Zeichnen von Graphen sind recht komplex und ihre Implementierung in reinem TeX wäre unnötig schwierig (vielleicht wäre LaTeX3 besser?), daher werden sie in Lua implementiert. Daher müssen Sie mit LuaLaTeX kompilieren, um die Ausgabe zu generieren. Sie müssen nur
lualatex document.tex
anstelle von ausführen, oder wenn Sie eine IDE verwenden, sollte es (hoffentlich) eine Option geben, die Sie als Compilerpdflatex document.tex
auswählen können ;lualatex
- Es gibt zwei Probleme mit
spaced stealth
Arrow:- Erstens scheint der Pfeilstil nirgends in der Dokumentation definiert zu sein. Es gibt ihn
stealth
und das entsprechendestealth'
, aber neinspaced stealth
, also weiß ich eigentlich nicht, warum sie ihn in der Dokumentation verwenden (Bearbeiten: es scheint, dass dies veraltet ist und eigentlich aus der Dokumentation hätte entfernt werden sollen, siehe Kommentar von @cfr); - Zweitens, selbst wenn es existierte, hätten Sie
spaced stealth’
„which is different to“spaced stealth'
(beachten Sie den kleinen Unterschied beim Apostroph, es handelt sich tatsächlich um unterschiedliche Unicode-Zeichen). Dies ist derzeit ein Fehler in der Dokumentation, wobei „which“'
innerhalb der -ähnlichen Umgebung geändert wird,verbatim
als wäre es eine Textumgebung. Infolgedessen funktioniert das Kopieren und Einfügen derzeit nicht richtig. (Sie hatten auch ein Problem, „which“--
würde zu einem Halbgeviertstrich werden–
.)
- Erstens scheint der Pfeilstil nirgends in der Dokumentation definiert zu sein. Es gibt ihn
- Sie haben bestimmte Zeilenumbrüche an der falschen Stelle. Die vorletzte Zeile hat beispielsweise
"System\nV.0"
. Dies wird (höchstwahrscheinlich) den Grafikalgorithmus beeinträchtigen, da dieser diesen Knoten als vom"System V.0"
Scheitelpunkt verschieden behandelt.
Ich würde empfehlen, mit einem einfacheren Beispiel zu beginnen. Machen Sie sich zunächst mit einfachen Layouts vertraut und beginnen Sie dann, immer komplexere Layouts zu erstellen. Sehen Sie sich beispielsweise an, wie sich die folgenden Layouts ändern:
a -> b -> c,
b -> d,
a -> b -> {c, d}
a -> b -> {c -> x, d}
{a, b} -> {c -> x, d}
und so weiter. Sehen Sie sich auch an, wie verschiedene Algorithmen mit jedem der oben genannten Layouts funktionieren ( layered layout
, spring layout
, usw.)
Um auf Ihr ursprüngliches Beispiel zurückzukommen. Hier ist der korrigierte und zur besseren Lesbarkeit neu formatierte Code:
\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}
und hier ist die entsprechende Ausgabe:
Hinweis: Es gibt eineInkompatibilität zwischen der standalone
Klasse und LuaLaTeX. Bis die standalone
Klasse aktualisiert wird, müssen Sie \RequirePackage{luatex85}
vor der Dokumentklassendeklaration Folgendes hinzufügen.
Antwort2
Eine Ergänzung zur obigen Antwort: Die Spaced Stealth-Funktion kann importiert werden mit:
\usetikzlibrary{arrows.spaced}