子标题包改变 algorithm2e 标题位置

子标题包改变 algorithm2e 标题位置

我有一个项目使用了subcaptionalgorithm2e包。不知什么原因,subcaption 包导致算法中的标题放错了位置。

这里我们有一个问题的 MWE。请注意,该algorithm2e包是用 [figure] 选项定义的。

\documentclass[12pt]{book}
\usepackage{subcaption}
\usepackage[figure,tworuled]{algorithm2e}
\begin{document}
\begin{algorithm}
\DontPrintSemicolon
$f_1$ = Fase a calcular\;
\tcp{Início e fim do período considerado}
$t_1$ = Idade química do concreto na fase anterior à $f_1$\;
$t_2$ = Idade química do concreto na fase $f_1$\;
\caption{Cálculo das perdas por fluência do concreto para uma fase}
\label{fig:AlgFluencia}
\end{algorithm}
\end{document}

结果是下面的图片。请注意,标题明显没有居中,文本几乎完全向右偏移。

在此处输入图片描述

如果我随后注释掉该\usepackage{subcaption}行,则会得到以下结果。标题很好,居中,没有问题。(虽然左边的空间似乎比右边多,但这可能只是我的感觉。无论如何,它显然更好)

在此处输入图片描述

如果删除了 [figure] 选项algorithm2e,那么软件包之间就不会发生冲突,但我更愿意保留它。 上的文档algorithm2e没有指出任何与此相关的内容(据我所见)...有什么建议吗?

编辑1: 在看到 Werner 的解决方案链接后,我以为一切都解决了,但想得太早了。不幸的是,与所示的 MWE 不同,我的项目实际上必须采用大学定义的类文件,该文件利用atbeginend。使用此包时会出现相同的错误,并且无法通过 Werner 的解决方案进行纠正。下面是更精确的 MWE(包括 Werner 的解决方案)以及生成的图像。它仍然使用类book只是为了允许其他人进行编译,但添加atbeginend就足以给出错误。

\documentclass[a4paper,12pt]{book}
\usepackage{atbeginend}
\usepackage[figure,tworuled,linesnumbered]{algorithm2e}
\usepackage{subcaption}
\usepackage{etoolbox}
\AtBeginEnvironment{algorithm}{%etoolbox
  \captionsetup{margin={-\algomargin,\algomargin}}%
}
\begin{document}
\begin{algorithm}
\DontPrintSemicolon
$f_1$ = Fase a calcular\;
\tcp{Início e fim do período considerado}
$t_1$ = Idade química do concreto na fase anterior à $f_1$\;
$t_2$ = Idade química do concreto na fase $f_1$\;
\caption{Cálculo das perdas por fluência do concreto para uma fase}
\end{algorithm}
\end{document}

在此处输入图片描述

答案1

最终的解决方案是面对现实并修改大学的课程文件,atbeginendetoolbox包含类似命令的 替换。

  • \AfterBegin{document}{-code-}成为\AfterEndPreamble{-code-}
  • 任何其他\AfterBegin{-env-}{-code-}成为\AtBeginEnvironment{-env-}{-code-}
  • \BeforeBegin{-env-}{-code-}成为\BeforeBeginEnvironment{-env-}{-code-}
  • \BeforeEnd{-env-}{-code-}成为\AtEndEnvironment{-env-}{-code-}

这以及@Werner 的解决方案在评论中解决了这个问题。


谢谢至@竹子提醒我把这个写成答案,这个问题是我刚开始使用 SE 时遇到的。

相关内容