使用代码
\documentclass{article}
\usepackage{array}
\begin{document}
\newcolumntype{c}{l}
$\begin{array}{cc}
a+b+c & a \\
d & e
\end{array}$
\end{document}
我期望对列的原始类型的重新定义产生警告c
。
事实上,在array.sty
(版本 2.4k 2018-12-30)中我们在第 241 行有一些处理此类警告的代码。
\def\newcolumntype#1{%
\edef\NC@char{\string#1}%
\@ifundefined{NC@find@\NC@char}%
{\@tfor\next:=<>clrmbp@!|\do{\if\noexpand\next\NC@char
\PackageWarning{array}%
{Redefining primitive column \NC@char}\fi}%
\NC@list\expandafter{\the\NC@list\NC@do#1}}%
{\PackageWarning{array}{Column \NC@char\space is already defined}}%
第四行\noexpand
对我来说似乎很奇怪。
答案1
它原本
\if\next\NC@char
但它被改为
\if\noexpand\next\NC@char
我认为预期的改变是
\if\expandafter\noexpand\next\NC@char
以防止在某些语言设置中激活array
包之后再加载该包。!
这个改变是错误的,但早在 1994 年 3 月就已做出,而且之前没有人报告过……