我定义了一个变量\@afwezig
来保存未出席某次会议的人员。
\long\def\@afwezig{}
\def\afwezig#1{\def\@afwezig{#1}}
现在我想将会议报告的标题设为如下形式:
\newcommand{\makeheader}{
\noindent
\begin{tabularx}{\linewidth}{l X}
Aanwezig&: \@aanwezig \\
Verontschuldigd&: \@verontschuldigd \\
\ifx\@afwezig\@empty
\relax
\else
Afwezig&: \@afwezig \\
\fi %
\end{tabularx}
}
如果我在文档中指定,则应该给出一个包含“Afwezig:”部分的表格,但如果未指定任何内容,则给出一个不包含“Afwezig:”部分的表格。问题是,如果我未指定“\afwezig”,则会显示“Afwezig:”部分,当我将其放入文档文件\afwezig{somename}
时,会出现大量错误。\afwezig{}
第一个错误:
!不完整 \ifx;第 10 行后的所有文本均被忽略。
我在这里做错了什么?
附言:有人可以创建一个带有条件或 if-else 之类的标签吗?谢谢
答案1
您应该在内部将表格单元格视为本地组,因此您不能\ifx
在一个单元格中打开并在另一个单元格中关闭它。要解决这个问题,您需要使用扩展技巧:
\ifx\@afwezig\@empty
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{}
{Afwezig&: \@afwezig \\}
总的来说,这是处理 TeX 条件的更简洁的方法。诸如 expl3 和 etoolbox 之类的编程包提供了一种更简单的方法来编写这些构造;例如,在前者中:
\tl_if_empty:NTF \@afwezig
{}
{Afwezig&: \@afwezig \\}