Listings применяет ключевые слова там, где это не нужно

Listings применяет ключевые слова там, где это не нужно

Я хочу реализовать код Python внутри файла LaTeX. Ниже приведен минималистичный пример

\documentclass[12pt]{report}

\usepackage{listings}
\usepackage[dvipsnames]{xcolor}

\begin{document}
\newcommand\pythonstyle{\lstset{
language=Python,
basicstyle=\scriptsize,
backgroundcolor=\color{lightgray},
otherkeywords={self,with,as},
keywordstyle=\color{NavyBlue},
commentstyle=\color{OliveGreen},
emph={MyClass,__init__,In,Out},
emphstyle=\color{red}
showstringspaces=false,
}}

{\pythonstyle\begin{lstlisting}
# with my current listing, this is not working as inteded

import pandas as pd

data = pd.DataFrame()
\end{lstlisting}}


\end{document}

выдавая следующий результат

Вывод tex-файла

Что можно сделать, чтобы стиль ключевых слов применялся только к целым словам, а не ко всем случаям, которые находит tex, даже внутри некоторых слов?

решение1

Просто как альтернатива: mintedдовольно хорошо справляется с выделением только того, что необходимо.

отчеканенный пример

% arara: pdflatex: {shell: yes}
\documentclass[12pt]{report}

\usepackage{minted}
\usepackage[svgnames]{xcolor}

\usemintedstyle{vs}
\setminted{bgcolor=GhostWhite!90!gray}

\begin{document}

\begin{minted}{python}
# with my current listing, this is not working as inteded

import pandas as pd

data = pd.DataFrame()
\end{minted}


\end{document}

решение2

Более глубокий взгляд на документацию листингов показал, что я использую неправильные параметры. Там говорится, что (источник):

[...]

otherkeywords={〈ключевые слова〉}

Определяет ключевые слова, которые содержат другие символы или начинаются с цифр. Каждое заданное «ключевое слово» печатается в стиле ключевого слова, но без изменения статуса «буква», «цифра» и «другое» символов. Этот ключ предназначен для определения ключевых слов, таких как =>,->,-->,--,:: и т. д. Если одно ключевое слово является подпоследовательностью другого (например,--и-->), необходимо сначала указать более короткое.

[...]

Подходящим вариантом было morekeywords. Использование morekeywordsвместо otherkeywordsрешило мою проблему! @Dr.ManuelKuehner, это должно быть интересно для вас! @TeXnician, спасибо за ваше альтернативное решение!

\documentclass[12pt]{report}

\usepackage{listings}
\usepackage[dvipsnames]{xcolor}

\begin{document}
\newcommand\pythonstyle{\lstset{
language=Python,
basicstyle=\scriptsize,
backgroundcolor=\color{lightgray},
morekeywords={self,with,as},
keywordstyle=\color{NavyBlue},
commentstyle=\color{OliveGreen},
emph={MyClass,__init__,In,Out},
emphstyle=\color{red}
showstringspaces=false,
}}

{\pythonstyle\begin{lstlisting}
# with my current listing, this is not working as inteded

import pandas as pd

data = pd.DataFrame()
\end{lstlisting}}


\end{document}

Правильный результат

Спасибо еще раз! С наилучшими пожеланиями.

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