使用列表分隔符时出现奇怪的间距问题

使用列表分隔符时出现奇怪的间距问题

我正在使用moredelim(带前缀il)以非常特殊的方式排版单行“注释”:

  • %%红色分隔符,
  • 其余线条为蓝色。

我的方法基本符合预期,除了一些非常奇怪的间距问题,我无法解释。例如,在下面列表的第二行中,即使%%与下一个单词之间只有一个空格字符(在输入文件中),该行的排版方式也完全不同;更具体地说,间距我的输入文件中的分隔符似乎最终将其保存在输出文件中。

我很确定这不是与我的代码中留下的虚假空格有关的问题。这到底是怎么回事……?

在此处输入图片描述

\documentclass{article}

\usepackage{xcolor}
\usepackage{listings}

\lstset
{%
    basicstyle  = \ttfamily,
    commentstyle= \color{blue},
    moredelim   =**[il][\processDelimiter]{\%\%},
}

\makeatletter
\def\processDelimiter% auxiliary macro for delimiters
{%
    \textcolor{red}{\%\%}%     % Typeset the delimiter 
    \lst@commentstyle%         % Apply the comment style.
}
\makeatother

\begin{document}

\begin{lstlisting}
x:=1000; %% a first comment
x:=x/2;        %% why so much space on this side?
\end{lstlisting}

\end{document}

答案1

listings延迟输出空格字符,直到下一个实体排版完成。在 的情况下moredelim,只有在遇到分隔符时才会排版前面的空格%%。现在,虽然“样式”(即方括号中的第二个参数)当然会在打印分隔符之前应用,但实际测试是否仍有空格要输出只会在那之后进行。(我不认为这可以称为错误,相反,您使用样式参数来实际排版某些内容可能有点超出规范)。

但是你可以用 强制listings检查并打印堆栈上的任何空格\lst@CalcLostSpaceAndOutput。因此,

\def\processDelimiter% auxiliary macro for delimiters
{%
    \lst@CalcLostSpaceAndOutput % Typeset spaces
    \textcolor{red}{\%\%}%      % Typeset the delimiter 
    \lst@commentstyle%          % Apply the comment style.
}

应该管用。

另一种可能性可能是listings加载keepspaces=true

相关内容