Los listados aplican palabras clave donde no deberían

Los listados aplican palabras clave donde no deberían

Quiero implementar código Python dentro de un archivo LaTeX. A continuación se muestra un ejemplo minimalista.

\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}

produciendo el siguiente resultado

Salida de archivo tex

¿Qué puedo hacer para que el estilo de palabra clave solo se aplique a palabras completas y no a todos los casos que encuentre tex, incluso dentro de algunas palabras?

Respuesta1

Sólo como alternativa: mintedhace un buen trabajo al resaltar sólo lo que se necesita.

ejemplo acuñado

% 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}

Respuesta2

Una mirada más profunda a la documentación de los listados reveló que estoy usando las opciones incorrectas. Dice que (fuente):

[...]

otras palabras clave={〈palabras clave〉}

Define palabras clave que contienen otros caracteres o comienzan con dígitos. Cada 'palabra clave' dada se imprime en el estilo de palabra clave, pero sin cambiar el estado de 'letra', 'dígito' y 'otro' de los caracteres. Esta clave está diseñada para definir palabras clave como =>,->,-->,--,::, etc. Si una palabra clave es una subsecuencia de otra (como--y-->), primero debe especificar la más corta.

[...]

La opción apropiada era morekeywords. ¡Usar morekeywords, en lugar de otherkeywords, resolvió mi problema! @Dr.ManuelKuehner, ¡esto debería resultarle interesante! @TeXnician, ¡gracias por tu solución alternativa!

\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}

Resultado correcto

¡Gracias de nuevo! Los mejores deseos

información relacionada