
Estou usando LaTeX para lição de casa em algoritmos, mas estou com um erro que não consigo resolver.
Acho que o erro vem do Algorithm2e, que não gosta de vários 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
Meu código fonte é:
\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 \;
}
Desculpe, os comandos estão em francês, mas acho que não importa.
Como posso resolver esse problema? De onde vem esse erro?
Responder1
Como Paŭlo Ebermann mencionou em sua resposta, \eIf
não admite quebras de parágrafo (no seu caso, as linhas em branco vazias). Se essas linhas em branco não servirem a nenhum propósito, exclua-as. Se você estiver usando essas linhas em branco para tornar seu código mais legível, basta comentar essas linhas usando o %
caractere (primeira versão do seu código abaixo); se a sua intenção é realmente adicionar algum espaço vertical entre algumas linhas, você pode usar algo como \mbox{}\\
no final das linhas, sem deixar linhas em branco vazias (segunda versão do seu código abaixo):
\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}
Aqui está o resultado da primeira versão:
e aqui está o resultado da segunda versão:
Responder2
No LaTeX, os comandos podem ser definidos de uma forma que não permite quebras de parágrafo de linha (ou seja, uma \par
linha explícita ou vazia) dentro de seus argumentos. A mensagem de erro parece que este também é o caso do \eIf
comando.
Não sei a solução aqui, a não ser omitir a linha vazia aqui. Talvez outros respondentes possam ajudar aqui.