
Рассмотрим 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}