Wie kann ich bei einer pgfplotstable um bestimmte Spalten Klammern, d.h. um die erste und die vorletzte Spalte, ergänzen?

Hinweis: Die Matrix ist willkürlich gewählt, tatsächlich kann sie beliebige Größe haben.

alt text

Öffne in Overleaf
\documentclass[varwidth, margin=5mm]{standalone}
\usepackage{pgfplotstable, amsmath}

\pgfplotstableset{header=false,
every head row/.style={output empty row},% 
every last column/.style={string type, column type=l},% Annotationen
fixed, dec sep align% alle anderen Spalten
}

\begin{document}
IST: $M = 
\pgfplotstabletypeset[]{
-5 -1 abc
66 1 d
7 2 e
}$ \\

SOLL:
$M = \left\lgroup\begin{array}{r r }
-5 & 1 \\
66 & 1 \\
7 & 2 \\
\end{array}\right\rgroup \begin{array}{l}
abc \\ d \\ e \\
\end{array}
$
\end{document}

gefragt 05 Okt, 10:37

cis's gravatar image

cis
8.5k16172275
Akzeptiert: 68%

bearbeitet 06 Okt, 00:46

Puhh, man denkt: auf den 1. Blick trivial. Grobe Idee: Vor erster und vorletzter Spalte \tikz[] Koordinaten platzieren und die dann mittels decoration mit Klammern verbinden. Hab es nicht hinbekommen. Macht auch diverse Zeilen Zusatzcode.

Ich hoffe sehr, dass es einfacher geht.

(06 Okt, 01:42) cis

Also ich bin mir eh nicht so sicher, ob es die beste Idee ist, TikZ ins Spiel zu bringen. Die Positionen rund um die Zellen gibt es bestimmt als pgfkeys, die ich nicht kenne...

(07 Okt, 07:07) cis

Also falls hier jmd. eine Idee hat, wäre das sehr gut. Evtl. ohne TikZ, oldschool LaTeX. Die Lösungen, die ich gepostet habe, sind nur mögliche Ergebnisse, sie gefallen mir alle nicht.

(08 Okt, 09:46) cis

Ich habe eine Idee: \lgroup bzw. \rgroup erzeugt an sich erstmal so einen Klammernfutzel, genauer: eine abgerundete Ecke einer eckigen Klammer (erst \left\lgroup erstellt eine ganze Klammer).

Damit sollte sich evtl. eine komplette Klammer zeichnen lassen. Muss ich mal weiter verfolgen.

(08 Okt, 11:44) cis

Hab etwas hinbekommen. Eine mögliche Lösung, aber (noch) nicht 100% optimal.

1) Die Klammern werden ganz normal um die pgfplotstable gesetzt, wobei vor der schließenden Klammer \hspace{-1.25em} steht.

2) Mit

Öffne in Overleaf
% Annotationen:
every last column/.style={string type, postproc cell content/.style={
@cell content={\Annotation{##1}}
}},

kommen die Zellen der letzten Spalte in TikZ-Noden

Öffne in Overleaf
\newcommand\Annotation[1]{%
\tikz[red, baseline=-0.3em, overlay, font=\footnotesize\ttfamily
%inner sep=0pt, outer sep=0pt  % kein Effekt
]{\node[anchor=west, xshift=-3mm]{#1}; }%
}

die hinter die schließende Klammer geschoben werden.

alt text

Das ist natürlich eine ziemliche Anpassung nach Augenmaß, insbesondere die baseline, der xshift, der negative hspace. Also falls das jmd. eine bessere Idee hat, gern...

MWE:

alt text

Öffne in Overleaf
\documentclass[margin=5mm]{standalone}
\usepackage{pgfplotstable, amsmath}
\pgfplotsset{compat=1.13}

\pgfplotstableset{header=false,
every head row/.style={output empty row},% 
fixed, dec sep align,% alle anderen Spalten
1000 sep={\,}, % kleiner Abstand
% Annotationen:
every last column/.style={string type, postproc cell content/.style={
@cell content={\Annotation{##1}}
}},
}

\newcommand\Annotation[1]{%
\tikz[red, baseline=-0.3em, overlay, font=\footnotesize\ttfamily
%inner sep=0pt, outer sep=0pt  % kein Effekt
]{\node[anchor=west, xshift=-3mm]{#1}; }%
}

\begin{document}

$\left\lgroup\pgfplotstabletypeset[
]{
-1 2 300 4 abc
5000 -6 7 8 d
9 10 11 12 {}
13 14 15 16000 f
}\hspace{-1.25em}\right\rgroup$

\end{document}
Permanenter link

beantwortet 06 Okt, 04:25

cis's gravatar image

cis
8.5k16172275

bearbeitet 08 Okt, 04:05

Eine andere mögliche Lösung, aber auch (noch) nicht 100% optimal.

alt text

Für das eigentliche Problem des Klammernzeichnens habe ich,

(rückbesinnend auf eine Lösung von @saputello [https://texwelt.de/wissen/fragen/20048/wie-stelle-ich-bei-tikz-abgerundete-eckige-klammern-als-dekoration-dar/20050 ])

mit fit eine Klammer ergänzt.

Aber 100% glücklich bin ich immer noch nicht, da einige Anpassungen nach Augenmaß dabei sind und zwingend string type benötigt wird.

Dafür werden in der pgfplotstable

Öffne in Overleaf
\pgfplotstabletypeset[string type, 
header=false,
every head row/.style={output empty row},% 
]{
{\tikzI v}    3
1               -1
2               $-1$
{\tikzII w}  4
}

Koordinaten ergänzt ("\tikzI" ist jetzt hier zur Demonstration erstmal in der Tabelle gelassen; soll später schon mit "@cell content" aus der eigentlichen Tabelle verschwinden)

Öffne in Overleaf
\def\tikzI{%
\tikz[] {%
\coordinate[] (Leer) at (0,0);% als Referenzkoordinate scheints benötigt
\coordinate[] (v) at (0,1.25em);%
%\node[anchor=south, yshift=1em] at (0,0) (v){\vphantom{9}};%
}}

Jedenfalls sieht das dann so aus (den roten Strich wegdenken):

alt text

Öffne in Overleaf
\documentclass[border=5mm]{standalone}
\usepackage{pgfplotstable}

\usepackage{tikz}
\usetikzlibrary{matrix,fit} % matrix scheints benötigt

\tikzset{remember picture,
overlay,
%baseline=0,
inner sep=0pt, outer sep=0pt, % bringt minimal etwas
}

\begin{document}

\def\tikzI{%
\tikz[] {%
\coordinate[] (Leer) at (0,0);% als Referenzkoordinate scheints benötigt
\coordinate[] (v) at (0,1.25em);%
%\node[anchor=south, yshift=1em] at (0,0) (v){\vphantom{9}};%
}}

\def\tikzII{%
\tikz[] {\coordinate[] (Leer) at (0,0);% als Referenzkoordinate scheints benötigt
\coordinate[] (w) at (0,-0.75em);%
}}

\pgfplotstabletypeset[string type, 
header=false,
every head row/.style={output empty row},% 
]{
{\tikzI v}    3
1               -1
2               $-1$
{\tikzII w}  4
}

\tikz[overlay]{ % will unbedingt hier nochmal overlay
% Klammer zeichnen mit fit
\node[fit=(v.north west) (w.south west), left delimiter={\lgroup}]{};
% Test:
\draw[] (v) circle(1pt);
\draw[] (w) circle(1pt);
\draw[red] (v) -- (w);
}

\end{document}
Permanenter link

beantwortet 07 Okt, 05:07

cis's gravatar image

cis
8.5k16172275

bearbeitet 08 Okt, 04:06

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

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:

×37

Frage gestellt: 05 Okt, 10:37

Frage wurde angeschaut: 296 Mal

Zuletzt aktualisiert: 08 Okt, 11:44