
Preciso adicionar linhas ou setas para mostrar a expansão das possibilidades à medida que o espaço do problema se expande. Por exemplo, estou tentando produzir algo assim (com as linhas adicionadas manualmente):
Posso encontrar exemplos para adicionar setas no topo de uma equaçãoComo desenhar setas entre partes de uma equação para mostrar a propriedade distributiva matemática (multiplicação)?e comecei criando o layout que desejo usando um bloco de alinhamento (mostrado abaixo) e estou tentando unir as seções com setas, conforme mostrado na pergunta vinculada, mas ainda não produzi nada útil.
\begin{align*}
&&&&(1, 1, 0, 0)&\\
&&(1, 0, 0, 0)&&(1,0,1,0)&\\
0&&(0, 1, 0, 0)&&(1,0,0,1)&\\
&&(0, 0, 1, 0)&&&\\
&&(0, 0, 0, 1)&&&
\end{align*}
Isso parece um tanto grosseiro, alguém pode me ajudar a completar o que comecei ou sugerir uma maneira mais elegante (talvez usando uma tabela para armazenar as opções e depois vincular as células)?
Responder1
Uma maneira simples de alcançar o resultado é usar a construção da árvore TikZ:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[grow=right, sibling distance=20pt,level distance=2.65cm,
edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}]
\node {0}
child {node {(0, 0, 0, 1)}}
child {node {(0, 0, 1, 0)}}
child {node {(0, 1, 0, 0)}}
child {node {(1, 0, 0, 0)}
child {node {(1, 0, 0, 1)}}
child {node {(1, 0, 1, 0)}}
child {node {(1, 1, 0, 0)}}
};
\end{tikzpicture}
\end{document}
dá:
Onde:
grow=right
significa que a árvore cresce na direção certa;sibling distance=20pt
significa que a distância entre as crianças é20pt
(altere para aumentar ou diminuir esta distância);level distance=2.65cm
representa a distância dos diferentes níveis;edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}
redefine o caminho dos nós pais aos nós filhos (para ser uma linha reta); se você não usar esta construção, o caminho não será perfeito porque algumas conexões não apontam para a esquerda dos nós, mas para o centro deles.
Para ter uma conexão com as setas finais, basta alterar:
edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}
com:
edge from parent path={[-stealth](\tikzparentnode.east) -- (\tikzchildnode.west)}
Ao usar a \tikzmark
macro como resposta vinculada, pode-se proceder da seguinte forma:
- definição macro:
% ver como referência: %uso da matriz tikzpicture no ambiente de alinhamento ou coleta \def\vertalignmath{\o\dimexpr\fontdimen22\textfont2\relax} \newcommand{\tikzmark}1{% \tikz[lembrar imagem,sobreposição,linha de base=-\vertalignmath] \node [coordenada] (#1){}; }
o uso\vertalignmath
é ter uma configuração vertical correta; - uso de macro dentro do
align
bloco:\begin{alinhar*} &&&&\tikzmark{d1}(1, 1, 0, 0)&\&&\tikzmark{b1}(1, 0, 0, 0)\tikzmark{c}&&\tikzmark{d2}(1,0,1, 0)&\0\tikzmark{a}&&\tikzmark{b2}(0, 1, 0, 0)&&\tikzmark{d3}(1,0,0,1)&\&&\tikzmark{b3}(0 , 0, 1, 0)&&&\&&\tikzmark{b4}(0, 0, 0, 1)&&& \end{alinhar*}
os marcadores são colocados antes e depois dos elementos: é importante dar nomes únicos; - crie as conexões; outra macro
\connect
é definida:\newcommand{\conectar}1{% \tikz[lembrar imagem,sobreposição,linha de base=-\vertalignmath]{ \foreach \start/\end in {#1}{ \drawshorten <=2pt,encurtar >=2pt--(\end); } } }
e então usado:\conectar{a/b1,a/b2,a/b3,a/b4, c/d1,c/d2,c/d3}
para conectar da maneira certa os marcadores.
O código completo:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
% see as reference:
% https://tex.stackexchange.com/questions/59658/use-of-tikzpicture-matrix-in-align-or-gather-environment#comment126261_59660
\def\vertalignmath{\the\dimexpr\fontdimen22\textfont2\relax}
\newcommand{\tikzmark}[1]{%
\tikz[remember picture,overlay,baseline=-\vertalignmath]\node[coordinate](#1){};
}
\newcommand{\connect}[1]{%
\tikz[remember picture,overlay,baseline=-\vertalignmath]{
\foreach \start/\end in {#1}{
\draw[shorten <=2pt,shorten >=2pt](\start)--(\end);
}
}
}
\begin{document}
\begin{align*}
&&&&\tikzmark{d1}(1, 1, 0, 0)&\\
&&\tikzmark{b1}(1, 0, 0, 0)\tikzmark{c}&&\tikzmark{d2}(1,0,1,0)&\\
0\tikzmark{a}&&\tikzmark{b2}(0, 1, 0, 0)&&\tikzmark{d3}(1,0,0,1)&\\
&&\tikzmark{b3}(0, 0, 1, 0)&&&\\
&&\tikzmark{b4}(0, 0, 0, 1)&&&
\end{align*}
\connect{a/b1,a/b2,a/b3,a/b4,
c/d1,c/d2,c/d3}
\end{document}
O resultado, após pelo menos duas execuções de compilação, é:
Para ter setas, a \connect
macro pode ser transformada em:
\newcommand{\connect}[2][-]{%
\tikz[remember picture,overlay,baseline=-\vertalignmath]{
\foreach \start/\end in {#2}{
\draw[#1,shorten <=2pt,shorten >=2pt](\start)--(\end);
}
}
}
Então o uso de:
\connect[-stealth]{a/b1,a/b2,a/b3,a/b4,
c/d1,c/d2,c/d3}
gerará: