为什么将 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

回忆录类为浮点数提供了自己的钩子:

\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

相对复杂的重定义是由于figuretable环境可以携带可选参数。因此,重定义会查找左方括号“[”,以确定是否提供了可选参数。

相关内容