在语法上
\tl_set:Nf <tl var> {<tokens>}
如果<tokens>
以空格开头(输入~
),则该空格不会出现在 的定义中<tl var>
。如果 的中间或末尾出现空格<tokens>
,则保留在 中<tl var>
。
版本信息:
latex2e 2019-10-01
expl3 2020-01-12
例子
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\tl_new:N \l_test_tl
% \l_test_tl is set to "text", the beginning space is removed
\tl_set:Nf \l_test_tl { ~ text }
\verb|\tl_set:Nf|:~ |\l_test_tl| \par
% \l_test_tl is set to " text"
\edef \l_test_tl { ~ text }
\verb|\edef|:~ |\l_test_tl|
\ExplSyntaxOff
\end{document}
答案1
f
类型扩展被记录为删除前导空格:这是不可避免的,因为它是使用 实现的\romannumeral
。对于新的代码中,e
内部使用\expanded
(或模拟)-type 变体避免了这个问题,并且可以f
在过去使用 -type 扩展的几乎所有情况下使用。
答案2
从文档texdoc interface3
第 I.1 节中,f
第一次引入了 -type 扩展(感谢@frougon 在评论中指出这一点):
如果此标记是
<space token>
,它将被吞噬,因此不会成为结果参数的一部分。
因此,f
-type 扩展总是会吞噬第一个空间标记。