Zentrierte Textausrichtung in Zellen einer Matrix Thema ist als GELÖST markiert

Tabellen und Grafiken erstellen und anordnen


kannstmasehn
Forum-Century
Forum-Century
Beiträge: 165
Registriert: Mo 5. Mai 2014, 16:55

Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von kannstmasehn »

Hallo,

ich habe das Problem, dass die Textausrichtung in meinem Morphologischen Kasten nicht vollständig funktioniert. Folgende Punkte würde ich gerne korrigieren:

1) Spalte 1 alles linksbündig auf der gleichen Referenz
2) Zeilenabstand zwischen Zeile 3 und 4, wohl aufgrund des 'p', nicht identisch zu anderen Zeilen
3) Zeile 4, Spalte 4 (PfPfPfp) ist nicht bündig zum Rest der Zeile

Also im Endeffekt sollen alle Zeilen und Spalten in den Zellen zentriert und zeilenweise auf gleicher Höhe sein, lediglich die erste Spalte soll linksbündig sein. Und der Zeilenabstand soll gleich bleiben.

Ich habe schon mit align = center gespielt, aber das hatte keine Auswirkungen. Einen gesonderten Befehl für die vertikale Ausrichtung habe ich auch nicht gefunden.
Zur Erklärung: Mit einer normalen Tabelle habe ich diesen Morphologischen Kasten nicht realisieren können, weshalb ich die Matrix-Umgebung nutze.

Hier mein Minimalbeispiel:

\documentclass[a4paper,12pt]{report}

\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{booktabs,etoolbox}

\tikzset{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={inner sep=3pt}
		]
		\matrix[
		matrix of nodes,
		column 1/.style={anchor=west},% 1.Spalte rechtsbündig
		column 2/.style={anchor=center},
		column 3/.style={anchor=center},
		column 4/.style={anchor=center},
		column 5/.style={anchor=center},
		column 6/.style={anchor=center},
		](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 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}

Vielen Dank im Voraus!

Zuletzt geändert von kannstmasehn am Mi 12. Mai 2021, 13:49, insgesamt 7-mal geändert.

Gast.

Re: Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von Gast. »

Drück mal auf den LaTeX-Ausgabe-Knopf. Kannst was seh'n?


kannstmasehn
Forum-Century
Forum-Century
Beiträge: 165
Registriert: Mo 5. Mai 2014, 16:55

Re: Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von kannstmasehn »

Ja, eine Fehlermeldung. Hat sich etwas bei der Verwendung von Minimalbeispielen geändert? Bei Overleaf läuft der Code. Was kann ich da nun tun?


kannstmasehn
Forum-Century
Forum-Century
Beiträge: 165
Registriert: Mo 5. Mai 2014, 16:55

Re: Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von kannstmasehn »

Und auf https://texlive.net/run funktioniert der Code auch einwandfrei.


Gast.

Re: Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von Gast. »

Bist du wirklich sicher, dass genau der gezeigte Code läuft? Bei mir läuft er lokal auch nicht. Da matrix of nodes eine Option von \matrix ist und auch Stilangaben Optionen sind und Optionen als optionales Argument anzugeben sind, fehlen da min. ein paar eckige Klammern. Wenn ich die einfüge, gibt es aber weitere Fehlermeldungen. Das war auch der Grund, warum ich mich schon vorhin nicht näher damit befasst habe. Meine Motivation erschöpft sich bei so vielen Fehlern leider recht schnell.


Gast.

Re: Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von Gast. »

Wenn ich genau den gezeigten Code komplett markiere und nach texlive.net kopiere, gibt es übrigens dieselben Fehlermeldungen. Das wundert mich auch nicht sehr, weil hier AFAIK genau derselbe Online-Compiler verwendet wird.


kannstmasehn
Forum-Century
Forum-Century
Beiträge: 165
Registriert: Mo 5. Mai 2014, 16:55

Re: Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von kannstmasehn »

Das ist interessant. Ich habe den Code 1:1 erneut aus Texstudio kopiert und in den texlive-run eingefügt, das funktioniert. Den Code des obigen Beitrages aktualisiert und dann den Code kopiert und in texlive-run eingefügt und es funktioniert nicht. Der Code von hier funktioniert bei mir auch nicht. Es wird also beim Speichern und Posten des Codes etwas am Code verändert.

Edit: Ich hänge mal meine .tex-Datei an. Anders funktioniert es nicht.

Dateianhänge
document.tex
(1.56 KiB) 100-mal heruntergeladen

kannstmasehn
Forum-Century
Forum-Century
Beiträge: 165
Registriert: Mo 5. Mai 2014, 16:55

Re: Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von kannstmasehn »

Ok, habe gelernt, es hat etwas mit Markdown zutun. Habe das deaktiviert und nun funktioniert der Code des ersten Posts.


Gast.

Re: Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von Gast. »

\documentclass[a4paper,12pt]{report}

\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{booktabs,etoolbox}

\tikzset{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={inner sep=3pt}
		]
		\matrix[
		matrix of nodes,
		column 1/.style={anchor=west},% 1.Spalte rechtsbündig
		column 2/.style={anchor=center},
		column 3/.style={anchor=center},
		column 4/.style={anchor=center},
		column 5/.style={anchor=center},
		column 6/.style={anchor=center},
		font=\strut% Hack, weil nicht wirklich ein Font-Befehl
		](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 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}

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Re: Zentrierte Textausrichtung in Zellen einer Matrix

Beitrag von esdd »

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}

Antworten