测试表格中调用了哪个宏

测试表格中调用了哪个宏

我想测试表格中是否调用了某个宏。

MWE 说明了这一点。但结果总是“否”。

如何在不改变宏的情况下实现我想要的\Cl(这只是一个简化的例子)?

\documentclass{article}
\usepackage{collcell}

\newcolumntype{P}{>{\collectcell\foo}c<{\endcollectcell}}

\def\foo#1{\ifx#1\Cl Yes\else No\fi}

\def\Cl{\textbf{Cl}}

\begin{document}

\begin{tabular}{cPc}
a & b & c\\
d & \Cl & d\\
\end{tabular}

\end{document}

答案1

\foo永远看不到\Cl。原因是当对齐单元开始时,TeX 会扩展标记以查找所基于的\omit(原始元素) 。\multicolumn

\foo传递给第二行的实际参数是\protect\textbf•{Cl}(项目符号表示宏名称中的空格):\Cl扩展一次为\textbf{Cl}\textbf{Cl}扩展为\protect\textbf•{Cl};由于这里\protect等同于\relax,搜索停止,但对于\foo看到真实的东西来说已经太晚了。

只需保护你的\Cl宏。

\documentclass{article}
\usepackage{collcell}
\usepackage{etoolbox}

\newcolumntype{P}{>{\collectcell\foo}c<{\endcollectcell}}

\newcommand\foo[1]{\ifx#1\Cl Yes\else No\fi}

% we don't want \Cl gets expanded when looking for \omit
\newrobustcmd\Cl{\textbf{Cl}}

\begin{document}

\begin{tabular}{cPc}
a & b & c\\
d & \Cl & d\\
\end{tabular}

\end{document}

在此处输入图片描述

相关内容