2010-01-07 26 views
16

Wie ist es möglich, Zeilen in einem Algorithmus (algorithmisch) in Latex einzurücken?Einrückung in Latex algorithmisch

Ich möchte in der Lage sein, die folgenden schreiben:

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

Wie ist es möglich, diese Zeilen einrücken? Ich habe versucht, die Antwort durch Googeln ohne Erfolg zu finden. Ich hoffe ihr könnt mir helfen. Vielen Dank.


verwende ich für Vertiefung der folgenden Zeit:

  \STATE \ \ \ \ do something 

, die einfach falsch zu sein scheint. Aber funktioniert.

+5

Frage sollte nach tex.stackexchange verschoben werden. – gatoatigrado

Antwort

22

Versuchen Sie stattdessen:

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

Es sollte besser funktionieren, weil es den aktuellen Einzugswert einrücken verwendet.

bearbeiten: Charles Vorschlag verwenden, können Sie einen neuen Befehl definieren, \INDSTATE:

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

und verwenden Sie dann, wenn Sie Einbuchtung wollen. Standardmäßig \INDSTATE Einzüge von einer Ebene, aber Sie können es ändern:

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

Ich wollte das vorschlagen ... Die Definition eines INDSTATE-Makros scheint sich zu lohnen. –

+0

Dank Charles, ich habe den INDSTATE-Befehl in meinem Beitrag hinzugefügt. –

+0

Das ist großartig. Vielen Dank! – Anna

2

Ich würde vorschlagen, Sie einrücken nicht auf diese Weise. Das Paket wurde entwickelt, um Pseudocode auf eine Standard-Art zu formatieren, um es Ihren Lesern zu erleichtern.

Sie versuchen, diesen Standard zu brechen. Es wäre viel besser zu versuchen, den Code neu zu schreiben, um dem zu entsprechen, was Leser erwarten.

Warum kennzeichnen Sie Schritt A und B? Jede Aussage soll ein eigener Schritt sein. Es scheint, als ob Sie eine zusätzliche Struktur hinzufügen, die den Code weniger lesbar macht. Kannst du mit Kommentaren den gleichen Effekt erzielen? Wie wäre es, "etwas zu tun" und "etwas anderes zu tun" zu einer Aussage?

+0

Ich kann die Schritte nicht kombinieren. Ich habe versucht, den Kommentar zu verwenden. Es ist ok, aber weniger klar, was ich möchte. – Anna

+1

Das sieht so aus, als ob Anna diese Schritte gruppiert, damit sie im Textteil über sie sprechen kann. –

+0

Danke für deinen Kommentar, trotzdem habe ich etwas daraus gelernt. – Anna

2

Ich konnte nicht Alok Wirken, so dass ich dies schrieb:

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

Dann zu setzen "Das ist mein Kommentar ist" auf Einrückungsebene 3:

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

Edit: I Verwenden Sie algoritmicx (daher \ State und nicht \ STATE)

+0

danke. Tolles generisches Werkzeug. – Abhinav