列表标题中的 href

列表标题中的 href

由于从 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}

相关内容