回憶錄 \setfloat adjustment 在載入 fixltx2e 後不起作用

回憶錄 \setfloat adjustment 在載入 fixltx2e 後不起作用

考慮以下片段:

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

當您編譯此程式碼時,人們會期望ABC將其放置在類型區塊的右側,但它卻放置在預設側(左側)。註解掉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公告)。

相關內容