我正在尝试删除项目符号和第二个 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
此垂直空白由三个元素解释:
- 环境上方添加了空间
lstlisting
。您可以通过将选项设置aboveskip
为 来将其删除0pt
。 - 显然,内部转义的 TeX 代码
lstlisting
在水平模式下启动,并且multicols
在水平模式下调用时的行为是从新行开始。您可以通过\vspace*{-\baselineskip}
在调用之前添加multicols
或将整个环境放在 中来欺骗它\vbox{}
。 multicols
还会在其内容上方添加垂直空间。您可以通过指定本地来删除它\setlength\multicolsep{0pt}
,如减少垂直间距 itemize 和 multicols。
您可以将其全部删除:
但什么才是真正的“过度”取决于你想要的结果。空格 2 可能是不需要的。如果你想要与常规文本和 之间的垂直空间相同multicols
,请删除 1 和 2:
如果您希望常规文本和 的文本之间有相同的垂直空间lstlisting
(如示例的开头),请删除 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}