Подтвердить что ты не робот

Отступы в латексном алгоритмическом

Как можно отступать строки в алгоритме (алгоритмическом) в латексе?

Я хотел бы иметь возможность написать следующее:

\begin{algorithm}[H]
\caption{My Awesome Program} \label{awesome-algorithm}
\begin{algorithmic}[1]
\FOR { $i=0$ to $logn$ } 
    \STATE Step A:
        % would like the indent the next lines...
        \STATE do something
        \STATE do another thing
    \STATE Step B
\ENDFOR
\end{algorithmic}
\end{algorithm}

Как можно отступать от этих строк? Я пытался найти ответ по поисковому запросу без успеха. Надеюсь, вы, ребята, можете мне помочь. Спасибо.


В настоящее время для отступов используется следующее:

          \STATE  \ \ \ \ do something

который кажется неправильным. Но работает.

4b9b3361

Ответ 1

Попробуйте это вместо:

\STATE\hspace{\algorithmicindent} do something
\STATE\hspace{\algorithmicindent} do another thing

Он должен работать лучше, потому что он использует текущее значение отступа для отступа.

Изменить: Используя предложение Чарльза, вы можете определить новую команду \INDSTATE:

\newcommand{\INDSTATE}[1][1]{\STATE\hspace{#1\algorithmicindent}}

а затем используйте это, когда хотите отступы. По умолчанию, \INDSTATE отступов на один уровень, но вы можете его изменить:

\INDSTATE do something % What you want
\INDSTATE[2] do something % Indent by twice the amount

Ответ 2

Я не мог заставить Alok работать, поэтому я написал это:

% Put in preamable:
\usepackage{forloop}
\newcounter{ct}
\newcommand{\markdent}[1]{\forloop{ct}{0}{\value{ct} < #1}{\hspace{\algorithmicindent}}}
\newcommand{\markcomment}[1]{\Statex\markdent{#1}}

Затем, чтобы поставить "Это мой комментарий" на уровне отступа 3:

\markcomment{3}{"This is my comment"}

Изменить: Я использую algoritmicx (поэтому\State, а не\STATE)

Ответ 3

Я бы посоветовал вам не отступать таким образом. Пакет предназначен для форматирования псевдокода стандартным способом, облегчающим чтение ваших читателей.

Вы пытаетесь нарушить этот стандарт. Было бы гораздо лучше попытаться переписать код, чтобы он соответствовал ожидаемым читателям.

Почему вы так обозначаете шаги A и B? Каждое утверждение должно быть его собственным шагом. Похоже, вы добавляете дополнительную структуру, которая на самом деле делает код менее удобочитаемым. Можете ли вы получить тот же эффект с комментариями? Как насчет объединения "делать что-то" и "делать что-то другое" в одно утверждение?