Удалить выделение ключевого слова в одном экземпляре в lstlisting

Удалить выделение ключевого слова в одном экземпляре в lstlisting

Я использую пользовательскую lstlistingсреду для подсветки кода LaTeX. Чтобы использовать это, я дополнительно ввел еще несколько ключевых слов. Однако пакет multirowиспользует свое имя как команду. Как мне убрать подсветку ключевых слов в этом одном случае, как это можно было бы сделать \mathrmв среде Math?

Вот окружающая среда (сокращенная до самого необходимого):

\lstnewenvironment{customtex}
{\lstset{%
    language=[LaTeX]{TeX},
    ...
    keywordstyle=\color{darkred}\bfseries,
        morekeywords={multirow},
}}{}

И в случае \RequirePackage{multirow}пакета не следует его выделять, тогда как при использовании \multirow{...}{...}{...}его следует выделять как ключевое слово.

решение1

Для листингов с кодом LaTeX есть специальные lstsetпараметры, которые задают внешний вид команд LaTeX и соответствующие параметры для добавления записей в список выделенных команд. Это texcsstyle(стиль последовательности управления TeX) и moretexcs. Если вы хотите, чтобы обратная косая черта также была выделена (как это сделано, например, на этом сайте), то вы можете использовать =*вместо =.

МВЭ:

\documentclass{article}
\usepackage{listings}
\usepackage[svgnames]{xcolor}
\lstnewenvironment{customtex}
{\lstset{%
    language=[LaTeX]{TeX},
    texcsstyle=*\color{DarkRed}\bfseries,
    moretexcs={RequirePackage,multirow},
}}{}
\begin{document}
\begin{customtex}
\RequirePackage{multirow}
\multirow{1}{2}{3}
\end{customtex}
\end{document}

Результат:

введите описание изображения здесь

Связанный контент