我怎样才能将整行列表变成超链接?

我怎样才能将整行列表变成超链接?

假设我有一个包含列表的文档。我想将该列表转换为超链接(例如,到源代码)。

第一次本能的尝试将是这样的:

\documentclass{article}
\usepackage{hyperref}
\usepackage{listings}
\usepackage{xcolor}
\lstset{basicstyle=\ttfamily,}
\begin{document}
  \href{file}{
    \begin{lstlisting}[columns=fullflexible, backgroundcolor=\color{black!20}]
      code code
    \end{lstlisting}
  }
\end{document}

由于已知限制,此操作失败(请参阅hyperref、列表和动画之间的奇怪交互

第二次尝试是在代码中创建一个转义符:

\begin{lstlisting}[columns=fullflexible, backgroundcolor=\color{black!20}, escapeinside={\%*}{*)}]
   %*\href{file}{Link}*)code code
\end{lstlisting}

(请注意,上面以 开头的行%不是注释,而是 verbatim/lstlistings 中的转义组合)

这是可行的,但仍然不能覆盖整个环境(或者至少不能覆盖大部分线路)。

我需要这样的东西(假代码将排版代码变成链接)

\begin{lstlisting}[columns=fullflexible, backgroundcolor=\color{black!20}, escapeinside={\%*}{*)}]
   "\href"{file}{code code}
\end{lstlisting}

我怎样才能将大部分列表行转换为超链接?我最感兴趣的是单行(或非常短)的列表。

答案1

以下方法(借用自egreg 的回答)可让您转动文本清单(但不是全部框架/盒子)变成超链接。首先,将列表保存在 中lrbox;然后,在 的第二个参数中使用后者\href

在此处输入图片描述

\documentclass{article}

\usepackage{hyperref}
\usepackage{listings}
\usepackage{xcolor}

\newsavebox\lstA

\lstset{basicstyle=\ttfamily,}

\begin{document}
\begin{lrbox}{\lstA}
\begin{lstlisting}[
    columns=fullflexible,
    backgroundcolor=\color{black!20},
    gobble=4,
]
    code code
\end{lstlisting}
\end{lrbox}
\href{http://www.google.com}{\usebox{\lstA}}
\end{document}

编辑:使用相同的方法,但tcolorbox使用listings,你可以把整个盒子变成超链接。您可能需要根据自己的喜好调整框的外观,但如果您要在精美的框内排版列表,最好还是使用tcolorbox

在此处输入图片描述

\documentclass{article}

\usepackage{hyperref}
\usepackage[most]{tcolorbox}
\newtcblisting{mylisting}{%
  spartan,
  boxrule = 0pt,
  colback = black!20,
  listing only,
  listing options = {%
    basicstyle = \ttfamily,
    columns    = fullflexible,
    gobble     = 4,
  }
}
\newsavebox\lstA

\begin{document}
\begin{lrbox}{\lstA}
\begin{mylisting}
code code
code code
\end{mylisting}
\end{lrbox}
\href{http://www.google.com}{\usebox{\lstA}}
\end{document}

相关内容