>{...} 列规范中的宏延迟扩展

>{...} 列规范中的宏延迟扩展

这就是我现在的情况

\documentclass{article}
\usepackage{array}

\newcommand{\test}[1][default]{#1}

\begin{document}
\begin{tabular}{>{\test}c}
[one]1\\
1\\
1\\
1
\end{tabular}

\end{document}

在此处输入图片描述

如您所见,\test在表格行添加之前展开。期望的结果将是

\test[one]1\\
\test1\\
\test1\\
\test1

实际列,但使用>{...}列规范自动执行。这样打印结果将是

one1
default1
default1
default1

我也尝试过在这里申请\noexpand,但好像没有效果。

答案1

它首先没有被扩展,但紧随其后的标记不是你所期望的,尤其是\ignorespaces插入的

\documentclass{article}
\usepackage{array}

%\newcommand{\test}[1][default]{#1}
\newcommand{\test}[2]{\def\qqq{/#1/#2/}\show\qqq}

\begin{document}

\begin{tabular}{>{\test}c}
[one]1\\
1\\
1\\
1
\end{tabular}

\end{document}

显示:

> \qqq=macro:
->/\ignorespaces /[/.
\test #1#2->\def \qqq {/#1/#2/}\show \qqq 
                                          
l.10 [
      one]1\\
? 
> \qqq=macro:
->/\ignorespaces /1/.
\test #1#2->\def \qqq {/#1/#2/}\show \qqq 
                                          
l.11 1
      \\
? 
> \qqq=macro:
->/\ignorespaces /1/.
\test #1#2->\def \qqq {/#1/#2/}\show \qqq 
                                          
l.12 1
      \\
? 

在此处输入图片描述

\documentclass{article}
\usepackage{array}

\newcommand{\testb}[1][default]{\ignorespaces#1}
\newcommand\test[1]{\testb}

\begin{document}

\begin{tabular}{>{\test}l}
[one]1\\
1\\
1\\
1
\end{tabular}

\end{document}

相关内容