Избегайте размещения утверждений на одной строке с algorithmicx

Избегайте размещения утверждений на одной строке с algorithmicx

Я пишу простой псевдокод, но у меня проблема с блоком repeat..until. По сути, происходит следующее: оператор return, который следует за концом этого цикла, отображается на той же строке, что и предложение until, что некрасиво, но я не могу найти способ поместить его на отдельную строкус правильным отступом.

Вот пример:

\documentclass[a4paper,10pt]{article}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{test di Fermat}\label{alg:test-fermat}
\begin{algorithmic}[1]
\Procedure{testFermat}{$n, prove$}
    \Repeat
        \State{$a \gets$ numero casuale tra 2 e $n-1$}
        \If{$a^n \not\equiv a \bmod n$}
            \Return composto
        \EndIf
        \State{$prove \gets prove - 1$}
    \Until{$prove > 0$}
    \Return forse primo
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}

Я пытался добавить перенос строки с помощью \\, но это нарушает отступ. Я пытался использовать , \algorithmicindentчтобы добавить отступ вручную, но это отображает "1.5em" вместо пробела. Я пытался добавить \Stateили \Statexпосле \Until, но это также нарушает отступ.

Есть ли простой способ поставить колодку \Returnна линию отдельно, не нарушая отступ?

Кстати, то же самое происходит и с return внутри блока If, но меня больше беспокоит вариант с until, так как с if все выглядит не так уж и плохо.

редактирование: Я прочиталэтотвопрос, но это не решает проблему.

Я не хочу его использовать varwidth, потому что, поскольку мне нужно исправить цикл until, мне придется вручную управлять всеми отступами [запуск varwidthсреды в середине цикла нарушает другие отступы].

решение1

Это, возможно, был выбор статуса по замыслу, чтобы позволить людям выбирать между тем, чтобы быть \Returnна одной строке с другими утверждениями или быть размещенным отдельно. Чтобы он был размещен отдельно по умолчанию, добавьте

\algrenewcommand\Return{\State \algorithmicreturn{} }%

к преамбуле вашего документа.

введите описание изображения здесь

\documentclass[a4paper,10pt]{article}
\usepackage{algorithm}% http://ctan.org/pkg/algorithms
\usepackage[noend]{algpseudocode}% http://ctan.org/pkg/algorithmicx
\algrenewcommand\Return{\State \algorithmicreturn{} }%
\begin{document}
\begin{algorithm}
  \caption{test di Fermat}\label{alg:test-fermat}
  \begin{algorithmic}[1]
    \Procedure{testFermat}{$n, prove$}
      \Repeat
        \State{$a \gets$ numero casuale tra 2 e $n-1$}
        \If{$a^n \not\equiv a \bmod n$}
          \Return composto
        \EndIf
        \State{$prove \gets prove - 1$}
      \Until{$prove > 0$}
      \Return forse primo
    \EndProcedure
  \end{algorithmic}
\end{algorithm}
\end{document}​

решение2

Самое простое решение — обернуть оператор return в Stateкоманду следующим образом:

 \State{\Return{composto}}

Связанный контент