Cor de fundo para stringstyle em lstlisting

Cor de fundo para stringstyle em lstlisting

Gostaria de fazer uma lstlistingdefinição de estilo, onde as strings sejam destacadas com uma cor de fundo, para destacá-las mais. Nem tenho certeza se é possível, mas deixe-me explicar.

Aqui está uma tentativa com \colorbox, que pode lhe dar uma ideia do que eu quero:

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

Aqui está um exemplo de saída ao usar o estilo acima em algum JSON: saída com colorbox

Como pode ser visto, existem vários problemas com esta abordagem:

  • apóstrofos são destacados separadamente do resto do texto
  • espaço em branco são alguns lugares destacados no início das linhas, onde a string ainda não foi iniciada
  • as caixas de cores não são iguais em altura
  • espaçamento adicional entre palavras e apóstrofos foi introduzido

É possível corrigir os problemas acima? Talvez usando tcolorboxou algo diferente de \colorbox?

informação relacionada