我想写一些伪代码。经过一番研究,我找到了 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}