이상한 문자 간격을 얻지 않고 목록의 색상을 올바르게 지정하는 방법은 무엇입니까?

이상한 문자 간격을 얻지 않고 목록의 색상을 올바르게 지정하는 방법은 무엇입니까?

다음과 같은 코드 목록을 준비하고 싶습니다.

여기에 이미지 설명을 입력하세요
나는 이것을 시도했다:

\lstset{escapeinside={<@}{@>}}
\begin{lstlisting}
<@\textcolor{blue}{void}@> fun(var<<@\textcolor{blue}{long int}@>> list)
\end{lstlisting}

그러나 결국 다음과 같이 렌더링되었습니다.

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

나에게는 뭔가 이상해 보인다. 예를 들어 검은색 문자 사이의 간격은 파란색 문자의 간격과 다릅니다. 왜 그럴까요?

편집하다

다음과 columns같이 설정하면 문제가 해결됩니다. 자세한 내용은fullflexible\begin{lstlisting}[columns=fullflexible]이 답변.

답변1

다른 매크로의 인수와 이스케이프된 영역에서 축어적/목록 텍스트를 유지해야 합니다.

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

\documentclass{article}

\usepackage{listings}

\usepackage{color}
\def\z#1{\gdef\zz{\color{#1}}\aftergroup\zz}
\begin{document}

\lstset{escapechar=|}
\begin{lstlisting}
|\z{blue}|void|\z{black}| fun(var<|\z{blue}|long int|\z{black}|> list)
\end{lstlisting}

\end{document}

답변2

자신만의 목록 환경을 정의하고 정의한 키워드 목록에 다양한 색상을 지정할 수 있습니다.

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[procnames]{listings}
\usepackage{color}


\lstnewenvironment{myCode}[1][]{
\lstset{
    emph={void,long,int},
emphstyle=\color{blue},
emph={[2]fun},
emphstyle=[2]\color{green}
}}{}


\begin{document}

\begin{myCode}
void fun(var<long int> list)
\end{myCode}

\end{document}

관련 정보