Missverstandener Fehler mit Algorithmus2e in LateX

Missverstandener Fehler mit Algorithmus2e in LateX

Ich verwende LaTeX für Hausaufgaben in Algorithmen, aber ich habe einen Fehler, den ich nicht lösen kann.

Ich denke, der Fehler kommt von Algorithm2e, das mehrere verschachtelte if(?)-Befehle nicht mag.

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 

Mein Quellcode ist:

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

Es tut mir leid, dass die Befehle auf Französisch sind, aber ich denke, das spielt keine Rolle.

Wie kann ich dieses Problem lösen? Woher kommt dieser Fehler?

Antwort1

Wie Paŭlo Ebermann in seiner Antwort erwähnte, \eIfsind keine Absatzumbrüche zulässig (in Ihrem Fall die leeren Leerzeilen). Wenn diese Leerzeilen keinen Zweck erfüllen, löschen Sie sie. Wenn Sie diese Leerzeilen verwenden, um Ihren Code lesbarer zu machen, können Sie diese Zeilen einfach mit dem %Zeichen auskommentieren (erste Version Ihres Codes unten); wenn Sie tatsächlich einen vertikalen Abstand zwischen einigen Zeilen einfügen möchten, können Sie \mbox{}\\am Ende der Zeilen etwas wie verwenden, ohne leere Leerzeilen zu hinterlassen (zweite Version Ihres Codes unten):

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

Hier ist das Ergebnis der ersten Version:

Bildbeschreibung hier eingeben

und hier ist das Ergebnis der zweiten Version:

Bildbeschreibung hier eingeben

Antwort2

In LaTeX können Befehle so definiert werden, dass innerhalb ihrer Argumente keine Zeilenumbrüche (also entweder eine explizite \paroder eine leere Zeile) zulässig sind. Die Fehlermeldung scheint \eIfauch für den Befehl der Fall zu sein.

Ich kenne hier keine Lösung, außer die leere Zeile hier wegzulassen. Vielleicht können andere Antwortende hier helfen.

verwandte Informationen