\pgfplotstablename
在这种情况下我该如何使用
\pgfplotstablegetelem{0}{[index]1}\of\TestTable
代替\TestTable
?
梅威瑟:
\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},% no header
% 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}
答案1
交叉发布我在 TeXwelt.de 上的回答以下。
\pgfplotstablename
当我检查使用的定义时\show\pgfplotstablename
,我在日志中发现
> \pgfplotstablename=macro:
->\TestTable .
这意味着一步就\pgfplotstablename
可以将 展开为\TestTable
。现在我们只需要找出如何强制执行这一步展开。这可以\edef
在 LuaTeX 中使用 或 来完成,也可以从 TeX Live 2019 开始使用\expanded
。
\expanded{%
\noexpand\pgfplotstablegetelem{0}{[index]1}\noexpand\of\expandafter\noexpand\pgfplotstablename
}%
\noexpand
每个宏前面的引线都会抑制扩展。该构造\expandafter\noexpand\pgfplotstablename
导致 TeX 跳过\noexpand
并扩展\pgfplotstablename
一次。之后我们就有了\noexpand\TestTable
,一切都很好。
\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}