Remover margem esquerda/direita de uma matriz TiKZ

Remover margem esquerda/direita de uma matriz TiKZ

Considere o MWE abaixo. Isso produz uma matriz com 2 linhas sobrepostas (é isso que eu quero), no entanto, também cria espaços em branco extras nos lados esquerdo e direito (que deixei em vermelho na imagem abaixo).

Como faço para remover esse espaço em branco 'vermelho' esquerdo/direito com alteração mínima do MWE? Então, como obter o mesmo comportamento esquerda/direita e superior/inferior?

insira a descrição da imagem aqui

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}

Responder1

O problema não é a imagem do tikz, o que é bom, mas sim a \fbox{}que inclui espaços ao redor da imagem do tikz. Ver:

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

A nova linha após \fbox{é traduzida para TeX em um espaço. O mesmo acontece com a nova linha depois de \end{tikzpicture}. Para evitar isso, você deve "comentar" essas novas linhas, assim:

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

Observe que, dentro da imagem do tikz, esse tipo de truque não é necessário, porque o analisador do tikz ignora todas as novas linhas, portanto, a maior parte do que %você tinha no final de várias linhas não é necessária.

Acho que você deseja, draw=noneem vez draw=blackdos quadrados pretos, evitar o desalinhamento com as caixas cinzas, o que considero não intencional). Além disso, como o fbox é apertado, não há razão para isso \centering. Documento final:

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

Resultado:

Resultado

Responder2

Neste caso particular, a \fboxé excedente. A mesma borda ao redor matrixvocê pode obter com a opção drawem 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}

insira a descrição da imagem aqui

informação relacionada