列表中转义方程式周围的空格?

列表中转义方程式周围的空格?

我正在listings使用mathescape=true来包含一些排版输出。但是,我希望输出周围有一些空白。目前我有

\lstset{language=,
  keepspaces=true,
  basicstyle=\ttfamily,
  columns=flexible,
  mathescape=true,
  }  

然而,结果是排版方程式被放在紧接在前面的代码之后的行上,并且没有垂直空格。

例如:

\begin{lstlisting}
code: Gimme the square root of two:
$\sqrt{2}$
code: Gimme a rational approximation to pi:
$\displaystyle{\frac{355}{133}}$
\end{lstlisting}

结果是

在此处输入图片描述

我知道我可以将方程式放在列表之外,但对于我来说,将方程式放在列表内效果更好。

我怎样才能强制缩进转义的方程式,并且在上面和下面留一点空白?

答案1

你可以使用escapebegin和插入标记escapeend。如果你不使用mathescapeescapechar你可以例如切换到 displaystyle:

\documentclass{article}


\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{listings}
% #################################################################### COLORS #
\lstset{language=,
  keepspaces=true,
  basicstyle=\ttfamily,
  columns=flexible,
  %mathescape=true,
  escapechar=$,
  escapebegin=\[,
  escapeend=\]
  }  

\begin{document}
\begin{lstlisting}
code: Gimme the square root of two:
$\sqrt{2}$
code: Gimme a rational approximation to pi:
$\displaystyle{\frac{355}{133}}$
\end{lstlisting}

\end{document}

在此处输入图片描述

您还可以插入一些支柱:

\lstset{language=,
  keepspaces=true,
  basicstyle=\ttfamily,
  columns=flexible,
  mathescape=true,
  escapebegin=\quad\mbox{\rule[-1em]{0pt}{2.5em}},
  }  

答案2

有趣的问题!

\documentclass{article}
\usepackage{listings}

\lstset{language=,
  keepspaces=true,
  basicstyle=\ttfamily,
  columns=fullflexible,
  mathescape=true,
}

\newcommand{\PRESPACE}{\vadjust pre{\vskip\abovedisplayskip}}
\newcommand{\POSTSPACE}{\vadjust{\vskip\belowdisplayskip}}

\newcommand{\DS}{%
  \aftergroup\aftergroup\aftergroup\PRESPACE
  \aftergroup\aftergroup\aftergroup\POSTSPACE
  \displaystyle
}

\begin{document}

\begin{lstlisting}
code: Gimme the square root of two:
$\DS\sqrt{2}$
code: Gimme a rational approximation to pi:
$\DS\frac{355}{133}$
code: OK
\end{lstlisting}

\end{document}

我们必须跳下两组才能\vadjust行动。

在此处输入图片描述

相关内容