代码列表内带圆圈的引用

代码列表内带圆圈的引用

所以我只想在我的代码中创建一些带圆圈的数字lstlisting,这样我就可以轻松地在附近的描述文本中引用它们。

This is my description text and I want to refer to [1] in \ref{lst:code}:

\begin{lstlisting}[caption={some code here},label={lst:code}]
public int do_something(param 1) {
  int a;
  int b; [1]
  return a+b;
}
\end{lstlisting}

它最终应该在列表和描述中看起来像这样:

在此处输入图片描述

答案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}

在此处输入图片描述

相关内容