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