使用会议风格文件会产生意外的 algorithm2e 行为(“标尺”选项没有水平线)

使用会议风格文件会产生意外的 algorithm2e 行为(“标尺”选项没有水平线)

我正在准备提交给会议的手稿。这里是会议所需样式表的链接。具体来说,其中有以下几行:

\PassOptionsToPackage{algo2e,ruled}{algorithm2e}
\RequirePackage{algorithm2e}

我没有更改主 LaTeX 文件中的任何内容,但是当我编写示例算法时,它不会在顶部显示水平线,而根据 algorithm2e 包的这些选项的定义,它应该如此,这是提供的样式表中使用的。这是一个 MWE。请注意,它仅使用上面链接中提供的样式表(colt2018.cls、jmlr.cls、jmlrutils.sty)进行编译。

\documentclass[anon,12pt]{colt2018} % Anonymized submission
% \documentclass{colt2017} % Include author names

% The following packages will be automatically loaded:
% amsmath, amssymb, natbib, graphicx, url, algorithm2e

\title[Short Title]{Full Title of Article}
\usepackage{times}

 % Authors with different addresses:
 \coltauthor{\Name{Author Name1} \Email{[email protected]}\\
 \addr Address 1
 \AND
 \Name{Author Name2} \Email{[email protected]}\\
 \addr Address 2
 }

\begin{document}

\maketitle

\begin{abstract}
This is a great paper and it has a concise abstract.
\end{abstract}

\begin{keywords}
List of keywords
\end{keywords}

\section{Introduction}

\begin{algorithm}[h!]
  \KwData{this text}
  \KwResult{how to write algorithm with \LaTeX2e }
  initialization\;
  \While{not at end of this document}{
    read current\;
    \eIf{understand}{
      go to next section\;
      current section becomes this one\;
    }{
      go back to the beginning of current section\;
    }
  }
  \caption{How to write algorithms}
\end{algorithm}


% Acknowledgments---Will not appear in anonymized version
\acks{We thank a bunch of people.}


\bibliography{yourbibfile}

\end{document}

我在这里做错了什么?

答案1

我认为你没有做错什么。在类的文档中,你会发现以下有点神秘的评论:

如果会议记录包含使用新旧版本的论文,则允许使用旧的命令名称。(这意味着编辑者需要安装较新的版本。)出于某种原因,加载 algorithm2e 会导致出现消息

(\end occurred inside a group at level 1)

我不知道为什么,但这超出了这个班级的控制范围。

558 \PassOptionsToPackage{algo2e,ruled}{algorithm2e} 559 \RequirePackage{algorithm2e}

当你检查jmlrutils.sty定义时algorithm,你会发现以下内容:

\newenvironment{algorithm}[1][htbp]%
{%
  \ifundef{\algocf}%
  {`algorithm2e' package is required if you want to
   use the algorithm environment}%
  {}%
  \begin{algocf}[#1]%
  \renewcommand\@makecaption[2]{%
    \hskip\AlCapHSkip
    \parbox[t]{\hsize}{\algocf@captiontext{##1}{##2}}%
  }%
}%
{%
  \end{algocf}%
}

这样\@makecaption就进行了重新定义,尽管选项被传递给了类,但是不会使用标尺标题。

这条含糊不清的注释暗示将规则选项传递给包可以避免错误,仅此而已。它的目的并不是真正让算法规则化。

相关内容