我有一本书,其中自定义命令\marginpar
经常调用该命令。问题是,有时它在页面的相当低的位置被调用,然后边注段落会深入甚至低于脚注。考虑到文档的长度和自定义命令所涉及的其他代码,手动对每个\marginpar
调用进行硬编码以使其位于页面的正确位置根本不可行。我搜索了任何方法来强制将注释放在页面的更高位置,但无济于事。我知道有这个marginnote
包,但由于它提供的\marginnote
命令甚至没有浮动,它似乎更不适合处理这种情况。这是我的 MWE:
\documentclass{book}
\newcounter{factctr}
\newcommand{\fact}[1]{\stepcounter{factctr}\marginpar{{\centering FACT \arabic{factctr}
}
\textit{#1}}}
\begin{document}
\chapter{First Chapter}
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nunc congue nisi vitae suscipit tellus mauris a. Convallis tellus id interdum velit laoreet. Tempor commodo ullamcorper a lacus vestibulum. Massa massa ultricies mi quis hendrerit. Velit scelerisque in dictum non consectetur a erat nam at. Consequat semper viverra nam libero justo laoreet sit amet cursus. Ut ornare lectus sit amet est. Porta nibh venenatis cras sed felis eget velit aliquet. Imperdiet dui accumsan sit amet nulla facilisi morbi.
Enim blandit volutpat maecenas volutpat blandit aliquam. Ac tortor dignissim convallis aenean et tortor at. Consequat interdum varius sit amet. Aliquet eget sit amet tellus. Nascetur ridiculus mus mauris vitae ultricies leo integer. Sit amet porttitor eget dolor morbi non arcu risus quis. Gravida arcu ac tortor dignissim convallis aenean et tortor. Faucibus ornare suspendisse sed nisi lacus sed. In iaculis nunc sed augue lacus viverra vitae congue eu. Amet cursus sit amet dictum sit. Adipiscing vitae proin sagittis nisl. Tincidunt ornare massa eget egestas. Pretium lectus quam id leo in vitae turpis massa. Elementum eu facilisis sed odio. Diam in arcu cursus euismod quis viverra nibh cras pulvinar. Vehicula ipsum a arcu cursus vitae congue. Tellus id interdum velit laoreet id.
Id diam vel quam elementum. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus. Ut etiam sit amet nisl purus in mollis nunc sed. Aliquam sem fringilla ut morbi tincidunt. Tellus orci ac auctor augue. Etiam non quam lacus suspendisse faucibus. Odio euismod lacinia at quis risus. Est pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Duis ultricies lacus sed turpis tincidunt. Habitasse platea dictumst vestibulum rhoncus. Massa sapien faucibus et molestie ac feugiat sed lectus vestibulum. Integer vitae justo eget magna fermentum iaculis. Enim diam vulputate ut pharetra sit amet aliquam.
Tristique nulla aliquet enim tortor at. Tellus at urna condimentum mattis. Pretium quam vulputate dignissim suspendisse in. Accumsan in nisl nisi scelerisque eu ultrices vitae auctor eu. Eget velit aliquet sagittis id consectetur purus. Egestas quis ipsum suspendisse\fact{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.} ultrices gravida dictum fusce ut. Commodo nulla facilisi nullam vehicula ipsum a arcu cursus vitae. Eu sem integer vitae justo eget magna fermentum iaculis. Nec ullamcorper sit amet risus nullam eget felis. Ut faucibus pulvinar elementum integer enim. Arcu dui vivamus arcu felis bibendum ut tristique et. Dolor morbi non arcu risus. Placerat\fact{Tristique risus nec feugiat in fermentum.} in egestas erat imperdiet sed euismod nisi. Mollis aliquam ut porttitor leo a.
Non consectetur a erat nam at lectus urna duis convallis. Rhoncus est pellentesque elit ullamcorper dignissim. A cras semper auctor neque vitae tempus quam. Etiam dignissim diam quis enim lobortis scelerisque fermentum dui. Magna eget est lorem ipsum. Feugiat pretium nibh ipsum consequat. Eget gravida cum sociis natoque penatibus et magnis. Tincidunt tortor aliquam nulla facilisi cras. Turpis egestas sed tempus urna et pharetra. Aliquam id diam maecenas ultricies mi eget mauris pharetra et. Aenean\fact{Lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt.} sed adipiscing diam donec adipiscing tristique. Suspendisse faucibus interdum posuere lorem ipsum dolor. Enim ut sem viverra aliquet eget sit amet tellus. Venenatis urna cursus eget nunc scelerisque viverra mauris in. Consectetur adipiscing elit duis tristique. Condimentum mattis pellentesque id nibh tortor id. Ut placerat orci nulla pellentesque dignissim enim sit.
\end{document}
这里的目标是让“事实 1”注释的底部与文本底部对齐。如果有脚注(我的实际文档的每一页都会有脚注,但我并不认为它们对于 MWE 来说是绝对必要的),那么它需要完全位于脚注上方。
编辑
理想情况下,“FACT 2”和“FACT 3”纸币应该保持不变,因为它们远位于纸币底部附近。
答案1
\newcommand{\fact}[2][0]{\stepcounter{factctr}\marginpar{\vspace{\dimexpr(-6pt-#1\baselineskip)}{\centering FACT \arabic{factctr}
}
\textit{#2}}}
然后当我调用 时\fact
,我可以在文本参数前添加[4]
,例如,将注释提高 4 行。使用此方法,我必须查看边注在正文后延伸了多少行,并将其添加到调用中。
似乎-6pt
有必要抵消由\vspace
调用引起的垂直偏移,虽然它是一个接近的近似值,但似乎所需的实际值因页面而异,这让我相信我应该使用一个命令。
另一个问题是,如果\fact
之前还有另一个调用,它们会重叠,这意味着我还必须向该调用添加可选参数。我不喜欢这个解决方案;我觉得它真的很老套,但它能完成工作。如果有人有一个解决方案,将这种行为内置到命令中,而不必在调用时指定,我一定会很感激。
编辑
问题不在于-6pt
,而在于\baselineskip
,当然这只是行之间的最大距离。Steven\raggedbottom
建议的命令将使这项工作更加精确,但正如可以预料的那样,它会让页面失去美观的统一性,而对我来说,这首先是使用 LaTeX 的主要原因之一。