2009-11-16 91 views
5

我想在LaTeX中排版算法。我正在使用算法包和環境來這樣做。除了添加註釋(使用\ COMMENT)時,一切都很好,它們在語句後立即輸出。我希望所有意見能夠一致(並且從聲明中抵消)。有沒有簡單的方法來做到這一點?在LaTeX算法環境中格式化註釋

「再製造」 在HTML的前期PDF輸出,我想:

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

而不是

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

回答

11

我會做這樣的:

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

注1:兩個文件,彙編有必要確定註釋的最大寬度。

注2:顯然,這隻適用於不太長的單行註釋。


從這個想法繼,這裏是在相同的排序方式完整的例子,同時也提供了一個命令,有打破了行註釋:

 
\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

這真是太棒了!在你的例子中不同的算法環境是不必要的,但是強調對齊將保持不同的算法;額外的獎勵。 現在我需要閱讀eqparbox。 – foxcub 2009-11-17 06:41:24

+0

其實這是一個無意的副作用:)如果你想要在算法之間改變大小的註釋,那將會更加努力(只需要改變'{COMMENT}'來包含一個計數器,真的)。 – 2009-11-17 07:33:51

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

我不知道如果HSPACE和hfill將內部的工作環境。我認爲他們會。 \ hfill會將註釋設置爲正確,而\ hspace {空格}會爲您提供文本之間的空間。祝你好運。

+1

雖然這*會*工作,這將需要dinking爲每個案件和每次任何變化。育! – dmckee 2009-11-16 22:42:35

0

如果你想爲自己的凹痕不同的算法,你可以通過在重新定義註釋命令時加入計數器來實現。這裏是一個例子:

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