在以下示例中,主段落排版为 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
。但是insert
marginpar 的节点会保护单词之间的空间,因此它不会被删除。如果你运气不好,你会得到一个换行符,并且段落的最后一行仅有的有插入节点,因此会用\parfillskip
粘连填充,并显示为空白行。%
在上面的行末尾添加 a ,效果会更好。(使用\footnote
或 时,您会看到相同的效果\index
)