我有一个 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}