如何正確地對代碼列表進行顏色排列而不出現奇怪的字元間距?

如何正確地對代碼列表進行顏色排列而不出現奇怪的字元間距?

我想準備程式碼清單,如下所示:

在此輸入影像描述
我試過這個:

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

相關內容