使用超链接转义序列保持列表中的准确格式

使用超链接转义序列保持列表中的准确格式

我有一些代码,希望在其中放置超链接。我使用的是“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}  

在此处输入图片描述

相关内容