我正在排版包含大量空行的代码,如下所示:
\documentclass{minimal}
\usepackage{fancyvrb}
\begin{document}
\begin{Verbatim}
def xyz():
"""Some documentation.
More docs.
More docs."""
some code
more code
\end{Verbatim}
\end{document}
为了紧凑,我想缩小空白行(左边是之前,右边是之后,红色表示空白行):
请注意,我不想改变正常的行距(def
上面例子中的行距没有靠近"""
其右下方)。
我需要,因为内容实际上是使用 pygments 生成的。我尝试阅读使用fancyvrb
的定义。它似乎使它处于活动状态,这就是它保留换行符的方式。我想我可以重新定义它来计算我们连续看到的换行符数量,但我不确定如何检查它们是否是连续的——也许是?Verbatim
latexdef
^^M
if@nextchar
第一步,我尝试手动添加标记来缩小线条:
\documentclass{minimal}
\usepackage{fancyvrb}
\begin{document}
\begin{Verbatim}[commandchars=\\\{\}]
def xyz():
"""Some documentation.
\unskip\vspace{-0.5\baselineskip}
More docs.
\unskip\vspace{-0.5\baselineskip}
More docs.
"""
\unskip\vspace{-0.5\baselineskip}
some code
\unskip\vspace{-0.5\baselineskip}
more code
\end{Verbatim}
\end{document}
但是我收到了一个错误,但我不知道它来自哪里:
ERROR: Missing number, treated as zero.
--- TeX said ---
<to be read again>
\unhbox
l.8 \unskip\vspace{-0.5\baselineskip}
如何在 Verbatim 环境中减少空白行的高度?
答案1
尝试这个:
\documentclass{article}
\usepackage{fancyvrb}
\makeatletter
\newif\if@FV@emptyline
\begingroup
\catcode`\^^M=\active%
\gdef\FancyVerbGetLine#1^^M{%
\@nil%
\FV@CheckEnd{#1}%
%% modification begin
\if@FV@emptyline
\vskip-.5\baselineskip
\fi
%% modification end
\ifx\@tempa\FV@EnvironName% % True if end is found
\ifx\@tempb\FV@@@CheckEnd\else\FV@BadEndError\fi%
\let\next\FV@EndScanning%
\else%
\def\FV@Line{#1}%
%% modification begin
\ifx\FV@Line\@empty
\global\@FV@emptylinetrue
\else
\global\@FV@emptylinefalse
\fi
%% modification end
\def\next{\FV@PreProcessLine\FV@GetLine}%
\fi%
\next}%
\endgroup
\makeatother
\begin{document}
\begin{Verbatim}[numberblanklines=false,numbers=left]
def xyz():
"""Some documentation.
More docs.
More docs.
"""
some code
more code
\end{Verbatim}
\end{document}