Отображение [ ], | и т.д. в узле матрицы 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)|. Кроме того, амперсанд на самом деле является командой, которая может принимать необязательный аргумент, и это преобразуется в дополнительный интервал между строками (если задано в первой строке).

Итак, ваши квадратные скобки поглощаются как пропуски строк (и затем игнорируются, поскольку они не находятся в первой строке), а ваши вертикальные линии попадают в механизм команды узла. Чтобы защитить каждую из них, вам нужно убедиться, что первый символ ячейки не является специальным. Либо заключите все содержимое в фигурные скобки, либо просто поставьте a {}в начале.

Вот обе версии:

\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};}Кстати, чтобы не вводить все эти нули, можно использовать :

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

Спектральная последовательность

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