具有多种样式的 Tikz 矩阵不起作用

具有多种样式的 Tikz 矩阵不起作用

我有一张包含矩阵的 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}

在此处输入图片描述

相关内容