我将在另一个专栏“算法包”中对齐评论。(类似问题:算法包中注释的右对齐错误),但我愿意成为这样的结果:
\usepackage{algorithm,algorithmic}
\renewcommand{\algorithmiccomment}[1]{\bgroup\hfill//~#1\egroup}
[...]
\begin{algorithm}
\caption{$function(n : \mathbb{N}_0) : \mathbb{N}_0$}
\label{algo1}
\begin{algorithmic}[1]
\REQUIRE $n \in \mathbb{N}_0$
\STATE $result \leftarrow 0 : \mathbb{N}_0$
\STATE $temp \leftarrow 1 : \mathbb{N}_0$
\FOR[$n$ Durchläufe]{$i \leftarrow 0$ \TO $n-1$}
\FOR{$j \leftarrow i$ \TO $i$}
\STATE $temp \leftarrow temp \cdot 2$ \COMMENT{Multiplikation}
\ENDFOR
\STATE $result \leftarrow result + temp$ \COMMENT{Addition}
\STATE $temp \leftarrow 1$
\ENDFOR
\RETURN $result$
\end{algorithmic}
\end{algorithm}
答案1
这是一个algorithmicx
执行:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{algorithm,algcompatible,amssymb,amsmath}
\renewcommand{\COMMENT}[2][.5\linewidth]{%
\leavevmode\hfill\makebox[#1][l]{//~#2}}
\algnewcommand\algorithmicto{\textbf{to}}
\algnewcommand\RETURN{\State \textbf{return} }
\begin{document}
\begin{algorithm}
\caption{$\text{function}(n : \mathbb{N}_0) : \mathbb{N}_0$}\label{algo1}
\begin{algorithmic}[1]
\REQUIRE $n \in \mathbb{N}_0$
\STATE $\text{result} \leftarrow 0 : \mathbb{N}_0$
\STATE $\text{temp} \leftarrow 1 : \mathbb{N}_0$
\FOR{$i \leftarrow 0$ \algorithmicto{} $n-1$} \COMMENT{$n$ Durchläufe}
\FOR{$j \leftarrow i$ \algorithmicto{} $i$}
\STATE $\text{temp} \leftarrow \text{temp} \cdot 2$ \COMMENT{Multiplikation}
\ENDFOR
\STATE $\text{result} \leftarrow \text{result} + \text{temp}$ \COMMENT{Addition}
\STATE $\text{temp} \leftarrow 1$
\ENDFOR
\RETURN $\text{result}$
\end{algorithmic}
\end{algorithm}
\end{document}
\COMMENT[<len>]{<stuff>}
重新格式化以将注释放在宽度为(默认值为)<stuff>
的框中,与右侧对齐。您可以根据自己的喜好进行调整。<len>
.5\linewidth
纯algorithmic
实现方式有些不同:
\usepackage{letltxmacro}
\newlength{\commentindent}
\setlength{\commentindent}{.5\textwidth}
\makeatletter
\renewcommand{\algorithmiccomment}[1]{\unskip\hfill\makebox[\commentindent][l]{//~#1}\par}
\LetLtxMacro{\oldalgorithmic}{\algorithmic}
\renewcommand{\algorithmic}[1][0]{%
\oldalgorithmic[#1]%
\renewcommand{\ALC@com}[1]{%
\ifnum\pdfstrcmp{##1}{default}=0\else\algorithmiccomment{##1}\fi}%
}
\makeatother
它使用 e-TeX(用于字符串比较),但可以更改。实现差异的原因主要是因为循环的处理方式algorithmic
- 注释作为循环结构的可选参数插入。因此,很难在实现中允许长度参数的另一个可选参数,如上所示algorithmicx
。解决方法是定义一个长度\commentindent
,以与可选参数处理事物类似的方式处理此问题。
以下是完整的实现,具有相同的输出:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{algorithm,algorithmic,amssymb,amsmath,letltxmacro}
\newlength{\commentindent}
\setlength{\commentindent}{.5\textwidth}
\makeatletter
\renewcommand{\algorithmiccomment}[1]{\unskip\hfill\makebox[\commentindent][l]{//~#1}\par}
\LetLtxMacro{\oldalgorithmic}{\algorithmic}
\renewcommand{\algorithmic}[1][0]{%
\oldalgorithmic[#1]%
\renewcommand{\ALC@com}[1]{%
\ifnum\pdfstrcmp{##1}{default}=0\else\algorithmiccomment{##1}\fi}%
}
\makeatother
\begin{document}
\begin{algorithm}
\caption{$\text{function}(n : \mathbb{N}_0) : \mathbb{N}_0$}\label{algo1}
\begin{algorithmic}[1]
\REQUIRE $n \in \mathbb{N}_0$
\STATE $\text{result} \leftarrow 0 : \mathbb{N}_0$
\STATE $\text{temp} \leftarrow 1 : \mathbb{N}_0$
\FOR[$n$ Durchläufe]{$i \leftarrow 0$ \TO $n-1$}
\FOR{$j \leftarrow i$ \TO $i$}
\STATE $\text{temp} \leftarrow \text{temp} \cdot 2$ \COMMENT{Multiplikation}
\ENDFOR
\STATE $\text{result} \leftarrow \text{result} + \text{temp}$ \COMMENT{Addition}
\STATE $\text{temp} \leftarrow 1$
\ENDFOR
\RETURN $\text{result}$
\end{algorithmic}
\end{algorithm}
\end{document}