Рассмотрим следующий фрагмент:
\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).