避免将语句与 algorithmicx 放在同一行

避免将语句与 algorithmicx 放在同一行

我正在编写一个简单的伪代码,但我遇到了 repeat..until 块的问题。基本上,发生的事情是,此循环结束后的 return 语句与 till 子句呈现在同一行上,这很丑陋,但我找不到办法将其放在自己的一行上使用正确的缩进

这里你可以举一个例子:

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

我尝试使用 添加换行符\\,但这会破坏缩进。我尝试使用\algorithmicindent手动添加缩进,但这会显示“1.5em”而不是空格。我尝试在 后添加\State或,但这也会破坏缩进。\Statex\Until

有没有一种简单的方法可以将最后\Return一行放在单独的一行,而不会破坏缩进?

顺便说一句,这种情况也发生在 If 块内的返回中,但我更担心带有 till 的块,因为 if 的情况看起来不那么糟糕。

编辑:我读过疑问,但是却不能解决问题。

我不想使用varwidth,因为因为我必须修复直到循环,所以我必须手动管理所有缩进[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命令中,如下所示:

 \State{\Return{composto}}

相关内容