Форматирование комментариев в алгоритмической среде LaTeX - PullRequest
5 голосов
/ 16 ноября 2009

Я хочу набрать алгоритм в LaTeX. Я использую алгоритмический пакет и среду для этого. Все работает отлично, за исключением случаев, когда я добавляю комментарии (используя \ COMMENT), они выводятся сразу после операторов. Я хотел бы, чтобы все комментарии были выровнены (и смещены от заявлений). Есть ли простой способ сделать это?

"Воспроизведение" вывода PDF в формате HTML, я хочу:

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

вместо

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

Ответы [ 3 ]

11 голосов
/ 17 ноября 2009

Я бы сделал это так:

\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 голосов
/ 25 июля 2017

Если вам нужны собственные отступы для разных алгоритмов, вы можете сделать это, включив счетчик в переопределение команд комментария. Вот пример:

\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}
0 голосов
/ 16 ноября 2009
if condition then
   something        \hspace{2in} # comment 1
else
   something else   \hfill # comment 2

Я не уверен, будут ли hspace и hfill работать внутри среды. Я предполагаю, что они будут. \ hfill установит правильные комментарии справа, а \ hspace {space} даст вам столько места между вашим текстом. удачи.

...