修改 algorithm2e 中的算法名称

修改 algorithm2e 中的算法名称

我正在使用算法2e包来生成论文的伪代码。期刊要求格式为“S1 伪代码”、“S2 伪代码”等。但是,我只能根据行生成“伪代码 S 1”格式\SetAlgorithmName{Pseudocode S}{}。以下是最小工作示例:

\documentclass[parskip=full]{bmcart}
\usepackage[lined]{algorithm2e}
\usepackage{geometry}

\begin{document}
\begin{algorithm}[H]

\SetAlgorithmName{Pseudocode S}{}

\caption{Pseudocode for my algorithm}
\end{algorithm}
\end{document}

我如何更新标签以指示“S1 伪代码”(而不是“伪代码 S 1”)?据推测这可以通过命令更改\SetAlgorithmName。任何建议都非常感谢!

答案1

algorithm2e 并没有自然地附带允许计数器位于标题之前的定义。

但是,您可以编辑它使用的内部命令以满足您的需要:

\fnum@algocf是设置标题名称的宏。您可以将其更新为先输出计数器,然后再输出名称,如下所示:

\renewcommand{\fnum@algocf}{\AlCapSty{\AlCapFnt\thealgocf\nobreakspace\algorithmcfname}}%

现在输出将是 1 个伪代码。要将其更改为 S1,请更新\thealgocf

\renewcommand{\thealgocf}{S\@arabic\c@algocf}%

整个 MWE

\documentclass[parskip=full]{article}
\usepackage[lined]{algorithm2e}
\usepackage{geometry}

\makeatletter
\renewcommand{\thealgocf}{S\@arabic\c@algocf}% and the way it is printed
\renewcommand{\fnum@algocf}{\AlCapSty{\AlCapFnt\thealgocf\nobreakspace\algorithmcfname}}%
\makeatother

\SetAlgorithmName{Pseudocode}{}{}

\begin{document}
\begin{algorithm}[H]

\caption{Pseudocode for my algorithm}
\end{algorithm}

How can I update the label to indicate "S1 Pseudocode" (instead of "Pseudocode S 1")? Presumably this would be changed with the \SetAlgorithmName command. Any advice greatly appreciated!
\end{document}

结果

结果

评论:原来的 MWE 是与我没有的 documentclass 一起,改为 article

答案2

对 Elad Den 的问题和答案的小评论(声誉不够,无法发表评论)

\SetAlgorithmName{Pseudocode}{}{}

命令 \SetAlgorithmName 需要三个参数。如果您使用多个算法块,则缺少最后一个参数会导致根本不打印标题名称。

http://ctan.mirror.norbert-ruehl.de/macros/latex/contrib/algorithm2e/doc/algorithm2e.pdf

\SetAlgorithmName{algorithmname}{algorithmautorefname}{算法列表名称} 重新定义算法名称和算法句子列表。例如:\SetAlgorithmName{Protocol}{协议列表} 如果您更喜欢协议而不是算法。第二个参数是来自 hyperref 包的 \autoref 将使用的名称。

相关内容