我查看了这里的一些答案,它们要么不起作用,要么没有完全回答我的问题。我必须格式化一些 C++ 代码,并希望它对这些特定关键字使用这些颜色(以模拟其他语法突出显示),但我不知道这是否可行:
commentstyle
RGB 值为 (2,112,10)keywordstyle
RGB 值为 (108,48,130)stringstyle
颜色是红色- 关键字 (
int
,char
,double
,float
,unsigned
,void
)bool
为蓝色 - 关键字 (
<
,>
,.
,;
,,
,-
,!
,=
)~
的 RGB 值为 (255,165,0) - 如果可能的话,函数名称(即
(
后面紧跟着一个的单词)的 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}