tcolorbox + minted:一个框总是从新的页面/列开始,留下一个很大的空白空间

tcolorbox + minted:一个框总是从新的页面/列开始,留下一个很大的空白空间

我正在尝试编写一个命令来插入跨页的带框列表。为此,我尝试使用 minted 来漂亮地打印列表,并使用 tcolorbox 来创建框(但我也尝试过 mdframed,结果相同)。

我的问题是代码跨页/列中断,但它总是从新页/列的开头开始,留下很大的空白。

这是说明我的尝试的 MWE:

\begin{filecontents*}{/tmp/sex.ada}
-- Sex : implements sex.

with TEXT_IO; use TEXT_IO;

Package Sex is
   Type Sex is ( M, F, X );
   Function EqSex( A, B : in Sex ) return Boolean;
   Function Male( A : in Sex ) return Boolean;
   Function Female( A : in Sex ) return Boolean;
   Function Unknown( A : in Sex ) return Boolean;
   Procedure ReadSex( A : out Sex );
   Procedure WriteSex( A : in Sex );
End Sex;

Package body Sex is

  Function EqSex( A, B : in Sex ) return Boolean is
  Begin
     Return A = B;
  End EqSex;

  Function Male( A : in Sex ) return Boolean is
  Begin
     Return A = M;
  End Male;

  Function Female( A : in Sex ) return Boolean is
  Begin
    Return A = F;
  End Female;

  Function Unknown( A : in Sex ) return Boolean is
  Begin
    Return A = X;
  End Unknown;

  Procedure ReadSex( A : out Sex ) is
     ch : Character;
  Begin
     Get( ch );
     Case ch is
        when 'F'    => A := F;
        when 'M'    => A := M;
        when Others => A := X;
     End Case;
  End ReadSex;

  Procedure WriteSex( A : in Sex ) is
  Begin
     Case A is
        when F      => Put( 'F' );
        when M      => Put( 'M' );
        when X      => Put( 'X' );
        when Others => Null;
     End Case;
  End WriteSex;

End Sex;
\end{filecontents*}
\documentclass[DIV=16, paper=a4, fontsize=8pt]{scrartcl}
\RequirePackage[cachedir=.\jobname-cache]{minted}

\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage[english]{babel}
\RequirePackage[scaled=.8]{beramono}
\RequirePackage{tcolorbox}
\tcbuselibrary{skins,breakable,minted}

\newcommand{\showlongcode}[5][\linewidth]{%
   \begin{tcolorbox}[capture=minipage,breakable=true,colback={#2},colframe={#3},
          left=1pt,right=1pt,top=1pt,bottom=1pt,arc=0pt,outer arc=0pt,width=#1]
      \inputminted{#4}{#5}%
   \end{tcolorbox}%
}

\setminted{fontfamily=tt,fontsize=\footnotesize,encoding=utf8,escapeinside=``,style=trac}
\newcommand{\showlongada}[2][\linewidth]{\showlongcode[#1]{white!50}{black!150}{ada}{#2}}

\pagestyle{plain}
\pagenumbering{arabic}

\usepackage{multicol}

\begin{document}

\begin{multicols}{2}
\noindent\showlongada{/tmp/sex.ada}%

\noindent\showlongada{/tmp/sex.ada}%

\noindent\showlongada{/tmp/sex.ada}%

\end{multicols}
\end{document} 

我使用多列是因为这样会使问题更加明显,但我在单列文档中也遇到了这个问题。问题是第二个 \showlongada 的输出没有在第一个出现结束后立即开始,而是在第二列中断(第三个调用也是如此)。这不是代码中断的问题,因为如果我使用一段长于一列的代码,它会正确地跨越几列,只是它不会填充当前列。

我尝试使用 mdframed 编写 showlongcode,但遇到了同样的问题。这是我使用的代码:

\newcommand{\showlongcode}[5][\linewidth]{%
    \begin{mdframed[userdefinedwidth=#1,
        innerleftmargin=3pt,innerrightmargin=3pt,%
        innertopmargin=0.5pt,innerbottommargin=0pt,%
        backgroundcolor{#2},nobreak=false,%
        linecolor=#3, linewidth=1pt]%
        \inputminted{#4}{code/#5}%
    \end{mdframed}%
}

这就是我得到的(点击这里) 我究竟做错了什么?

杰克

答案1

如果我使用 TeX Live 2016 编译测试代码,就会发生这种情况:

tcolorbox 2017/02/24 version 4.02 text color boxes
minted 2016/10/31 v2.4.1 Yet another Pygments shim for LaTeX

TeX Live 2017 不会发生这种情况

tcolorbox 2018/01/12 version 4.12 text color boxes
minted 2017/07/19 v2.5 Yet another Pygments shim for LaTeX

或 TeX Live 2018

tcolorbox 2018/03/22 version 4.13 text color boxes
minted 2017/07/19 v2.5 Yet another Pygments shim for LaTeX

在此处输入图片描述

相关内容