\empty 起什么作用?

\empty 起什么作用?

它有什么作用?它有哪些应用?我目前正在测试我的投影仪演示文稿的字幕的字符串长度,以确定行距。使用 会更简单吗\empty

如果我只是尝试\empty{word},似乎什么也没有发生。当然,我并不期望获得字符串长度,但我认为我可以检查标题是否为空。

这是我通过检查 beamer 的字幕来添加空间的方法:

\usepackage{xstring}
\StrLen{\insertsubtitle}[\subtitlelen]

\ifnum\subtitlelen>0{
    \vskip0.2cm
}\fi

我尝试按照评论中的要求澄清我的问题:我认为我可以检查\empty\StrLen这很容易理解,因为您可以将该值输出为文本。但是,这对不起作用,\empty所以我想知道如何使用它来完成相同的任务。

答案1

\empty在 LaTeX 内核中定义为

% latex.ltx, line 122:
\def\@empty{}
% latex.ltx, line 441:
\let\empty\@empty

实际上内核宏是\@empty,但\empty它是等效的并且在内核中是为了向后兼容,因为 Plain TeX 使用\empty

当你扩张时\empty你什么也得不到,所以

\empty{word}

相当于输入

{word}

在正常情况下,这与不使用括号的打字没有什么区别word

\empty(better )有什么用\@empty?如果你想查看 (无参数) 宏的替换文本是否没有标记,你可以这样做

\ifx\mymacro\empty
  <text to be used if \mymacro expands to nothing>
\else
  <text to be used otherwise>
\fi

一个常见的用例是当你想测试一个可选参数是否为空时。例如

 \makeatletter
 \newcommand{\mymacro}[1][]{%
   \def\@tempa{#1}%
   \ifx\@tempa\@empty
     no optional argument (or \mymacro[])
   \else
     do something with #1
   \fi
 }

然而,有了 e-TeX 扩展,最好使用

\newcommand{\mymacro}[1][]{%
  \if\relax\detokenize{#1}\relax
     no optional argument (or \mymacro[])
   \else
     do something with #1
   \fi
 }

\@empty在内核中的主要用途是将宏初始化为默认值,因此构造

\let\cs\@empty

被多次使用。在处理过程中,\cs将接收各种值,宏可以测试是否\cs处于初始状态。

的另一个重要用途是在的定义中\@array,其中

\let\par\@empty

发现,允许在arraytabular环境中出现空行。

相关内容