
画像の下にあるように、次のコードがあります。現在の出力は、下の最初の画像のようになります。
出力を下の画像のように、中央に青と赤の矢印が表示されるようにしたいのですが、矢印の色と配置を変更することができないようです。
コードは以下の通りです。誰か助けてくれませんか?
\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
\matrix
matrix 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>)
。
次に、、、などを使用して、ノード指定が参照するマトリックス セルの部分を調整できますnorth
。south
たとえばwest
、north west
は行(M-4-3.west)
4、列 3 のノードの西端を参照します。これでほぼすべてが明確になったと思います。
では、matrix of math nodes
を設定しましたrow sep=0mm,column sep=0mm, nodes=draw, minimum size=12mm
。これはグリッドを描くためのものです。行と列の間に隙間はなく、各ノードの周りには四角形が描かれ、 の最小セルサイズは12m
OP のセルの内容に合うように選択されます。個人的には、グリッドは描きません (のドキュメントブックタブパッケージには、表で縦線を避けるべき理由が説明されていますが、それが質問で求められていたものだったので...
レイアウトを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