footmisc + marginfix + todonotes = 错误

footmisc + marginfix + todonotes = 错误

喂食

\documentclass{article}
\usepackage{footmisc}
\usepackage{marginfix}
\usepackage{todonotes}
\begin{document}
\todo{test}
\end{document}

导致pdflatex编译错误:

! Package marginfix Error: lost some margin notes.

See the marginfix package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.7 \end{document}
                  
? Q

不幸的是,marginfix 文档第 13 节中的解释对我来说毫无意义。再多一点文字,比如说,

\begin{document}
test

\todo{test}

test
\end{document}

没有帮助。

使用的版本:

  • pdfTeX,版本 3.141592653-2.6-1.40.24(TeX Live 2022/Debian)

  • LaTeX2e <2021-11-15> 补丁级别 1

  • L3编程层 <2022-06-02>

  • 文章 2021/10/04 v1.4n

  • footmisc 2022/03/08 v6.0d

  • marginfix 2020/05/06 v1.2

  • todonotes 2021/06/04 v1.1.5

这是当前 Debian 测试版 TeX Live。在 Debian 稳定版 TeX Live 中,上述代码可以运行(或至少几个月前可以运行)。

谁是罪魁祸首?我们该怎么办?

答案1

您可以使用较早的footmisc

\documentclass{article}
\usepackage{footmisc}[=v5]
\usepackage{marginfix}
\usepackage{todonotes}
\begin{document}
\todo{test}
\end{document}

答案2

marginfix 修补了\@combinefloatsfootmisc 并使用了一个新的输出例程,这个例程不再起作用(或者说没有效果)。footmisc。因此,无需使用旧版本的 footmisc,只需先加载 marginfix 即可。

鉴于 LaTeX 的输出例程将会改变(沿着 footmisc 已经使用的线路,但增加了用于其他包的钩子),像\@combinefloatsmarginfix 所做的那样进行低级修补是没有前途的,应该在将来的某个时候被替换,那时有适当的钩子可用于“安全”修补。

顺便说一句,该问题与 todonotes 无关,您可以删除该包并使用来\marginpar生成错误。

相关内容