在算法中引用函数名称

在算法中引用函数名称

我有一个 LaTeX 代码,它看起来与以下示例类似。

\documentclass{article}
\usepackage{amsmath,algorithm,algpseudocode}
\begin{document}
\begin{algorithm}
\caption{My Algo.}
\label{alg:myalgo}
\begin{algorithmic}[1]
\Function{CallA}{$a$} \label{alg:a}
    \State \Call{CalcSquare}{$a$}
\EndFunction
\Statex
\Function{CalcSquare}{$b$} \label{alg:b}
    \State \Return $b\times b$
\EndFunction
\end{algorithmic}
\end{algorithm}
The \ref{alg:a} function calls \ref{alg:b} inside.
\end{document}

我怎样才能\ref{alg:a}显示函数名称而不是行号?

希望出现“CallA 函数内部调用 CalcSquare”,但实际上看起来是“1 函数内部调用 4”。

答案1

您可以定义一个新命令,例如\funclabel用于存储函数名称。然后您可以使用通常的 来检索它\ref

\documentclass{article}
\usepackage{amsmath,algorithm,algpseudocode}

\makeatletter
\renewcommand{\Function}[2]{%
  \csname ALG@cmd@\ALG@L @Function\endcsname{#1}{#2}%
  \def\jayden@currentfunction{#1}%
}
\newcommand{\funclabel}[1]{%
  \@bsphack
  \protected@write\@auxout{}{%
    \string\newlabel{#1}{{\jayden@currentfunction}{\thepage}}%
  }%
  \@esphack
}
\makeatother


\begin{document}
\begin{algorithm}
\caption{My Algo.}
\label{alg:myalgo}
\begin{algorithmic}[1]
\Function{CallA}{$a$} \funclabel{alg:a} \label{alg:a-line}
    \State \Call{CalcSquare}{$a$}
\EndFunction
\Statex
\Function{CalcSquare}{$b$} \funclabel{alg:b}
    \State \Return $b\times b$
\EndFunction
\end{algorithmic}
\end{algorithm}
The \ref{alg:a} function at line~\ref{alg:a-line} calls \ref{alg:b} inside.
\end{document}

在此处输入图片描述

相关内容