更改列表中某些项目的颜色

更改列表中某些项目的颜色

我必须在我的文档中包含子程序代码。为此,我使用了lstlisting。我成功包含了子程序,但我想做一些小改动。

在 Visual Studio 中,函数输入以灰色突出显示。例如,

\begin{lstlisting}
double foo(double a){
    return a * a;
}
\end{lstlisting}

在此处输入图片描述}

在这里,我想突出显示a为灰色。我可以通过添加

\lstset{
    OTHEROPTIONS,
    keywords=[2]{a},
    keywordstyle=[2]\color{gray},
}

在此处输入图片描述

但是,如果我这样设置,即使列表不是输入,它也会影响整个列表a。因此,我想执行以下操作

\lstset{
    OTHEROPTIONS,
    keywordstyle=\color{blue},
    keywordstyle=[2]\color{gray},
}
\begin{lstlisting}
// This Code will have black `a`
void main(){
    double b = foo(a);
}
\end{lstlisting}
\begin{lstlisting}[keyword=0.5]
double foo(double a){
    return a * a;
}
\end{lstlisting}

在此处输入图片描述 在此处输入图片描述

有什么可行的办法吗?


第一个图的完整代码。

\documentclass[12pt]{paper}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{textcomp}
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\lstset{
    tabsize=4,    
%   rulecolor=,
    language={C++},
        captionpos = t,
        basicstyle = \footnotesize\ttfamily,
        frame=lines,
        numbersep=5pt,
        numbers=left,
        numberstyle=\tiny,
        backgroundcolor=\color{white},
        aboveskip={1.5\baselineskip},
        columns=fixed,
        extendedchars=false,
        breaklines=true,
%        prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
        frame=single,
        showtabs=false,
        showspaces=false,
        showstringspaces=false,
        keywordstyle=\color[rgb]{0,0,1},
        keywordstyle=[2]\color{gray},
        commentstyle=\color{mygreen},
        stringstyle=\color{red},
        numberstyle=\color[rgb]{0.205, 0.142, 0.73},
}




% DOCUMENT STARTS
% HERE                                                                                                              
\begin{document}
\begin{lstlisting}[title=main.cpp]
// This code will have black `a`
void main(){
    double a = 0.5;
    cout << foo(a) << endl;
}
\end{lstlisting}
\end{document}

答案1

为什么不使用escapechar选项,然后为每个项目设置颜色?真的,我不知道如何自动完成这一操作。

添加以下选项到lsset

escapechar={|}, 

因此您可以使用以下代码:

\begin{lstlisting}[title=main.cpp]
// This code will have black `a`
void main(){
    double |\color{gray}a| = 0.5;
    cout << foo(a) << endl;
}
\end{lstlisting}

结果是: 在此处输入图片描述

相关内容