在表格中使用带有 && 运算符的 pgfmathsetmacro 或 pgfmathtruncatemacro 时,“\pgfmath@@onquick 的参数有一个额外的 }”

在表格中使用带有 && 运算符的 pgfmathsetmacro 或 pgfmathtruncatemacro 时,“\pgfmath@@onquick 的参数有一个额外的 }”

当我运行以下代码时......

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tabular}{c}
\pgfmathsetmacro\foo{(2<3) && (3<4)}
\foo
\end{tabular}
\end{document}

我明白了

错误:\pgfmath@@onquick 的参数有一个多余的}。

如果我使用\pgfmathtruncatemacro,我会得到同样的错误。但是:

  • 如果我删除tabular环境,它仍然可以正常工作。

  • 如果我用 替换操作and((2<3),(3<4)),它就可以正常工作。

  • 如果我使用\pgfmathparse...\pgfmathresult,它就可以正常工作。

有办法解决这个问题吗?显然,问题在于 以tabular某种方式被读&作行分隔符。(目前,我在所有代码中都使用and而不是,因为我担心我的宏最终可能会被放入. 中)&&pgfmathtabular

答案1

\pgfmathsetmacro使用\begingroup \endgroup组进行计算,但不足以隐藏&&表格,你可以重新定义它来{代替使用但不保证这不会破坏 pgf 中的其他内容。

但这是可行的:

\documentclass{article}
\usepackage{pgf}

\makeatletter
\def\pgfmathsetmacro#1#2{%
%\begingroup
{%
\pgfmathsetlength\pgfmath@x{#2}%
\edef#1{\pgfmath@tonumber{\pgfmath@x}}%
%\pgfmath@smuggleone{#1}\endgroup
\expandafter}\expandafter\def\expandafter#1\expandafter{#1}%
}
\makeatother

\begin{document}
\begin{tabular}{c}
\pgfmathsetmacro\foo{(2<3) && (3<4)}
\foo
\end{tabular}
\end{document}

相关内容