tikz in Tabelle mit rechtsfarbigen Pfeilen und x-shift und y-shift

tikz in Tabelle mit rechtsfarbigen Pfeilen und x-shift und y-shift

Ich habe den folgenden Code, wie unter den Bildern zu sehen ist. Die Ausgabe, die ich jetzt habe, ist wie das erste Bild unten.

aktueller Output

Ich möchte, dass die Ausgabe wie im Bild unten aussieht, mit blauen und roten Pfeilen in der Mitte. Ich schaffe es nicht, die Farben und die Platzierung der Pfeile zu ändern.
erforderliche Leistung

Der Code steht weiter unten. Kann mir jemand helfen?

\begin{tabular}{|r|r|r|r|r|r|}
\hline
V   & M   & V   & M   & V   & M   \\ \hline
6   & 4  & NaN & NaN & NaN & NaN \\ \hline
7   & 3   & 5   & 5 \tikzmark{f}   & NaN & NaN \\ \hline
NaN & NaN & 8   & \tikzmark{d}{2} \tikzmark{e}  & \tikzmark{c}{4}   &     \tikzmark{b}{6}   \\ \hline
NaN & NaN & NaN & NaN & 10  & \tikzmark{a}{0}   \\ \hline
\end{tabular}
\begin{tikzpicture}[overlay, remember picture, shorten >=.5pt, shorten <=.5pt]
\draw [->] ({pic cs:a}) [line width=0.35mm, yshift=-1] to ({pic cs:b});
\draw [->] ({pic cs:c}) [line width=0.35mm, yshift=-1] to ({pic cs:d});
\draw [->] ({pic cs:e}) [line width=0.35mm, yshift=-1] to ({pic cs:f});
\end{tikzpicture}

Antwort1

Anstatt zu verwenden, würde ich ein innerhalb eines tikz \tikzmarkverwenden . Da Sie Ihre Einträge in einer tabellarischen Umgebung zeichnen, vereinfacht die Änderung zur Verwendung von tatsächlich den Code.matrix of math nodes\matrixmatrix of math nodes

Ich werde die Ausgabe und den Code angeben und dann erklären, wie es funktioniert. Zuerst die Ausgabe:

Bildbeschreibung hier eingeben

Als nächstes der Code:

\documentclass[border=5mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

  \begin{tikzpicture}[>=stealth,->,shorten >=2pt,looseness=.5,auto]
    \matrix (M)[matrix of math nodes,row sep=0mm,column sep=0mm,
                nodes=draw, minimum size=12mm]{
        V   & M   & V   & M   & V   & M   \\
        6   & 4   & NaN & NaN & NaN & NaN \\
        7   & 3   & 5   & 5   & NaN & NaN \\
        NaN & NaN & 8   & 2   &  4  &  6  \\
        NaN & NaN & NaN & NaN & 10  &  0  \\
     };
    \draw[ultra thick,blue,->] (M-5-6.west) -- (M-4-6.west);
    \draw[ultra thick,red,->]  (M-5-5.north) -- (M-5-4.north);
    \draw[ultra thick,blue,->] (M-4-4.west) -- (M-3-4.west);
    \draw[ultra thick,red,->]  (M-4-3.north) -- (M-4-2.north);
    \draw[ultra thick,blue,->] (M-3-2.west) -- (M-2-2.west);
  \end{tikzpicture}

\end{document}

Nun die Erklärung:

Der \matrix (M)Befehl erstellt eine Matrix mit Koordinaten, die durch angegeben werden (M-<row>-<col>), wobei <row>und <col>die Zeilen- und Spaltenindizes sind. Wenn Sie stattdessen \matrix (mat)dann schreiben würden, würden Sie die Koordinaten als bezeichnen (mat-<row>-<col>).

Als nächstes können Sie mit north, south, west, north westusw. einstellen, auf welchen Teil der Matrixzelle sich die Knotenangabe bezieht. Beispielsweise (M-4-3.west)bezieht sich auf den westlichen Rand des Knotens in Zeile 4 und Spalte 3. Jetzt sollte hoffentlich fast alles klar sein!

Im matrix of math nodeshabe ich eingestellt row sep=0mm,column sep=0mm, nodes=draw, minimum size=12mm. Dies dient zum Zeichnen Ihres Rasters: Es gibt keine Lücken zwischen den Zeilen und Spalten, jeder Knoten sollte ein Rechteck um sich herum haben und die minimale Zellengröße von 12mwurde so gewählt, dass sie zum Inhalt der Zellen des OP passt. Persönlich würde ich das Raster nicht zeichnen (die Dokumentation desBuchtabsPaket erklärt, warum Sie vertikale Linien in Tabellen vermeiden sollten), aber es war das, wonach in der Frage gefragt wurde, also....

Wenn Sie möchten, dass das Layout dasselbe ist wie in Ihrem MWE, mit rechteckigen Zellen anstelle der quadratischen Zellen in meinem Code, ändern Sie das minimum size=12mmin minimum width=12mm. Um zu zeigen, wie das aussieht, und um die Knotenspezifikationen weiter hervorzuheben, ändern Sie die Zeichenanweisungen in

    \draw[ultra thick,blue,->] (M-5-6.south west) -- (M-4-6.south west);
    \draw[ultra thick,red,->]  (M-5-5.north east) -- (M-5-4.north west);
    \draw[ultra thick,blue,->] (M-4-4.south west) -- (M-3-4.south west);
    \draw[ultra thick,red,->]  (M-4-3.north east) -- (M-4-2.north west);
    \draw[ultra thick,blue,->] (M-3-2.south west) -- (M-2-2.south west);

dann mit minimum size=12mmdir bekommen

Bildbeschreibung hier eingeben

BEARBEITEN(Beantwortung von Fragen in den Kommentaren)

Um die Spalten zu schattieren, genügt es, den Matrixoptionen Folgendes every odd columnund folgende Stile hinzuzufügen:every even column

every odd column/.style={nodes={fill=pink}},
every even column/.style={nodes={fill=blue!20!white}},

Wenn diese vorhanden sind, wird Ihr Bild:

Bildbeschreibung hier eingeben

Die "doppelten" Linien, die Sie sehen, sind meiner Meinung nach Darstellungsfehler und wahrscheinlich browserabhängig und erscheinen möglicherweise nicht beim Drucken (ich weiß es nicht, ich habe es nicht überprüft). Für das Bild oben habe ich sie sehr schnell eliminiert.ad hocWeise, indem Sie die Zeilen- und Spaltenabstände wie folgt ändern:

row sep=-0.1mm,column sep=-0.1mm

verwandte Informationen