超链接到从文件导入的列表中的行号

超链接到从文件导入的列表中的行号

我是否可以引用导入文件中的行号而不转义文件内的字符?

比如说,我像这样导入我的文件

\lstinputlisting[language=c]{main.c}

并且我想要\hyperref{}第 50 行而不修改它或复制到我的 .tex 文件。

答案1

以下示例通过选项 为列表设置标签label。提取并分析标签的锚点名称以获取内部列表编号。在这种情况下,未编号的列表具有lstlisting.-1带有-1列表编号的锚点。行号的锚点名称遵循模式。宏引用行,给出列表的标签和行号。由于标签,需要运行两次 LaTeX。lstnumber.<listings number>.<line number>\lstlinelink

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}
\usepackage{listings}
\usepackage[colorlinks]{hyperref}
\usepackage{refcount}[2006/02/20]

\makeatletter
\newcommand*{\lstlinelink}[2]{%
  \refused{#1}%
  \edef\lstlinelink@tmp{\getrefbykeydefault{#1}{anchor}{}}%
  \ifx\lstlinelink@tmp\@empty
    #2%
  \else
    \edef\lstlinelink@target{%
      \expandafter\lstlinelink@parse\lstlinelink@tmp\@nil
      #2%
    }%
    \hyperlink{\lstlinelink@target}{#2}%
  \fi
}
\def\lstlinelink@parse#1.#2\@nil{lstnumber.#2.}%
\makeatother

\begin{document}
\noindent
Line~\lstlinelink{foo}{5} loads package \texttt{hyperref}
and the document starts at line~\lstlinelink{foo}{25}.
\lstinputlisting[
  language={[LaTeX]TeX},
  label=foo,
  numbers=left,
  columns=fullflexible,
  basicstyle=\ttfamily\small,
]{\jobname}
\end{document}

结果

相关内容