我遇到了以下代码的问题。这是我能制作的最小示例。
我正在处理一个包含人员索引的文档,为此我为每个人创建了一个命令。它有一个可选参数,可以覆盖“默认名称”。因此\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 的基本文档中)。