我发现这个页面有一些例子:
http://en.wikibooks.org/wiki/LaTeX/Algorithms_and_Pseudocode
我不知道该使用哪一个。有什么建议吗?我也在使用其他软件包,所以对我来说,干扰较小的那个更好。
答案1
就我个人而言,我algpseudocode
赞成algorithmicx
(注意后面的x
!) 包。只需进行一些设置,就可以利用它创建漂亮的伪代码。
这是由以下代码生成的:
\begin{algorithm}
\caption{Counting mismatches between two packed \DNA{} strings
\label{alg:packed-dna-hamming}}
\begin{algorithmic}[1]
\Require{$x$ and $y$ are packed \DNA{} strings of equal length $n$}
\Statex
\Function{Distance}{$x, y$}
\Let{$z$}{$x \oplus y$} \Comment{$\oplus$: bitwise exclusive-or}
\Let{$\delta$}{$0$}
\For{$i \gets 1 \textrm{ to } n$}
\If{$z_i \neq 0$}
\Let{$\delta$}{$\delta + 1$}
\EndIf
\EndFor
\State \Return{$\delta$}
\EndFunction
\end{algorithmic}
\end{algorithm}
并使用以下设置(这只是复制上述内容的示例;您当然可以使用自己的设置):
\usepackage{fontspec}
\setmainfont{Hoefler Text}
\newcommand*\DNA{\textsc{dna}}
\newcommand*\Let[2]{\State #1 $\gets$ #2}
\algrenewcommand\alglinenumber[1]{
{\sf\footnotesize\addfontfeatures{Colour=888888,Numbers=Monospaced}#1}}
\algrenewcommand\algorithmicrequire{\textbf{Precondition:}}
\algrenewcommand\algorithmicensure{\textbf{Postcondition:}}
为了获得end
-less 伪代码,我包含了如下包:
\usepackage[noend]{algpseudocode}
上述伪代码嵌套在algorithm
float 环境中。此环境不是 的一部分algorithmicx
。相反,您需要加载包algorithm
才能获取它。要生成所有算法的列表,您可以使用
\listofalgorithms
algorithm
有关更多信息,请参阅文档中的“环境”部分algorithms
包。但我想再次强调(除了浮动环境)algorithmicx
包优于algorithms
。
答案2
这是对 @KonradRudolph 答案的修改,但包含了一个最小的工作示例以及基本 LaTeX 构建中未附带的必需安装的软件包列表。此外,我还简要讨论了 TeX 发行版的路径、如何找到它以及如何向其中添加软件包(以防您还不知道如何操作)。希望这是对原始答案的一个很好的摘录,它允许刚开始使用 TeX 写作的人更直接地使用此软件包,从而跳过原始答案中未解决的一些障碍。
首先,你需要安装algorithmicx
在你的 TeX 发行版可以读取的路径中。
了解 TeX 发行版的路径是否涵盖一组文件的一个好方法是浏览本教程由@kieran Healy 撰写,描述了使字体可用于 TeX 所需的步骤,这是一个更加艰巨的过程(因为您需要处理字体度量文件,并拥有相关字体的许可证等等)。
最重要的是这里的命令
kpsexpand '$TEXMFLOCAL'
这应该会将发行版路径中的本地目录打印到控制台。如果不行,请尝试
DEST=`kpsexpand '$TEXMFLOCAL'`&& echo $DEST
如果这不起作用,如果您使用的是 OS X,我建议您重新安装 TeXLive,如果您不是的话,我不知道该怎么办。
然后,一旦您确定了发行版的路径并下载了相关的 CTAN 文件,请创建一个新文档并将以下内容粘贴到其中。
\documentclass{article}
\usepackage{algpseudocode,algorithm,algorithmicx}
\newcommand*\DNA{\textsc{dna}}
\newcommand*\Let[2]{\State #1 $\gets$ #2}
\algrenewcommand\algorithmicrequire{\textbf{Precondition:}}
\algrenewcommand\algorithmicensure{\textbf{Postcondition:}}
\begin{document}
\begin{algorithm}
\caption{Counting mismatches between two packed \DNA{} strings
\label{alg:packed-dna-hamming}}
\begin{algorithmic}[1]
\Require{$x$ and $y$ are packed \DNA{} strings of equal length $n$}
\Statex
\Function{Distance}{$x, y$}
\Let{$z$}{$x \oplus y$} \Comment{$\oplus$: bitwise exclusive-or}
\Let{$\delta$}{$0$}
\For{$i \gets 1 \textrm{ to } n$}
\If{$z_i \neq 0$}
\Let{$\delta$}{$\delta + 1$}
\EndIf
\EndFor
\State \Return{$\delta$}
\EndFunction
\end{algorithmic}
\end{algorithm}
\end{document}
一旦运行该命令,它就会生成如下图所示的 PDF:
请注意,它与 Konrad 发布的原始版本略有不同,因为对于只对让算法正确呈现感兴趣的人来说,漂亮的无衬线数字和字体规格是不必要的部分。
注意:您应该将algorithmic
环境嵌入到环境内部algorithm
,这样它就会被视为单个浮动实体,不会分布在多个页面上。
答案3
常见问题解答页面https://www.texfaq.org/FAQ-algorithms概述了在 LaTeX 中排版伪代码的各种包。
答案4
我一直在使用 listings 包,其中包含mathescape=true
选项和语言定义,以使其突出显示我的关键字。类似这样的内容:
\lstdefinelanguage{alg}{
morekeywords={def,if,then,else,while,do,assert,end}
}