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
¿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: minted
hace un buen trabajo al resaltar sólo lo que se necesita.
% 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}
¡Gracias de nuevo! Los mejores deseos