背景颜色和 mathescape 损坏的列表

背景颜色和 mathescape 损坏的列表

我的文档中有一个listings环境,用于backgroundcolor=\color{grey}获得漂亮的灰色背景和mathescape=true使用数学符号。但是,当\vdots在代码列表中使用该命令时,我的列表中会出现中断,如下所示:

\documentclass{book}
\usepackage{color}
\definecolor{grey}{rgb}{0.9,0.9,0.9}
\usepackage{listings}
\lstset{%
language=Lisp,
basicstyle=\small,
backgroundcolor=\color{grey},
mathescape=true}

\begin{document}
\begin{lstlisting}
(let ((<$var_1$> <$exp_1$>)
      (<$var_2$> <$exp_2$>)
      $\vdots$
      (<$var_n$> <$exp_n$>))
   <$body$>))
\end{lstlisting}
\end{document}

结果输出:

在此处输入图片描述

到目前为止仅有的 \vdots正在发生这种情况(而且这种情况发生多次,所以我知道这不是偶然的)。 有办法解决这个问题吗,或者也许minted在这种事情上效果会更好?(虽然如果没有必要,我宁愿不切换。)

答案1

问题似乎是listings期望行高为常数,而这\vdots占用了太多的垂直空间。一个解决方法是重新定义\vdots,使其占用更少的垂直空间:

\renewcommand\vdots{%
  \vbox{\baselineskip3pt\lineskiplimit0pt\kern1pt\hbox{.}\hbox{.}\hbox{.}\kern-1pt}}

答案2

\documentclass{book}
\usepackage{color}
\definecolor{grey}{gray}{0.9}
\usepackage{listings}

\lstset{%
language=Lisp,
basicstyle=\small,
backgroundcolor=\color{grey},
mathescape=true}

\begin{document}
\begin{lstlisting}
(let ((<$var_1$> <$exp_1$>)
      (<$var_2$> <$exp_2$>)
      $\makebox(0,7.5){\vdots}$
      (<$var_n$> <$exp_n$>))
   <$body$>))
\end{lstlisting}
\end{document}

答案3

包装listings文档说你必须为此使用一些盒子工具(tcolotbox,,mdframed等等)

\documentclass{book}
\usepackage{color}
\definecolor{grey}{rgb}{0.9,0.9,0.9}
\usepackage{listings}
\usepackage{mdframed}
\usepackage{moreverb}
\begin{verbatimwrite}{mycode.lisp}
(let ((<$var_1$> <$exp_1$>)
      (<$var_2$> <$exp_2$>)
      $\vdots$
      (<$var_n$> <$exp_n$>))
   <$body$>))
\end{verbatimwrite}
\lstset{%
language=Lisp,
basicstyle=\small,
mathescape=true}

\begin{document}
\begin{mdframed}[
    backgroundcolor=grey,
    hidealllines=true,
    innertopmargin=0pt,
    innerbottommargin=0pt,
    innerleftmargin=0pt,
    innerrightmargin=0pt
]
\lstinputlisting{mycode.lisp}
\end{mdframed}
\end{document}

在此处输入图片描述

相关内容