带垂直线的伪代码

带垂直线的伪代码

我想写一些伪代码。经过一番研究,我找到了 algorithmicx 和这篇文章:在 latex 中编写伪代码

但我想要这样的垂直线:

function toto: 
| for i = 0 , i < 10, i++ 
|  | print i * i = i^2 
|  | if i is a prime number 
|  |  | print prime number 
|  | end if 
|  end for 
end function

根据文档,该软件包没有提供此功能(或者我错过了)

有人知道怎么做吗?

答案1

fontenc除了正确设置类似内容外,不需要任何包<。参数\lindent\rthk\rindent分别控制规则左侧的空间、规则厚度和规则右侧的空间。

在多次尝试允许使用特殊字符失败后,我决定,对于伪代码,即使不使用特殊字符,您也能够生存。我引入的宏是\block{pre\\code}{indented\\code}{post\\code}

已编辑至\ignorespaces\unskip,因此%不是到处都需要。

\documentclass{article}
\usepackage[T1]{fontenc}
\def\lindent{.5ex}
\def\rindent{2ex}
\def\rthk{1.5pt}
\newcommand\block[3]{\unskip%
  \noindent\parbox[b]{\textwidth}{\strut\ignorespaces#1\strut}\\
  \setbox0=\hbox{\parbox[b]{\textwidth}{\strut\ignorespaces#2\strut}}%
  \hspace*{\lindent}\rule[-.5\dp\strutbox]{\rthk}{\ht0}\hspace{\rindent}\box0\\%
  \parbox[b]{\textwidth}{\strut\ignorespaces#3\strut}%
\ignorespaces}
\begin{document}
\block{
function toto:\\
setup
}{
  \block{
  for i = 0 , i < 10, i++
  }{
    \block{
    if i is a prime number
    }{
      print prime number\\
      then do something else
    }{
    end if
    }\\
    some intermediate stuff\\
    \block{
    if i is a superprime number
    }{
      print superprime number\\
      then really do something amazing
    }{
    end if
    }
  }{
  end for
  }
}{
finish up\\
end function
}
\end{document}

在此处输入图片描述

答案2

正如 jubobs 所说 algorithm2e 包可以做到这一点:

http://www.ctan.org/tex-archive/macros/latex/contrib/algorithm2e

\begin{algorithm}[H]
\SetAlgoLined
\KwData{None}
\KwResult{None}
\for{i = 0, i < 10, i++}{
    print i * i
    \eIf{i is a prime number}
        {Prime number}
        {Not a prime number}
}
\end{algorithm}

相关内容