我的文档中有一个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}