TiKZマトリックスの左/右余白を削除する

TiKZマトリックスの左/右余白を削除する

以下の MWE について考えてみましょう。これにより、2 つの行が重なり合ったマトリックスが生成されます (これが私の目的です)。ただし、左側と右側に余分な空白も作成されます (以下のスクリーンショットでは赤く表示しています)。

MWE の変更を最小限に抑えながら、この左/右の「赤い」空白を削除するにはどうすればよいでしょうか。では、上/下と同じ動作を左/右で実現するにはどうすればよいでしょうか。

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

ムウェ

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\setlength{\fboxsep}{0pt}
\fbox{
\centering
\begin{tikzpicture}[ampersand replacement=\&,%
grayspacer/.style={%
  draw=none,%
  fill=gray,%
  inner sep=0pt,%
  },%
matstyle/.style={%
  matrix of nodes,%
  nodes={%
    draw=black,%
    rectangle%
    ,minimum size=0.5cm,%
    fill=black%
    },%
  nodes in empty cells,%
  column sep=0.55cm,%
  row sep=-5pt,
  inner sep=0pt%
  },%
>=latex%
]%
\matrix[matstyle] (mat)
{
  \& |[grayspacer]|   \& |[grayspacer]| \& \\
 |[grayspacer] | \& \& \& |[grayspacer]| \\
};
 \end{tikzpicture}
}
\end{document}

答え1

問題は tikz 画像ではなく (問題ありません)、\fbox{}tikz 画像の周囲にスペースが含まれていることです。参照:

\fbox{
\centering
\begin{tikzpicture}% Omitted
 % ... Omitted
\end{tikzpicture}
}

の後の改行は、\fbox{TeX ではスペースに変換されます。 の後の改行でも同じことが起こります\end{tikzpicture}。これを回避するには、次のようにして、それらの改行を「コメント アウト」する必要があります。

\fbox{%
\centering
\begin{tikzpicture}% Omitted
 % ... Omitted
\end{tikzpicture}%
}

tikzpicture 内では、tikz パーサーがすべての改行を無視するため、このようなトリックは必要なく、%数行の末尾にあるほとんどのものは不要であることに注意してください。

draw=none灰色のボックスとのずれを避けるため、黒い四角の代わりにを使用する必要があると思いますdraw=black。これは意図的ではないと思います。また、fbox が狭いため、 を使用する理由はありません\centering。最終文書:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\setlength{\fboxsep}{0pt}
\fbox{%
\begin{tikzpicture}[ampersand replacement=\&, >=latex,
   grayspacer/.style={draw=none, fill=gray, inner sep=0pt,},
   matstyle/.style={ matrix of nodes,
     nodes={draw=none, rectangle, minimum size=0.5cm, fill=black},
     nodes in empty cells, column sep=0.55cm, row sep=-5pt,inner sep=0pt,
     },
   ]
  \matrix[matstyle, inner sep=0pt] (mat)
  {
     \& |[grayspacer]|   \& |[grayspacer]| \& \\
   |[grayspacer] | \& \& \& |[grayspacer]| \\
   };
\end{tikzpicture}%
}
\end{document}

結果:

結果

答え2

この特定のケースでは、a は余剰です。 のオプションを使用して、\fbox同じ境界を次のようにmatrix取得できます。drawmatstyle

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
    \begin{tikzpicture}[%ampersand replacement=\&, >=latex,
matstyle/.style = {matrix of nodes,draw,
                   nodes={draw=none, rectangle, minimum size=0.5cm, fill=black},
                   nodes in empty cells, 
                   column sep=0.5cm, row sep=0pt,
                   },
                        ]
\matrix[matstyle, inner sep=0pt] (mat)
{
            & |[gray]|  & |[gray]|  &          \\
|[gray]|    &           &           & |[gray]| \\
};
    \end{tikzpicture}
\end{document}

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

関連情報