当我尝试制作我自己风格的 C++ 列表时遇到了问题。
首先,我决定突出显示分号。我在文档中读到
otherkeywords 用于定义 =>、->、-->、--、:: 等关键字。
很好,这就是我需要的:
\documentclass{article}
\usepackage{xcolor}
\definecolor{main-color}{rgb}{0.6627, 0.7176, 0.7764}
\definecolor{back-color}{rgb}{0.1686, 0.1686, 0.1686}
\definecolor{string-color}{rgb}{0.3333, 0.5254, 0.345}
\definecolor{key-color}{rgb}{0.8, 0.47, 0.196}
\usepackage{listings}
\lstdefinestyle{mystyle}
{
language = C++,
basicstyle = {\ttfamily \color{main-color}},
backgroundcolor = {\color{back-color}},
stringstyle = {\color{string-color}},
otherkeywords = {;},
keywordstyle = {\color{key-color}},
}
\begin{document}
\begin{lstlisting}[style = mystyle]
#include <iostream>
using namespace std;
int x = 2;
//comment
for (int i = 0; i < x; ++i) {
cout << "stand_alone_complex" << endl;
}
\end{lstlisting}
\end{document}
效果很好。然后我想用另一种颜色突出显示 << 和 >>。示例的更改部分如下:
\lstdefinestyle{mystyle}
{
language = C++,
basicstyle = {\ttfamily \color{main-color}},
backgroundcolor = {\color{back-color}},
stringstyle = {\color{string-color}},
otherkeywords = {;},
keywordstyle = {\color{key-color}},
classoffset = 1,
otherkeywords = {<<, >>},
morekeywords = {<<, >>},
keywordstyle = {\color{yellow}},
classoffset = 0,
}
如果我只保留,otherkeywords = {<<, >>},
它会用键色突出显示“<<”、“>>”,而不是黄色。如果我只保留morekeywords = {<<, >>},
,它就不起作用了。所以我保留了它们两个,就像这里并且它可以工作,但分号不再突出显示。
似乎otherkeyword
只有最后一个才有效。如果我使用下面的代码,则没有任何内容突出显示。
\lstdefinestyle{mystyle}
{
language = C++,
basicstyle = {\ttfamily \color{main-color}},
backgroundcolor = {\color{back-color}},
stringstyle = {\color{string-color}},
otherkeywords = {;},
keywordstyle = {\color{key-color}},
keywordstyle = [2]{\color{blue}},
morekeywords = [2]{<<, >>},
% or otherkeywords = [2]{<<, >>},
% or both
}
它是如何工作的?如何用两种不同的颜色突出显示两个不同的符号?
感谢您的帮助。
答案1
据我回忆,正确的otherkeywords
的方法是一次性认领所有需要的东西,然后把它们分类放在不同的地方morekeywords=[i]
。
(更准确地说,otherkeywords
不支持[i]
-syntax。而且正如您刚才观察到的,它会在第二次调用时删除旧列表。)
(正确的斜体是因为手册中没有提到这种用法。它可能会在未来的版本中失效。
以下方法可行
\lstdefinestyle{mystyle}
{
language = C++,
basicstyle = {\ttfamily \color{main-color}},
backgroundcolor = {\color{back-color}},
stringstyle = {\color{string-color}},
keywordstyle = {\color{key-color}},
keywordstyle = [2]{\color{lime}},
keywordstyle = [3]{\color{yellow}},
keywordstyle = [4]{\color{teal}},
otherkeywords = {;,<<,>>,++},
morekeywords = [2]{;},
morekeywords = [3]{<<, >>},
morekeywords = [4]{++},
}
完整代码
\documentclass{article}
\usepackage{xcolor}
\definecolor{main-color}{rgb}{0.6627, 0.7176, 0.7764}
\definecolor{back-color}{rgb}{0.1686, 0.1686, 0.1686}
\definecolor{string-color}{rgb}{0.3333, 0.5254, 0.345}
\definecolor{key-color}{rgb}{0.8, 0.47, 0.196}
\usepackage{listings}
\lstdefinestyle{mystyle}
{
language = C++,
basicstyle = {\ttfamily \color{main-color}},
backgroundcolor = {\color{back-color}},
stringstyle = {\color{string-color}},
keywordstyle = {\color{key-color}},
keywordstyle = [2]{\color{lime}},
keywordstyle = [3]{\color{yellow}},
keywordstyle = [4]{\color{teal}},
otherkeywords = {;,<<,>>,++},
morekeywords = [2]{;},
morekeywords = [3]{<<, >>},
morekeywords = [4]{++},
}
\begin{document}
\begin{lstlisting}[style = mystyle]
#include <iostream>
using namespace std;
int x = 2;
//comment
for (int i = 0; i < x; ++i) {
cout << "stand_alone_complex" << endl;
}
\end{lstlisting}
\end{document}