Beibehalten der genauen Formatierung in einer Auflistung mit Hyperlink-Escapesequenzen

Beibehalten der genauen Formatierung in einer Auflistung mit Hyperlink-Escapesequenzen

Ich habe Code, in den ich Hyperlinks einfügen möchte. Ich verwende das „Listings-Paket“. Ich möchte, dass der Code mit und ohne Hyperlinks identisch aussieht. Andernfalls möchte ich den Unterschied im Abstand feststellen können, da ich die tabellarische Ausrichtung auf etwa 80 Zeichen beschränken möchte.

Ich verwende Escape-Sequenzen zum Einfügen der Hyperlinks, aber der Zeichenabstand ändert sich.

Das folgende MWE verfügt nicht über einen Hyperlink, zeigt aber, dass der Zeichenabstand unterschiedlich ist.

\documentclass{article}
\usepackage{listings,chngcntr}
\lstset{
 escapeinside={/*!}{!*/},
 basicstyle=\scriptsize\ttfamily,
 }
\begin{document}
\begin{lstlisting}[]
FooBar
/*!{\scriptsize\ttfamily FooBar}!*/
\end{lstlisting}
\end{document}  

Es gibt oft mehr als eine Escape-Sequenz in derselben Zeile, wodurch die Ausrichtung stark beeinträchtigt werden kann.Der Abstand ist in der Escape-Version kleiner

Antwort1

Eine Möglichkeit wäre, zu verwenden. columns=fullflexibleDann entspricht der Abstand in der Auflistung mehr oder weniger dem normalen Schriftsatz.

\documentclass{article}
\usepackage{listings,chngcntr}
\lstset{
 escapeinside={/*!}{!*/},
 basicstyle=\scriptsize\ttfamily,
 columns=fullflexible
 }
\begin{document}
\begin{lstlisting}[]
FooBar
/*!{\scriptsize\ttfamily FooBar}!*/
\end{lstlisting}
\end{document}  

Bildbeschreibung hier eingeben

Die Alternative besteht darin, den Schriftsatz im Escape zu vermeiden. Sie müssten dann die Erweiterung des Links beispielsweise mithilfe von zref-savepos berechnen. Das Folgende setzt voraus, dass die URL keine problematischen Zeichen enthält und daher sicher in einem Argument verwendet werden kann:

\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}  

Bildbeschreibung hier eingeben

verwandte Informationen