程序包数组错误:非法前缀标记 (\ifthenelse)

程序包数组错误:非法前缀标记 (\ifthenelse)

此表环境mymulticolumn有三个参数,第一个参数设置可选的\arraystretch,第二个参数设置“表观”列数(2 或 3),最后一个参数设置某些列的宽度。代码生成了问题标题中指示的错误,这又引发了我的疑问:为什么?

\documentclass{article} 

\usepackage{array}
\usepackage{ifthen}

%column specifications
\newcommand{\cs}{\hspace{.5em}}
\newcolumntype{x}{>{\raggedleft\hspace{0pt}}p{1.5em}}

%mymulticolumn
\newenvironment{mymulticolumn}[3][2]{%
\renewcommand{\arraystretch}{#1}
\begin{tabular}
\ifthenelse{#2=2}
{ {@{} x @{\cs} p{#3} x @{\cs} l} }
{ {@{} x @{\cs} p{#3} x @{\cs} p{#3} x @{\cs} l} } }%
{\end{tabular}}

\begin{document}

\begin{mymulticolumn}{2}{1.5in}
1. & $f(x)=x^2$ & 
2. & $f(x)=\sqrt{x}$ \\
3. & $f(x)=\ln x$ &
4. & $f(x)=\tan x$
\end{mymulticolumn}

\end{document} 

答案1

它不能工作有几个原因,主要原因是 只是\ifthenelse成为 的参数\begin{tabular}。第二个原因是 的array参数\begin{tabular}没有展开,第三个原因是即使进行了扩展,它也不会起作用,因为\ifthenelse不是“完全可扩展的”。

放在\ifthenelse 外部

\newenvironment{mymulticolumn}[3][2]
 {%
  \renewcommand{\arraystretch}{#1}%
  \ifthenelse{#2=2}
    {%
     \begin{tabular}{@{} x @{\cs} p{#3} x @{\cs} l}%
    }
    {%
     \begin{tabular}{@{} x @{\cs} p{#3} x @{\cs} p{#3} x @{\cs} l}%
    }%
 }%
 {\end{tabular}}

相关内容