2010-01-07 10 views
16

Comment est-il possible de mettre en retrait des lignes dans un algorithme (algorithmique) en latex?Indentation en latex algorithmique

Je voudrais pouvoir écrire les suivantes:

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

Comment est-il possible de mettre en retrait ces lignes? J'ai essayé de trouver la réponse en googlant sans succès. J'espère que vous pouvez m'aider. Merci.


J'utilise actuellement ce qui suit pour indentation:

  \STATE \ \ \ \ do something 

qui semble simplement faux. Mais travaille.

+5

La question doit être déplacée vers tex.stackexchange. – gatoatigrado

Répondre

22

Essayez ceci:

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

Il devrait mieux fonctionner car il utilise la valeur actuelle de tiret en retrait.

Modifier: En utilisant la suggestion de Charles, vous pouvez définir une nouvelle commande, \INDSTATE:

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

et ensuite utiliser que lorsque vous voulez indentation. Par défaut, \INDSTATE par tirets d'un niveau, mais vous pouvez le modifier:

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

J'étais sur le point de suggérer ceci ... Définir une macro INDSTATE semble intéressant. –

+0

Merci Charles, j'ai ajouté la commande INDSTATE dans mon article. –

+0

C'est génial. Merci! – Anna

2

Je vous suggère de n'indentez pas de cette façon. Le paquet est conçu pour formater le pseudocode d'une manière standard pour le rendre plus facile pour vos lecteurs.

Vous essayez de dépasser cette norme. Il serait préférable d'essayer de réécrire le code pour se conformer à ce que les lecteurs attendent. Pourquoi étiqueter les étapes A et B, de toute façon, pourquoi? Chaque déclaration est censée être son propre pas. Il semble que vous ajoutez une structure supplémentaire qui rend le code moins lisible. Pouvez-vous obtenir le même effet avec des commentaires? Que diriez-vous de combiner "faire quelque chose" et "faire autre chose" dans une déclaration?

+0

Je ne peux pas combiner les étapes. J'ai essayé d'utiliser le commentaire. C'est bon, mais moins clair que ce que je voudrais. – Anna

+1

Cela ressemble à Anna qui regroupe ces étapes afin qu'elle puisse en parler dans le corps du texte. –

+0

Merci pour votre commentaire de toute façon, j'ai appris quelque chose. – Anna

2

Je ne pouvais pas le travail de Alok, donc j'écrit ceci:

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

Ensuite, mettre "Ceci est mon commentaire" au niveau de retrait 3:

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

Edit: I utilisez algoritmicx (par conséquent \ State et non \ STATE)

+0

merci. Super outil générique. – Abhinav