使用转义时列表空格过多

使用转义时列表空格过多

我正在尝试删除项目符号和第二个 hi 之间的过多空白。

\documentclass[10pt]{hitec}
\usepackage{listings}
\lstset{
basicstyle=\small\ttfamily,
columns=flexible,
breaklines=true,
showstringspaces=false,
escapeinside={(*@}{@*)} 
}
\usepackage{multicol}
\title{page}
\begin{document}
hi %normal
\begin{lstlisting}
text
\end{lstlisting}
hi % problem, large white space 
\begin{lstlisting}
(*@\begin{multicols}{2}
\begin{itemize}
    \item 1
    \item 2 
\end{itemize}
\end{multicols} @*)
\end{lstlisting}
\end{document}

在此处输入图片描述

请注意项目符号和 hi 之间的过多空白。

答案1

此垂直空白由三个元素解释:

  1. 环境上方添加了空间lstlisting。您可以通过将选项设置aboveskip为 来将其删除0pt
  2. 显然,内部转义的 TeX 代码lstlisting在水平模式下启动,并且multicols在水平模式下调用时的行为是从新行开始。您可以通过\vspace*{-\baselineskip}在调用之前添加multicols或将整个环境放在 中来欺骗它\vbox{}
  3. multicols还会在其内容上方添加垂直空间。您可以通过指定本地来删除它\setlength\multicolsep{0pt},如减少垂直间距 itemize 和 multicols

您可以将其全部删除:

来源和全部删除

但什么才是真正的“过度”取决于你想要的结果。空格 2 可能是不需要的。如果你想要与常规文本和 之间的垂直空间相同multicols,请删除 1 和 2:

删除了 1 和 2

如果您希望常规文本和 的文本之间有相同的垂直空间lstlisting(如示例的开头),请删除 2 和 3:

删除了 2 和 3

以下是这些示例的完整工作代码:

\documentclass[10pt]{hitec}
\usepackage{listings}
\lstset{
basicstyle=\small\ttfamily,
columns=flexible,
breaklines=true,
showstringspaces=false,
escapeinside={(*@}{@*)} 
}
\usepackage{multicol}
\title{page}
\begin{document}

\noindent Source
\begin{lstlisting}
(*@\begin{multicols}{2}
\begin{itemize}
    \item 1
    \item 2 
\end{itemize}
\end{multicols}@*)
\end{lstlisting}

\noindent Removing all white space
\begin{lstlisting}[aboveskip=0pt]
(*@\vbox{\setlength\multicolsep{0pt}\begin{multicols}{2}
\begin{itemize}
    \item 1
    \item 2 
\end{itemize}
\end{multicols}}@*)
\end{lstlisting}

\noindent Removing 1 and 2 % as if the text was directly followed by multicols
\begin{lstlisting}[aboveskip=0pt]
(*@\vbox{\begin{multicols}{2}
\begin{itemize}
    \item 1
    \item 2 
\end{itemize}
\end{multicols}}@*)
\end{lstlisting}

\noindent Removing 2 and 3 % same space as if it was only text
\begin{lstlisting}
(*@\vbox{\setlength\multicolsep{0pt}\begin{multicols}{2}
\begin{itemize}
    \item 1
    \item 2 
\end{itemize}
\end{multicols}}@*)
\end{lstlisting}
\end{document}

相关内容