2010-01-07 40 views
16

¿Cómo es posible sangrar líneas en un algoritmo (algorítmico) en látex?Sangría en látex algorítmico

Me gustaría ser capaz de escribir lo siguiente:

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

¿Cómo es posible aplicar la sangría de esas líneas? He estado tratando de encontrar la respuesta buscando en Google sin éxito. Espero que puedan ayudarme. Gracias.


Actualmente estoy usando el siguiente para el sangrado:

  \STATE \ \ \ \ do something 

que parece simplemente erróneo. Pero funciona

+5

pregunta se debe mover a tex.stackexchange. – gatoatigrado

Respuesta

22

Tal vez puedas probar:

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

Se debe trabajar mejor, ya que utiliza el valor actual de sangría para sangrar.

Edición: El uso de la sugerencia de Charles, se podría definir un nuevo comando, \INDSTATE:

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

y luego usar que cuando se quiere sangría. Por defecto, \INDSTATE guiones de una sola planta, pero puede cambiarlo:

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

Estaba a punto de sugerir esto ... Definir una macro INDSTATE parece que vale la pena. –

+0

Gracias Charles, agregué el comando INDSTATE en mi publicación. –

+0

Esto es genial. ¡Gracias! – Anna

2

Yo sugeriría que no sangrar de esa manera. El paquete está diseñado para formatear pseudocódigo de forma estándar para que sea más fácil para sus lectores.

Usted está tratando de romper ese estándar. Sería mucho mejor tratar de reescribir el código para ajustarse a lo que los lectores esperan.

¿Por qué etiquetan los pasos A y B, de todos modos? Se supone que cada afirmación es su propio paso. Parece que estás agregando una estructura extra que realmente hace que el código sea menos legible. ¿Puedes obtener el mismo efecto con los comentarios? ¿Qué hay de combinar "hacer algo" y "hacer otra cosa" en una declaración?

+0

No puedo combinar los pasos. Traté de usar el comentario. Está bien, pero está menos claro que lo que me gustaría. – Anna

+1

Parece que Anna está agrupando estos pasos para que pueda hablar sobre ellos en el cuerpo del texto. –

+0

Gracias por su comentario de todos modos, aprendí algo de eso. – Anna

2

no pude conseguir trabajo de Alok, así que escribió esto:

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

Entonces, para poner "Este es mi comentario" al nivel de sangría 3:

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

Editar: I utilice algoritmicx (por lo tanto \ Estado y no \ ESTADO)

+0

gracias. Gran herramienta genérica. – Abhinav