Verbinden von Gleichungsteilen mit Linien oder Pfeilen

Verbinden von Gleichungsteilen mit Linien oder Pfeilen

Ich muss Linien oder Pfeile hinzufügen, um die Erweiterung der Möglichkeiten bei der Erweiterung eines Problemraums anzuzeigen. Ich versuche beispielsweise, so etwas zu erstellen (mit den von Hand hinzugefügten Linien):

Beispiel für Gleichungslinien

Ich kann Beispiele für das Hinzufügen von Pfeilen über einer Gleichung findenWie zeichnet man Pfeile zwischen Teilen einer Gleichung, um das mathematische Distributivgesetz (Multiplikation) darzustellen?und ich habe mit der Erstellung des gewünschten Layouts mithilfe eines Ausrichtungsblocks (siehe unten) begonnen und versuche, die Abschnitte mit Pfeilen zu verbinden, wie in der verlinkten Frage gezeigt, aber ich habe bisher nichts Brauchbares produziert.

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

Das kommt mir etwas grob vor. Kann mir jemand helfen, das, was ich begonnen habe, zu Ende zu bringen, oder einen eleganteren Weg vorschlagen (vielleicht eine Tabelle zum Speichern der Optionen verwenden und dann die Zellen verknüpfen)?

Antwort1

Eine einfache Möglichkeit, das Ergebnis zu erreichen, ist die Verwendung der TikZ-Baumkonstruktion:

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

gibt:

Bildbeschreibung hier eingeben

Wo:

  • grow=rightbedeutet, dass der Baum in die richtige Richtung wächst;
  • sibling distance=20ptbedeutet, dass der Abstand zwischen den Kindern beträgt 20pt(ändern Sie dies, um diesen Abstand zu vergrößern oder zu verringern);
  • level distance=2.65cmstellt den Abstand der verschiedenen Ebenen dar;
  • edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}definiert den Pfad von den übergeordneten Knoten zu den untergeordneten Knoten neu (als gerade Linie); wenn Sie diese Konstruktion nicht verwenden, ist der Pfad nicht perfekt, da einige der Verbindungen nicht nach links von den Knoten, sondern zu deren Mitte zeigen.

Um eine Verbindung mit den Endpfeilen herzustellen, müssen Sie lediglich Folgendes ändern:

edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}

mit:

edge from parent path={[-stealth](\tikzparentnode.east) -- (\tikzchildnode.west)}

Wenn Sie das \tikzmarkMakro als Antwort verwenden, auf das Sie verlinkt haben, können Sie wie folgt vorgehen:

  1. Makrodefinition:
    % siehe als Referenz:
    %Verwendung der Tikzpicture-Matrix in der Align- oder Gather-Umgebung
    \def\vertalignmath{\the\dimexpr\fontdimen22\textfont2\relax}
    \newcommand{\tikzmark}1{%
    \tikz[Bild merken, Overlay, Baseline=-\vertalignmath] \node [Koordinate] (#1){};
    }
    
    der Zweck \vertalignmathbesteht darin, eine korrekte vertikale Einstellung zu erreichen;
  2. Makroverwendung innerhalb des alignBlocks:
    \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*}
    
    die Markierungen werden vor und nach den Elementen platziert: es ist wichtig, eindeutige Namen zu vergeben;
  3. Um die Verbindungen herzustellen, \connectwird ein weiteres Makro definiert:
    \newcommand{\connect}1{%
    \tikz[Bild merken,Overlay,Baseline=-\vertalignmath]{
    \foreach \start/\end in {#1}{
      \drawshorten <=2pt,shorten >=2pt--(\end);
    }
    }
    }
    
    und dann verwendet:
    \verbinde{a/b1,a/b2,a/b3,a/b4,
    c/d1,c/d2,c/d3}
    
    um die Markierungen richtig zu verbinden.

Der vollständige Code:

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

Das Ergebnis nach mindestens zwei Kompilierungsdurchläufen ist:

Bildbeschreibung hier eingeben

Um Pfeile zu erhalten, \connectkann das Makro wie folgt geändert werden:

\newcommand{\connect}[2][-]{%
  \tikz[remember picture,overlay,baseline=-\vertalignmath]{
    \foreach \start/\end in {#2}{
      \draw[#1,shorten <=2pt,shorten >=2pt](\start)--(\end);
    }
  }
}

Dann die Verwendung von:

\connect[-stealth]{a/b1,a/b2,a/b3,a/b4,
c/d1,c/d2,c/d3} 

wird erzeugt:

Bildbeschreibung hier eingeben

verwandte Informationen