我想在列表中使用双右箭头来显示一些 Scala 代码。我本想使用 mathescape 选项和$\Rightarrow$
。但是,这会“吃掉”它周围的空白,例如,如果我有
foo $\Rightarrow$ bar
箭头前后只使用一个空格字符,就像
foo $\Rightarrow$ bar
我如何强制使用空格?我可以嵌入\u21D2
箭头的 unicode 字符而不是使用 mathescape 吗?
编辑:因此,通过这些注释,我设法生成了一个数学转义命令,其宽度在逐字字体中恰好为三个空格字符:
\newcommand{\ScalaRA}{{}\hspace{-0.04ex}\Rightarrow\hspace{-0.08ex}{}}
然而,吃白的问题依然存在:
\begin{lstlisting}
abc d g j
a d $\ScalaRA$g $\ScalaRA$j
a def$\ScalaRA$ghi$\ScalaRA$j
\end{lstlisting}
在第二行中,$\ScalaRA$
第一次使用后,随后的空格被收缩:g
字符后面有两个空格,但仅呈现为一个空格:
因此,进入和退出数学模式会留下一些“垃圾”。如何清理这些垃圾,以便所有三行都完全对齐,并且g
第二行后面的两个空格字符也得到保留?
答案1
这可能是最方便的方法:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\lstset{
literate={⇒}{\ScalaRA}{1}
}
\newcommand{\ScalaRA}{\mbox{$\Rightarrow$}}
\begin{document}
\begin{lstlisting}
abc d g j
a d ⇒ g ⇒ j
a def ⇒ ghi ⇒ j
\end{lstlisting}
\end{document}
答案2
在@barbara-beeton 和@werner 的评论的帮助下,我得出了这个结论:
\newcommand{\ScalaRA}{{}\hspace{-0.04ex}\Rightarrow\hspace{-0.08ex}{}}
确切的水平间距将取决于 tt 字体大小。唯一需要注意的是,在第一次使用数学转义后的每一行中,要获得多个空格,必须$$
在每两个空格之间放置一个空转义。如下所示:
\begin{lstlisting}
abc d g j
a d $\ScalaRA$g $$ $\ScalaRA$j
a def$\ScalaRA$ghi$\ScalaRA$j
\end{lstlisting}
有点烦人,所以如果有更好的答案,请添加。