我想使用 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}