Отступ в латексе алгоритмический - PullRequest
17 голосов
/ 07 января 2010

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

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

\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

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

Ответы [ 3 ]

24 голосов
/ 07 января 2010

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

\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
3 голосов
/ 07 января 2010

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

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

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

2 голосов
/ 05 декабря 2010

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

% 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"}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...