如何自动将所有浮动对象(包括子浮动对象)置于中心?

如何自动将所有浮动对象(包括子浮动对象)置于中心?

这是这里

我在序言中用到了这个:

\makeatletter   % inserts a "\centering" to every floatbox.
\g@addto@macro\@floatboxreset\centering
\makeatother

我对于它的使用有两个疑问:

  • 我如何才能对子图实现相同的功能?它对所有浮点数都适用,但对小页面或子图(来自subcaption,它们也是小页面)则不行。
  • 我怎样才能在本地切换这种行为?

下面是一些可供参考的代码:

% arara: pdflatex
% arara: pdflatex

\documentclass{article}
\usepackage[demo]{graphicx}

\makeatletter
\g@addto@macro\@floatboxreset\centering
\makeatother

\begin{document}
\begin{figure}%
    \begin{minipage}[b]{.48\linewidth}
        \centering
        \includegraphics[width=.5\linewidth]{qwertz}
    \end{minipage}
    \hfill
    \begin{minipage}[b]{.48\linewidth}
        %\centering
        \includegraphics[width=.5\linewidth]{qwerty}
    \end{minipage}
    \caption{Caption}%
    \label{fig:label} 
\end{figure}%
\end{document}

答案1

最新版本subcaption提供了一个\@subfloatboxreset钩子。

\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{subcaption}

\makeatletter % inserts a "\centering" to every floatbox.
\g@addto@macro\@floatboxreset{\centering}
\g@addto@macro\@subfloatboxreset{\centering}
\makeatother

\begin{document}

\begin{figure}[htp]

X\dotfill X

\begin{subfigure}[b]{.4\linewidth}
  X\dotfill X

  \includegraphics[width=.5\linewidth]{qwerty}
\end{subfigure}\qquad
\begin{subfigure}[b]{.4\linewidth}
  X\dotfill X

  \includegraphics[width=.5\linewidth]{qwerty}
\end{subfigure}

\caption{Caption}\label{fig:label} 
\end{figure}

\end{document}

在此处输入图片描述


原始答案如下

如果你愿意使用subcaption,那么

\g@addto@macro\subcaption@minipage\centering

应适用于subfiguresubtable环境。


添加于 2013 年 11 月 13 日

的修订版subcaption制作了\subcaption@minipage一个带参数的宏,因此上述补丁不再起作用,并且

\usepackage{etoolbox}

\makeatletter
\apptocmd\subcaption@minipage{\centering}{}{}
\makeatother

变得必要。


我不会\centering在一般环境中添加代码minipage,即使是在浮点数中本地添加,因为当使用minipage在其代码中利用的宏时,它们可能会出现在意想不到的地方。

您可以使用“本地”版本\g@addto@macro来添加到浮点数中的\centering所有环境中;这对于这种情况很有用:minipage\apptoetoolbox

\usepackage{etoolbox}
\makeatletter
\gappto\@floatboxreset{\centering\appto\@minipagerestore{\centering}}
\makeatother

但我不会这么做,因为这意味着全部浮点型中的小页面将获得\centering;有些内部使用的宏minipage可能会在浮点型中使用:这些宏也会收到\centering,因此可能出现在不想要的地方。

答案2

您可以在文档的序言中插入以下指令,以将 、 、 和 环境的内容置于中心位置tablefigure为了subtable影响subfigure后两个环境的定位,假定subcaption包已加载。

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@xfloat}%
  {\@floatboxreset}%
  {\@floatboxreset\centering}{}{}
\patchcmd{\subcaption@minipage}%
  {\setcaptionsubtype}%
  {\centering\setcaptionsubtype}{}{}
\makeatother

第一个修补的宏\@xfloat在 LaTeX 内核中定义;第二个修补的宏\subcaption@minipage由包提供subcaption

相关内容