使用超連結轉義序列保持清單中的精確格式

使用超連結轉義序列保持清單中的精確格式

我有一些程式碼希望在其中放置超連結。我正在使用“列表包”。我希望程式碼看起來相同,無論有沒有超連結。如果做不到這一點,我希望能夠確定間距的差異,因為我想保持表格對齊到大約 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}  

在此輸入影像描述

相關內容