当使用 pgfkeys 定义的宏包含“&”符号时,未定义控制序列

当使用 pgfkeys 定义的宏包含“&”符号时,未定义控制序列

我目前正在研究如何使用pgfkeys,但遇到了以下问题。我试图定义一个命令来打印表格的一部分,并用通过提供的参数填充pgfkeys。我的情况的简化版本如下所示:

\documentclass{article}

\usepackage{pgfkeys,xparse}
\pgfkeys{
    /test/.is family, /test,
    right/.estore in=\testright,
    left/.estore in=\testleft,
}

\NewDocumentCommand{\tablepart}{o}{
    \pgfkeys{/test,#1}
    \testleft{} & \testright{} \\
    \testleft{} & \testright{} \\
}

\begin{document}
\begin{tabular}{rl}
    \tablepart[left={ABC},right={DEF}]{}
\end{tabular}
\end{document}

Undefined control sequence但是,此设置在 上出现错误。但是,如果我删除定义中的\tablepart[left={ABC},right={DEF}]{}& 符号和,错误就会消失。我在这里做错了什么?\\\tablerow

答案1

表格单元格是一个组,因此所有定义都会重置&

但是,您仍然可以在第一个单元格中扩展该命令。

\documentclass{article}

\usepackage{pgfkeys,xparse}
\newcommand\hmm{&}

\pgfkeys{
    /test/.is family, /test,
    right/.estore in=\testright,
    left/.estore in=\testleft,
}

\NewDocumentCommand{\tablerow}{o}{
    \pgfkeys{/test,#1}
    \testleft{} \expandafter\hmm\testright{} \\
}

\begin{document}
\begin{tabular}{rl}
    \tablerow[left={ABC},right={DEF}]{}
\end{tabular}
\end{document}

或者针对后来添加的版本(\ExpandArgs在 2022 LaTX 中预定义,但也可以针对旧版本定义)

\documentclass{article}

\usepackage{pgfkeys,xparse}
\def\hmm#1#2{#1&#2\\#1&#2\\}

\pgfkeys{
    /test/.is family, /test,
    right/.estore in=\testright,
    left/.estore in=\testleft,
}

\NewDocumentCommand{\tablepart}{o}{
    \pgfkeys{/test,#1}
     \ExpandArgs{oo}\hmm{\testleft}{\testright}
}

\begin{document}
\begin{tabular}{rl}
    \tablepart[left={ABC},right={DEF}]{}
\end{tabular}
\end{document}

相关内容