我有一张包含矩阵的 Tikz 图片。我想将标题文本居中并突出显示某些特定单元格。重要的是它是一个矩阵而不是表格。
我尝试了以下方法:
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows,shapes,snakes,automata,backgrounds,petri, fit,positioning,matrix}
\begin{document}
\tikzset{
state/.style={
%draw=black,
nodes={
%text width=width(":pi2"),
align=left,
anchor=west
},
inner sep=2pt,
matrix of nodes,
},
row 1/.style = {nodes={anchor=base }}
}
\tikzset{highlight/.style args = {(#1,#2)}{row #1 column #2/.style={fill=red!50,minimum width=1cm}}}
\begin{tikzpicture}[]
\matrix[state,highlight/.list={(2,4),(3,4),(4,4)}] (IT)
{%
S & P & O & C \\ \hline
:book & :title & ``Dracula'' & :pi1 \\
:book & :author & :stoker & :pi1 \\
:stoker & :name & ``Bram Stoker'' & :pi2 \\
};
\end{tikzpicture}
\end{document}
第一个问题是矩阵中的标题未居中?其他单元格设置为anchor=west
,标题为anchor=base
,但是,这并没有达到预期的效果。
我找到了一个 Tikz 指南,其中展示了如何制作接收参数的 Tikz 样式,但与我的其他样式结合使用时不起作用。我如何既能设置矩阵样式,又能突出显示某些单元格?硬编码突出显示不失为一个好选择,因为state
具有不同突出显示的其他矩阵也使用了该样式。
干杯
答案1
有些地方你遗漏了nodes
。除此之外,请注意,列宽不一定是其中节点的宽度。您可以添加draw
选项来查看这一点。因此,我添加了 1cm 的最小宽度,以便在节点内留出一些空间用于居中对齐。
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\tikzset{
state/.style={
%draw=black,
nodes={
%text width=width(":pi2"),
align=left,
anchor=west
},
inner sep=2pt,
matrix of nodes,
},
row 1/.style = {nodes={align=center,minimum width=1cm}}
}
\tikzset{highlight/.style args = {(#1,#2)}{row #1 column #2/.style={nodes={fill=red!50,minimum width=1cm}}}}
\begin{tikzpicture}[]
\matrix[state, highlight/.list={(2,4),(3,4),(4,4)}] (IT)
{%
S & P & O & C \\ \hline
:book & :title & ``Dracula'' & :pi1 \\
:book & :author & :stoker & :pi1 \\
:stoker & :name & ``Bram Stoker'' & :pi2 \\
};
\end{tikzpicture}
\end{document}