为什么 lstlisting 会删除 morestring 后面的空格?

为什么 lstlisting 会删除 morestring 后面的空格?

我对 lstlistings 中布局不正确的特定代码感到困扰。

\documentclass{article}
\usepackage{listings}
\lstset{morestring=[b]",basicstyle=\ttfamily,}


\begin{document}
\lstinline^x: "" x^
\end{document}

生成:

在此处输入图片描述

其中“”后面(第二个 x 之前)缺少一个空格。即使稍微修改一下也能得到正确的结果,不幸的是我需要文本、冒号、空格、引号(“”)然后是空格(这种组合似乎总是失败)。

注意:我需要使用 lstlistings,因为我还使用stringstyle=\color{purple}\ttfamilyMWE 中未显示的其他颜色样式。

谢谢,并致以最诚挚的问候,Markus

答案1

在我看来这似乎是一个错误(但由于列表中空格的处理相当复杂,因此很难真正确定),所以你应该报告它。

它适用于可见空间,因此作为解决方法,您可以这样做:

\documentclass{article}
\usepackage{listings}
\lstset{morestring={[b]"},basicstyle=\ttfamily,showspaces}
\makeatletter
\def\lst@visiblespace{\lst@ttfamily{\phantom{\char32}}{\phantom{\textvisiblespace}}}
% or
%\def\lst@visiblespace{\lst@ttfamily{\ }{\ }}
\makeatother
\begin{document}

\lstinline^x: "" x^

\end{document}

在此处输入图片描述

相关内容