2009-11-16 7 views
5

Quiero escribir un algoritmo en LaTeX. Estoy usando el paquete algorítmico y el entorno para hacerlo. Todo funciona muy bien, excepto cuando agrego comentarios (usando \ COMMENT), se envían inmediatamente después de las declaraciones. Me gustaría que todos los comentarios se alineen (y se compensen con las declaraciones). ¿Hay alguna manera fácil de hacerlo?Formateo de comentarios en el entorno algorítmico de LaTeX

"Reproducir" la salida de PDF en el pre de HTML, que quiero:

if condition then 
    something   # comment 1 
else 
    something else # comment 2 

en lugar de

if condition then 
    something # comment 1 
else 
    something else # comment 2 

Respuesta

11

lo haría así:

 
\usepackage{eqparbox} 
\renewcommand{\algorithmiccomment}[1]{\hfill\eqparbox{COMMENT}{\# #1}} 

Nota 1: dos compilaciones de documentos son necesarios para determinar la anchura máxima del comentario.

Nota 2: obviamente, esto solo funciona para comentarios de una sola línea que no son demasiado largos.


Siguiendo con esta idea, aquí hay un ejemplo completo en el mismo tipo de camino, pero que también proporciona un comando para tener comentarios que se rompen a través de líneas:

 
\documentclass{amsbook} 
\usepackage{algorithmic,eqparbox,array} 
\renewcommand\algorithmiccomment[1]{% 
    \hfill\#\ \eqparbox{COMMENT}{#1}% 
} 
\newcommand\LONGCOMMENT[1]{% 
    \hfill\#\ \begin{minipage}[t]{\eqboxwidth{COMMENT}}#1\strut\end{minipage}% 
} 
\begin{document} 
\begin{algorithmic} 
\STATE do nothing \COMMENT{huh?} 
\end{algorithmic} 
\begin{algorithmic} 
\STATE do something \LONGCOMMENT{this is a comment broken over lines} 
\end{algorithmic} 
\begin{algorithmic} 
\STATE do something else \COMMENT{this is another comment} 
\end{algorithmic} 
\end{document} 
+0

Esto es realmente excelente! Los diferentes entornos algorítmicos en su ejemplo son innecesarios, pero destacan que la alineación permanecerá en diferentes algoritmos; una ventaja adicional Ahora necesito leer en eqparbox. – foxcub

+0

En realidad, fue un efecto secundario involuntario :) Si desea que los comentarios cambien de tamaño entre los algoritmos, será más esfuerzo (solo necesita cambiar '{COMMENT}' para incluir un contador, realmente). –

0
if condition then 
    something  \hspace{2in} # comment 1 
else 
    something else \hfill # comment 2 

No estoy seguro de si el hspace y hfill funcionará dentro de una ambiente. Supongo que lo harán. \ hfill configurará los comentarios a la perfección, mientras que \ hspace {espacio} le dará tanto espacio entre los textos. buena suerte.

+1

Si bien esto * * funcionará, se requerirá dinking para cada caso y cada vez que algo cambie. ¡Yuk! – dmckee

0

Si desea sangrías propios para diferentes algoritmos, puede hacer esto al incluir el contador en la redefinición de los comandos de comentario. Aquí hay un ejemplo:

\documentclass{amsbook} 
\usepackage{algorithmicx,algorithm,eqparbox,array} 

\algrenewcommand{\algorithmiccomment}[1]{\hfill// \eqparbox{COMMENT\thealgorithm}{#1}} 
\algnewcommand{\LongComment}[1]{\hfill// \begin{minipage}[t]{\eqboxwidth{COMMENT\thealgorithm}}#1\strut\end{minipage}} 

\begin{document} 
\begin{algorithm} 
\begin{algorithmic} 
\State{do nothing}\Comment{huh?} 
\end{algorithmic} 
\caption{Test Alg} 
\end{algorithm} 

\begin{algorithm} 
\begin{algorithmic} 
\State{do something} \LongComment{this is a comment broken over lines} 
\State{do something else} \Comment{this is another comment} 
\end{algorithmic} 
\caption{Other Alg} 
\end{algorithm} 
\end{document} 
Cuestiones relacionadas