用于在 pgfplotstable 中勾勒单元格轮廓的宏

用于在 pgfplotstable 中勾勒单元格轮廓的宏

仍在努力解决\expandafter\noexpandtex 宏的问题。

我正在尝试使用 来整理一张表格pgfplotstable

在这种情况下,代码类似于

\documentclass{article}
\usepackage{pgfplotstable}

\def\outline{\noexpand\fbox{{##1}}}

\begin{document}
\pgfplotstableread[row sep=\\,col sep=&,header=false]{%
1 & 2 & 3 & 4\\%
5 & 6 & 7 & 8\\%
9 & 10 & 11 & 12\\%
}\mytable

\pgfplotstabletypeset[
debug,
column name={},
every row 2 column 1/.style={postproc cell content/.style={@cell content=\outline}}
]\mytable

\end{document}

并给出错误you can't use macro parameter character in horizontal restricted mode。如果我退出,##1它会用替换单元格内容##1

我最终想要做的是写出如下内容:

every row 2 column 1/.style=\outline以及类似这样的宏

\def\outline{%
\{postproc cell content.style=%
\{@cell content=\noexpand\fbox{##1}\}\}}

我究竟做错了什么?

答案1

你走错了路:这个问题与扩张控制无关。

问题在于,您的调用\outline没有传达参数 - 并且的定义\outline没有定义参数,尽管它需要一个参数。

一旦解决了这两个问题,您就可以重新通过#1进行逃脱##1

这似乎按预期工作:

\documentclass{article}
\usepackage{pgfplotstable}

\def\outline#1{\fbox{{#1}}}

\begin{document}
\pgfplotstableread[row sep=\\,col sep=&,header=false]{%
1 & 2 & 3 & 4\\%
5 & 6 & 7 & 8\\%
9 & 10 & 11 & 12\\%
}\mytable

\pgfplotstabletypeset[
debug,
column name={},
every row 2 column 1/.style={postproc cell content/.style={@cell content=\outline{##1}}}
]\mytable

\end{document}

在此处输入图片描述

我改变了 的定义\outline\def要求您在定义中列出预期的参数)和 的调用\outline。请注意,后者实际上需要##1(因为在该上下文中#1是 的参数every row 2 column 1,而您希望 是 的参数postproc cell content)。


编辑

关于你问题的第二部分以及你对此答案的评论:是的,可能可以通过扩展到键值赋值的宏来定义样式。但这显然不是最佳实践。事实上,如果它有效,那可能是运气。

如果你想有某种风格,比如“勾勒出这个单元格”,那么你最好使用某种

% preamble:
\pgfplotstableset{
   outline/.style={postproc cell content/.style={@cell content=\outline{##1}}}
}

%code:
\pgfplotstabletypeset[
debug,
column name={},
every row 2 column 1/.style={outline},
]\mytable

相关内容