Error mal entendido con algoritmo2e en LateX

Error mal entendido con algoritmo2e en LateX

Estoy usando LaTeX para la tarea de algoritmos, pero tengo un error que no puedo resolver.

Creo que el error proviene de Algorithm2e al que no le gustan los if(?) anidados múltiples.

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 

Mi código fuente es:

\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 \;
    }

Lo siento, los comandos están en francés pero creo que no importa.

¿Cómo puedo solucionar este problema? ¿De dónde viene este error?

Respuesta1

Como mencionó Paŭlo Ebermann en su respuesta, \eIfno admite saltos de párrafo (en su caso, las líneas en blanco vacías). Si esas líneas en blanco no sirven para nada, elimínelas. Si está utilizando esas líneas en blanco para hacer que su código sea más legible, simplemente puede comentar esas líneas usando el %carácter (primera versión de su código a continuación); Si su intención es realmente agregar algo de espacio vertical entre algunas líneas, puede usar algo como \mbox{}\\al final de las líneas, sin dejar líneas vacías en blanco (segunda versión de su código a continuación):

\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}

Aquí está el resultado de la primera versión:

ingrese la descripción de la imagen aquí

y aquí está el resultado de la segunda versión:

ingrese la descripción de la imagen aquí

Respuesta2

En LaTeX, los comandos se pueden definir de una manera que no permita saltos de párrafo de línea (es decir, una \parlínea explícita o vacía) dentro de sus argumentos. El mensaje de error parece que este también es el caso del \eIfcomando.

No conozco la solución aquí, aparte de omitir la línea vacía aquí. Quizás otros respondedores puedan ayudar aquí.

información relacionada