加载 fixltx2e 后,memoir \setfloatadjustment 不起作用

加载 fixltx2e 后,memoir \setfloatadjustment 不起作用

考虑以下代码片段:

\documentclass{memoir}
\usepackage{fixltx2e}
\setfloatadjustment{figure}{\raggedleft}
\begin{document}
\begin{figure}
ABC
\end{figure}
\end{document}

当您编译此代码时,人们会期望ABC将其放置在 typeblock 的右侧,但它却放置在默认侧(左侧)。注释掉 fixltx2e 包后,代码按预期工作。不幸的是,我使用的某些包会加载 fixltx2e 包,因此我无法简单地注释掉 usepackage。有人知道如何解决这个问题吗?似乎被\@xfloat覆盖了,但回忆录应该用以下几行来解决这个问题:

\AtBeginDocument{
  \let\m@m@xfloat\@xfloat
  \def\@xfloat #1[#2]{%
    \m@m@xfloat #1[#2]%
    \def\baselinestretch{\m@m@float@spacing}%
    \normalsize}
}

答案1

的确,fixltx2e覆盖\@xfloat。假设它修复了标准文档类中的内容,其中memoir不是。

由于可以memoir自行管理事物,因此最好的方法是保存并恢复memoir特定版本\@xfloat,或者直接重新定义它:

\documentclass{memoir}
\usepackage{fixltx2e}
\makeatletter
% Restore original memoir definition of \@xfloat
\def\@xfloat#1[#2]{\mem@old@xfloat{#1}[#2]\@nameuse{#1adjustment}}
\makeatother
\setfloatadjustment{figure}{\raggedleft}
\begin{document}
\begin{figure}
ABC
\end{figure}
\end{document}

请注意,这fixltx2e将默认成为 LaTeX2e(即将推出的 TeX Live 2015)版本的一部分:

LaTeX2e 现在默认包含以前仅通过明确加载包才包含的更改fixltx2e,现在这是一个无操作(CTAN公告)。

相关内容