这是这里。
我在序言中用到了这个:
\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
应适用于subfigure
和subtable
环境。
添加于 2013 年 11 月 13 日
的修订版subcaption
制作了\subcaption@minipage
一个带参数的宏,因此上述补丁不再起作用,并且
\usepackage{etoolbox}
\makeatletter
\apptocmd\subcaption@minipage{\centering}{}{}
\makeatother
变得必要。
我不会\centering
在一般环境中添加代码minipage
,即使是在浮点数中本地添加,因为当使用minipage
在其代码中利用的宏时,它们可能会出现在意想不到的地方。
您可以使用“本地”版本\g@addto@macro
来添加到浮点数中的\centering
所有环境中;这对于这种情况很有用:minipage
\appto
etoolbox
\usepackage{etoolbox}
\makeatletter
\gappto\@floatboxreset{\centering\appto\@minipagerestore{\centering}}
\makeatother
但我不会这么做,因为这意味着全部浮点型中的小页面将获得\centering
;有些内部使用的宏minipage
可能会在浮点型中使用:这些宏也会收到\centering
,因此可能出现在不想要的地方。
答案2
您可以在文档的序言中插入以下指令,以将 、 、 和 环境的内容置于中心位置table
。figure
为了subtable
影响subfigure
后两个环境的定位,假定subcaption
包已加载。
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@xfloat}%
{\@floatboxreset}%
{\@floatboxreset\centering}{}{}
\patchcmd{\subcaption@minipage}%
{\setcaptionsubtype}%
{\centering\setcaptionsubtype}{}{}
\makeatother
第一个修补的宏\@xfloat
在 LaTeX 内核中定义;第二个修补的宏\subcaption@minipage
由包提供subcaption
。