列表中的数学转义符和环绕空格

列表中的数学转义符和环绕空格

我想在列表中使用双右箭头来显示一些 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}

在此处输入图片描述

有点烦人,所以如果有更好的答案,请添加。

相关内容