Удалить левое/правое поле матрицы 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вы можете получить с помощью опции drawв вашем matstyle:

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

введите описание изображения здесь

Связанный контент