
하이퍼링크를 배치하려는 코드가 있습니다. 나는 '목록 패키지'를 사용하고 있습니다. 하이퍼링크 유무에 관계없이 코드가 동일하게 보이도록 하고 싶습니다. 약 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}