使用“算法”软件包时,“到连接器”不起作用

使用“算法”软件包时,“到连接器”不起作用

假设有以下伪代码,使用包以 LaTeX 编写algorithms

\documentclass[]{article}

\usepackage{algorithm}% http://ctan.org/pkg/algorithms
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx

\begin{document}
\begin{algorithm}[t]
\caption{Euclid example}\label{euclid}

\begin{algorithmic}[1]
    \Procedure{Euclid}{$a,b$}\Comment{The g.c.d. of a and b}
    \State $r\gets a\bmod b$ and foobar\label{foobar}
    \For{$i \gets 1$ to $n$}
    \While{$r\not=0$}\Comment{We have the answer if r is 0}
    \State $a\gets b$
    \State $b\gets r$
    \State $r\gets a\bmod b$
    \EndWhile\label{euclidendwhile}
    \EndFor
    \State \textbf{return} $b$\Comment{The gcd is b}
    \EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}

这样写确实有效。但是,当我尝试将 like\For{$i \gets 1$ to $n$}改为\For{$i \gets 1$ \To $n$}or\For{$i \gets 1$ \TO $n$}时,它无法编译,并出现错误“未定义的控制序列”。不过,根据软件包的文档,它应该可以工作(请参阅官方文档第 5 页,网址为http://ctan.math.utah.edu/ctan/tex-archive/macros/latex/contrib/algorithms/algorithms.pdf)。

我做错了什么?我还能怎样将to连接器放入 for 循环中,以便以粗体显示并与和to相同的字体?loopdo

答案1

algpseudocode是其一部分algorithmicx并且它不提供\To\TO。它是algorithmic(来自algorithms) 提供\To

定义你自己的\To

在此处输入图片描述

\documentclass{article}

\usepackage{algorithm,algpseudocode}

\algnewcommand{\To}{{\normalfont\bfseries to }}

\begin{document}

\begin{algorithm}[t]
  \caption{Euclid example}\label{euclid}
  \begin{algorithmic}[1]
    \Procedure{Euclid}{$a,b$}\Comment{The g.c.d.\ of $a$ and $b$}
      \State $r\gets a \bmod b$ and foobar
      \For{$i \gets 1$ \To $n$}
        \While{$r \neq 0$}\Comment{We have the answer if $r$ is $0$}
          \State $a \gets b$
          \State $b \gets r$
          \State $r \gets a \bmod b$
        \EndWhile
      \EndFor
      \State \textbf{return} $b$\Comment{The g.c.d.\ is $b$}
    \EndProcedure
  \end{algorithmic}
\end{algorithm}

\end{document}

相关内容