Da pgfplotstable hier selten verwendet: https://tex.stackexchange.com/questions/456576/pgfplotstable-how-to-use-pgfplotstablename-for-pgfplotstablegetelem


Wie kann \pgfplotstablename an der Stelle benutzen

\pgfplotstablegetelem{0}{[index]1}\of\TestTable anstelle von \TestTable?

enter image description here

MWE:

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

\pgfplotstableread[header=false]{
A   B
1   2
0   2
1   0
0   2
0   2
1   0
}\TestTable

\begin{document}

\pgfplotstabletypeset[string type,
every head row/.style={output empty row},% keinen header anzeigen
% works  funny (with speech mark...)
columns/0/.style = {
string replace={0}{\pgfplotstablename\pgfplotsretval},
},
% works not
columns/1/.style = {
string replace={0}{%\pgfplotstablename % \pgfplotsretval
\pgfplotstablegetelem{0}{[index]1}\of\TestTable %<-- use tablename here
\pgfplotsretval
}
},
]{\TestTable}

%Test:  \pgfplotstablegetelem{0}{[index]0}\of\TestTable \pgfplotsretval
%\pgfplotstablegetelem{0}{[index]1}\of\TestTable \pgfplotsretval
\end{document}

gefragt 22 Okt '18, 14:42

cis's gravatar image

cis
8.9k17181297
Akzeptiert: 70%

bearbeitet 24 Okt '18, 11:14

Geht nicht einfach mit csname oder so? Ich habe es nicht hinbekommen.

(26 Okt '18, 11:17) cis

Aja, das lustige Anführungszeichen wird zum backslash durch \usepackage[T1]{fontenc}; aber beim Problem hilft das auch nicht :(

(26 Okt '18, 11:45) cis

Wenn ich mir mit \show\pgfplotstablename die Definition von \pgfplotstablename ansehe, dann steht im Log

> \pgfplotstablename=macro:
->\TestTable .

Das heißt \pgfplotstablename wird nach einem Expansionschritt zu \TestTable. Nun geht es nur noch darum diesem Expansionsschritt irgendwie zu forcieren. Dies kann man entweder mit \edef or in LuaTeX und ab TeX Live 2019 mit \expanded machen.

Öffne in Overleaf
\expanded{%
  \noexpand\pgfplotstablegetelem{0}{[index]1}\noexpand\of\expandafter\noexpand\pgfplotstablename
}%

Das vorangestellte \noexpand vor jedem Makro verhindert die Expansion. Die Konstruktion \expandafter\noexpand\pgfplotstablename führt dazu, dass TeX zunächst über \noexpand drüber springt und \pgfplotstablename einmalig expandiert. Danach steht dann dort \noexpand\TestTable und alles ist gut.

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

\pgfplotstableread[header=false]{
A   B
1   2
0   2
1   0
0   2
0   2
1   0
}\TestTable

\begin{document}

\pgfplotstabletypeset[string type,
every head row/.style={output empty row},% keinen header anzeigen
% works  funny (with speech mark...)
columns/0/.style = {
  string replace={0}{\pgfplotstablename\pgfplotsretval},
},
% works not
columns/1/.style = {
  string replace={0}{%\pgfplotstablename % \pgfplotsretval
    \expanded{%
      \noexpand\pgfplotstablegetelem{0}{[index]1}\noexpand\of\expandafter\noexpand\pgfplotstablename
    }%
    \pgfplotsretval
  }
},
]{\TestTable}

% Test:  \pgfplotstablegetelem{0}{[index]0}\of\TestTable \pgfplotsretval
% \pgfplotstablegetelem{0}{[index]1}\of\TestTable \pgfplotsretval
\end{document}

alt text

Permanenter link

beantwortet 18 Feb, 01:41

Henri's gravatar image

Henri
14.0k42937

bearbeitet 18 Feb, 03:27

Aja, sehr gut. Also bei mir läuft das nur mit LuaLaTeX durch (habe TeXLive2019) - ist das richtig?

(18 Feb, 08:34) cis

@cis Bist Du sicher, dass Du TeX Live 2019 hast? Laut Timeline findet der finale Source commit erst in 4 Tagen statt, pretest startet am 1. März, die Release erfolgt am 30. April. Und ja, man braucht dafür \expanded, das es als Primitiv derzeit nur in LuaTeX gibt. Schreibt Henri ja auch ausdrücklich. Also: Ja, Du brauchst LuaLaTeX.

(18 Feb, 09:20) saputello

Jetzt, da ich nachgeschaut habe, musste ich feststellen, dass ich nur TeXLive2018 habe. :)

(18 Feb, 11:48) cis
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: 22 Okt '18, 14:42

Frage wurde angeschaut: 536 Mal

Zuletzt aktualisiert: 18 Feb, 11:48