
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 の回答の問題は、数字もインデントされるため、番号付けに関するものです。
より良く、よりシンプルなソリューションが見つかりました\algorithmic
。ALC@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番目のものは負のインデントを作成し、以前に作成されたものを削除します。この答え詳細については。