内联列表中的奇怪间距(列表包)

内联列表中的奇怪间距(列表包)

我正在使用该listings包排版一些代码。我lstlisting根据标准Haskell环境定义了一个环境,并添加了一些literate替换,包括:

literate={->}{{$\rightarrow{}$}}2

当符号->出现在列表环境中时,符号周围的间距会保留。但是,当它出现在内联列表中时,后面的空格\rightarrow会被吃掉,导致T a -> a -> a看起来像T a ->a -> a。有谁知道我如何在内联列表中避免这种行为,而不会混淆列表环境?

答案1

我建议使用来literate替换“符号” (请注意在箭头周围添加空格。原因是内联中的空格与显示列表中的空格处理方式不同。这是一个最小的例子:->->

在此处输入图片描述

\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
\lstset{%
  literate={->}{{ $\rightarrow$ }}3
}
\begin{document}
Here is a display listing:
\begin{lstlisting}
T a->a->a
\end{lstlisting}
Here is some inline listing \lstinline!T a->a->a!.
\end{document}

请注意各自列表样式之间T和之间的间距差异。a

答案2

@Werner 的解决方案很好,但是在替换中添加空格将在lstlisting和中产生不同的结果lstinline。例如,如果您替换->为,->则有以下代码片段:

a -> a -> a -> a

它将在 中正常显示lstinline,但在 中箭头后将显示两个空格lstlisting,如下所示:

a ->  a ->  a ->  a

我的解决方案是定义一个替代品->,并定义另一个替代品->

{->}{{{\color{magenta}->}}}2
{->\ }{{{\color{magenta}-> }}}3

注意最小替换必须先行,否则它将不起作用。

相关内容