하이퍼링크 이스케이프 시퀀스를 사용하여 목록에서 정확한 형식 유지

하이퍼링크 이스케이프 시퀀스를 사용하여 목록에서 정확한 형식 유지

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

여기에 이미지 설명을 입력하세요

관련 정보