Gibt es möglicherweise kürzere Codes zum Zeichnen dieses Diagramms, vielleicht indem man „, graphs
aber es ist kein regelmäßiges Polygon“ verwendet oder die Wiederholungen \draw
in meinem Code abkürzt:
%% filename henry3.pgf
\begin{tikzpicture}
%%styles and libraries
\usetikzlibrary{decorations.markings, arrows}
\tikzstyle{mdar}=[decoration={markings, mark=at position 0.45 with {\arrow{stealth}}}, postaction={decorate}]
\tikzstyle{mdad}=[decoration={markings, mark=at position 0.3 with {\arrow{stealth}}}, postaction={decorate}]
\tikzstyle{point}=[node distance=2cm, inner sep=0pt, fill=black, circle]
%nodes
\node[point] (p1) {.} ;
\node[point, below of = p1] (p2) {.};
\node[point, below of = p2, yshift=0.7cm](p3){.};
\node[point, below of = p3, yshift=0.4cm](p4){.};
\node[point, below of = p4, yshift=0.7cm](p5){.};
%%
\node[point, right of=p1, yshift=-1.4cm](p10){.};
\node[point, left of=p1, yshift=-1.4cm](p11){.};
\node[point, right of=p4, xshift=-0.3cm] (p40) {.};
\node[point,left of=p4, xshift=0.3cm] (p41) {.};
%% there is a way of importing tikz's graph library and making things
%%easier and compressed but importing this does not work on my
%%computer
%joining nodes
\draw[mdar](p1) -- (p11) ;\draw[mdar](p1) -- (p10);\draw[mdar] (p1) -- (p41);\draw[mdar] (p1) -- (p40);\draw[mdar](p1) -- (p2);
\draw[mdar](p2) -- (p11); \draw[mdar](p2) -- (p3);\draw[mdar](p2) -- (p10); \draw[mdar](p2) -- (p40); \draw[mdar](p2) -- (p41);
\draw[mdad](p11) -- (p3); \draw[mdad](p11) -- (p4); \draw[mdad](p11) -- (p5); \draw[mdar](p11) -- (p41);
\draw[mdar] (p10) -- (p3); \draw[mdad] (p10) -- (p4); \draw[mdad] (p10) -- (p5); \draw[mdar] (p10) -- (p40);
\draw[mdar](p3) -- (p4); \draw[mdar](p3) -- (p41); \draw[mdar](p3) -- (p40);
\draw[mdar](p4) -- (p41); \draw[mdar](p4) -- (p40); \draw[mdar](p4) -- (p5);
\draw[mdar](p40) -- (p5); \draw[mdar](p41) -- (p5);
\end{tikzpicture}
Antwort1
Ich weiß nicht viel über Graphen und werde daher nicht versuchen, die Graphenbibliotheken zu verwenden, aber Sie können Ihre Knoten etwas aussagekräftiger neu nummerieren und dann einen typischen Adjazenzmatrixansatz verwenden.
\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.markings, arrows}
\begin{document}
\begin{tikzpicture}[mdar/.style={
decoration={markings, mark=at position 0.45 with {\arrow{stealth}}},
postaction={decorate}
},
mdad/.style={decoration={markings, mark=at position 0.3 with {\arrow{stealth}}},
postaction={decorate}},
point/.style={node distance=2cm, inner sep=0pt, fill=black, circle}]
\node[point] (p1) {.} ;
\node[point, left of=p1, yshift=-1.4cm](p2){.};
\node[point, below of = p1] (p3) {.};
\node[point, right of=p1, yshift=-1.4cm](p4){.};
\node[point, below of = p3, yshift=0.7cm](p5){.};
\node[point, below of = p5, yshift=0.4cm](p7){.};
\node[point,left of=p7, xshift=0.3cm] (p6) {.};
\node[point, right of=p7, xshift=-0.3cm] (p8) {.};
\node[point, below of = p7, yshift=0.7cm](p9){.};
\def\myadjmat{%
{0,1,1,1,0,1,0,1,0},
{0,0,0,0,1,1,1,0,1},
{0,1,0,1,1,1,0,1,1},
{0,0,0,0,1,0,1,1,1},
{0,0,0,0,0,1,0,1,0},
}
\foreach \x[count=\xi] in \myadjmat{
\foreach \y[count=\yi] in \x{
\ifnum1=\y\relax\draw[mdar] (p\xi) -- (p\yi);\fi
}
}
\end{tikzpicture}
\end{document}
Ich habe mich nach dem fünften gelangweilt, aber Sie verstehen, was ich meine. Lassen Sie die \usetikzlibrary{...}
Befehle auch nicht im Bild. Tragen Sie sie stattdessen in Ihre Präambel ein. Schließlich könnten Sie erwägen, den \tikzstyle
Befehl zu überspringen, da er gemäßSollten \tikzset oder \tikzstyle zum Definieren von TikZ-Stilen verwendet werden?
Antwort2
Hier ist ein Beispiel mit dem Graphen-Zeichnungsmaterial. Die Knotenpositionierung ist nicht erstaunlich, kann aber ziemlich einfach geändert werden. Sie kann „wie üblich“ mit pdflatex
(oder xelatex
, oder latex -> dvipdfm
, usw.) eingehalten werden.
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{graphs,decorations.markings}
\tikzgraphsset{on edge arrow/.style={/tikz/every edge/.append style={
-, draw, postaction={
decoration={markings, mark=at position \arrowpos with {\arrow{stealth}}},
decorate}}}, > pos/.store in=\arrowpos, > pos=0.5}
\begin{document}
\begin{tikzpicture}[x=0.75cm,y=0.75cm]
\foreach \p [count=\i] in {(0,0),(-2,-1),(0,-1.75),(2,-1),(0,-3),
(-1.5,-4.5),(0,-4.5),(1.5,-4.5),(0,-6.25)}
\node [shape=circle, inner sep=0, minimum size=2,fill] (\i) at \p {};
\graph [use existing nodes, on edge arrow]{
1 -> {2, 3, 4};
2 -> {5 -> {6, 7, 8}, 6, 7 -> 9};
3 -> {2, 4 -> {5, 7, 8}, 5};
1 ->[> pos=.45] {6, 8};
3 ->[> pos=.45] {6, 8};
{2, 4} ->[> pos=0.66] 9;
};
\end{tikzpicture}
\end{document}
Antwort3
Da Ihre Pfeile kein regelmäßiges Muster haben, ist es schwierig, einen wirklich prägnanten Code zu schreiben, da es keine wirkliche Regel gibt, die bestimmt, wohin die Pfeile gehen sollen usw. Dies ist also ein etwas längerer Code, als ich schreiben wollte, aber er ist immer noch ziemlich kurz.
Ausgabe
Code
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings, arrows}
\tikzset{
%mdar/.style={very thin,decoration={markings, mark=at position 0.45 with {\arrow{stealth reversed}}}, postaction={decorate}},
mdad/.style={very thin,decoration={markings, mark=at position 0.45 with {\arrow[scale=.8]{stealth}}}, postaction={decorate}},
point/.style={inner sep=.5pt, fill=black, circle}
}
\begin{document}
\begin{tikzpicture}
% Nodes
\foreach \points [count=\xi] in {
(0,0),
(-1,1),(0,1),(1,1),
(0,2),
(-1.2,3.3),(0,3),(1.2,3.3),
(0,4)}{
\node[point] (p\xi) at \points {};
}
% Arrows
\foreach \name/\dest in {%
2/{1},
3/{1,2,4},
4/{1},
5/{2,3,4},
6/{1,2,3,5},
7/{2,4,5,6,8},
8/{1,3,4,5},
9/{2,4,6,7,8},
}{%
\foreach \ppp in \dest{
\draw[very thin, mdad] (p\name) -- (p\ppp);
}
}
\end{tikzpicture}
\end{document}