Evite colocar instruções na mesma linha com algoritmox

Evite colocar instruções na mesma linha com algoritmox

Estou escrevendo um pseudocódigo simples, mas tenho um problema com um bloco repeat..until. Basicamente o que acontece é que a instrução return que segue o final deste loop é renderizada na mesma linha que a cláusula Until, o que é feio, mas não consigo encontrar uma maneira de colocá-la em uma linha própriacom o recuo correto.

Aqui você pode ter um exemplo:

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

Tentei adicionar uma quebra de linha usando \\, mas isso quebra o recuo. Tentei \algorithmicindentadicionar recuo manualmente, mas isso exibe "1.5em" em vez de um espaço em branco. Tentei adicionar um \Stateou \Statexapós o \Until, mas isso também quebra o recuo.

Existe uma maneira simples de colocar o último \Returnsozinho em uma linha, sem quebrar o recuo?

Aliás, isso acontece também com o retorno dentro do bloco If, mas estou mais preocupado com aquele com até, já que não fica tão ruim com o if.

editar: eu liessepergunta, mas não resolve o problema.

Não quero usar varwidthporque, como tenho que consertar o loop Until, teria que gerenciar manualmente todos os recuos[iniciar um varwidthambiente no meio do loop quebra outros recuos].

Responder1

Esta foi talvez uma escolha de status por design para permitir que as pessoas escolhessem entre estar \Returnna mesma linha com outras declarações ou ser colocadas por conta própria. Para que ele seja colocado sozinho por padrão, adicione

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

ao preâmbulo do seu documento.

insira a descrição da imagem aqui

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

Responder2

A solução mais simples é agrupar a instrução return no Statecomando da seguinte maneira:

 \State{\Return{composto}}

informação relacionada