為什麼將 AtBeginEnvironment{figure} 與 memoir 一起使用時字體系列變更不生效?

為什麼將 AtBeginEnvironment{figure} 與 memoir 一起使用時字體系列變更不生效?

我正在嘗試用\AtBeginEnvironment{figure}來自訂圖形中使用的字體系列和字體大小。然而,似乎沒有任何效果。這是一個最小的例子:

\documentclass{memoir}
\usepackage{etoolbox}

\makeatletter
\AtBeginEnvironment{figure}{%
  \def\@floatboxreset{\reset@font\sffamily\tiny\@setminipage}%
  \patchcmd{\@xfloat}{\normalsize}{\selectfont}{}{}
}
\makeatother

\begin{document}

\begin{figure}
  % \tiny % this works
  test
\end{figure}

\end{document}

對這裡發生的事情有什麼想法嗎?

編輯: 忘了說我正在使用memoir.在另外一個帖子裡找到的解決方案問題適用於設定字體系列,但不適用於大小。

答案1

memoir 類別提供了自己的浮動鉤子:

\setfloatadjustment{figure}{\sffamily\tiny}

一般來說,要<code>在 every 的開頭調用<floatname>,請將以下內容添加到序言中:

\setfloatadjustment{<floatname>}{<code>}

答案2

如果您不使用該類memoir,則以下內容應該有效:

% Redefine figure environment so that all figures are centered and use tiny sans-serif font
\makeatletter
\let\figureorig\figure
\def\figure@i[#1]{\figureorig[#1]\centering\sffamily\tiny}  % with optional argument
\def\figure@ii{\figureorig\centering\sffamily\tiny}  % without optional argument
\def\figure{\@ifnextchar[\figure@i \figure@ii}  % Redefine depending on presence of [
\makeatother

% Redefine table environment so that all tables are set in tiny sans-serif font
\makeatletter
\let\tableorig\table
\def\table@i[#1]{\tableorig[#1]\sffamily\tiny}  % with optional argument
\def\table@ii{\tableorig\sffamily\tiny}  % without optional argument
\def\table{\@ifnextchar[\table@i \table@ii}  % Redefine depending on presence of [
\makeatother

相對複雜的重新定義是由於figureandtable環境可以攜帶可選參數。因此,重新定義會尋找左方括號“[”,以確定是否提供了可選參數。

相關內容