
Ich möchte mit lstdefinelanguage in Latex einige Symbole grün einfärben, aber es scheint, dass die Symbole nicht erkannt werden.
Die Symbole, die ich einfärben muss, sind =, > und <. Ist das möglich? Wie kann ich das machen?
Die Hauptdatei:
\documentclass{article}
\usepackage{graphicx,color}
\usepackage{booktabs}
\usepackage{listings}
\lstdefinelanguage{NeoIDL}{
sensitive = true,
keywords = [1]{module, resource, enum, annotation, for, import, entity, path,
@get, @post, @put, @delete, require, ensure, otherwise, call},
%ndkeywords={int, \char{} },
%ndkeywordstyle=\color{blue}\bfseries,
morekeywords=[2]{>, <, ==},
keywordstyle=[2]\color{green},
numbers=left,
numberstyle=\scriptsize,
stepnumber=1,
numbersep=8pt,
showstringspaces=false,
breaklines=true,
frame=top,
comment=[l]{//},
morecomment=[s]{/*}{*/},
commentstyle=\color{purple}\ttfamily,
stringstyle=\color{red}\ttfamily,
morestring=[b]',
morestring=[b]"
}
\begin{document}
\begin{figure}[htb]
\begin{small}
\lstinputlisting[language=NeoIDL,firstnumber=1]{store_pos_servico.neo}
\end{small}
\caption{Service 1}
\end{figure}
\end{document}
Die zu formatierende Datei:
module store {
(...)
resource order {
path = "/order/{id}";
@post int postOrder (Order order)
require (call store.getOrder(id) == "NotFound"),
otherwise "InvalidPrecondition"
};
}
Antwort1
Ich befand mich zuvor in einer ähnlichen Situation und konnte das Problem folgendermaßen lösen:
\documentclass{article}
\usepackage{graphicx,color}
\usepackage{booktabs}
\usepackage{listings}
\lstdefinelanguage{NeoIDL}{
sensitive = true,
keywords={},
otherkeywords={% Operators
>, <, ==
},
keywords = [2]{module, resource, enum, annotation, for, import, entity, path,
@get, @post, @put, @delete, require, ensure, otherwise, call},
keywordstyle=\color{green},
keywordstyle=[2]\color{blue},% for example
numbers=left,
numberstyle=\scriptsize,
stepnumber=1,
numbersep=8pt,
showstringspaces=false,
breaklines=true,
frame=top,
comment=[l]{//},
morecomment=[s]{/*}{*/},
commentstyle=\color{purple}\ttfamily,
stringstyle=\color{red}\ttfamily,
morestring=[b]',
morestring=[b]"
}
\begin{document}
\begin{figure}[htb]
\begin{small}
\lstinputlisting[language=NeoIDL,firstnumber=1]{store_pos_servico.neo}
\end{small}
\caption{Service 1}
\end{figure}
\end{document}
Das heißt, definieren Sie einen leeren Satz von Schlüsselwörtern der Klasse 1, fügen Sie die Symbole als „andere Schlüsselwörter“ hinzu, die zu dieser Klasse gehören, und verschieben Sie alle anderen Arten von Schlüsselwörtern in Klassen höherer Ordnung. Aber fragen Sie nicht, warum das funktioniert, denn ich weiß es auch nicht!
Hier ist die Ausgabe, die ich erhalte: