当我编写下面的模板时,其中:
- 第一个参数是为可选标题设计的:
- 第二个被设计为传递给 tabularx。
我收到以下错误:扫描 @tempc 的使用时发现禁止的控制序列。\end{extabularx}
\newenvironment{extabularx}[2][]{%
\rowcolors{1}{gray!25}{white}%
\rownum=0%
\tabularx{\linewidth}{#2}%
\toprule%
%\ifx\empty#1\relax\else(\rowcolor{gray!50} #1\tabularnewline)\fi%
\ifthenelse{\empty#1}{%
\relax
}{%
\rowcolor{gray!50}%
#1\tabularnewline%
\midrule%
}%
}{%
\bottomrule%
\endtabularx%
}
如果没有 IF 语句,它可以正常工作,但如果有 \if 或 \ifx 或 \ifthenelse 语句,它就不能工作。
答案1
由于您没有提供测试文件或命令使用方法的示例,因此很难提供详细帮助,但是
%\ifx\empty#1\relax\else(\rowcolor{gray!50} #1\tabularnewline)\fi%
这在语法上是正确的,但测试中的第一个标记是否#1
是标记,\empty
如果是,则删除该标记,但#
执行的其余标记,后跟\relax
。如果#1
不是以开头\empty
,则它会排版为 a,(
后跟\rowcolor
,这将始终给出错误,因为它必须是行中的第一个命令,但(
在这里是跟在后面的。
这可能不是预期的测试(您提到它不起作用,但让我们猜测您希望它做什么)
\ifthenelse{\empty#1}{%
\relax
}{%
\rowcolor{gray!50}%
#1\tabularnewline%
\midrule%
}%
\ifthenelse
无法通过扩展来工作,所以您不想在这里使用它。带有测试子句\empty
是错误的,但即使修复了它,您也无法使用需要位于行首的\rowcolor
或等。\multicolumn
也许你想用
\if\relax\detokenize{#1}\relax
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
{\rowcolor{gray!50} #1\tabularnewline\midrule}%
@
在进行定义时假设是一封信(因此在包中或\makeatletter
在序言之后)
这将使用可扩展测试来检查是否#1
为空,如果不为空,则使用它来创建灰色标题行。