2020 年版,每个子浮动(子标题)的中心

2020 年版,每个子浮动(子标题)的中心

我想确保内容始终位于子浮动元素的中心(而不需要\centering在每个浮动元素中都居中)。这个问题6 年前被问到并回答过但是,截至 2020 年 1 月,唯一仍然有效的答案是:

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

不幸的是,引用回答者

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

以下是我的 MWE,它使用了链接方法:

\documentclass{article}

    \usepackage{subcaption}
    \usepackage{etoolbox}

    \makeatletter
    \g@addto@macro\@floatboxreset\centering % Centre within every float
    \makeatother

    \makeatletter
    \gappto\@floatboxreset{\centering\appto\@minipagerestore{\centering}} % Centre within every subfloat
    \makeatother

\begin{document}

    \begin{table}
        \caption{Table}\label{fig}
        \begin{subtable}[H]{0.5\textwidth}
            \caption{Subtable}
            \begin{tabular}{c}
                \hline
                Tabular\\
                \hline
            \end{tabular}
        \end{subtable}
    \end{table}

\end{document}

是否有其他解决方案可以解决上述问题?

答案1

这应该有效:

\documentclass{article}

\makeatletter
\g@addto@macro\@floatboxreset\centering % Centre within every float
\makeatother

\usepackage{subcaption}
\DeclareCaptionOptionNoValue{centering}{\centering}
\captionsetup[sub]{centering}

\begin{document}

\begin{table}
    \caption{Table}\label{fig}
    \begin{subtable}{0.5\textwidth}
        \caption{Subtable}
        \begin{tabular}{c}
            \hline
            Tabular\\
            \hline
        \end{tabular}
    \end{subtable}
\end{table}

% This could be overridden for single figures or tables:
\begin{table}
    \clearcaptionsetup[centering]{sub} % Remove "centering" from "sub" options
    \caption{Table}\label{fig2}
    \begin{subtable}{0.5\textwidth}
        \caption{Subtable}
        \begin{tabular}{c}
            \hline
            Tabular\\
            \hline
        \end{tabular}
    \end{subtable}
\end{table}

\end{document}

或者\subcaptionbox可以使用选项“c”:

\documentclass{article}

\makeatletter
\g@addto@macro\@floatboxreset\centering % Centre within every float
\makeatother

\usepackage{subcaption}

\begin{document}

\begin{table}
    \caption{Table}\label{fig3}
    \subcaptionbox
       {Subtable}
       [0.5\textwidth][c]
       {\begin{tabular}{c}
            \hline
            Tabular\\
            \hline
        \end{tabular}}
\end{table}

\end{document}

相关内容