
Eu sou relativamente novo em TikZ, e tenho hackeado figuras, pois preciso delas para tarefas universitárias de vários exemplos na internet.
Agora estou avançando para a pesquisa, estou tendo que escrever muito mais e produzir muito mais figuras complexas e pensei que provavelmente era hora de aprender como fazer as coisas corretamente.
Aqui está um exemplo dos tipos de figuras que desejo produzir:
Existem muitos nós e muitas conexões entre todos eles.
Eu sou capaz de reproduzir esta figura usando TikZ colocando individualmente cada nó e, em seguida, criando individualmente uma conexão para cada um; no entanto, isso consome muito tempo e há números ainda maiores que preciso criar com muito mais conexões, o que consumirá ainda mais tempo.
Eu queria saber quais seriam as maneiras mais inteligentes de produzir figuras grandes com muitos recursos, mas que são estruturalmente bastante simples (para usar um exemplo, uma grande matriz de nós com conexões indo de cada nó em uma coluna para cada nó na próxima coluna )?
Em algumas coisas tenho visto pessoas usarem uma matriz para posicionamento de nós, e também que é possível usar loops for e instruções if em TikZ também, porém a perspectiva de ter que se aprofundar e tentar entender toda a linguagem do TikO próprio Z é um pouco assustador em comparação com o outro trabalho que estou tentando fazer - então, se alguém souber de bons exemplos ou recursos que forneçam boas informações de alto nível sobre os tipos de técnicas que seriam úteis para meus propósitos, ou mesmo apenas algumas dicas sobre por onde começar, eu ficaria muito grato.
Responder1
Embora o uso de múltiplos \foreach
loops torne o layout "semântico" da rede um pouco confuso, certamente facilita sua criação. Tomei algumas liberdades com as conexões necessárias, caso contrário a rede começa a parecer um pouco confusa.
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{arrows.meta,calc}
\begin{document}
\begin{tikzpicture}[>=Triangle,
cell/.style={circle, draw},
connection/.style={shorten >=.125cm, shorten <=.125cm},
]
\foreach \i in {1,...,8}
\foreach \x [count=\j] in {1,2,5,6,7}
\node [cell] (cell-\i-\j) at (\x*1.5, \i) {};
\node [cell, draw=none, below=1cm] (cell') at ($(cell-1-4)!0.5!(cell-1-5)$) {};
\node [cell, draw=none, above=1cm] (cell'') at ($(cell-8-4)!0.5!(cell-8-5)$) {};
\foreach \i in {1,...,8}{
\foreach \j in {1,3} \draw [->] (cell-\i-\j)++(-1,0) -- (cell-\i-\j);
\foreach \j in {2,5} \draw [<-] (cell-\i-\j)++(1,0) -- (cell-\i-\j);
}
\foreach \m/\n/\o/\p in {1/4/1/2,5/8/1/2, 3/6/1/2, 1/4/3/4, 5/8/3/4, 3/6/4/5}
\foreach \i in {\m,...,\n}
\foreach \j in {\m,...,\n} \draw [connection] (cell-\i-\o) -- (cell-\j-\p);
\foreach \m/\n/\q in {1/2/', 7/8/''}
\foreach \i in {\m,\n}{
\draw [connection] (cell-\i-4) -- (cell-\i-5);
\foreach \j in {4,5} \draw [connection] (cell\q) -- (cell-\i-\j);
}
\coordinate (@') at ($(cell') +(5/4,-1/2)$);
\coordinate (@'') at ($(cell'')+(5/4, 1/2)$);
\draw [<->] (cell'.center) |- (@') -- (@'') -| (cell''.center);
\node [above left=.5cm] at (cell-8-1) {in};
\node [above right=.5cm] at (cell-8-2) {out};
\node [above left=.5cm] at (cell-8-3) {in};
\node [above right=.5cm] at (cell-8-5) {out};
\draw [Implies-Implies, double, thick, double distance=5pt,
shorten >=1.25cm, shorten <=1.25cm]
($(cell-4-2)!0.5!(cell-5-2)$) -- ($(cell-4-3)!0.5!(cell-5-3)$)
node [midway, above=1cm, font=\large] {?};
\end{tikzpicture}
\end{document}