![Evite poner declaraciones en la misma línea con algorítmicox](https://rvso.com/image/254725/Evite%20poner%20declaraciones%20en%20la%20misma%20l%C3%ADnea%20con%20algor%C3%ADtmicox.png)
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 \algorithmicindent
para agregar sangría manualmente, pero muestra "1,5 em" en lugar de un espacio en blanco. Intenté agregar un \State
o \Statex
después de \Until
, pero esto también rompe la sangría.
¿Existe una forma sencilla de poner el último \Return
en 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 varwidth
porque, dado que tengo que arreglar el ciclo hasta, tendría que administrar manualmente todas las sangrías [iniciar un varwidth
entorno 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 \Return
en 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.
\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 State
el comando de la siguiente manera:
\State{\Return{composto}}