Einrücken von Codezeilen im Algorithmus

Einrücken von Codezeilen im Algorithmus

Ich schreibe einen Algorithmus mit zwei Phasen. Wie kann ich Code für Phase eins und Phase zwei einrücken?

\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}

Antwort1

Im folgenden Beispielcode habe ich zwei neue Befehle definiert, mit denen Sie die Einrückung ändern können; schließen Sie das gewünschte Fragment einfach mit \bindent, ein \eindent; die Länge \myindentbestimmt die Stärke der Einrückung:

\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}

Bildbeschreibung hier eingeben

Einige Kommentare zum Code:

\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

Antwort2

Definieren:

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

Schreiben Sie dann in den algorithmischen Block:

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

Antwort3

Das Problem bei Gonzalos Antwort betrifft die Nummerierung, da Zahlen ebenfalls eingerückt sind.

Bessere und auch einfachere Lösung für \algorithmicdie Inbuild-Umgebung gefundenALC@g

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

Um es im selben Dokument zu vergleichen

\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}

Und das Ergebnis

Prüfen

Natürlich können Sie in meinen Vorschlag eine Lösung für einen größeren Einzug \addtolengthaufnehmen \setlength.

Antwort4

Wenn Sie das algorithm2ePaket verwenden, lautet die Antwort \Indpund \Indm. Das erste erstellt einen Einzug und das zweite einen negativen Einzug und entfernt somit den zuvor erstellten. Siehediese Antwortfür mehr Details.

verwandte Informationen