2009-11-16 6 views
5

Ich möchte einen Algorithmus in LaTeX setzen. Ich benutze dazu das algorithmische Paket und die Umgebung. Alles funktioniert gut, außer wenn ich Kommentare (mit \ COMMENT) hinzufüge, werden sie unmittelbar nach den Anweisungen ausgegeben. Ich möchte, dass alle Kommentare aufeinander abgestimmt werden (und von den Aussagen abweichen). Gibt es einen einfachen Weg dazu?Formatieren von Kommentaren in LaTeX's algorithmischer Umgebung

"Reproduktion", um die PDF-Ausgabe in HTML pre, ich will:

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

statt

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

Antwort

11

Ich würde es tun, wie folgt:

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

Anmerkung 1: zwei Dokumentensammlungen sind notwendig, um die maximale Breite des Kommentars zu bestimmen.

Hinweis 2: Dies funktioniert natürlich nur für Kommentare, die nicht zu lang sind.


Nach dieser Idee auf, hier ist ein komplettes Beispiel in der gleichen Art und Weise, sondern bietet auch einen Befehl Kommentare zu haben, die über die Leitungen brechen:

 
\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

Das ist wirklich super! Die verschiedenen algorithmischen Umgebungen in Ihrem Beispiel sind nicht notwendig, sondern betonen, dass die Ausrichtung über verschiedene Algorithmen hinweg erhalten bleibt. ein zusätzlicher Bonus. Jetzt muss ich auf eqparbox nachlesen. – foxcub

+0

Eigentlich war das eine unbeabsichtigte Nebenwirkung :) Wenn Sie möchten, dass Kommentare die Größe zwischen den Algorithmen ändern, ist das mehr Aufwand (Sie müssen nur '{COMMENT}' ändern, um einen Zähler zu integrieren). –

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

Ich bin nicht sicher, ob die hspace und hfill wird innerhalb einer Arbeit Umgebung. Ich nehme an, dass sie das tun werden. \ hfill wird die Kommentare rechtsbündig setzen, während \ hspace {Leerzeichen} Ihnen so viel Platz zwischen Ihrem Text geben wird. Viel Glück.

+1

Während dies * funktionieren wird, würde es erfordern, für jeden Fall und jedes Mal, wenn sich etwas ändert. Yuk! – dmckee

0

Wenn Sie eigene Einzüge wollen verschiedene Algorithmen könnten Sie dies tun, indem Sie den Zähler in die Neudefinition der Kommentarbefehle einbeziehen. Hier ist ein Beispiel:

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