Nachdem ich [diesen Thread][1] gelesen habe, glaube ich, dass das ein tiefe ams-Sache ist und habe daher auch mal Amerikanern gefragt: https://tex.stackexchange.com/questions/454460/pgfplotstables-amsmath-how-to-put-in-group-brackets-into-a-pgfplotstable


alt text

\lgroup und \rgroup zeichnen nur Klammernecken von abgerundeten eckigen Klammern (erst \left\lgroup würde eine vollständige Klammer angeben).

Wie kann ich damit Klammern um die erste und vorletzte Spalte einer pgfplotstable legen?

[Die Klammernfragmente sind jetzt hier, um den Code einfach zu halten, in die Tabelle reingesudelt; später sollen sie schon mit @cell content aus der Tabelle verschwinden!]

So sieht es natürlich grauenvoll aus:

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

% Klammernbruchstücke
\def\OL{\rotatebox{180}{$\rgroup$}}
\def\UL{$\lgroup$}
\def\OR{\rotatebox{180}{$\lgroup$}}
\def\UR{$\rgroup$}
\def\Strich{\rule{1.25pt}{1em}}

\begin{document}
%\Strich

IST: $M =
\pgfplotstabletypeset[header=false,
every head row/.style={output empty row},% 
string type, 
%dec sep align % geht nicht
]{
{\OL  1}         2.0          {3\OR}            abc
{$|$   4}          5           {6 \Strich}       d
{\Strich 7}      -8           {9 \Strich}       e
{\UL 10}         11          {-12\UR}         f
}$
\bigskip

SOLL:
$M = \left\lgroup\begin{array}{r r r}
1 & 2.0 & 3 \\
4 & 5  & 6\\
7 & -8  & 9\\
10 & 11  & -12\\
\end{array}\right\rgroup \begin{array}{l}
abc \\ d \\ e \\ f \\
\end{array}$

\end{document}

gefragt 09 Okt '18, 05:53

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 09 Okt '18, 13:39

1

Ich bin ein wenig verwirrt. Du hast in deinen anderen Fragen bereits eine Möglichkeit gefunden, deine Tabellen einzulesen und auszugeben. Jetzt willst du sie mit Klammern versehen, um aus ihnen Matrizen zu machen. Wieso kannst du nicht die Ausgabe einfach mit $\left(\TabelleI\right)$ versehen?

(09 Okt '18, 12:39) Skillmon

@Skillmon

a. Die Möglichkeiten, die ich in der anderen Frage gefunden habe, sind alle instabil. Sobald sich der Tabelleninhalt (dramatisch) ändert, fliegt einem die Methode um die Ohren.

b. $\left(\TabelleI\right)$ geht deshalb nicht, weil die hintere Klammer nicht nach, sondern vor der letzten Spalte steht. Wenn man sie mit negativem \vspace reinschmiert, wird es wieder unsauber (vgl. a)

(09 Okt '18, 13:26) cis

c. Ich glaube/vermute, die eleganteste Methode ist hier group-Klammern selbst zu zeichnen, sowie es amsmath sonst im Hintergrund macht. Aber dazu muss ich verstehen, was da gemacht wird.

Mit anderen Worten: es geht mir hier nicht um die einmalige Erstellung einer schicken Matrix, das habe ich ja mit zwei arrays umgesetzt, sondern um ein höheres Ziel.

(09 Okt '18, 13:48) cis

Du kannst, wie im zweiten Beispiel mit array die letzte Spalte hinzufügen. Das wirkt insgesamt sauberer und einfacher, als sich in pgfplotstabletypeset reinzuhacken (sollte dieses nicht bereits die Möglichkeiten bieten, die du benötigst, damit kenne ich mich nicht sonderlich gut aus).

(09 Okt '18, 15:16) Skillmon

Wenn ich die Matrix mit pgfplotstable setze, die Annotationen aber als Standard-AMS array, würde das bedeuten: mein Projekt ist gescheitert. Gäbe auch dann keinen richtigen Grund mehr, überhaupt pgfplotstable zu verwenden. Das kann man machen, wenn man das einmalig in einem Artikel o.ä. braucht; dann ist der konventionelle Standardweg ausreichend.

(09 Okt '18, 15:23) cis

Vielleicht könnte man es doch teils konventionell machen, wenn man diverse Abstände misst und damit den negativen hspace vor der schließenden Klammer bestimmt. Das dürfte sich dann zu einem Huhn-Ei-Problem entwickeln...

(09 Okt '18, 15:44) cis

Neue Idee:
Da ich nicht weiß, wie man an den Wert der Spaltenbreite kommt, theoretisch irgendwie so:

Mit Schleife Elemente der vor-letzten Spalte (das sind) durchleuchten.

Betragsmäßiges Maximum raussfiltern. Breite davon messen.

Schließende Klammer mit negativem hspace davor platzieren.

OMG - ein scheinbar triviales Problem...

(09 Okt '18, 18:23) cis

@cis man kann sich auch ohne Probleme eine Struktur schreiben, die automatisiert mit \pgfplotstabletypeset und einem array für die Annotationen ausgegeben wird. Ich verstehe das Problem nicht.

(09 Okt '18, 19:49) Skillmon

Ach sooo.... ich glaube, ich weiß, was Du meinst.... Oje, ... Hauptsache am Schluß steht mit \Matrix alles da.

Ach, aber das ist doof, woran ich gerade denke: Ich würde versuchen mit \pgfplotstablegetelem die letzte Spalte auszulesen und das müsste dann in ein array automatisch reingehen und das ganze muss noch in ein newcommand, damit der Befehl \Matrix da ist.

Also ich glaube, das ist mir zu hoch - da verrenne ich mich total...

(09 Okt '18, 20:17) cis

PS: Wobei... Schluss jetzt mit diesem array... Man kann für die pgfplotstable auch nur bestimmte Spalten anzeigen. Wenn man einmal pgfplotatableread gemacht hat, kann man das zweimal mit pgfplotstabletypeset ausgeben.

Eben einmal ohne letzte Spalte, einmal nur die letzte Spalte und dazwischen kommen Klammern.

Jaaaa... das könnte gehen. ;)

(09 Okt '18, 20:22) cis
Ergebnis 5 von 10 show 5 more comments

Ja, infolge der anregenden Diskussion mit @Skillmon kam ich zu folgender Lösung:

Man kann ganz einfach für die eingelesene vollständige Tabelle, im Beispiel mit 4 Spalten, einmal

\pgfplotstabletypeset[columns={0,1,2}]{\test} (erste 3 Spalten)

und einmal \pgfplotstabletypeset[columns={3}]{\test} ausgeben;

und das Ganze kann man jetzt noch mit schön mit Klammern bestücken:

$\left\lgroup \pgfplotstabletypeset[columns={0,1,2}, dec sep align]{\test} \right\rgroup \pgfplotstabletypeset[columns={3}]{\test}$

Heureka!

alt text

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

\pgfplotstableread[header=false]{
1         2.0        3            abc
4         5           6           d
7      -8           9             e
10     11    -12.1               f
}\test

\pgfplotstableset{
every head row/.style={output empty row},% keinen verdammten HEADER!!!
string type
}

\begin{document}
\pgfplotstabletypeset[]{\test}

$\left\lgroup
\pgfplotstabletypeset[columns={0,1,2}, dec sep align]{\test}
\right\rgroup
\pgfplotstabletypeset[columns={3}]{\test}$

\end{document}
Permanenter link

beantwortet 09 Okt '18, 20:37

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 09 Okt '18, 20:40

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:

×39
×38

gestellte Frage: 09 Okt '18, 05:53

Frage wurde gesehen: 4,742 Mal

zuletzt geändert: 09 Okt '18, 20:40