我正在使用该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
注意最小替换必须先行,否则它将不起作用。