
Я хочу сделать некоторые символы зелеными с помощью lstdefinelanguage в латексе, но, похоже, символы не распознаются.
Символы, которые мне нужно раскрасить, это =, > и <. Возможно ли это? Как это сделать?
Основной файл:
\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}
Файл для форматирования:
module store {
(...)
resource order {
path = "/order/{id}";
@post int postOrder (Order order)
require (call store.getOrder(id) == "NotFound"),
otherwise "InvalidPrecondition"
};
}
решение1
Я уже оказывался в похожей ситуации и мне удалось решить проблему следующим образом:
\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}
То есть, определить пустой набор ключевых слов класса 1, добавить символы как «другие ключевые слова», принадлежащие этому классу, и переместить все остальные типы ключевых слов в классы более высокого порядка. Но не спрашивайте, почему это работает, потому что я тоже не знаю!
Вот что я получаю на выходе: