memoir \setfloatadjustment не работает после загрузки fixltx2e

memoir \setfloatadjustment не работает после загрузки fixltx2e

Рассмотрим следующий фрагмент:

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

При компиляции этого кода можно было бы ожидать, что он ABCбудет помещен на правую сторону typeblock, но вместо этого он помещен на сторону по умолчанию (слева). После комментирования пакета fixltx2e код работает так, как и ожидалось. К сожалению, некоторые пакеты, которые я использую, загружают пакет fixltx2e, поэтому я не могу просто закомментировать usepackage. Кто-нибудь знает, как исправить эту проблему? Кажется, он \@xfloatперезаписан, но это должно было быть описано в memoir строками:

\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).

Связанный контент