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, 14:35

cis's gravatar image

cis
8.9k17181297
Akzeptiert: 70%

bearbeitet 28 Okt '18, 12: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, 01:22

Henri's gravatar image

Henri
14.0k42937

bearbeitet 18 Feb, 01:25

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: 27 Okt '18, 14:35

Frage wurde angeschaut: 482 Mal

Zuletzt aktualisiert: 18 Feb, 01:25