![Избегайте размещения утверждений на одной строке с algorithmicx](https://rvso.com/image/254725/%D0%98%D0%B7%D0%B1%D0%B5%D0%B3%D0%B0%D0%B9%D1%82%D0%B5%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%83%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B9%20%D0%BD%D0%B0%20%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5%20%D1%81%20algorithmicx.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}
Я пытался добавить перенос строки с помощью \\
, но это нарушает отступ. Я пытался использовать , \algorithmicindent
чтобы добавить отступ вручную, но это отображает "1.5em" вместо пробела. Я пытался добавить \State
или \Statex
после \Until
, но это также нарушает отступ.
Есть ли простой способ поставить колодку \Return
на линию отдельно, не нарушая отступ?
Кстати, то же самое происходит и с return внутри блока If, но меня больше беспокоит вариант с until, так как с if все выглядит не так уж и плохо.
редактирование: Я прочиталэтотвопрос, но это не решает проблему.
Я не хочу его использовать 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
Самое простое решение — обернуть оператор return в State
команду следующим образом:
\State{\Return{composto}}