向表中添加节点和行

向表中添加节点和行

我正在尝试绘制如下图所示的表格。我一直在使用表格和 tikz,但从未将两者结合起来绘制带有节点的表格。

所需表

绘制这样的表格的最佳方法是什么?

我创建了一个最小工作示例,但仍然存在一些问题。

  • 我不知道如何控制单元格内线条的对齐
  • 圆圈不见了
  • 我没有包括水平线和垂直线,因为我也不知道如何对齐它们。

任何帮助都非常感谢。如有必要,我也可以使用其他软件包。这只是我的第一个想法。

代码:

\documentclass{article}
\usepackage{array,multirow,graphicx}
 \usepackage{tikz}
\usetikzlibrary{tikzmark}
 \begin{document}
 \begin{table}[h]
 \centering
 \begin{tabular}{c|l|cccccc}
 Kategorie& \multicolumn{1}{c|}{Einflussgroesse} & \multicolumn{6}{c}{Auspraegung in Fallstudie} \\
 &&&1&2&3&4&\\
 \hline
 \multirow{4}{*}{\rotatebox[origin=c]{90}{\parbox[c]{1.5cm}{\centering Markt-bezogene }}} & text &gering&&\tikzmark{1}&&&hoch\\
 & text &gering&&\tikzmark{2}&&&hoch\\
 & text &gering&&&\tikzmark{3}&&hoch\\
  & text &gering&&&\tikzmark{4}&&hoch\\
 \end{tabular}
 \begin{tikzpicture}[overlay, remember picture]
    \draw [-] ({pic cs:1}) -- ({pic cs:2});
    \draw [-] ({pic cs:2}) -- ({pic cs:3});
    \draw [-] ({pic cs:3}) -- ({pic cs:4});
  \end{tikzpicture}
 \end{table}
 \end{document}

这将给出: 输出

答案1

如果你把桌子放在蒂克兹 matrix of nodes(请参阅 tikz/pgf 手册第 20 章),然后您就可以tikz使用 的全部功能。 从各方面来看,matrix of nodes看起来都像一个“普通”的 LaTeX 矩阵,除了:

  • 它位于一个tikzpicture环境里面。
  • 您可以按照通常的 tikz 风格来设置行、列、节点等的样式
  • 在矩阵的条目之间画线等很简单。

这是我对您的 MWE 进行实验的结果:

在此处输入图片描述

...产生该结果的代码如下:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,matrix}

\newcommand\hochscale[1]{%\hochscale{a,b,c,d,...}
  \foreach \r in {1,2,3,4} {% put numbers under heading
     \node at ($ (M-1-3.west)+(\r,-0.4) $) {\r};
  }
  % now draw scale in each row
  \foreach \hoch [count=\r from 2, remember=\r as \last] in {#1} {
    \node[anchor=west] at ($ (M-\r-3.west)+(-0.8,0) $) {gering};
    \node[anchor=east] at ($ (M-\r-3.west)+(5.5,0) $)    {hoch};
    \draw (M-\r-3.west)+(0.5,0) -- ++(4.5,0);
    \node[mypoint] (hoch\r) at ($ (M-\r-3.west)+(\hoch,0) $) {};
    \ifnum\r>2% draw the lines between scales starting from row 3
      \draw[blue](hoch\last)--(hoch\r);
    \fi
  }
  % add the dashed line
  \draw[dashed](M-2-3.west)+(2.5,0.5)--($ (M-\last-3.west)+(2.5,-0.5) $);
}

\begin{document}
  \begin{tikzpicture}[mypoint/.style={circle, radius=0.5mm, fill=blue}]
    \matrix (M)[matrix of nodes, nodes in empty cells,
                row sep=8mm, column sep=6mm,
                row 1/.style = {anchor=center, font=\large\bfseries, blue,
                                minimum height=12mm},% to allow for numbers
                column 1/.style = {text width=15mm},
                column 2/.style = {text width=60mm},
                column 3/.style = {text width=60mm},
                ]{
     Kategorie & Einflussgroesse &  Auspraegung in Fallstudie\\
               & text 1 & \\
               & text 2 & \\
               & text 3 & \\
               & text 4 & \\
               & text 5 & \\
     };
     \draw[blue, thick](M-1-1.south west) -- (M-1-3.south east);
     \node[rotate=90, anchor=east] at (M-3-1) {Markt-bezogene};
     \hochscale{1,2,3,2,4}% add scales in column 3
  \end{tikzpicture}

\end{document}

一些评论:

  • (M)命令后面的表示\matrix矩阵的节点可以称为(M-1-1)、、(M-1-2)...更一般地说(M-row-col),其中rowcol是任意行和列索引。您可以M用任何您喜欢的替换。
  • \hochscale命令打印第 3 列中的刻度。它接受以逗号分隔的“刻度值”列表,然后执行其余操作。此命令基本上是一个\foreach运行值的语句。它使用(M-\r-3)语法来引用第 3 行和第 3 列中的节点\r。表单的节点位置($ .... $)使用 tikzcalc库。
  • 我给第 1 行添加了一些随机样式。一般来说,样式是随机的,您可以根据需要进行更改。(特别是,目前蓝色太多了!)
  • 实际上,您可能需要更改列宽,以便更好地适应您的文本。特别是,您可能需要缩小第 3 列的比例,否则我认为您的文本将无法适应。
  • 正如书签手册中,通常最好避免在表格中出现垂直线。
  • 关于样式可能性的一个更好的例子可能是:

在此处输入图片描述

这是通过对 tikz 样式定义进行一些细微的调整得出的:

\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc,matrix}

\newcommand\hochscale[1]{%\hochscale{a,b,c,d,...}
  \foreach \r in {1,2,3,4} {
     \node at ($ (M-1-3.west)+(\r,-0.4) $) {\r};
  }
  \foreach \hoch [count=\r from 2, remember=\r as \last] in {#1} {
    \node[anchor=west] at ($ (M-\r-3.west)+(-0.8,0) $) {gering};
    \node[anchor=east] at ($ (M-\r-3.west)+(5.5,0) $)    {hoch};
    \draw (M-\r-3.west)+(0.5,0) -- ++(4.5,0);
    \node[mypoint] (hoch\r) at ($ (M-\r-3.west)+(\hoch,0) $) {};
    \ifnum\r>2%
      \draw[Peru](hoch\last)--(hoch\r);
    \fi
  }
  \draw[dashed](M-2-3.west)+(2.5,0.5)--($ (M-\last-3.west)+(2.5,-0.5) $);
}

\begin{document}
  \begin{tikzpicture}[mypoint/.style={circle, radius=0.5mm, draw=Peru, thick, fill=Tan}]
    \matrix (M)[matrix of nodes, nodes in empty cells,
                row sep=2mm, column sep=8mm,
                row 1/.style = {anchor=center, font=\large\bfseries, Peru,
                                minimum height=12mm},% to allow for numbers
                column 1/.style = {text width=15mm},
                row 1 column 2/.style = {nodes={fill=white,draw=white},text width=50mm},
                column 2/.style = {nodes={rectangle,draw=Peru,fill=PapayaWhip},text width=50mm},
                column 3/.style = {text width=60mm},
                ]{
     Kategorie & Einflussgroesse &  Auspraegung in Fallstudie\\
               & text 1 & \\
               & text 2 & \\
               & text 3 & \\
               & text 4 & \\
               & text 5 & \\
     };
     \draw[Sienna, thick](M-1-1.south west) -- (M-1-3.south east);
     \node[rotate=90, anchor=south] at (M-4-1) {Markt-bezogene};
     \hochscale{1,2,3,2,4}
  \end{tikzpicture}

\end{document}

相关内容