アルゴリズムのコード行のインデント

アルゴリズムのコード行のインデント

2 つのステージを持つアルゴリズムを書いています。ステージ 1 とステージ 2 のコードはどのようにインデントすればよいでしょうか?

\begin{algorithm}[H]
\caption*{my algorithm}
\begin{algorithmic}
    \STATE \textbf{Stage one:} this is stage one
    \FORALL{i}
        \STATE do something
    \ENDFOR
    \STATE \textbf{Stage two:} this is stage two
    \STATE Update the trie: 
    \FORALL{j}
    \STATE do something
    \ENDFOR
\end{algorithmic}
\end{algorithm}

答え1

次のサンプル コードでは、インデントを変更できる 2 つの新しいコマンドを定義しました。必要なフラグメントを , を使用して囲むだけで\bindent\eindent長さによって\myindentインデント量が制御されます。

\documentclass{article}
\usepackage{algorithm,algorithmic}
\usepackage{caption}

\newlength\myindent
\setlength\myindent{2em}
\newcommand\bindent{%
  \begingroup
  \setlength{\itemindent}{\myindent}
  \addtolength{\algorithmicindent}{\myindent}
}
\newcommand\eindent{\endgroup}

\begin{document}

\begin{algorithm}[H]
\caption*{my algorithm}
\begin{algorithmic}
    \STATE \textbf{Stage one:} this is stage one
    \bindent
    \FORALL{i}
        \STATE do something
    \ENDFOR
    \eindent
    \STATE \textbf{Stage two:} this is stage two
    \bindent
    \STATE Update the trie: 
    \FORALL{j}
    \STATE do something
    \ENDFOR
    \eindent
\end{algorithmic}
\end{algorithm}

\end{document}

ここに画像の説明を入力してください

コードに対するコメント:

\newlength\myindent % define a new length \myindent
\setlength\myindent{6em} % assign the length 2em to \myindet
\newcommand\bindent{%
  \begingroup % starts a group (to keep changes local)
  \setlength{\itemindent}{\myindent} % set itemindent (algorithmic internally uses a list) to the value of \mylength
  \addtolength{\algorithmicindent}{\myindent} % adds \mylength to the default indentation used by algorithmic
}
\newcommand\eindent{\endgroup} % closes a group

答え2

定義する:

\algdef{SE}[SUBALG]{Indent}{EndIndent}{}{\algorithmicend\ }%
\algtext*{Indent}
\algtext*{EndIndent}

次に、アルゴリズム ブロックに次のように記述します。

\begin{algorithmic}[1]
    \State Outside indent block
    \Indent
         \State Inside indent block
    \EndIndent
\end{algorithmic}

答え3

Gonzalo の回答の問題は、数字もインデントされるため、番号付けに関するものです。

より良く、よりシンプルなソリューションが見つかりました\algorithmicALC@g

\begin{ALC@g}
   % Indent what you need
\end{ALC@g}

同じ文書内で比較するには

\newlength\myindent
\setlength\myindent{2em}
\newcommand\bindent{%
    \begingroup
    \setlength{\itemindent}{\myindent}
    \addtolength{\algorithmicindent}{\myindent}
}
\newcommand\eindent{\endgroup}

\begin{algorithmic}[1]
    \STATE \textbf{Gonsalo's answer}
    \bindent
    \STATE First
    \STATE Second 
    \eindent
    \STATE \textbf{Proposed answer}

    \begin{ALC@g}
        \STATE First
        \STATE Second 
    \end{ALC@g}
    \STATE Something else
\end{algorithmic}

そして結果

テスト

もちろん、私の提案の中に\addtolength、より大きなインデントのための解決策を含めることもできます。\setlength

答え4

パッケージを使用する場合algorithm2e、答えは\Indpとです\Indm。最初のものはインデントを作成し、2番目のものは負のインデントを作成し、以前に作成されたものを削除します。この答え詳細については。

関連情報