它有什么作用?它有哪些应用?我目前正在测试我的投影仪演示文稿的字幕的字符串长度,以确定行距。使用 会更简单吗\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
发现,允许在array
或tabular
环境中出现空行。