algorithmicxと同じ行にステートメントを置かないでください

algorithmicxと同じ行にステートメントを置かないでください

単純な擬似コードを書いているのですが、repeat..until ブロッ​​クに問題があります。基本的に、このループの終わりに続く return ステートメントが until 節と同じ行にレンダリングされてしまうのですが、これは見苦しいのですが、それを独自の行に配置する方法が見つかりません。正しいインデントで

以下に例を示します。

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

を使用して改行を追加しようとしました\\が、インデントが壊れてしまいます。 を使用して手動でインデントを追加しようとしましたが、空白ではなく「1.5em」が表示されます。の後にまたは を\algorithmicindent追加しようとしましたが、これもインデントが壊れてしまいます。\State\Statex\Until

インデントを壊さずに、最後\Returnの行だけを配置する簡単な方法はありますか?

ちなみに、これは If ブロック内の return でも発生しますが、if の場合はそれほど悪くないので、until の場合の方が心配です。

編集:読んだこれ質問ですが、問題は解決しません。

使用したくないのvarwidthは、until ループを修正する必要があるため、すべてのインデントを手動で管理する必要があるためです [varwidthループの途中で環境を開始すると、他のインデントが壊れます]。

答え1

\Returnこれはおそらく、他のステートメントと同じ行に配置するか、単独で配置するかを選択できるようにするための設計上の選択だったのでしょう。デフォルトで単独で配置するには、

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

ドキュメントの序文に追加します。

ここに画像の説明を入力してください

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

答え2

State最も簡単な解決策は、次のようにコマンド内に return ステートメントをラップすることです。

 \State{\Return{composto}}

関連情報