答案1
答案分为两部分:
首先,您需要一种在环境内部转义
listings
到 LaTex 的方法,以执行 LaTeX 引用命令。选择转义代码中未使用的 LaTeX 命令的分隔符。由于您的示例似乎在 中C
,我建议将\*!
和!*\
作为转义字符。设置如下:\lstset{escapeinside={/*!}{!*/}}
其次,您可以定义自己的计数器并使用带圆圈的符号定义对它的引用,就像示例图片中那样。在这里,我使用包中的符号
pifonts
。然后我定义一个命令,该命令 (1) 增加计数器,(2) 设置引用,以及 (3) 打印带圆圈的数字:\ding{182}
\ding{191}
\newcommand{\annotation}[1]{\refstepcounter{lstannotation}\label{#1}\thelstannotation}
然后您可以使用
\annotation{mylabel}
标签创建引用mylabel
。
结合两者给出一个完整的例子:
\documentclass{article}
\usepackage{pifont}
\usepackage{listings}
\lstset{escapeinside={/*!}{!*/}}
\newcounter{lstannotation}
\setcounter{lstannotation}{0}
\renewcommand{\thelstannotation}{\ding{\number\numexpr181+\arabic{lstannotation}}}
\newcommand{\annotation}[1]{\refstepcounter{lstannotation}\label{#1}\thelstannotation}
\begin{document}
This is my description text and I want to refer to \ref{lst:annotation1} and \ref{lst:annotation2} in \ref{lst:code}:
\begin{lstlisting}[caption={some code here},label={lst:code}]
public int do_something(param 1) {
int a;
int b; /*!\annotation{lst:annotation1}!*/
return a+b;
} /*!\annotation{lst:annotation2}!*/
\end{lstlisting}
\end{document}