右向きの矢印と xshift および y shift を持つテーブル内の tikz

右向きの矢印と xshift および y shift を持つテーブル内の tikz

画像の下にあるように、次のコードがあります。現在の出力は、下の最初の画像のようになります。

現在の出力

出力を下の画像のように、中央に青と赤の矢印が表示されるようにしたいのですが、矢印の色と配置を変更することができないようです。
必要な出力

コードは以下の通りです。誰か助けてくれませんか?

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

答え1

を使用する代わりに、tikz 内で\tikzmarkを使用します。エントリを表形式の環境内に描画するため、 を使用するように変更すると、実際にコードが簡素化されます。matrix of math nodes\matrixmatrix of math nodes

出力とコードを示し、その仕組みを説明します。まず、出力です。

ここに画像の説明を入力してください

次のコード:

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

さて、説明です。

この \matrix (M)コマンドは、 で指定された座標を持つ行列を設定します。(M-<row>-<col>)ここで<row>、 と<col>は行インデックスと列インデックスです。 と書くと\matrix (mat)、座標は として参照されます(mat-<row>-<col>)

次に、、、などを使用して、ノード指定が参照するマトリックス セルの部分を調整できますnorthsouthたとえばwestnorth westは行(M-4-3.west)4、列 3 のノードの西端を参照します。これでほぼすべてが明確になったと思います。

では、matrix of math nodesを設定しましたrow sep=0mm,column sep=0mm, nodes=draw, minimum size=12mm。これはグリッドを描くためのものです。行と列の間に隙間はなく、各ノードの周りには四角形が描かれ、 の最小セルサイズは12mOP のセルの内容に合うように選択されます。個人的には、グリッドは描きません (のドキュメントブックタブパッケージには、表で縦線を避けるべき理由が説明されていますが、それが質問で求められていたものだったので...

レイアウトをMWEと同じにしたい場合、私のコードにある正方形のセルではなく長方形のセルにしたい場合は、 をminimum size=12mmに変更しますminimum width=12mm。これがどのように見えるかを示し、ノードの仕様をさらに強調するには、描画ステートメントを に変更します。

    \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);

それからminimum size=12mmあなたは

ここに画像の説明を入力してください

編集(コメント欄の質問に答えます)

列に網掛けをするには、マトリックス オプションに次のコードevery odd columnとスタイルを追加するだけで十分です。every even column

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

これらを配置すると、図は次のようになります。

ここに画像の説明を入力してください

あなたが見ている「二重」線は、レンダリングエラーであり、おそらくブラウザに依存しており、印刷時には表示されない可能性があります(わかりません、確認していません)。上の画像では、非常にこのために行と列の区切りを次のように変更します。

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

関連情報