LateX 中 algorithm2e 的错误误解

LateX 中 algorithm2e 的错误误解

我正在使用 LaTeX 完成算法作业,但遇到了一个无法解决的错误。

我认为错误来自 Algorithm2e,它不喜欢多个嵌套的 if(?)

Runaway argument?
{ \eIf {$firstWall$}{ Tourne vers la gauche tant que pas blanc \; }{ \ETC.
! Paragraph ended before \algocf@eIfthen was complete.
<to be read again> 
               \par 
l.86 

我的源代码是:

\eIf{$firstWall$}{
  Rotation du robot de 10 degrés \;
}
{
  Rotation du robot de 10 degrés \;
}

\eIf{$lightValue() >= blanc$}{
      \eIf{$firstWall$}{
            Tourne vers la gauche tant que pas blanc \;
          }{
            Tourne vers la droite tant que pas blanc \;
          }
          %Here is the line 86%
          Tourne vers la gauche jusqu'à retrouver du blanc et enregistre l'angle de rotation du robot. \;

          $alignTrajectory(false)$ \;

          Continue à avancer \;
    }{
      Tourne vers la droite jusqu'à retrouver du blanc \;

      $alignTrajectory(true)$ \;

      Continue à avancer \;
    }

抱歉,命令是法语的,但我认为这没关系。

我该如何解决这个问题?这个错误从何而来?

答案1

正如 Paŭlo Ebermann 在他的回答中提到的,\eIf不允许段落中断(在您的情况下是空白行)。如果这些空白行没有任何用处,请删除它们。如果您使用这些空白行来使您的代码更具可读性,您可以简单地使用字符注释掉这些行%(下面是您的代码的第一个版本);如果您的意图实际上是在某些行之间添加一些垂直空间,您可以\mbox{}\\在行尾使用类似的东西,而不留下空白行(下面是您的代码的第二个版本):

\documentclass{article}
\usepackage{algorithm2e}

\begin{document}

\begin{algorithm}
\eIf{$firstWall$}{
  Rotation du robot de 10 degrés \;
}
{
  Rotation du robot de 10 degrés \;
}

\eIf{$lightValue() >= blanc$}{
      \eIf{$firstWall$}{
            Tourne vers la gauche tant que pas blanc \;
          }{
            Tourne vers la droite tant que pas blanc \;
          }
          %Here is the line 86%
          Tourne vers la gauche jusqu'à retrouver du blanc et enregistre l'angle de rotation du robot. \;
%
          $alignTrajectory(false)$ \;
%
          Continue à avancer \;
    }{
      Tourne vers la droite jusqu'à retrouver du blanc \;
%
      $alignTrajectory(true)$ \;
%
      Continue à avancer \;
    }
\end{algorithm}

\begin{algorithm}
\eIf{$firstWall$}{
  Rotation du robot de 10 degrés \;
}
{
  Rotation du robot de 10 degrés \;
}

\eIf{$lightValue() >= blanc$}{
      \eIf{$firstWall$}{
            Tourne vers la gauche tant que pas blanc \;
          }{
            Tourne vers la droite tant que pas blanc \;
          }
          %Here is the line 86%
          Tourne vers la gauche jusqu'à retrouver du blanc et enregistre l'angle de rotation du robot. \;\mbox{}\\
          $alignTrajectory(false)$ \;\mbox{}\\
          Continue à avancer \;
    }{
      Tourne vers la droite jusqu'à retrouver du blanc \;\mbox{}\\
      $alignTrajectory(true)$ \;\mbox{}\\
      Continue à avancer \;
    }
\end{algorithm}

\end{document}

这是第一个版本的结果:

在此处输入图片描述

这是第二个版本的结果:

在此处输入图片描述

答案2

在 LaTeX 中,命令可以定义成不允许\par在其参数中出现段落换行符(即显式换行或空行)。错误消息看起来也是该命令的情况\eIf

除了省略这里的空行之外,我不知道这里的解决方案。也许其他回答者可以提供帮助。

相关内容