
Я использую 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
Как упомянул Павел Эберманн в своем ответе, \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
и к команде.
Я не знаю решения, кроме как опустить пустую строку здесь. Может быть, другие ответчики могут помочь здесь.