![algorithmicxと同じ行にステートメントを置かないでください](https://rvso.com/image/254725/algorithmicx%E3%81%A8%E5%90%8C%E3%81%98%E8%A1%8C%E3%81%AB%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E7%BD%AE%E3%81%8B%E3%81%AA%E3%81%84%E3%81%A7%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84.png)
単純な擬似コードを書いているのですが、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}}