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 '16, 16:48

fritz's gravatar image

fritz
173611
Akzeptiert-Rate: 0%

bearbeitet 07 Feb '16, 11:27

saputello's gravatar image

saputello
11.1k154365

Willkommen auf TeXwelt!

(03 Feb '16, 23: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 '16, 23:28

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 04 Feb '16, 13:23

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

(04 Feb '16, 13: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 '16, 13:26) esdd
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×728
×58
×11

gestellte Frage: 03 Feb '16, 16:48

Frage wurde gesehen: 7,104 Mal

zuletzt geändert: 07 Feb '16, 11:27