我想使用 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)|
。此外,& 符号实际上是一个可以接受可选参数的命令,这会转换为行之间的额外间距(如果在第一行给出)。
因此,方括号会被当作跨行元素(然后被忽略,因为它们不在第一行),并且垂直线会进入节点命令的机制。为了保护每个元素,您需要确保单元格的第一个字符不是特殊字符。要么将整个内容括在括号中,要么只{}
在前面放一个。
以下是两个版本:
\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}