![Evite colocar instruções na mesma linha com algoritmox](https://rvso.com/image/254725/Evite%20colocar%20instru%C3%A7%C3%B5es%20na%20mesma%20linha%20com%20algoritmox.png)
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 \algorithmicindent
adicionar recuo manualmente, mas isso exibe "1.5em" em vez de um espaço em branco. Tentei adicionar um \State
ou \Statex
após o \Until
, mas isso também quebra o recuo.
Existe uma maneira simples de colocar o último \Return
sozinho 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 varwidth
porque, como tenho que consertar o loop Until, teria que gerenciar manualmente todos os recuos[iniciar um varwidth
ambiente 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 \Return
na 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.
\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 State
comando da seguinte maneira:
\State{\Return{composto}}