我有一些代码,希望在其中放置超链接。我使用的是“listings 包”。我希望代码看起来相同,无论有没有超链接。如果做不到这一点,我希望能够确定间距的差异,因为我想将表格对齐保持在大约 80 个字符。
我正在使用转义序列插入超链接,但字符间距发生了变化。
下面的 MWE 没有超链接,但说明字符间距不同。
\documentclass{article}
\usepackage{listings,chngcntr}
\lstset{
escapeinside={/*!}{!*/},
basicstyle=\scriptsize\ttfamily,
}
\begin{document}
\begin{lstlisting}[]
FooBar
/*!{\scriptsize\ttfamily FooBar}!*/
\end{lstlisting}
\end{document}
答案1
一种方法是使用,columns=fullflexible
然后列表中的间距将或多或少类似于正常排版。
\documentclass{article}
\usepackage{listings,chngcntr}
\lstset{
escapeinside={/*!}{!*/},
basicstyle=\scriptsize\ttfamily,
columns=fullflexible
}
\begin{document}
\begin{lstlisting}[]
FooBar
/*!{\scriptsize\ttfamily FooBar}!*/
\end{lstlisting}
\end{document}
另一种方法是避免在转义中进行排版,然后您必须计算链接的扩展名,例如借助 zref-savepos。以下内容假设 url 不包含有问题的字符,因此可以安全地在参数中使用:
\documentclass{article}
\usepackage{listings,chngcntr,xfp}
\lstset{
escapeinside={/*!}{!*/},
basicstyle=\scriptsize\ttfamily,
}
\usepackage{zref-savepos,zref-user}
\usepackage{hyperref}
\newcommand\linklabels[3]{\rlap{\href{#1}{\strut\hspace*{\inteval{\zposx{#3}-\zposx{#2}}sp}}}}
\begin{document}
\begin{lstlisting}[]
FooBar
/*!\zsavepos{a}\linklabels{https://www.latex-project.org}{a}{b}!*/FooBar/*!\zsavepos{b}!*/
\end{lstlisting}
\end{document}