Algum código mais curto para desenhar isso no tikz?

Algum código mais curto para desenhar isso no tikz?

Existem possíveis códigos mais curtos para desenhar este diagrama, talvez usando, graphsmas não é um polígono regular, ou encurtando o repetitivo \drawno meu código:

%% 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}

Saída: insira a descrição da imagem aqui

Responder1

Não sei muito sobre gráficos, então não tentarei usar as bibliotecas de gráficos, mas você pode renumerar seus nós de maneira mais significativa e, em seguida, fazer uma abordagem típica de matriz de adjacência.

\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}

insira a descrição da imagem aqui

Fiquei entediado depois do quinto, mas você entendeu. Também não deixe os \usetikzlibrary{...}comandos na imagem. Em vez disso, leve-os para o seu preâmbulo. Finalmente, você pode considerar pular o \tikzstylecomando, pois ele está obsoleto conformeDeve \tikzset ou \tikzstyle ser usado para definir estilos TikZ?

Responder2

Aqui está um exemplo com material de desenho gráfico. O posicionamento do nó não é surpreendente, mas pode ser alterado facilmente. Pode ser cumprido "como de costume" com pdflatex(ou xelatex, ou latex -> dvipdfm, etc).

\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}

insira a descrição da imagem aqui

Responder3

Como suas setas não têm um padrão regular, é difícil criar um código realmente conciso porque não existe uma regra real que governe para onde as setas devem ir e assim por diante. Portanto, este é um código um pouco mais longo do que eu queria escrever, mas ainda é bem curto.

Saída

insira a descrição da imagem aqui

Código

\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}

informação relacionada