xparse:文档命令扩展后缺少空格

xparse:文档命令扩展后缺少空格

我遇到了以下代码的问题。这是我能制作的最小示例。

我正在处理一个包含人员索引的文档,为此我为每个人创建了一个命令。它有一个可选参数,可以覆盖“默认名称”。因此\JensHansen打印“Jens Hansen”和\JensHansen{Jens}打印“Jens”,但两者都会在索引中创建条目。

然而,在第一种情况下,Hansen 之后没有空格,而当下一个单词只是一个普通单词时,就会发生冲突,就像下面的最后几行变成“Jens Hansenliked to walk the country roads”或“A man told Jens Hansento leave”...

如果我在命令中加了空格,则会导致引号和撇号前面出现空格。\underline为了便于阅读,我在命令中加了空格,但它将在最终版本中被删除。

它可能与命令的可选参数有关\Fallback,但我不确定如何......

\documentclass[a4paper]{memoir}

\usepackage{xparse}
\usepackage[makeindex]{imakeidx}

\makeindex

\DeclareDocumentCommand\Fallback{ m m }{\IfNoValueF{#1}{#1}\IfNoValueT{#1}{#2}}

% underline just for clarity
\DeclareDocumentCommand\person{ m g }{\underline{\index{#1}{\Fallback{#2}{#1}}}}

\DeclareDocumentCommand\JensHansen{ g }{\person{Jens Hansen}{#1}}

\begin{document}

There was a man named \JensHansen, who usually just went by \JensHansen{Jens}.
Sometimes, he even went by ``\JensHansen{Nysteds Skraek}!''
\JensHansen{Jens}' father was named Hans.
\JensHansen liked to walk the country roads. % space following Hansen is missing!
A man told \JensHansen to leave. % again!

\printindex

\end{document}

答案1

我认为,这只是一个基本TeX事实,即控制字\foo应该被键入\foo{} bar,或者\foo\ bar其后的空格\foo不应该被TeX标记解析器删除。

也许看看空间包。或者至少阅读它的文档,因为我认为它解释了底层事实(这应该在任何介绍 LaTeX 的基本文档中)。

相关内容