Vermeiden Sie es, Anweisungen in derselben Zeile wie algorithmicx zu platzieren

Vermeiden Sie es, Anweisungen in derselben Zeile wie algorithmicx zu platzieren

Ich schreibe einen einfachen Pseudocode, habe aber ein Problem mit einem repeat..until-Block. Im Grunde passiert Folgendes: Die return-Anweisung, die auf das Ende dieser Schleife folgt, wird in derselben Zeile wiedergegeben wie die Until-Klausel. Das ist hässlich, aber ich finde keine Möglichkeit, sie in eine eigene Zeile zu setzen.mit der richtigen Einrückung.

Hier ein Beispiel:

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

Ich habe versucht, mit einen Zeilenumbruch einzufügen \\, aber das unterbricht die Einrückung. Ich habe versucht, mit \algorithmicindentmanuell eine Einrückung hinzuzufügen, aber das zeigt „1,5em“ statt eines Leerzeichens an. Ich habe versucht, nach dem ein \Stateoder einzufügen , aber das unterbricht auch die Einrückung.\Statex\Until

Gibt es eine einfache Möglichkeit, das Letzte \Returnin eine eigene Zeile zu setzen, ohne die Einrückung zu unterbrechen?

Das passiert übrigens auch bei der Rückgabe innerhalb des If-Blocks, allerdings mache ich mir bei dem mit dem Until mehr Sorgen, da es bei dem If nicht so schlimm aussieht.

edit: ich habe gelesenDasFrage, aber es löst das Problem nicht.

Ich möchte es nicht verwenden varwidth, da ich, da ich die Until-Schleife reparieren muss, alle Einrückungen manuell verwalten müsste [das Starten einer varwidthUmgebung in der Mitte der Schleife unterbricht andere Einrückungen].

Antwort1

Dies war vielleicht eine Status-by-Design-Entscheidung, um den Benutzern die Wahl zu lassen, ob sie \Returnin derselben Zeile mit anderen Anweisungen stehen oder für sich allein stehen sollen. Um es standardmäßig für sich allein stehen zu lassen, fügen Sie hinzu

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

zu Ihrer Dokumentpräambel.

Bildbeschreibung hier eingeben

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

Antwort2

StateDie einfachste Lösung besteht darin, die Return-Anweisung wie folgt in den Befehl einzuschließen :

 \State{\Return{composto}}

verwandte Informationen