
Necesito agregar líneas o flechas para mostrar la expansión de posibilidades a medida que se expande el espacio del problema. Por ejemplo, estoy intentando producir algo como esto (con las líneas agregadas a mano):
Puedo encontrar ejemplos para agregar flechas sobre la parte superior de una ecuación.¿Cómo dibujar flechas entre las partes de una ecuación para mostrar la propiedad distributiva matemática (multiplicación)?y comencé creando el diseño que quiero usando un bloque de alineación (que se muestra a continuación) y estoy tratando de unir las secciones con flechas como se muestra en la pregunta vinculada, pero todavía tengo que producir algo ú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*}
Esto parece un poco crudo, ¿alguien puede ayudarme a completar lo que comencé o sugerir una forma más elegante (tal vez usando una tabla para almacenar las opciones y luego vinculando las celdas)?
Respuesta1
Una forma sencilla de lograr el resultado es utilizar la construcción del árbol 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}
da:
Dónde:
grow=right
significa que el árbol crece en la dirección correcta;sibling distance=20pt
significa que la distancia entre niños es20pt
(cambie esto para aumentar o reducir esta distancia);level distance=2.65cm
representa la distancia de los diferentes niveles;edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}
redefine la ruta desde los nodos principales a los nodos secundarios (para que sea una línea recta); Si no utilizas esta construcción, el camino no es perfecto porque algunas de las conexiones no apuntan a la izquierda de los nodos, sino a su centro.
Para tener una conexión con flechas finales, solo debes cambiar:
edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}
con:
edge from parent path={[-stealth](\tikzparentnode.east) -- (\tikzchildnode.west)}
Al utilizar la \tikzmark
macro como respuesta que vinculó, se podría proceder de la siguiente manera:
- definición de macro:
% ver como referencia: %uso de la matriz tikzpicture en el entorno de alineación o recopilación \def\vertalignmath{\the\dimexpr\fontdimen22\textfont2\relax} \newcommand{\tikzmark}1{% \tikz[recordar imagen,superposición,baseline=-\vertalignmath] \node [coordenada] (#1){}; }
el uso de\vertalignmath
es para tener una correcta configuración vertical; - uso de macros dentro del
align
bloque:\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*}
los marcadores se colocan antes y después de los elementos: es importante dar nombres únicos; - crear las conexiones;
\connect
se define otra macro :\newcommand{\conectar}1{% \tikz[recordar imagen,overlay,baseline=-\vertalignmath]{ \foreach \start/\end en {#1}{ \drawshorten <=2pt,shorten >=2pt--(\end); } } }
y luego usado:\conectar{a/b1,a/b2,a/b3,a/b4, c/d1,c/d2,c/d3}
para conectar de la manera correcta los marcadores.
El 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}
El resultado, después de al menos dos ejecuciones de compilación, es:
Para tener flechas, la \connect
macro se puede cambiar a:
\newcommand{\connect}[2][-]{%
\tikz[remember picture,overlay,baseline=-\vertalignmath]{
\foreach \start/\end in {#2}{
\draw[#1,shorten <=2pt,shorten >=2pt](\start)--(\end);
}
}
}
Entonces el uso de:
\connect[-stealth]{a/b1,a/b2,a/b3,a/b4,
c/d1,c/d2,c/d3}
generará: