Exibindo [], |, etc. em um nó da matriz TikZ

Exibindo [], |, etc. em um nó da matriz TikZ

Eu gostaria de compor uma sequência espectral usando TikZ, conforme sugerido emesta postagem, mas as entradas da minha sequência espectral contêm colchetes e linhas verticais, por exemplo, [x|...|x]. Se eu digitá-los ingenuamente, todo o nó aparecerá em branco. Como posso contornar esse problema?

O código que estou usando é o seguinte

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

Ele retorna um erro ao tentar compilar a linha incluindo "|1|", mas não parece se incomodar com o "[x]", mas nenhum aparece na saída.

Responder1

Ao usar a chave matrix of math nodes(ou matrix of nodes), o TikZ pretende interpretar tudo entre o e comercial como o conteúdo de um nó. No entanto, nós (os usuários) geralmente desejamos modificar o estilo desses nós caso a caso. No uso normal, isso é feito através dos parâmetros do \nodecomando. Além disso, gostamos de modificar um pouco a forma como a matriz organiza seus nós. Então o que o TikZ faz é nos permitir especificar essas coisas usando uma sintaxe especial que deve ocorrer primeiro na célula. Coisas em linhas verticais são adicionadas entre o \nodecomando e seu conteúdo. Portanto, você pode desenhar um nó específico escrevendo |[draw]|e nomeá-lo explicitamente escrevendo |(name)|. Além disso, o e comercial é na verdade um comando que pode receber um argumento opcional e isso se traduz em um espaçamento extra entre as linhas (se fornecido na primeira linha).

Portanto, seus colchetes estão sendo consumidos como saltos de linha (e depois ignorados, pois não estão na primeira linha) e suas linhas verticais estão entrando na maquinaria do comando do nó. Para proteger cada um, você precisa garantir que o primeiro caractere da célula não seja especial. Coloque todo o conteúdo entre colchetes ou apenas coloque um {}na frente.

Aqui estão as duas versões:

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

Aliás, você poderia usar execute at empty cell={\node {0};}para evitar digitar todos aqueles zeros:

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

Sequência Espectral

informação relacionada