SetKwInOut 错误

SetKwInOut 错误

我在使用 algorithm2e 包时遇到了一些问题。以下是代码:

\begin{algorithm}
  \caption{Tree merge algorithm\label{alg:merge}}
  \SetKwData{H}{H}\SetKwData{M}{M}\SetKwData{C}{C}\SetKwData{R}{R}
  \SetKwData{SH}{SH}\SetKwData{SM}{SM}\SetKwData{SC}{SC}\SetKwData{SR}{SR}
  \SetKwData{N}{N}\SetKwData{E}{E}\SetKwData{X}{X}
  \SetKwInput{KOutput}{output}
  \SetKwInput{KInput}{input}
  \KInput{local tree object (\H) and remote tree object (\M)}
  \KInput{common ancestor object (\C)}
  \KOutput{resulting tree object (\R)}
  ...

这段代码运行正常,正如预期的那样。但是,如果我将 \SetKwInput 替换为 \SetKwInOut(这是我想要使用的格式),则会收到以下错误:

! Missing number, treated as zero.
<to be read again> 
                   \protect 
l.163   \SetKwInOut{KOutput}{output}

?

我在同一个文件中有其他算法可以正常工作,并且不会出现此错误。这里的问题是什么?该包的用途如下:

\usepackage[dotocloa,boxed,algochapter]{algorithm2e}

更新

以下是完整的 MWE:

\documentclass[11pt]{book}

\usepackage[printonlyused,nohyperlinks]{acronym}
\usepackage[dotocloa,boxed,algochapter]{algorithm2e} % describe algorithms

\title{Book Title}

\author{Jonatan Schroeder}

\begin{document}

\maketitle

\chapter{Implementation Details}
\label{ch:implementation}

\begin{algorithm}
  \caption{Tree merge algorithm\label{alg:merge}}
  \SetKwData{H}{H}\SetKwData{M}{M}\SetKwData{C}{C}\SetKwData{R}{R}
  \SetKwInOut{KOutput}{output}
  \SetKwInOut{KInput}{input}
  \KInput{local tree object (\H)}
  \KInput{remote tree object (\M)}
  \KInput{common ancestor object (\C)}
  \KOutput{resulting tree object (\R)}

  \Return \H\;
\end{algorithm}

\end{document}

答案1

当你这样做

\SetKwData{M}{M}

algorithm2e定义了一个名为 的内部宏\@M,但未检查它是否已定义。碰巧的\@M非常LaTeX 的重要内部命令,代表数字 10000。

我认为这种方法algorithm2e是有争议的。不仅可以在没有任何警告的情况下覆盖内部宏,还可以覆盖用户的宏。

使用不同的命名方案。\H例如,也采用;如果您在算法中使用名称“Erdős”(假设您使用 UTF-8),您会收到令人费解的错误消息,因为这将被翻译成Erd\H{o}s

你得到的错误

! Missing number, treated as zero.

正是因为正在扩展的宏使用\@M10000 的别名,但它已被重新定义为完全不同的含义。

相关内容