为什么 \marginpar 有时会添加不必要的换行符?

为什么 \marginpar 有时会添加不必要的换行符?

在以下示例中,主段落排版为 3 行文本,段落在到达页边距之前在第三行结束。但是,当使用命令取消注释该行时\marginpar,段落会重新格式化,以便第三行一直延伸到页边距,并插入空白的第四行。\marginpar插入到主文本中而“不适合”第三行的内容是什么?为什么?

\documentclass{amsart}
\begin{document}

\noindent
Suppose furthermore that abcde is a regular cardinal such thati abcdefghiji
The collection abcdefg is called a 
nice collection of elementary submodels of $H(\theta)$ indexed by $T$ if,
in addition to being a nice collection of sets as above, we have:  Bake
%\marginpar{Bake a cake.}

Next paragraph.
\end{document}

(注意:\noindent和文档类的选择可能对问题来说不是必不可少的,但当我尝试在没有它们的情况下重现问题时,我无法正确获得间距。)

我意识到实际的解决方法是删除命令前的单词间空格\marginpar。但是,我不清楚为什么这是必要的。此外,我在使用依赖于 的包\todo的命令时发现了这个问题。似乎todonotes\marginpar\todo故意吞噬了其参数后面的空格,这意味着它被设计成一般情况下,应该在它前面留一个空格,但这种情况却成为一个例外。

答案1

段落结束命令(来自\par或空白行)尝试通过执行操作来删除段落末尾的任何空格(在进行换行之前)\unskip。但是insertmarginpar 的节点会保护单词之间的空间,因此它不会被删除。如果你运气不好,你会得到一个换行符,并且段落的最后一行仅有的有插入节点,因此会用\parfillskip粘连填充,并显示为空白行。%在上面的行末尾添加 a ,效果会更好。(使用\footnote或 时,您会看到相同的效果\index

相关内容