由于从 PDF 中复制粘贴文本(尤其是源代码)可能会出现问题,因此我想在列表标题中提供对实际文件的引用。这确实很好用,但 \lstlistoflistings 现在也引用该文件,而不是 PDF 中显示该列表的部分。
有没有办法恢复默认行为?
\documentclass{article}
\usepackage{listings}
\usepackage{hyperref}
\begin{document}
\lstlistoflistings
\lstinputlisting[
caption = {\href{run:./hello_world.py}{hello\_world.py}},
language = python,
]{hello_world.py}
\end{document}
答案1
使用
caption = {[\texttt{hello\_world.py}]\href{run:./hello_world.py}{hello\_world.py}},
caption
可以为列表列表定义一个“简短”的条目。
caption={[short]long}
答案2
赫伯特的回答建议的解决方案也是我推荐的,因为它不会.lol
用无用的垃圾弄乱文件。但是,另一种可能性是在本地“清除”命令\href
:另一方面,这样做的好处是,它只需要在一个地方修改源文件。
一般来说,以下 MWE 中使用的简单重新定义(使用\renewcommand
)就足够了,但不要忘记\href
实际上是一个带有可选参数的强命令(参见注释掉的行):
% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly
% declare the paper format.
\usepackage[T1]{fontenc} % Not always necessary, but recommended.
% End of standard header. What follows pertains to the problem at hand.
\usepackage{listings}
\usepackage{hyperref}
\begin{document}
\begingroup
\renewcommand*{\href}[2]{#2}
% \DeclareRobustCommand*{\href}[3][]{#3}
\lstlistoflistings
\endgroup
\newpage
\lstinputlisting[
caption = {\href{file:Marcel-1.tex}{Marcel-1.tex}},
language = {[LaTeX]TeX}
]{Marcel-1.tex}
\end{document}