von esdd » Mi 12. Mai 2021, 15:22
Wenn die Überschrift der ersten Tabellenspalte linksbündig mit den Einträgen der ersten Spalte sein soll, dann musst Du sie an einem Node dieser Spalte ausrichten und nicht an der Gesamtmatrix. Zwischen den Nodes der ersten Spalte und dem Rand der Matrix gibt es noch einen inner sep.
Du kannst für die Nodes text height=\ht\strutbox und text depth=\dp\strutbox vorgeben oder, wenn es sehr kompakt sein soll, mit text depth=0pt die Unterlängen ignorieren oder für diese einen kleinen festen Wert vorgeben.
Sollen Zellen in einer Zeile vertikal an der Grundlinie ausgerichtet werden, ist es besser den Anker base west bzw. base zu verwenden. Wenn Texthöhe und -tiefe vorgegeben für die Nodes vorgegeben sind, kannst Du aber auch center lassen.
\documentclass[a4paper,12pt]{report}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{booktabs,etoolbox}
\tikzset{
kastenzelle/.style={inner sep=3pt,text height=\ht\strutbox,text depth=\dp\strutbox},
leer/.style={}
}
\newcommand\verbindungslinieOHNE[3]{
\foreach [remember=\p as \lastp (initially #2)] \p in {#3}
\draw[#1](\lastp.east)node[leer]{}-.(\p.east)node[leer]{};
}
\begin{document}
\begin{table}[!tbph]
\centering
\caption{Morphologischer Kasten}
\begin{tikzpicture}[
nodes={kastenzelle}
]
\matrix[
matrix of nodes,
column 1/.style={anchor=base west},% 1.Spalte rechtsbündig
column 2/.style={anchor=base},
column 3/.style={anchor=base},
column 4/.style={anchor=base},
column 5/.style={anchor=base},
column 6/.style={anchor=base},
](m){
Test
& Test
& Test
& Test
& Test \\
Testp
& Test
& Test
& Test
& Blub \\
Test
& Test
& Test
& PfPfPfp
& Test \\
Testfunktion
& Test
& Test
& Test
& Test \\
};
% Kopfzeile
\node(ul)[anchor=south west] at (m.north-|m-1-1.west) {Teilfunktion};
\foreach[count=\i from 2] \c in {1,2,3,4} \node[anchor=base] at (ul.base-|m-1-\i){\c};
% Tabellenlinien
\draw[line width=\lightrulewidth]
([yshift=0]ul.south-|m.west)
--([yshift=0]ul.south-|m.east);
\draw[line width=\heavyrulewidth]([yshift=0]ul.north-|m.west)
--([yshift=0]ul.north-|m.east)
([yshift={0}]m.south west)
--([yshift={0}]m.south east);
% Verbindungslinien
\verbindungslinieOHNE{black}{m-1-5}{m-2-4,m-3-4,m-4-4}
\end{tikzpicture}
\end{table}
\end{document}
Wenn die Überschrift der ersten Tabellenspalte linksbündig mit den Einträgen der ersten Spalte sein soll, dann musst Du sie an einem Node dieser Spalte ausrichten und nicht an der Gesamtmatrix. Zwischen den Nodes der ersten Spalte und dem Rand der Matrix gibt es noch einen `inner sep`.
Du kannst für die Nodes `text height=\ht\strutbox` und `text depth=\dp\strutbox` vorgeben oder, wenn es sehr kompakt sein soll, mit `text depth=0pt` die Unterlängen ignorieren oder für diese einen kleinen festen Wert vorgeben.
Sollen Zellen in einer Zeile vertikal an der Grundlinie ausgerichtet werden, ist es besser den Anker `base west` bzw. `base` zu verwenden. Wenn Texthöhe und -tiefe vorgegeben für die Nodes vorgegeben sind, kannst Du aber auch `center` lassen.
```
\documentclass[a4paper,12pt]{report}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{booktabs,etoolbox}
\tikzset{
kastenzelle/.style={inner sep=3pt,text height=\ht\strutbox,text depth=\dp\strutbox},
leer/.style={}
}
\newcommand\verbindungslinieOHNE[3]{
\foreach [remember=\p as \lastp (initially #2)] \p in {#3}
\draw[#1](\lastp.east)node[leer]{}-.(\p.east)node[leer]{};
}
\begin{document}
\begin{table}[!tbph]
\centering
\caption{Morphologischer Kasten}
\begin{tikzpicture}[
nodes={kastenzelle}
]
\matrix[
matrix of nodes,
column 1/.style={anchor=base west},% 1.Spalte rechtsbündig
column 2/.style={anchor=base},
column 3/.style={anchor=base},
column 4/.style={anchor=base},
column 5/.style={anchor=base},
column 6/.style={anchor=base},
](m){
Test
& Test
& Test
& Test
& Test \\
Testp
& Test
& Test
& Test
& Blub \\
Test
& Test
& Test
& PfPfPfp
& Test \\
Testfunktion
& Test
& Test
& Test
& Test \\
};
% Kopfzeile
\node(ul)[anchor=south west] at (m.north-|m-1-1.west) {Teilfunktion};
\foreach[count=\i from 2] \c in {1,2,3,4} \node[anchor=base] at (ul.base-|m-1-\i){\c};
% Tabellenlinien
\draw[line width=\lightrulewidth]
([yshift=0]ul.south-|m.west)
--([yshift=0]ul.south-|m.east);
\draw[line width=\heavyrulewidth]([yshift=0]ul.north-|m.west)
--([yshift=0]ul.north-|m.east)
([yshift={0}]m.south west)
--([yshift={0}]m.south east);
% Verbindungslinien
\verbindungslinieOHNE{black}{m-1-5}{m-2-4,m-3-4,m-4-4}
\end{tikzpicture}
\end{table}
\end{document}
```