这个问题与问题的答案有关是否有一个 LaTeX 技巧可以防止 PDF 查看器复制行号?
除非你关闭hyperref
,否则以下 MWE
\documentclass{article}
\usepackage{listings}
\usepackage{accsupp}
\renewcommand*{\thelstnumber}{\protect\BeginAccSupp{ActualText={}}\arabic{lstnumber}\protect\EndAccSupp{}}
\lstset
{
language={[LaTeX]TeX},
numbers=left,
columns=flexible,
}
\usepackage{hyperref}
\begin{document}
\begin{lstlisting}
Hello\\
Universe!
\end{lstlisting}
\end{document}
无法编译,错误信息如下:
如何防止accsupp
和之间发生冲突hyperref
?
答案1
我会避免\thelstnumber
以这种方式重新定义。该命令可用于各种地方,这些地方的脆弱内容很容易被破坏。对于列表,我建议改用键numberstyle
:
\documentclass{article}
\usepackage{listings}
\usepackage{accsupp}
\newcommand\emptyaccsupp[1]{\BeginAccSupp{ActualText={}}#1\EndAccSupp{}}
\lstset
{
language={[LaTeX]TeX},
numbers=left,
columns=flexible,
numberstyle=\emptyaccsupp
}
\usepackage{hyperref}
\begin{document}
\begin{lstlisting}
Hello\\
Universe!
\end{lstlisting}
\end{document}
答案2
似乎在未正确设置的上下文(例如普通的)中hyperref
扩展了,从而破坏了脆弱的代码。您可以通过定义由使用的来修复此问题。此宏显然是在文档开头设置的,因此您需要在之后重新定义它。请注意,原始定义还包括一个前导,您可能也想添加它。\thelstnumber
\protect
\edef
\theHlstnumber
hyperref
hyperref
\ifx \lst@@caption \@empty \lst@neglisting \else \thelstlisting \fi
\documentclass{article}
\usepackage{listings}
\usepackage{accsupp}
\renewcommand*{\thelstnumber}{\protect\BeginAccSupp{ActualText={}}\arabic{lstnumber}\protect\EndAccSupp{}}
\lstset
{
language={[LaTeX]TeX},
numbers=left,
columns=flexible,
}
\usepackage{hyperref}
\AtBeginDocument{\renewcommand*{\theHlstnumber}{\arabic{lstnumber}}}% or manually put it after `\begin{document}`
\begin{document}
\begin{lstlisting}
Hello\\
Universe!
\end{lstlisting}
\end{document}