我有一个项目使用了subcaption
和algorithm2e
包。不知什么原因,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
最终的解决方案是面对现实并修改大学的课程文件,atbeginend
用etoolbox
包含类似命令的 替换。
\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 时遇到的。