我是否可以引用导入文件中的行号而不转义文件内的字符?
比如说,我像这样导入我的文件
\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}