\@hangfrom 后的多余空格

\@hangfrom 后的多余空格

我定义了一个\tstcmd带有一个参数的命令为\@hangfrom{[#1]{ }}\nobreak。在使用此命令时,我发现右括号和后面的文本之间总是有一个多余的空格。

以下是 MWE:

\documentclass{article}

\makeatletter
\def\tstcmd#1{\@hangfrom{[#1]{ }}\nobreak}
%%\DeclareRobustCommand\tstcmd[1]{\@hangfrom{[#1]{ }}\nobreak}  %%No difference
\def\hf{\@hangfrom}
\makeatother

\begin{document}

\tstcmd{1} fsdfsd fsdfsd pppwp fsdfsd fsdfsd ewrwerw hojsoisdjf
fsdfsd fsdfsd pppwp fsdfsd fsdfsd ewrwerw hojsoisdjf fsdfsd fsdfsd
pppwp fsdfsd fsdfsd ewrwerw hojsoisdjf fsdfsd

\hf{[1]{ }}\nobreak fsdfsd fsdfsd pppwp fsdfsd fsdfsd ewrwerw
hojsoisdjf fsdfsd fsdfsd pppwp fsdfsd fsdfsd ewrwerw hojsoisdjf
fsdfsd fsdfsd pppwp fsdfsd fsdfsd ewrwerw hojsoisdjf fsdfsd

\end{document}

即使\DeclareRobustCommand使用了,多余的空间仍然存在,显然\nobreakin\tstcmd无效。有人知道为什么会这样以及如何修复它吗?提前致谢。

答案1

\DeclareRobustCommand 与您描述的问题无关。如果您想将\tstcmd调用放在命令的参数中(例如) ,这将很有用\section,其中未受 \protected 的内容会得到扩展在将其写入 .toc 文件之前。 \DeclareRobustCommand 将确保在这种情况下命令不会被扩展,但它在这里似乎不是很有用。

\nobreak应该先行当您不希望它成为合法断点时,请添加一个粘合项(此处为您的空间),不要遵循它。您的多余空间来自这样一个事实:您在{ }宏定义中写了一个空间标记,并在调用站点之后紧接着写了另一个空间标记\tstcmd{1}。我建议这样做:

\newcommand*{\tstcmd}[1]{%
  \@hangfrom{[#1] }\nolinebreak\ignorespaces}

给出您使用命令的方式(即,之后应该忽略一个空格标记)。

相关内容