使用可选参数中的命令

使用可选参数中的命令

如果我定义一个新命令,例如

\newcommand{\command}{htb}

为什么我不能使用这个命令来设置figure环境的浮动选项?

\begin{figure}[\command]
  \centering
  \[
    f(x) = x^2
  \]
  \caption{Some equation}
\end{figure}

这不会编译,但是这个

\begin{figure}[htb]
  \centering
  \[
    f(x) = x^2
  \]
  \caption{Some equation}
\end{figure}

将要。

有人可以解释一下吗?也许可以如何为所有figures设置一个通用设置

答案1

这主要基于 LaTeX 如何处理浮点数的可选参数。本质上,它会在不同的宏(\@fps具体来说)中捕获可选参数,然后尝试通过查看其来扩展该宏\meaning。然后按顺序处理含义的字符。但是,捕获过程使用\def,类似于以下设置:

\usepackage[T1]{fontenc}
\def\abc{abc}
\def\ghi{\abc}
\meaning\ghi

返回

在此处输入图片描述

在上面的输出中,macro:->被视为“前缀”,而确切含义是\abc。以此类比,您\command将导致 LaTeX 依次处理\comman并且d找不到任何与现有一组已批准的浮点规范相匹配的内容。

简单的解决方案是使用核函数定义默认值:

\makeatletter
\def\fps@figure{htb}
\makeatother

或者你可以使用float包裹

\usepackage{float}
\floatplacement{figure}{htb}

或者,如果你非常执着,你可以尝试补丁\@xfloat

\usepackage{etoolbox}

\makeatletter
\patchcmd{\@xfloat}% <cmd>
  {\def \@fps}% <search>
  {\edef\@fps}% <replace>
  {}{}% <success><failure>
\makeatother

以上内容将传统版本替换\defe扩展版本。它允许您使用您的设置

\begin{figure}[\command]
  % <your figure>
\end{figure}

相关内容