2009-11-16 9 views
5

Desidero comporre un algoritmo in LaTeX. Sto usando il pacchetto algoritmico e l'ambiente per farlo. Tutto funziona alla grande, tranne quando aggiungo commenti (usando \ COMMENT), vengono visualizzati immediatamente dopo le istruzioni. Vorrei che tutti i commenti fossero allineati (e controbilanciati dalle dichiarazioni). C'è un modo semplice per farlo?Commenti di formattazione nell'ambiente algoritmico di LaTeX

"Riprodurre" l'output PDF in pre di HTML, che voglio:

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

piuttosto che

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

risposta

11

farei così:

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

Nota 1: sono necessari per determinare la larghezza massima del commento due compilation di documenti.

Nota 2: ovviamente, questo funziona solo per i commenti a riga singola non troppo lunghi.


Sulla scia di questa idea, ecco un esempio completo nello stesso tipo di modo, ma fornisce anche un comando per avere commenti che si rompono su linee:

 
\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

Questo è davvero fantastico! I diversi ambienti algoritmici nel tuo esempio non sono necessari, ma piuttosto evidenzia che l'allineamento rimarrà attraverso diversi algoritmi; un ulteriore bonus. Ora ho bisogno di leggere su eqparbox. – foxcub

+0

In realtà si trattava di un effetto collaterale non intenzionale :) Se vuoi che i commenti cambino formato tra gli algoritmi, sarà più difficile (devi solo cambiare '{COMMENT}' per includere un contatore, in realtà). –

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

Non sono sicuro se il hspace e hfill lavorerà all'interno di un ambiente. Suppongo che lo faranno. \ hfill imposterà i commenti a destra, mentre \ hspace {spazio} ti darà molto spazio tra il tuo testo. in bocca al lupo.

+1

Mentre questo * funziona *, richiederebbe dinking per ogni caso e ogni volta qualcosa cambia. Che schiffo! – dmckee

0

Se si vuole proprio indentions per diversi algoritmi, è possibile farlo includendo il contatore nella ridefinizione dei comandi di commento. Ecco un esempio:

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