这就是我现在的情况
\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}