2009-11-16 5 views
5

Je souhaite composer un algorithme dans LaTeX. J'utilise le package algorithmique et l'environnement pour le faire. Tout fonctionne bien, sauf lorsque j'ajoute des commentaires (en utilisant \ COMMENT), ils sont sortis immédiatement après les instructions. Je voudrais que tous les commentaires soient alignés (et décalés par rapport aux énoncés). Y a-t-il un moyen facile de le faire?Mise en forme des commentaires dans l'environnement algorithmique de LaTeX

"Reproduire" la sortie PDF dans le pré de HTML, je veux:

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

plutôt que

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

Répondre

11

je le ferais comme ceci:

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

Note 1: deux compilations de documents sont nécessaires pour déterminer la largeur maximale du commentaire.

Note 2: évidemment, cela ne fonctionne que pour les commentaires d'une seule ligne qui ne sont pas trop longs.


Faisant suite à cette idée, voici un exemple complet dans le même genre de chemin, mais aussi de fournir une commande pour avoir des commentaires qui rompent sur des lignes:

 
\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

C'est vraiment superbe! Les différents environnements algorithmiques dans votre exemple sont inutiles, mais soulignent plutôt que l'alignement restera à travers différents algorithmes; un bonus supplémentaire. Maintenant, j'ai besoin de lire sur eqparbox. – foxcub

+0

En fait c'était un effet secondaire involontaire :) Si vous voulez que les commentaires changent de taille entre les algorithmes, ce sera plus d'effort (juste besoin de changer '{COMMENT}' pour inclure un compteur, vraiment). –

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

Je ne sais pas si le hspace et hfill va travailler à l'intérieur d'un environnement. Je suppose qu'ils le feront. \ hfill placera les commentaires à droite, tandis que \ hspace {espace} vous donnera autant d'espace entre votre texte. bonne chance.

+1

Bien que cela * fonctionne *, il faudrait dinking pour chaque cas et chaque fois que quelque chose change. Yuk! – dmckee

0

Si vous voulez propres renfoncements pour différents algorithmes, vous pouvez le faire en incluant le compteur dans la redéfinition des commandes de commentaires. Voici un exemple:

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