自定义表格模板

自定义表格模板

当我编写下面的模板时,其中:

  • 第一个参数是为可选标题设计的:
  • 第二个被设计为传递给 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为空,如果不为空,则使用它来创建灰色标题行。

相关内容