用于显示算法的好包有哪些?

用于显示算法的好包有哪些?

我发现这个页面有一些例子:
http://en.wikibooks.org/wiki/LaTeX/Algorithms_and_Pseudocode

我不知道该使用哪一个。有什么建议吗?我也在使用其他软件包,所以对我来说,干扰较小的那个更好。

答案1

就我个人而言,我algpseudocode赞成algorithmicx(注意后面的x!) 包。只需进行一些设置,就可以利用它创建漂亮的伪代码。

algpseudocode 示例

这是由以下代码生成的:

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

上述伪代码嵌套在algorithmfloat 环境中。此环境不是 的一部分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}
}

相关内容