我在尝试使 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
定义一个新的浮点数。这个新环境与包完全兼容,因此可以使用包提供的所有功能;特别是,悬挂缩进等设置现在将直接应用(请注意,新对象如何完美地从/继承设置)。algorithm
newfloat
caption
classicthesis
arsclassica
使用格式来模仿原始环境的风格algrule
外观。必须使用新环境中的命令ruled
\caption
algorithm
前实际算法。
该解决方案还负责根据其他标准列表的设置生成“算法列表”。
事实上,所使用的程序是该caption
包的文档中推荐的:
\newfloat
注意:在用或定义的环境中只能排版一个标题\restylefloat
,而且这些环境的行为与预定义的浮点数figure
和并不完全相同table
。因此,许多软件包无法与这些环境很好地配合。此外,该
float
包有一些注意事项和限制,所以如果您只想定义一个新的简单浮动环境 - 表现得像图形或表格 - 我建议使用\DeclareFloatingEnvironment
该包提供的环境newfloat
。