
Tenho algum código no qual desejo colocar hiperlinks. Estou usando o 'pacote de listagens'. Gostaria que o código parecesse idêntico, com e sem hiperlinks. Caso contrário, gostaria de poder determinar a diferença no espaçamento, pois desejo manter o alinhamento tabular em cerca de 80 caracteres.
Estou usando sequências de escape para inserir os hiperlinks, mas o espaçamento entre caracteres muda.
O MWE abaixo não possui hiperlink, mas ilustra que o espaçamento entre caracteres é diferente.
\documentclass{article}
\usepackage{listings,chngcntr}
\lstset{
escapeinside={/*!}{!*/},
basicstyle=\scriptsize\ttfamily,
}
\begin{document}
\begin{lstlisting}[]
FooBar
/*!{\scriptsize\ttfamily FooBar}!*/
\end{lstlisting}
\end{document}
Freqüentemente, há mais de uma sequência de escape na mesma linha e as coisas podem ficar muito desalinhadas.
Responder1
Uma maneira seria usar columns=fullflexible
o espaçamento na listagem mais ou menos como a composição tipográfica normal.
\documentclass{article}
\usepackage{listings,chngcntr}
\lstset{
escapeinside={/*!}{!*/},
basicstyle=\scriptsize\ttfamily,
columns=fullflexible
}
\begin{document}
\begin{lstlisting}[]
FooBar
/*!{\scriptsize\ttfamily FooBar}!*/
\end{lstlisting}
\end{document}
A alternativa é evitar fazer composição tipográfica no escape, então você teria que calcular a extensão do link por exemplo com a ajuda de zref-savepos. O seguinte pressupõe que o URL não contém caracteres problemáticos e, portanto, pode ser usado com segurança em um argumento:
\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}