使用 floatrow 居中子图

使用 floatrow 居中子图

我正在处理captionsubcaption设置我的(子)图标题的样式,尤其是使用 floatrow 使我的图居中。但是,这对子图不起作用,如以下 nMWE(几乎最小)示例所示:

\documentclass[a4paper,12pt]{scrartcl}
\usepackage{floatrow}
\usepackage{tikz,floatrow,hyperref}
\usepackage[hypcap=true]{caption}
\usepackage[hypcap=true]{subcaption}
\usepackage[all]{hypcap} %link to top of figure

% caption format
\captionsetup{format=hang,labelsep=space,indention=-2cm,labelfont=bf,width=.9\textwidth,skip=.5\baselineskip}
\captionsetup[sub]{labelfont=bf,labelsep=period,subrefformat=simple,labelformat=simple}

%center both ?
\floatsetup[figure]{objectset=centering}
\floatsetup[subfigure]{objectset=centering} %does not center subfigures

\begin{document}
    \begin{figure}
        \begin{tikzpicture}
            \draw[fill=blue] (0,0) rectangle (4,4);
        \end{tikzpicture}
        \caption{First}
    \end{figure}
    \begin{figure}
        \begin{subfigure}{.49\textwidth}%\centering is not centered without centering
            \begin{tikzpicture}
                \draw[fill=blue] (0,0) rectangle (4,4);
            \end{tikzpicture}
            \caption{First}
        \end{subfigure}
        \begin{subfigure}{.49\textwidth}\centering
            \begin{tikzpicture}
                \draw[fill=blue] (0,0) rectangle (5,5);
            \end{tikzpicture}
            \caption{Second}
        \end{subfigure}
        \caption{Describing both subfigures}
    \end{figure}
\end{document}

显然,第一个图形居中,一切正常。但是,比较第二个图形的子图,我必须使用\centering(如第二个子图所示)来居中,但使用 不起作用\floatsetup[subfigure]

我想不使用\centering而是使用全局包命令来居中子图。有什么想法可以使用 来获得这样的布局吗floatrow?当然,任何其他方法也很好,只是,我已经用它floatrow来居中图形(全局)。

附言:我正在使用 XeLaTeX,但我希望这些观察结果不会发生太大变化。

答案1

首先:你有包含floatrow两次

您可以ffigboxfigure环境中使用:

在此处输入图片描述

\documentclass[a4paper,12pt]{scrartcl}
\usepackage{tikz,floatrow,hyperref}
\usepackage[hypcap=true]{caption}
\usepackage[hypcap=true]{subcaption}
\usepackage[all]{hypcap} %link to top of figure

% caption format
\captionsetup{format=hang,labelsep=space,indention=-2cm,labelfont=bf,width=.9\textwidth,skip=.5\baselineskip}
\captionsetup[sub]{labelfont=bf,labelsep=period,subrefformat=simple,labelformat=simple}

%center both ?
\floatsetup[figure]{objectset=centering}
\floatsetup[subfigure]{objectset=centering}

\begin{document}
\begin{figure}
        \begin{tikzpicture}
                \draw[fill=blue] (0,0) rectangle (4,4);
        \end{tikzpicture}
        \caption{First}
\end{figure}
\ffigbox[\FBwidth]{%
 \begin{subfloatrow}
  \ffigbox[0.5\textwidth]{%
   \begin{tikzpicture}
    \draw[fill=blue] (0,0) rectangle (4,4);
   \end{tikzpicture}}{\caption{First}}
  \ffigbox[0.5\textwidth]{%
   \begin{tikzpicture}
    \draw[fill=blue] (0,0) rectangle (5,5);
   \end{tikzpicture}}{\caption{Second}}%
  \end{subfloatrow}%
 }{\caption{Describing both subfigures}}
\end{document}

过敏通知:上述代码的某些部分可能有些不合理(或不必​​要)


为了回答您在评论中提出的问题(来自floatrow 包装手册):

另一个创建图形的命令 - \ffigbox- 将标题置于内容下方。标题的默认宽度等于文本的宽度。[...] 由该 \ffigbox命令创建的浮动框看起来类似于普通图形环境。但是,如果您设置,例如,选项[\FBwidth][...] 您将获得一个等于图片宽度的标题 [...]

有类似的框,其中标题放在其他地方(例如:\fcapside放在图形旁边)。据我所知,\floatsetup[subfigure]{objectset=centering}不会影响包装subfigure的环境subcaption,但会影响这些框。


如果你讨厌这个堆栈,你可以希望这只是我过于复杂的解决方案,还有更好的解决方案。或者您可能想尝试xpatch(或etoolbox)将“全局”子标题居中操作(而不是将floatrow其用作)作为“万福玛利亚”……

\usepackage{xpatch}
\makeatletter
% \subcaption@minipage is the last macro call in \subfigure (and \begin{subfigure})
\xapptocmd{\subcaption@minipage}{\centering}{}{}
\makeatother

相关内容