在 fancyvrb Verbatim 环境中以半高显示空白行

在 fancyvrb Verbatim 环境中以半高显示空白行

我正在排版包含大量空行的代码,如下所示:

\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的定义。它似乎使它处于活动状态,这就是它保留换行符的方式。我想我可以重新定义它来计算我们连续看到的换行符数量,但我不确定如何检查它们是否是连续的——也许是?Verbatimlatexdef^^Mif@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}

在此处输入图片描述

相关内容