Zentrierte Textausrichtung in Zellen einer Matrix

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Zentrierte Textausrichtung in Zellen einer Matrix

Re: Zentrierte Textausrichtung in Zellen einer Matrix

von kannstmasehn » Do 13. Mai 2021, 08:43

Danke, stimmt. Nun passt es perfekt. Vielen Dank.

Re: Zentrierte Textausrichtung in Zellen einer Matrix

von esdd » Mi 12. Mai 2021, 18:38

Du musst dann eben schauen, dass der Stil kastenzelle nur auf die Nodes der Matrix bzw. der Spaltenüberschriften wirkt. Außerdem würde ich den Abstand zwischen den Spalten etwas vergrößern.

\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={}
}

\tikzset{re/.style={rectangle,fill,inner sep=2pt}}
\newcommand\verbindungslinieDR[3]{
	\foreach [remember=\p as \lastp (initially #2)] \p in {#3}
	\draw[#1,dotted](\lastp.east)node[re]{}-.(\p.east)node[re]{};
}

\begin{document}
\begin{table}[!tbph]
  \centering
  \caption{Morphologischer Kasten}
  \begin{tikzpicture}
    \matrix[
    matrix of nodes,
    nodes={kastenzelle},% <- Einstellung nur für Nodes in Matrix
    column sep=2pt,% <- etwas mehr Abstand zwischen den Spalten
    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
    % Stil kastenzelle für Nodes in Kopfzeile ergänzt:
    \node(ul)[anchor=south west,kastenzelle] at (m.north-|m-1-1.west) {Teilfunktion};
    \foreach[count=\i from 2] \c in {1,2,3,4} \node[anchor=base,kastenzelle] 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
    \verbindungslinieDR{black}{m-1-5}{m-2-4,m-3-4,m-4-4}
    
  \end{tikzpicture}
\end{table}
\end{document}

Re: Zentrierte Textausrichtung in Zellen einer Matrix

von kannstmasehn » Mi 12. Mai 2021, 15:39

Danke, das sieht sehr gut aus.

Ich habe noch einige Marker eingebaut, die nun verstellt sind. Wie kann ich neben dem Text ein einfaches Rechteck oder einen Kreis hinzufügen?

\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={}
}

\tikzset{re/.style={rectangle,fill,inner sep=2pt}}
\newcommand\verbindungslinieDR[3]{
	\foreach [remember=\p as \lastp (initially #2)] \p in {#3}
	\draw[#1,dotted](\lastp.east)node[re]{}-.(\p.east)node[re]{};
}

\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
    \verbindungslinieDR{black}{m-1-5}{m-2-4,m-3-4,m-4-4}
    
  \end{tikzpicture}
\end{table}
\end{document}

Danke im Voraus.

Re: Zentrierte Textausrichtung in Zellen einer Matrix

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}

Re: Zentrierte Textausrichtung in Zellen einer Matrix

von Gast. » Mi 12. Mai 2021, 14:36

\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}

Re: Zentrierte Textausrichtung in Zellen einer Matrix

von kannstmasehn » Mi 12. Mai 2021, 13:49

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

Re: Zentrierte Textausrichtung in Zellen einer Matrix

von kannstmasehn » Mi 12. Mai 2021, 12:55

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

Re: Zentrierte Textausrichtung in Zellen einer Matrix

von Gast. » Mi 12. Mai 2021, 12:36

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.

Re: Zentrierte Textausrichtung in Zellen einer Matrix

von Gast. » Mi 12. Mai 2021, 12:33

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.

Re: Zentrierte Textausrichtung in Zellen einer Matrix

von kannstmasehn » Mi 12. Mai 2021, 12:27

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


Nach oben