Algorithm2e 和悬挂字幕

Algorithm2e 和悬挂字幕

我在尝试使 Algorithn2e 中的字幕悬挂,如下图表格标题所示。我计划将它们与arsclassica/一起使用classicthesis,但似乎这两个包都不会影响该问题。

在此处输入图片描述

我尝试过使用\usepackage[format=hang]{caption}\captionsetup{format=hang},但algorithm2e似乎不受它们的影响。classicthesis样式文件似乎正是通过这种方式实现此效果。algorithm2e文档中没有提到悬挂字幕,我在样式文件中也找不到任何东西(我会将其解密为字幕代码)。最后,谷歌也没有找到任何东西,我发现自己在这里的乳胶技能有点不够深入。

以下是 MWE:

\documentclass{scrreprt}

\usepackage[american]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[algoruled]{algorithm2e}
%\usepackage{classicthesis}
%\usepackage{arsclassica}

% these two lines don't make a difference   
\usepackage[format=hang]{caption}   
\captionsetup{format=hang}

\begin{document}

\begin{algorithm}[htb]
    \While{true}
    {   
    }
    \caption{Morbi blandit vehicula leo a consectetur. Aliquam a lacus posuere, consectetur tortor at, mollis erat.}
\end{algorithm}

\end{document}

我已经能够algorithm2e通过反复试验和修改来格式化标题的其余部分。我只对这里问题的悬而未决的部分感兴趣。

答案1

这是一个可能的解决方案:

\documentclass{scrreprt}
\usepackage[american]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[algoruled]{algorithm2e}
\usepackage[format=hang]{caption}   
\usepackage{etoolbox}
\usepackage{newfloat}

\usepackage{classicthesis}
\usepackage{arsclassica}

% Un-define ''algorithm'' as defined by the algorithm package
\let\algorithm\relax
\let\endalgorithm\relax
\expandafter\let\csname algorithm*\endcsname\relax
\expandafter\let\csname endalgorithm*\endcsname\relax
\let\listofalgorithms\relax

% Define the new algorithm environment
\DeclareFloatingEnvironment{algorithm}

\makeatletter
% Definition for the style ruled
% First add the rules enclosing the captiom
\DeclareCaptionFormat{algrule}{%
  \rule{\textwidth}{0.8pt}\par
  {\@hangfrom{#1#2}%
     \advance\caption@parindent\hangindent
     \advance\caption@hangindent\hangindent
     \caption@@par#3\par}%
  \vspace*{-8pt}\rule{\textwidth}{0.4pt}\vspace*{-5pt}     
}
% Now add the rules after the algorithm
\AtEndEnvironment{algorithm}{\vspace*{-9pt}\rule{\textwidth}{0.4pt}}

% Apply the new format to the algorithm environment
\captionsetup[algorithm]{format=algrule}

% Settings for the list of algorithms
\let\oldlistofalgorithms\listofalgorithms
\renewcommand\listofalgorithms{
\begingroup
\renewcommand{\cftfigpresnum}{\algorithmname~}
\oldlistofalgorithms
\clearpage
\endgroup
}
\makeatletter

\begin{document}

\listofalgorithms

\begin{algorithm}[htb]
\caption{Morbi blandit vehicula leo a consectetur. Aliquam a lacus posuere, consectetur tortor at, mollis erat.}
    \While{true}
    {   
    }
\end{algorithm}

\begin{figure}
\centering
\Huge
A
\caption{Morbi blandit vehicula leo a consectetur. Aliquam a lacus posuere, consectetur tortor at, mollis erat.}
\end{figure}

\begin{table}
\centering
\Huge
A
\caption{Morbi blandit vehicula leo a consectetur. Aliquam a lacus posuere, consectetur tortor at, mollis erat.}
\end{table}

\end{document}

算法列表的图像:

在此处输入图片描述

展示新环境运行情况的文档图像:

在此处输入图片描述

algorithm定义的环境是algorithm2e使用float包在内部定义的,因此它的行为与标准浮点数的行为不完全相同,并且环境与包的某些功能并不 100% 兼容caption

然后,一个可能的解决方案是取消定义包algorithm所定义的环境,并借助包algorithm2e定义一个新的浮点数。这个新环境与包完全兼容,因此可以使用包提供的所有功能;特别是,悬挂缩进等设置现在将直接应用(请注意,新对象如何完美地从/继承设置)。algorithmnewfloatcaptionclassicthesisarsclassica

使用格式来模仿原始环境的风格algrule外观。必须使用新环境中的命令ruled\captionalgorithm实际算法。

该解决方案还负责根据其他标准列表的设置生成“算法列表”。

事实上,所使用的程序是该caption包的文档中推荐的:

\newfloat注意:在用或定义的环境中只能排版一个标题\restylefloat,而且这些环境的行为与预定义的浮点数 figure和并不完全相同table。因此,许多软件包无法与这些环境很好地配合。

此外,该float包有一些注意事项和限制,所以如果您只想定义一个新的简单浮动环境 - 表现得像图形或表格 - 我建议使用\DeclareFloatingEnvironment 该包提供的环境newfloat

相关内容