LaTeX3:在宏后添加明确的空格

LaTeX3:在宏后添加明确的空格

考虑一下这个MWE:

\documentclass{scrartcl}

\usepackage{expl3}

\ExplSyntaxOn

\str_new:N \my_str
\str_set:Nn \my_str {Test}

\cs_new:Nn \my_printer:x { \sys_shell_now:n { echo ~ #1 ~ > ~ output } }

% \my_printer:n {This ~ is ~ a ~ test}

\my_printer:n {\my_str ~ another ~ word}

\begin{document}
    MWE
\end{document}

\ExplSyntaxOff

尽管我总是在 的参数的单词之间添加一个显式(非忽略)空格\my_printer:n,但第二种情况是写入文件Got 'Testanother word'而不是Got 'Test another word'写入output文件。在参数中没有宏的示例中,一切都按预期工作。

如果我在常规 LaTeX 中遇到宏占用空格的情况,我只需将其添加到{}宏的末尾,确保它不会占用其参数后面的空格。然而,当我尝试这样做时,expl3括号内的空格实际上被打印为纯字符。

我也尝试明确地使用它\use_str:N来获取字符串的值,但结果是一样的。

\my_str为了避免占用以下空间,需要采取什么技巧?

编辑:

事实证明,常规\my_str{}方法对我的 MWE 来说效果很好,但它在非排版环境中不起作用,例如 shell-escape(在这种情况下,行为正如我所描述的那样)。

编辑2:

调整 MWE 以实际反映我的问题

答案1

\foo word情况与经典 TeX完全相同 。

您可以使用\foo{} word\foo\space word(或\foo\c_space_tl word

请注意,在第一种形式中,它们{}不会被吸收,而是会生成两个额外的标记。如果是排版,空组不会产生任何影响,但这些标记会显示在\typeout或 shell 转义符或其他非排版上下文中。

答案2

\xspace我喜欢从包中添加xspace所有处理排版的宏。例如:

\newcommand{\arduino}{Arduino\textsuperscript{\tiny\textregistered}\xspace}

\xspace最后注意

相关内容