von Gast » Do 3. Mai 2018, 13:35
Von Graphentheorie habe ich nicht wirklich viel Ahnung, aber das Zeichnen von Graphen mit gegebenen Knoten und Verbindungen ist eine hochgradig nichttriviale Angelegenheit (siehe z.B.
diese Wiki-Übersichtsseite).
Ich bin immer wieder überrascht, wie viel TeX (hier in Form von TikZ mit LuaTeX) kann - vor einer halben Stunde hätte ich noch gesagt: Vergiss es, das ist keine Aufgabe für TeX, da braucht man spezielle Programme und Algorithmen für. Prinzipiell bin ich der Meinung noch immer, aber TikZ hat in Form seiner
graph drawing library, die LuaTeX benötigt, (siehe Part IV der Dokumentation) tatsächlich automatische Lösungen für Graphen im Petto.
Das folgende Beispiel mit LuaLaTeX kompiliert ein paar automatische Möglichkeiten für Dein Beispiel
\documentclass{article}
\usepackage{mathtools}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{layered,force,trees}
\newcommand{\logik}[1]{\ensuremath{\mathrm{#1}}}
\begin{document}
\begin{tikzpicture}
%Epistemische Systeme Kreise rationale Welt
%Glaubensätze von S3
\node (S3P1) at (-1,2) {\logik{\neg p_1}};
\node (S3P2) at (0,3) {\logik{p_2}};
\node (S3P3) at (0,1) {\logik{p_3}};
\node (S3P4) at (1,2) {\logik{p_4}};
%Linien für Verbindung der Glaubensätze S3
\draw [thick] (S3P1) -- (S3P2);
\draw [thick] (S3P1) -- (S3P3);
\draw [thick] (S3P1) -- (S3P4);
\draw [thick] (S3P2) -- (S3P3);
\draw [thick] (S3P2) -- (S3P4);
\draw [thick] (S3P3) -- (S3P4);
\end{tikzpicture}
\section{Tree}
\tikz[tree layout]{
\node (S3P1) {\logik{\neg p_1}};
\node (S3P2) {\logik{p_2}};
\node (S3P3) {\logik{p_3}};
\node (S3P4) {\logik{p_4}};
\draw (S3P1) edge (S3P2)
(S3P1) edge (S3P3)
(S3P1) edge (S3P4)
(S3P2) edge (S3P3)
(S3P2) edge (S3P4)
(S3P3) edge (S3P4);
}
%
\tikz\graph[tree layout]{
"\logik{\neg p_1}" --{ "\logik{p_2}", "\logik{p_3}", "\logik{p_4}"};
"\logik{p_2}"--{"\logik{p_3}", "\logik{p_4}"};
"\logik{p_3}"--"\logik{p_4}";
};
\section{Layered layout}
\tikz[layered layout]{
\node (S3P1) {\logik{\neg p_1}};
\node (S3P2) {\logik{p_2}};
\node (S3P3) {\logik{p_3}};
\node (S3P4) {\logik{p_4}};
\draw (S3P1) edge (S3P2)
(S3P1) edge (S3P3)
(S3P1) edge (S3P4)
(S3P2) edge (S3P3)
(S3P2) edge (S3P4)
(S3P3) edge (S3P4);
}
%
\tikz\graph[layered layout]{
"\logik{\neg p_1}" --{ "\logik{p_2}", "\logik{p_3}", "\logik{p_4}"};
"\logik{p_2}"--{"\logik{p_3}", "\logik{p_4}"};
"\logik{p_3}"--"\logik{p_4}";
};
\section{Force}
\tikz[random seed=0, spring layout]{
\node (S3P1) {\logik{\neg p_1}};
\node (S3P2) {\logik{p_2}};
\node (S3P3) {\logik{p_3}};
\node (S3P4) {\logik{p_4}};
\draw (S3P1) edge (S3P2)
(S3P1) edge (S3P3)
(S3P1) edge (S3P4)
(S3P2) edge (S3P3)
(S3P2) edge (S3P4)
(S3P3) edge (S3P4);
}
%
\tikz\graph[random seed=0, spring layout]{
"\logik{\neg p_1}" --{ "\logik{p_2}", "\logik{p_3}", "\logik{p_4}"};
"\logik{p_2}"--{"\logik{p_3}", "\logik{p_4}"};
"\logik{p_3}"--"\logik{p_4}";
};
\end{document}
Das sieht jetzt nicht unbedingt so aus, wie Du es haben wolltest (die letzte Möglichkeit kommt Deinem Wunsch vergleichsweise nah).
Zum Thema gibt es auch eine kleine Präsentation vom TikZ-Entwickler
http://www.tcs.uni-luebeck.de/downloads ... tation.pdf, ein Paper von ihm
https://doi.org/10.1007/978-3-642-36763-2_46 und eine Diplomarbeit eines seiner Studenten
http://www.tcs.uni-luebeck.de/downloads ... hlmann.pdf Außerdem ist die
Dokumentation natürlich Anlaufstelle Nummer eins, der für die Automatik interessante Teil ist
Part IV: Graph Drawing, S. 363-509.
Wenn Deine Vorstellung von dem fertigen Graphen nicht mit den hier algorithmisch generierten Ausgaben übereinstimmt, dann müsstest Du wohl für Deine Wünsche einen neuen Algorithmus implementieren.
Ohne diese Schwarzmagie des Graphenmalens bietet TikZ standardmäßig und mit der Library positioning erweiterte Möglichkeiten, Nodes relativ zueinander zu positionieren, ohne feste Koordinaten angeben zu müssen. Das macht die Sache für Dich nicht viel besser, aber schon etwas angenehmer. Beispiel:
https://tex.stackexchange.com/q/79693/35864
Von Graphentheorie habe ich nicht wirklich viel Ahnung, aber das Zeichnen von Graphen mit gegebenen Knoten und Verbindungen ist eine hochgradig nichttriviale Angelegenheit (siehe z.B. [url=https://en.wikipedia.org/wiki/Graph_drawing]diese Wiki-Übersichtsseite[/url]).
Ich bin immer wieder überrascht, wie viel TeX (hier in Form von TikZ mit LuaTeX) kann - vor einer halben Stunde hätte ich noch gesagt: Vergiss es, das ist keine Aufgabe für TeX, da braucht man spezielle Programme und Algorithmen für. Prinzipiell bin ich der Meinung noch immer, aber TikZ hat in Form seiner [i]graph drawing library[/i], die LuaTeX benötigt, (siehe Part IV der Dokumentation) tatsächlich automatische Lösungen für Graphen im Petto.
Das folgende Beispiel mit LuaLaTeX kompiliert ein paar automatische Möglichkeiten für Dein Beispiel
[code]\documentclass{article}
\usepackage{mathtools}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{layered,force,trees}
\newcommand{\logik}[1]{\ensuremath{\mathrm{#1}}}
\begin{document}
\begin{tikzpicture}
%Epistemische Systeme Kreise rationale Welt
%Glaubensätze von S3
\node (S3P1) at (-1,2) {\logik{\neg p_1}};
\node (S3P2) at (0,3) {\logik{p_2}};
\node (S3P3) at (0,1) {\logik{p_3}};
\node (S3P4) at (1,2) {\logik{p_4}};
%Linien für Verbindung der Glaubensätze S3
\draw [thick] (S3P1) -- (S3P2);
\draw [thick] (S3P1) -- (S3P3);
\draw [thick] (S3P1) -- (S3P4);
\draw [thick] (S3P2) -- (S3P3);
\draw [thick] (S3P2) -- (S3P4);
\draw [thick] (S3P3) -- (S3P4);
\end{tikzpicture}
\section{Tree}
\tikz[tree layout]{
\node (S3P1) {\logik{\neg p_1}};
\node (S3P2) {\logik{p_2}};
\node (S3P3) {\logik{p_3}};
\node (S3P4) {\logik{p_4}};
\draw (S3P1) edge (S3P2)
(S3P1) edge (S3P3)
(S3P1) edge (S3P4)
(S3P2) edge (S3P3)
(S3P2) edge (S3P4)
(S3P3) edge (S3P4);
}
%
\tikz\graph[tree layout]{
"\logik{\neg p_1}" --{ "\logik{p_2}", "\logik{p_3}", "\logik{p_4}"};
"\logik{p_2}"--{"\logik{p_3}", "\logik{p_4}"};
"\logik{p_3}"--"\logik{p_4}";
};
\section{Layered layout}
\tikz[layered layout]{
\node (S3P1) {\logik{\neg p_1}};
\node (S3P2) {\logik{p_2}};
\node (S3P3) {\logik{p_3}};
\node (S3P4) {\logik{p_4}};
\draw (S3P1) edge (S3P2)
(S3P1) edge (S3P3)
(S3P1) edge (S3P4)
(S3P2) edge (S3P3)
(S3P2) edge (S3P4)
(S3P3) edge (S3P4);
}
%
\tikz\graph[layered layout]{
"\logik{\neg p_1}" --{ "\logik{p_2}", "\logik{p_3}", "\logik{p_4}"};
"\logik{p_2}"--{"\logik{p_3}", "\logik{p_4}"};
"\logik{p_3}"--"\logik{p_4}";
};
\section{Force}
\tikz[random seed=0, spring layout]{
\node (S3P1) {\logik{\neg p_1}};
\node (S3P2) {\logik{p_2}};
\node (S3P3) {\logik{p_3}};
\node (S3P4) {\logik{p_4}};
\draw (S3P1) edge (S3P2)
(S3P1) edge (S3P3)
(S3P1) edge (S3P4)
(S3P2) edge (S3P3)
(S3P2) edge (S3P4)
(S3P3) edge (S3P4);
}
%
\tikz\graph[random seed=0, spring layout]{
"\logik{\neg p_1}" --{ "\logik{p_2}", "\logik{p_3}", "\logik{p_4}"};
"\logik{p_2}"--{"\logik{p_3}", "\logik{p_4}"};
"\logik{p_3}"--"\logik{p_4}";
};
\end{document}[/code]
Das sieht jetzt nicht unbedingt so aus, wie Du es haben wolltest (die letzte Möglichkeit kommt Deinem Wunsch vergleichsweise nah).
Zum Thema gibt es auch eine kleine Präsentation vom TikZ-Entwickler http://www.tcs.uni-luebeck.de/downloads/mitarbeiter/tantau/2012-gd-presentation.pdf, ein Paper von ihm https://doi.org/10.1007/978-3-642-36763-2_46 und eine Diplomarbeit eines seiner Studenten http://www.tcs.uni-luebeck.de/downloads/papers/2011/2011-configurable-graph-drawing-algorithms-jannis-pohlmann.pdf Außerdem ist die [url=http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf]Dokumentation[/url] natürlich Anlaufstelle Nummer eins, der für die Automatik interessante Teil ist [i]Part IV: Graph Drawing[/i], S. 363-509.
Wenn Deine Vorstellung von dem fertigen Graphen nicht mit den hier algorithmisch generierten Ausgaben übereinstimmt, dann müsstest Du wohl für Deine Wünsche einen neuen Algorithmus implementieren.
Ohne diese Schwarzmagie des Graphenmalens bietet TikZ standardmäßig und mit der Library [tt]positioning[/tt] erweiterte Möglichkeiten, Nodes relativ zueinander zu positionieren, ohne feste Koordinaten angeben zu müssen. Das macht die Sache für Dich nicht viel besser, aber schon etwas angenehmer. Beispiel: https://tex.stackexchange.com/q/79693/35864