假设我有一个包含列表的文档。我想将该列表转换为超链接(例如,到源代码)。
第一次本能的尝试将是这样的:
\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}