TiKZ 매트릭스의 왼쪽/오른쪽 여백 제거

TiKZ 매트릭스의 왼쪽/오른쪽 여백 제거

아래 MWE를 고려하십시오. 이렇게 하면 2개의 겹치는 행(제가 원하는 것)이 있는 행렬이 생성되지만 왼쪽과 오른쪽에 추가 공백도 생성됩니다(아래 스크린샷에서 빨간색으로 표시).

MWE를 최소한으로 변경하면서 이 왼쪽/오른쪽 '빨간색' 공백을 어떻게 제거합니까? 그렇다면 위쪽/아래쪽과 동일한 동작을 왼쪽/오른쪽으로 가져오는 방법은 무엇입니까?

여기에 이미지 설명을 입력하세요

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

tikz 그림 내부에서는 이러한 종류의 트릭이 필요하지 않습니다. 왜냐하면 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}

여기에 이미지 설명을 입력하세요

관련 정보