我正在尝试编写一个命令来插入跨页的带框列表。为此,我尝试使用 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