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 クラスは、float 用の独自のフックを提供します。

\setfloatadjustment{figure}{\sffamily\tiny}

一般に、<code>すべての の冒頭でを呼び出すには<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

figure比較的複雑な再定義は、および環境がオプションの引数を持つことができるという事実に起因しますtable。したがって、再定義では、オプションの引数が提供されているかどうかを判断するために、開き角括弧「[」を探します。

関連情報