https://tex.stackexchange.com/questions/457101/pgfplotstable-how-to-get-column-name-with-pgfkeysgetvalue


In einer Tabelle

\pgfplotstableread[header=true]{ A B 0 0 -1 1 3 2 }\test

sollen A bzw. B als column names verwendet werden.

Mit assign column name/.code=\pgfkeyssetvalue{/pgfplots/table/column name}{#1 irgendwas} kann ich das festlegen.

Doch wie kann ich nun mit \pgfkeysgetvalue{/pgfplots/table/column name}{\Name} \Name wieder darauf zugreifen?

Folgendes MWE funktioniert nicht:

alt text

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

\begin{document}
\pgfplotstableread[header=true]{
A  B
0  0 
-1  1 
3  2 
}\test

\pgfplotstabletypeset[string type, 
assign column name/.code=\pgfkeyssetvalue{/pgfplots/table/column name}{#1 hhh},
display columns/0/.style={
postproc cell content/.style={@cell content={##1 
\pgfplotstableset{columns/0/.try}%
\pgfkeysgetvalue{/pgfplots/table/column name}{\Name} \Name%
}}
},
]{\test}

\end{document}




€dit: Da die erste Problembeschreibung noch einigermaßen übersichtlich ist, wollte ich sie nicht löschen, daher als Edit.

Die column names stehen in der head row. Daher habe ich einmal every head row/.style={...} bemüht und die default implementation im Handbuch S.22 rausgesucht:

Allerdings liefert mir

every head row/.style={ typeset cell/.code={%% \ifnum\pgfplotstablecol=\pgfplotstablecols% \pgfkeyssetvalue{/pgfplots/table/column name}{##1} % %\pgfkeyssetvalue{/pgfplots/table/@cell content}{Name: ##1\\}% \else% \pgfkeyssetvalue{/pgfplots/table/column name}{##1} % %\pgfkeyssetvalue{/pgfplots/table/@cell content}{Name: ##1 &}% \fi% }%% },

immer nur den zuletzt gesetzten column name - irgendetwas fehlt....

alt text

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

\begin{document}
\pgfplotstableread[header=true]{
A  B
0  0 
-1  1 
3  2 
}\test

\pgfplotstabletypeset[string type, 
every head row/.style={
typeset cell/.code={%% 
\ifnum\pgfplotstablecol=\pgfplotstablecols%
\pgfkeyssetvalue{/pgfplots/table/column name}{##1} %
%\pgfkeyssetvalue{/pgfplots/table/@cell content}{Name: ##1\\}%
\else%
\pgfkeyssetvalue{/pgfplots/table/column name}{##1} %
%\pgfkeyssetvalue{/pgfplots/table/@cell content}{Name: ##1 &}%
\fi%
}%%
},
% Wofür? ====================
%assign column name/.code=\pgfkeyssetvalue{/pgfplots/table/column name}{#1 hhh},
% ========================
display columns/0/.style={
postproc cell content/.style={@cell content={##1 in Spalte:
\pgfkeysgetvalue{/pgfplots/table/column name}{\Name} \Name%
}}
},
display columns/1/.style={
postproc cell content/.style={@cell content={##1 in spalte 
\pgfkeysgetvalue{/pgfplots/table/column name}{\name} \name%
}}
},
]{\test}

\end{document}

gefragt 27 Okt '18, 20:35

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 28 Okt '18, 17:37


Sowohl column name als auch \pgfplotstablecolname sind nur während der Verarbeitung des Tabellenkopfes verfügbar (steht auch so in der Anleitung). Das heißt, wenn man den Wert behalten will um ihn im Tabellenkörper zu verwenden, muss man eine vollständige Expansion durchführen. Dazu verwendet man \pgfkeyssetevalue (beachte das e nach set im Namen).

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

\begin{document}
\pgfplotstableread[header=true]{
A  B
0  0 
-1  1 
3  2 
}\test

\pgfplotstabletypeset[string type, 
assign column name/.code={%
  \pgfkeyssetvalue{/pgfplots/table/column name}{#1 hhh}%
},
display columns/0/.style={
  postproc cell content/.code={
    \pgfkeyssetevalue{/pgfplots/table/@cell content}{%
      \unexpanded{##1\pgfplotstableset{columns/0/.try}}%
      \pgfplotstablecolname
    }
  }
},
]{\test}

\end{document}

alt text

Dasselbe Spiel im zweiten Beispiel:

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

\begin{document}
\pgfplotstableread[header=true]{
A  B
0  0 
-1  1 
3  2 
}\test

\pgfplotstabletypeset[string type, 
every head row/.style={
typeset cell/.code={%% 
\ifnum\pgfplotstablecol=\pgfplotstablecols%
\pgfkeyssetvalue{/pgfplots/table/column name}{##1} %
%\pgfkeyssetvalue{/pgfplots/table/@cell content}{Name: ##1\\}%
\else%
\pgfkeyssetvalue{/pgfplots/table/column name}{##1} %
%\pgfkeyssetvalue{/pgfplots/table/@cell content}{Name: ##1 &}%
\fi%
}%%
},
% Wofür? ====================
%assign column name/.code=\pgfkeyssetvalue{/pgfplots/table/column name}{#1 hhh},
% ========================
display columns/0/.style={
  postproc cell content/.code={%
    \pgfkeyssetevalue{/pgfplots/table/@cell content}{%
      \unexpanded{##1 in Spalte: }\pgfplotstablecolname}
  }
},
display columns/1/.style={
  postproc cell content/.code={%
    \pgfkeyssetevalue{/pgfplots/table/@cell content}{%
      \unexpanded{##1 in Spalte: }\pgfplotstablecolname}
  }
},
]{\test}

\end{document}

alt text

Permanenter link

beantwortet 18 Feb '19, 07:22

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 18 Feb '19, 07:25

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

gestellte Frage: 27 Okt '18, 20:35

Frage wurde gesehen: 4,807 Mal

zuletzt geändert: 18 Feb '19, 07:25