ich möchte gerne eine präferenzmatrix mit tikz erstellen wie auf dieser seite

Präferenzmatrix

ich habe auch schon etwas begonnen

Open in writeLaTeX
\documentclass[12pt]{article}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usetikzlibrary{matrix, positioning}

\begin{document}
\begin{tikzpicture}[
    cell/.style={rectangle,draw=black},
    space/.style={minimum height=1.5em,
    matrix of nodes,
    row sep=-\pgflinewidth,
    column sep=-\pgflinewidth,
    column 1/.style={font=\ttfamily}},
    text depth=0.5ex,
    text height=2ex,
    nodes in empty cells
    ]
  \matrix (m) [
      matrix of nodes, %row sep=-\pgflinewidth, % Liniendicke
      column 1/.style={nodes={cell, minimum width=4em}},
      column 2/.style={nodes={cell, minimum width=4em}}
    ]
  {
    \textbf{Nr.} & \textbf{Bewertungskriterium} \\
    a & Das ist ein Testkriterium \\
    b & Das ist ein Testkriterium \\
    c & Das ist ein Testkriterium \\
    d & Das ist ein Testkriterium \\
    e & Das ist ein Testkriterium \\
  };

\end{tikzpicture}

\end{document}

gefragt 22 Okt '14, 20:03

Giovario's gravatar image

Giovario
41382126
Akzeptiert-Rate: 0%

@Giovario Herzlich willkommen auf der TeXwelt! Super, dass Du gleich ein Minimalbeispiel postest. Ich probier das gern, wenn ich wieder am LaTeX-PC sitze. Zur Info für weitere Leser, das ist ein (finde ich willkommener) Crosspost, ich hole mal den Link zur anderen Site nach, wo bis jetzt noch keine Lösung kam: hier.

(22 Okt '14, 21:04) Felix

Hier ist ein Vorschlag, wie man das lösen könnte. Dabei werden alle nicht leeren Zellen mit bestimmten Farben gefüllt, weshalb in diesen wenigstens {} stehen muss.

Update: Entsprechend dem Kommentar von @Ijon Tichy wird zur Bestimmung der benötigten Spaltenbreiten jetzt die pgfmath Funktion width verwendet, da der ursprüngliche Vorschlag mit der aktuellen tikz/pgf Version nicht mehr funktioniert. Wie von ihm ebenfalls erwähnt, ist dabei zu beachten, dass bei deutschen Spracheinstellungen zusätzlich die TikZ-Bibliothek babel geladen werden muss, damit die benötigte "…"-Syntax funktioniert. Würde für die deutschen Spracheinstellungen das Paket polyglossia genutzt, dann muss die TikZ-Bibliothek babel vor diesem geladen werden.

Öffne in Overleaf
\documentclass[margin=5pt]{standalone}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usetikzlibrary{matrix,babel}
\usepackage[ngerman]{babel}

\colorlet{mbg}{lightgray!50}
\colorlet{mbb}{blue!15}
\colorlet{mbs}{green!10}

\begin{document}
\begin{tikzpicture}[
    text depth=0.7ex,
    text height=2.3ex,
    ]
  \matrix (m) [
      matrix of nodes,
      row sep=0pt,
      column sep=0pt,
      minimum width=3ex,
      text depth=.5ex,
      text height=2ex,
      inner sep=.25ex,
      nodes={fill=mbg},
      font=\ttfamily,
      align=center,
      row 1/.style={nodes={fill=white},font=\bfseries},%erste Zeile
      mbbspalte/.style={%Einstellungen für die ersten 4 Spalten
        text width=#1,
        font=\rmfamily,
        every even row/.style={nodes={fill=mbb}}
      },
      column 1/.style={mbbspalte=1.25*width("Rang")},
      column 2/.style={mbbspalte=1.25*width("Gewicht"),column sep=1ex},
      column 3/.style={mbbspalte=1.25*width("Anzahl"),column sep=1ex},
      column 4/.style={mbbspalte=1.25*width("Nr."),font=\ttfamily},
      column 5/.style={text width=width("Das ist ein Testkriterium")+2pt,font=\rmfamily},
      row 11/.style={nodes={fill=mbs}},%letzte Zeile mit anderer Farbe gefüllt
    ]
  {% überall dort wo ein Node sein soll, muss wenigstens {} stehen
    Rang&Gewicht&Anzahl&Nr.& Bewertungskriterium \\
    {}&{}&{}&a&Das ist ein Testkriterium\\
      &  &  & &                         &{}\\
    {}&{}&{}&b&Das ist ein Testkriterium&  &{}\\
      &  &  & &                         &{}&  &{}\\
    {}&{}&{}&c&Das ist ein Testkriterium&  &{}&  &{} \\
      &  &  & &                         &{}&  &{}\\
    {}&{}&{}&d&Das ist ein Testkriterium&  &{} \\
      &  &  & &                         &{}\\
    {}&{}&{}&e&Das ist ein Testkriterium\\[1ex]
      &{}&{}\\
  };
  %Umrandungen
  \foreach \c in {1,...,5}% für erste Zeile
    \draw(m-1-\c.north west)rectangle
      ([yshift=\pgflinewidth,xshift=-\pgflinewidth]m-1-\c.south east);
  \foreach \c in {1,...,4}% für die ersten vier Spalten
    \draw(m-1-\c.north west)rectangle
      ([yshift=\pgflinewidth,xshift=-\pgflinewidth]m-10-\c.south east);
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 23 Okt '14, 00:55

esdd's gravatar image

esdd
17.5k244156
Akzeptiert-Rate: 62%

bearbeitet 01 Sep '17, 18:42

Also das sieht echt super aus Danke!!

Eine Frage habe ich dazu aber noch. Wie schaffe ich es das die Spalte Bewertungskriterien sich an den Text in den einzelnen Zeilen anpasst. Denn wenn ich mehr als "das ist ein Testkriterium" schreibe gehts in die nächste Zeile.

(23 Okt '14, 19:51) Giovario

@Giovario: Die Länge richtet sich nach dem jeweiligen Argument von width("…"). Dort einfach den String gegen den längsten String austauschen, also beispielsweise width("Das ist ein Testkriterium") gegen width("Das ist ein langes Testkriterium").

(14 Sep '17, 01:21) gast3

Grundsätzlich ist esdd's Antwort der richtige Weg. Bis pgf 3.0.0 hat das auch noch so funktioniert. Heute (AFAIK seit pgf 3.0.1) funktioniert das so nicht mehr. Wie der pgf-Anleitung bei der Erklärung zu tikzpicture-Umgebung zu entnehmen ist, schaltet die Umgebung lokal auf den \nullfont um. Damit wird normale Textausgabe verhindert. Gleichzeitig funktioniert dann aber natürlich auch die Anweisung \widthof des Pakets calc nicht mehr (das pgf daher inzwischen auch nicht mehr selbst lädt, wodurch \widthof in esdd's Antwort inzwischen selbst bereits unbekannt ist). Glücklicherweise bietet aber pgf selbst mit der Funktion width die Möglichkeit, die Breite eines Textes zu ermitteln. Der Ansatz von esdd's Vorschlag wird damit zu:

Öffne in Overleaf
\documentclass[margin=5pt]{standalone}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{matrix,babel}

\colorlet{mbg}{lightgray!50}
\colorlet{mbb}{blue!15}
\colorlet{mbs}{green!10}

\begin{document}
\begin{tikzpicture}[
    text depth=0.7ex,
    text height=2.3ex,
    ]
  \matrix (m) [
      matrix of nodes,
      row sep=0pt,
      column sep=0pt,
      minimum width=3ex,
      text depth=.5ex,
      text height=2ex,
      inner sep=.25ex,
      nodes={fill=mbg},
      font=\ttfamily,
      align=center,
      row 1/.style={nodes={fill=white},font=\bfseries},%erste Zeile
      mbbspalte/.style={%Einstellungen für die ersten 4 Spalten
        text width=#1,
        font=\rmfamily,
        every even row/.style={nodes={fill=mbb}}
      },
      column 1/.style={mbbspalte=1.25*width("Rang")},
      column 2/.style={mbbspalte=1.25*width("Gewicht"),column sep=1ex},
      column 3/.style={mbbspalte=1.25*width("Anzahl"),column sep=1ex},
      column 4/.style={mbbspalte=1.25*width("Nr."),font=\ttfamily},
      column 5/.style={text width=width("Das ist ein Testkriterium"),font=\rmfamily},
      row 11/.style={nodes={fill=mbs}},%letzte Zeile mit anderer Farbe gefüllt
    ]
  {% überall dort wo ein Node sein soll, muss wenigstens {} stehen
    Rang&Gewicht&Anzahl&Nr.& Bewertungskriterium \\
    {}&{}&{}&a&Das ist ein Testkriterium\\
      &  &  & &                         &{}\\
    {}&{}&{}&b&Das ist ein Testkriterium&  &{}\\
      &  &  & &                         &{}&  &{}\\
    {}&{}&{}&c&Das ist ein Testkriterium&  &{}&  &{} \\
      &  &  & &                         &{}&  &{}\\
    {}&{}&{}&d&Das ist ein Testkriterium&  &{} \\
      &  &  & &                         &{}\\
    {}&{}&{}&e&Das ist ein Testkriterium\\[1ex]
      &{}&{}\\
  };
  %Umrandungen
  \foreach \c in {1,...,5}% für erste Zeile
    \draw(m-1-\c.north west)rectangle
      ([yshift=\pgflinewidth,xshift=-\pgflinewidth]m-1-\c.south east);
  \foreach \c in {1,...,4}% für die ersten vier Spalten
    \draw(m-1-\c.north west)rectangle
      ([yshift=\pgflinewidth,xshift=-\pgflinewidth]m-10-\c.south east);
\end{tikzpicture}
\end{document}

Beachte, dass zusätzlich Library babel benötigt wird, damit die "…"-Syntax verwendet werden kann und etwas aus "Anzahl nicht Änzahl wird.

alt text

Permanenter link

beantwortet 01 Sep '17, 11:02

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 01 Sep '17, 11:12

@esdd Wenn du das in deiner Antwort korrigierst, werde ich meine Antwort natürlich löschen.

(01 Sep '17, 11:13) gast3

Wow - nach 3 Jahren innerhalb von wenigen Minuten eine Antwort!

Habe 1000 Dank! Das hat mir einiges erspart! Vielen, vielen Dank!!!

(01 Sep '17, 11:32) BratVogel

@Ijon Danke für die Korrekturen :)

(01 Sep '17, 18:44) 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:

×714
×1

gestellte Frage: 22 Okt '14, 20:03

Frage wurde gesehen: 7,098 Mal

zuletzt geändert: 14 Sep '17, 01:21