伪代码:嵌套框架内的函数

伪代码:嵌套框架内的函数

我想以某种方式呈现我的算法,以便读者可以在额外的框架内看到这样的函数:

在此处输入图片描述

为了编写伪代码,我更喜欢algorithmicx包。

任何意见是极大的赞赏。

答案1

的另一项工作\tikzmark。在每次使用\Function\EndFunction需要框架时,都要放置一些标记;然后分别使用这些标记作为的第一和第二个参数\Drawbox;第三个强制参数控制框架的宽度:

\documentclass{article}
\usepackage{algpseudocode}
\usepackage{tikz}

\newcommand\tikzmark[1]{%
  \tikz[remember picture,overlay]\node (#1) {};}

\algdef{SE}[FUNCTION]{Function}{EndFunction}%
   [2]{\algorithmicfunction\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}\vskip3pt}%
   {\algorithmicend\ \algorithmicfunction}

\newlength\funcwd
\settowidth\funcwd{\algorithmicfunction}
\addtolength\funcwd{3pt}

\newcommand\Drawbox[3]{%
\begin{tikzpicture}[remember picture,overlay]
\coordinate (s#1) at ([xshift=-\funcwd,yshift=6pt]#1.north west);
\coordinate (e#1) at ([xshift=#3,yshift=1pt]#2.south east);
\draw (s#1) rectangle (e#1);
\draw ([yshift=-1.2\baselineskip]s#1) -- ([yshift=-1.2\baselineskip]e#1|-s#1);
\end{tikzpicture}
}

\begin{document}

\begin{algorithmic}
\Function{\tikzmark{start1}CallA}{$a$} \label{alg:a}
    \State \Call{CalcSquare}{$a$}
\Function{\tikzmark{start2}CalcSquare}{$b$} \label{alg:b}
    \State \Return $b\times b$
\EndFunction\tikzmark{end2}
\EndFunction\tikzmark{end1}
\end{algorithmic}

\Drawbox{start1}{end1}{74pt}
\Drawbox{start2}{end2}{55pt}

\end{document}

在此处输入图片描述

相关内容