仅评估一次宏

仅评估一次宏

在我的 LaTeX 文档中,我经常需要表格中的特定值。因此我可以定义以下宏:

\newcommand{\values}{\pgfplotstablegetelem{0}{0}\of\mydata\pgfplotsretval}

pgfplotstable 手册建议不要在循环中使用此命令:

注意力:如果可能的话,请避免在循环内使用此命令。它相当慢。

明智的做法是只计算一次值\value,然后根据需要多次使用它,而不会减慢编译速度。最好的方法是什么?

这是一个示例代码。

\documentclass[border=2mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}
\pgfplotstableread[col sep=comma]{
1,15,53
5,74,12
}\mydata
\renewcommand{\value}{\pgfplotstablegetelem{0}{0}\of\mydata\pgfplotsretval}
\begin{document}
This is the first values : \values
\end{document} 

答案1

当你这样做

\pgfplotstablegetelem{0}{0}\of\mydata

\pgfplotsretval仅扩展为计算值。因此,您只需将宏定义为的当前扩展\pgfplotsretval

\documentclass[border=2mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}
\pgfplotstableread[col sep=comma]{
1,15,53
5,74,12
}\mydata
\pgfplotstablegetelem{0}{0}\of\mydata

\makeatletter
\@ifdefinable{\myvalue}{\let\myvalue\pgfplotsretval}
\makeatother

\begin{document}
This is the first value: \myvalue
\end{document}

重要警告

\renewcommand如果您不清楚自己在做什么,请不要使用。宏\value是 LaTeX 内核的一个非常重要的功能。重新定义它会破坏大量内部功能。

相关内容