Evite poner declaraciones en la misma línea con algorítmicox

Evite poner declaraciones en la misma línea con algorítmicox

Estoy escribiendo un pseudocódigo simple, pero tengo un problema con un bloque repetir...hasta. Básicamente, lo que sucede es que la declaración de retorno que sigue al final de este bucle se representa en la misma línea que la cláusula hasta, lo cual es feo, pero no puedo encontrar una manera de ponerlo en una línea propia.con la sangría correcta.

Aquí puedes tener un ejemplo:

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

Intenté agregar un salto de línea usando \\, pero esto rompe la sangría. Intenté usar \algorithmicindentpara agregar sangría manualmente, pero muestra "1,5 em" en lugar de un espacio en blanco. Intenté agregar un \Stateo \Statexdespués de \Until, pero esto también rompe la sangría.

¿Existe una forma sencilla de poner el último \Returnen una línea por sí solo, sin romper la sangría?

Por cierto, esto también pasa con el return dentro del bloque If, ​​pero me preocupa más el que tiene hasta, ya que con el if no queda tan mal.

editar: he leídoestepregunta, pero no resuelve el problema.

No quiero usarlo varwidthporque, dado que tengo que arreglar el ciclo hasta, tendría que administrar manualmente todas las sangrías [iniciar un varwidthentorno en el medio del ciclo rompe otras sangrías].

Respuesta1

Esta fue quizás una elección de estado por diseño para permitir que las personas elijan entre estar \Returnen la misma línea que otras declaraciones o colocarse por sí solo. Para que se coloque solo de forma predeterminada, agregue

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

al preámbulo de su documento.

ingrese la descripción de la imagen aquí

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

Respuesta2

La solución más sencilla es incluir la declaración de devolución en Stateel comando de la siguiente manera:

 \State{\Return{composto}}

información relacionada