Color de fondo para stringstyle en lstlisting

Color de fondo para stringstyle en lstlisting

Me gustaría hacer una lstlistingdefinición de estilo, donde las cadenas se resaltan con un color de fondo, para que se destaquen más. Ni siquiera estoy seguro de que sea posible, pero déjame explicarte.

Aquí hay un intento con \colorbox, que podría darle una idea de lo que quiero:

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}

\lstdefinestyle{mypython}{
  keywordstyle=\bfseries,
  captionpos=b,
  language=Python,
  keywordstyle=\bfseries,
  identifierstyle=\color{black},
  ndkeywordstyle=\color{darkgray}\bfseries,
  commentstyle=\color{gray}\ttfamily,
  stringstyle=\color{black}\ttfamily\colorbox{black!10},
  showstringspaces=false
}
\begin{document}
\begin{lstlisting}[style=mypython]
{'timezone': 7200, 'cod': 200, 'dt': 1561470780, 'base': 'stations',
  'weather': [{'id': 804, 'icon': '04d', 'main': 'Clouds',
               'description': 'overcast clouds'}],
  'sys': {'message': 0.0076, 'country': 'DK',  'sunrise': 1561429582,
\end{lstlisting}
\end{document}

Aquí hay un ejemplo de resultado cuando se usa el estilo anterior en algún JSON: salida con caja de colores

Como puede verse, este enfoque plantea varios problemas:

  • los apóstrofes se resaltan por separado del resto del texto
  • Los espacios en blanco son algunos lugares resaltados al principio de las líneas, donde la cadena aún no ha comenzado.
  • Las cajas de colores no son iguales en altura.
  • Se han introducido espacios adicionales entre palabras y apóstrofes.

¿Es posible solucionar los problemas anteriores? ¿Quizás usando tcolorboxo algo más que \colorbox?

información relacionada