subcaption 与 subfig:引用子图的最佳包

subcaption 与 subfig:引用子图的最佳包

这个问题,Martin H 的评论说:人们应该忘记subfiguresubfig包并使用subcaption。作为subfig替代subfigure,没有争论。

我目前使用subfig来显示我的子图,并且对它很满意。所以我想知道,使用 的优势subcaption是什么,或者是否为什么一般情况下,使用subcaption比 更可取subfig

答案1

subfig无法正常工作hyperref。 caption 包的作者写道这里

请注意,subfig 包中的 hyperref 支持已损坏。您可以尝试使用我的 subcaption 包。

在 Internet 或 Usenet 上搜索 subfig+hyperref 会显示兼容性和功能问题,我想我们不需要在这里为其创建示例。

答案2

专业副标题:

  • subfig 的 hyperref 支持包含错误(这显然是 subfig 的问题而不是 hyperref 的问题),而 subcaption 包(希望 ;-))可以与 hyperref 配合良好。
  • 子标题包提供增强的超链接支持,\subref*其行为类似于\ref*(由超链接包提供),\autoref可开箱即用,并且标题选项hypcap=hypcapspace=适用于子标题。
  • subfig 包破坏了 caption 包提供的星号版本,\ContinuedFloat而 subcaption 包则没有。
  • subcaption 包与 caption 包更加“紧密相连”,支持更多常见选项,如list=onetc.,并提供与\caption\captionboxfigure环境类似的命令:\subcaption\subcaptionboxsubfigure环境。(请注意,\captionbox目前尚不可用,但将在 caption 包的下一个 3.2 版本中提供。)
  • 提供更多放置和对齐子标题的方法,例如,\subcaption可用于在图形旁边放置子标题(左或右)。
  • \subcaptionbox提供比更多的可选参数\subfloat,例如为框指定特定的宽度。
  • 提供\phantomsubcaption不带标题的引用。(自子标题包 1.1 版起)
  • 由 bicaption 包支持,用于排版双语子字幕。(自 subcaption 包 1.1 版起)

专业子图:

  • subcaption 包需要 caption 包,而 caption 包的使用在 subfig 中是可选的。(subfig 包提供了选项caption=false。)因此,subfig 包也可以与与 caption 包不兼容的文档类一起使用。
  • subcaption 包尚未提供顶部和底部边距,而 subfig 包则提供。因此,在使用 subcaption 包时,必须使用命令\vspace、、、\smallskip或类似命令\medskip手动设置子图之间的垂直间距。\bigskip

请注意,我是标题和子标题包的作者,因此此列表远非客观;-)

但是使用 subcaption 通常比使用 subfig 更好吗?依我之见,不是,因为 subfig 包很好(并且文档齐全),如果对 subfig 包满意,就没有必要切换。

答案3

仅供参考:在最新的 TeXlive 2011 安装中,如果标题位于子浮点数上方 ( position=top),则对子浮点数的引用会减少一。在下面的示例中,这涉及对子表的引用,而不是对子图的引用。

\documentclass{scrartcl}
\pagestyle{empty}
\usepackage{subfig}

\captionsetup*[table]{position=top}
\captionsetup*[subtable]{position=top}
\captionsetup*[figure]{position=bottom}
\captionsetup*[subfigure]{position=bottom}

\begin{document}
  \begin{figure}
    \subfloat[1]{11111\label{fig:1}} \subfloat[2]{22222\label{fig:2}}
    \caption{fig}\label{fig}
  \end{figure}

  \begin{table}
    \caption{tbl}\label{tbl}
    \subfloat[A]{aaaaa\label{tbl:a}} \subfloat[B]{bbbbb\label{tbl:b}}
  \end{table}

  Figure~\ref{fig} (\ref{fig:1}, \ref{fig:2})  and Table~\ref{tbl} (\ref{tbl:a}, \ref{tbl:b}).
\end{document}

编译结果

切换到subcaption已经解决了问题,但我希望有一个“兼容性”选项,以便以前用于 的代码subfig也可以用于subcaption。(或者至少有一个包含对 的引用的 HOWTO \subcaptionbox。)

相关内容