Wie kann die letzte Spalte auf die Textbreite - ähnlich der X-Spalte im Paket tabularx - ausgetrieben werden? Im (nicht ganz minimalen) Beispiel ist die letzte Spalte (d.i. die 5. Spalte) auf eine Textbreite von text width=0.3\linewidth gesetzt.

Open in Online-Editor
\documentclass[DIV=20]{scrartcl}

\usepackage{tikz}
\usetikzlibrary{matrix}

\tikzset{
    raster/.style={
        matrix of nodes,
        row sep=-\pgflinewidth,
        column sep=-\pgflinewidth,
        nodes={
               rectangle,
               draw=black,
               align=left,
        },
        minimum height=2em,
        text depth=0.5ex,
        text height=2ex,
        nodes in empty cells,
        column 1/.style={
            nodes={text width=width{"Nr."}}
        },
        column 2/.style={
            nodes={text width=width{"Testtext"}}
        },
        column 3/.style={
            nodes={text width=width{"Namen"},fill=gray!30}
        },
        column 4/.style={
            nodes={text width=10em}
        },
        column 5/.style={
            nodes={text width=0.3\linewidth,align=center} % auf Textbreite austreiben
        },
        row 1 column 1/.style={
            nodes={fill=gray!30}
        },
        row 1 column 2/.style={
            nodes={fill=gray!30}
        },
        row 1 column 5/.style={
            nodes={fill=gray!30}
        },
    }
}

\thispagestyle{empty}

\begin{document}

\noindent%
\begin{tikzpicture}[outer sep=auto]
\matrix [raster]
{
Nr. & Testtext  & Namen &  & Xyz \\
    &           & Vorn. &  &     \\
};
\end{tikzpicture}

\noindent\rule{\textwidth}{0.4pt}

\end{document}

alt text

gefragt 03 Feb, 10:48

fritz's gravatar image

fritz
232
Akzeptiert: 100%

bearbeitet 07 Feb, 05:27

saputello's gravatar image

saputello
18.4k22352

Willkommen auf TeXwelt!

(03 Feb, 17:31) esdd

Wenn die Tabelle die ganze Textbreite einnehmen soll, muss zuerst der innere Abstand der Matrix entfernt werden. Deshalb wird inner sep=0pt bei den Matrixoptionen ergänzt, wodurch die Tabelle schon mal linksbündig mit der darunter gezeichneten Vergleichslinie wird.

Allerdings wird damit auch der innere Abstand in den Nodes entfernt und der Text würde an den Trennlinien „kleben“. Deshalb wird er für die Nodes wieder eingefügt, in dem da die Option inner sep=.333em ergänzt wird.

Jetzt muss nur noch die Textbreite für die letzte Spalte berechnet werden, was für Dein Beispiel nicht zu schwierig ist, da Du ja die Textbreiten für die anderen Spalten von Hand festlegst. Es müssen also nur diese Textbreiten sowie für alle Spalten je zwei Mal der innere Abstand (inner xsep) und zwei Mal der outer sep der Matrix abgozogen werden.

Open in Online-Editor
\documentclass[DIV=20]{scrartcl}
\usepackage{showframe}% nur zum Anzeigen des Seitenlayouts
\usepackage{tikz}
\usetikzlibrary{matrix}

\tikzset{
    raster/.style={
        inner sep=0pt,% <- inneren Abstand der Matrix entfernen
        matrix of nodes,
        row sep=-\pgflinewidth,
        column sep=-\pgflinewidth,
        nodes={
               inner sep=.3333em,% <- inneren Abstand bei den Nodes wieder einfügen
               rectangle,
               draw=black,
               align=left,
        },
        minimum height=2em,
        text depth=0.5ex,
        text height=2ex,
        nodes in empty cells,
        column 1/.style={
            nodes={text width=width{"Nr."}}
        },
        column 2/.style={
            nodes={text width=width{"Testtext"}}
        },
        column 3/.style={
            nodes={text width=width{"Namen"},fill=gray!30}
        },
        column 4/.style={
            nodes={text width=10em}
        },
        column 5/.style={
            nodes={
            text width= % Breite der letzten Spalte berechnen
              \linewidth
              -10em-width{"Namen"}-width{"Testtext"}-width{"Nr."}
              -10*\pgfkeysvalueof{/pgf/inner xsep}
              -2*\pgfkeysvalueof{/pgf/outer xsep}
            ,align=center} % auf Textbreite austreiben
        },
        row 1 column 1/.style={
            nodes={fill=gray!30}
        },
        row 1 column 2/.style={
            nodes={fill=gray!30}
        },
        row 1 column 5/.style={
            nodes={fill=gray!30}
        },
    }
}

\thispagestyle{empty}

\begin{document}

\noindent%
\begin{tikzpicture}[outer sep=auto]
\matrix [raster]
{
Nr. & Testtext  & Namen &  & Xyz \\
    &           & Vorn. &  &     \\
};
\end{tikzpicture}

\noindent\rule{\textwidth}{0.4pt}
\end{document}

Ich habe jetzt zusätzlich showframe geladen, weil man damit besser sieht, dass die Tabelle die komplette Textbreite einnimmt.

alt text

Permanenter link

beantwortet 03 Feb, 17:28

esdd's gravatar image

esdd
14.2k53251

bearbeitet 04 Feb, 07:23

Die Lösung funktioniert ausgezeichnet! Warum wird der inner sep auf genau auf die Länge.333em gesetzt?

(04 Feb, 07:00) fritz

@fritz .3333em (bei mir fehlte da sogar noch die letzte 3) ist laut Doku der initiale Wert für den inneren Abstand in Nodes. Du kannst in dem Beispiel aber auch einen anderen Wert benutzen.

(04 Feb, 07:26) esdd
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×27
×7

Frage gestellt: 03 Feb, 10:48

Frage wurde angeschaut: 812 Mal

Zuletzt aktualisiert: 07 Feb, 05:27