在列表中对不同的关键字使用不同的颜色

在列表中对不同的关键字使用不同的颜色

我查看了这里的一些答案,它们要么不起作用,要么没有完全回答我的问题。我必须格式化一些 C++ 代码,并希望它对这些特定关键字使用这些颜色(以模拟其他语法突出显示),但我不知道这是否可行:

  1. commentstyleRGB 值为 (2,112,10)
  2. keywordstyleRGB 值为 (108,48,130)
  3. stringstyle颜色是红色
  4. 关键字 ( int, char,doublefloatunsignedvoidbool为蓝色
  5. 关键字 ( <, >, ., ;,,-!=~的 RGB 值为 (255,165,0)
  6. 如果可能的话,函数名称(即(后面紧跟着一个的单词)的 RGB 值为 (129,20,83)。

到目前为止我有这个(这是我从这里的另一个问题中找到的解决方案):

\documentclass[11pt]{article} % use larger type; default would be 10pt
\usepackage{titlesec}
\usepackage[utf8]{inputenc} % set input encoding (not needed with XeLaTeX)
\usepackage{float}
\usepackage{geometry} % to change the page dimensions
\geometry{a4paper}
\usepackage{graphicx}

\usepackage{xcolor}
\definecolor{commentgreen}{RGB}{2,112,10}
\definecolor{eminence}{RGB}{108,48,130}
\definecolor{weborange}{RGB}{255,165,0}
\definecolor{frenchplum}{RGB}{129,20,83}

\usepackage{listings}
\usepackage{textcomp}
\lstset {
    language=C++,
    frame=tb,
    tabsize=4,
    showstringspaces=false,
    numbers=left,
    upquote=true,
    commentstyle=\color{commentgreen},
    keywordstyle=\color{eminence},
    stringstyle=\color{red},
    basicstyle=\small\ttfamily, % basic font setting
    emph={int,char,double,float,unsigned,void,bool},
    emphstyle={\color{blue}},
    escapechar=\&,
    % keyword highlighting
    classoffset=1, % starting new class
    morekeywords={>,<,.,;,,,-,!,=,~},
    keywordstyle=\color{weborange},
    classoffset=0,
}


\newcommand{\code}[1]{\texttt{#1}} % inline code setting
\usepackage{mathtools}         % used for math symbols

\title{Testing C++ Styles}
\author{Joe}
\date{}

\begin{document}
\maketitle

\section{C++ STUFF}
Hi there!

\begin{lstlisting}[caption={Yo!}]
/* Comment1 */
// comment 2
// , !- should still be green

bool Data::DoStuff(int enum_type){
    std::vector<Obj*>::iterator object;
    Param* par=NULL;

    for(object=obj.begin();obj<obj.end();++obj){
        if(par->GetEnum()==enum_type){
            return true;
        }
    }
    _error_("string here!" << strx(enum_type));
    return false;
}
\end{lstlisting}
\end{document}

但我的classoffset解决方案不起作用。没有任何东西被用橙色突出显示。我也不知道是否可以#6在上面的列表中执行。如果有人有想法,请告诉我!

答案1

这是部分答案。

我以前曾遇到过这种肮脏的伎俩:添加otherkeywords={>,<,.,;,-,!,=,~}在旁边morekeywords={>,<,.,;,-,!,=,~}

至于逗号,有其他帖子给出了完全不同的方法。C++ 代码应该有多花哨取决于你。但代码越花哨,Listings 就越脆弱。

\documentclass[11pt]{article} % use larger type; default would be 10pt

\usepackage{xcolor}
\definecolor{commentgreen}{RGB}{2,112,10}
\definecolor{eminence}{RGB}{108,48,130}
\definecolor{weborange}{RGB}{255,165,0}
\definecolor{frenchplum}{RGB}{129,20,83}

\usepackage{listings}
\lstset {
    language=C++,
    frame=tb,
    tabsize=4,
    showstringspaces=false,
    numbers=left,
    %upquote=true,
    commentstyle=\color{commentgreen},
    keywordstyle=\color{eminence},
    stringstyle=\color{red},
    basicstyle=\small\ttfamily, % basic font setting
    emph={int,char,double,float,unsigned,void,bool},
    emphstyle={\color{blue}},
    escapechar=\&,
    % keyword highlighting
    classoffset=1, % starting new class
    otherkeywords={>,<,.,;,-,!,=,~},
    morekeywords={>,<,.,;,-,!,=,~},
    keywordstyle=\color{weborange},
    classoffset=0,
}


\newcommand{\code}[1]{\texttt{#1}} % inline code setting
\usepackage{mathtools}         % used for math symbols

\title{Testing C++ Styles}
\author{Joe}
\date{}

\begin{document}
\maketitle

\section{C++ STUFF}
Hi there!

\begin{lstlisting}[caption={Yo!}]
/* Comment1 */
// comment 2
// , !- should still be green

bool Data::DoStuff(int enum_type){
    std::vector<Obj*>::iterator object;
    Param* par=NULL;

    for(object=obj.begin();obj<obj.end();++obj){
        if(par->GetEnum()==enum_type){
            return true;
        }
    }
    _error_("string here!" << strx(enum_type));
    return false;
}
\end{lstlisting}
\end{document}

相关内容