TikZ 매트릭스 노드에 [ ], | 등 표시

TikZ 매트릭스 노드에 [ ], | 등 표시

제안된 대로 TikZ를 사용하여 스펙트럼 시퀀스를 조판하고 싶습니다.이 게시물, 그러나 내 스펙트럼 시퀀스 항목에는 대괄호와 수직선이 포함되어 있습니다(예: [x|...|x]). 순진하게 입력하면 전체 노드가 공백으로 나타납니다. 이 문제를 어떻게 피할 수 있습니까?

내가 사용하는 코드는 다음과 같습니다

\documentclass[a4paper,12pt]{article} 
\usepackage{tikz} 
\usetikzlibrary{matrix} 

\begin{document}
\begin{tikzpicture}
  \matrix (m) [matrix of math nodes,
    nodes in empty cells,nodes={minimum width=5ex,
    minimum height=5ex,outer sep=-5pt},
    column sep=1ex,row sep=1ex]{
          0     &   0  &  0  &  \vdots  & \\
          0     &  [x] &  0  &  k   & \\
          0     &   0  &  0  &  \vdots  & \\
          0     &   0  &  0  & |1| & \\
          0     &   0  & []  &  0  & \\
          -2    &  -1  &  0  &     & \\};
\end{tikzpicture}
\end{document}

"|1|"을 포함하는 줄을 컴파일하려고 하면 오류가 반환되지만 "[x]"에는 문제가 없는 것 같지만 출력에는 아무 것도 표시되지 않습니다.

답변1

matrix of math nodes(또는 matrix of nodes)를 사용할 때 TikZ는 앰퍼샌드 사이의 모든 것을 노드의 내용으로 해석하려고 합니다. 그러나 우리(사용자)는 사례별로 해당 노드의 스타일을 수정할 수 있는 기능을 원하는 경우가 많습니다. 일반적인 사용법에서는 \node명령에 대한 매개변수를 통해 이 작업이 수행됩니다. 또한 행렬이 노드를 배치하는 방식을 약간 수정하고 싶습니다. 따라서 TikZ가 수행하는 작업은 셀에서 먼저 발생해야 하는 특수 구문을 사용하여 이러한 항목을 지정할 수 있도록 하는 것입니다. \node명령과 내용 사이에 수직선으로 된 내용이 추가됩니다 . 따라서 를 써서 특정 노드를 그릴 수 |[draw]|있고 를 써서 명시적으로 이름을 지정할 수 있습니다 |(name)|. 또한 앰퍼샌드는 실제로 선택적 인수를 취할 수 있는 명령이며 이는 행 사이의 추가 간격으로 변환됩니다(첫 번째 행에 제공된 경우).

따라서 대괄호는 행 건너뛰기로 소모되고(첫 번째 행에 없기 때문에 무시됩니다) 수직선이 node 명령의 기계에 들어가게 됩니다. 각각을 보호하려면 셀의 첫 번째 문자가 특별하지 않은지 확인해야 합니다. 전체 내용을 중괄호로 묶거나 앞에만 넣으세요 {}.

두 버전은 다음과 같습니다.

\documentclass[a4paper,12pt]{article} 
%\url{http://tex.stackexchange.com/q/68600/86}
\usepackage{tikz} 
\usetikzlibrary{matrix} 

\begin{document}
\begin{tikzpicture}
  \matrix (m) [matrix of math nodes,
    nodes in empty cells,nodes={minimum width=5ex,
    minimum height=5ex,outer sep=-5pt},
    column sep=1ex,row sep=1ex]{
          0     &   0  &  0  &  \vdots  & \\
          0     &  {[x]} &  0  &  k   & \\
          0     &   0  &  0  &  \vdots  & \\
          0     &   0  &  0  & {}|1| & \\
          0     &   0  & {}[]  &  0  & \\
          -2    &  -1  &  0  &     & \\};
\end{tikzpicture}
\end{document}

덧붙여서 다음을 사용 execute at empty cell={\node {0};}하면 0을 모두 입력하지 않아도 됩니다.

\documentclass[a4paper,12pt]{article} 
%\url{http://tex.stackexchange.com/q/68600/86}
\usepackage{tikz} 
\usetikzlibrary{matrix} 

\begin{document}
\begin{tikzpicture}
  \matrix (m) [matrix of math nodes,
    execute at empty cell={\node {0};},nodes={minimum width=5ex,
    minimum height=5ex,outer sep=-5pt},
    column sep=1ex,row sep=1ex]{
    &  &  &  \vdots   \\
    &  {[x]} &  &  k  \\
    &   &  &  \vdots  \\
    &   &  & {}|1|  \\
    &   & {}[]  &   \\
  -2    &  -1  & & {} \\};
\end{tikzpicture}
\end{document}

스펙트럼 시퀀스

관련 정보