![Vermeiden Sie es, Anweisungen in derselben Zeile wie algorithmicx zu platzieren](https://rvso.com/image/254725/Vermeiden%20Sie%20es%2C%20Anweisungen%20in%20derselben%20Zeile%20wie%20algorithmicx%20zu%20platzieren.png)
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 \algorithmicindent
manuell eine Einrückung hinzuzufügen, aber das zeigt „1,5em“ statt eines Leerzeichens an. Ich habe versucht, nach dem ein \State
oder einzufügen , aber das unterbricht auch die Einrückung.\Statex
\Until
Gibt es eine einfache Möglichkeit, das Letzte \Return
in 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 varwidth
Umgebung 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 \Return
in 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.
\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
State
Die einfachste Lösung besteht darin, die Return-Anweisung wie folgt in den Befehl einzuschließen :
\State{\Return{composto}}