0

I'm using minted inside a multicol enviroment and would like to remove the spacing at the start of the first column. I found the answer for belowskip and I am looking for the same code for aboveskip:

Belowskip on minted?

Edit: muzimuzhi-z provided a great answer. This allows for nice two column listings:

\documentclass[aspectratio=1610]{beamer}
\usepackage{fancyvrb}
\usepackage{xpatch}
\usepackage{minted}
\makeatletter
% new fancyvrb options "above space" and "below vspace"
\define@key{FV}{above vspace}[\topsep]{\def\FancyVerbAboveVspace{#1}}
\define@key{FV}{below vspace}[\topsep]{\def\FancyVerbBelowVspace{#1}}

% redefine existing option "vspace" \define@key{FV}{vspace}[\topsep]{% \def\FancyVerbAboveVspace{#1}\def\FancyVerbBelowVspace{#1}}

% init \fvset{vspace}

% patch fancyvrb internals \xpatchcmd\FV@ListVSpace {@topsepadd=\FancyVerbVspace} {@topsepadd=\FancyVerbAboveVspace} {}{\PatchFailed} \xpatchcmd\FV@EndList {@endparenv} {@topsepadd\dimexpr@topsepadd-\FancyVerbAboveVspace +\FancyVerbBelowVspace\relax @endparenv} {}{\PatchFailed} \minted@def@optfv{vspace} \minted@def@optfv{above vspace} \minted@def@optfv{below vspace} \makeatother

\usepackage{tikz} \usepackage{multicolrule}

\begin{document}

\begin{frame}{Codebox}

\definecolor{codebg}{rgb}{.1, .1, .1} \setbeamercolor{blackcodebox}{fg=white,bg=codebg} \begin{beamercolorbox}[rounded=true]{blackcodebox} \small Comet ML\vspace{4pt} \hrule \setlength\multicolsep{1pt} % no multicol top margin \SetMCRule{line-style=solid-circles,color=white,width=2pt} \begin{multicols}{2} \setlength{\parskip}{0pt} foo \usemintedstyle{monokai} \inputminted[tabsize=2,breaklines,fontsize=\scriptsize,python3=true,% below vspace=0pt,above vspace=0pt]{python}{example.py} bar \end{multicols} \end{beamercolorbox}

\end{frame} \end{document}

Result: Beamer codebox

mova
  • 5

1 Answers1

4

fancyvrb has an undocumented option vspace which controls both the above and below skip. This option has default and initial value \topsep and was supported since fancyvrb v3.0 2018/11/01

In below example two more options above vspace and below vspace are added. Now

  • total above skip is <above vspace> + \parskip (+ \partopsep)
  • total below skip is <below vspace> + \parskip (+ \partopsep)

see https://latexref.xyz/list.html for how the above and below skip is calculated in a normal list.

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{lipsum}

\usepackage{xpatch}

\makeatletter % new fancyvrb options "above space" and "below vspace" \define@key{FV}{above vspace}[\topsep]{\def\FancyVerbAboveVspace{#1}} \define@key{FV}{below vspace}[\topsep]{\def\FancyVerbBelowVspace{#1}}

% redefine existing option "vspace" \define@key{FV}{vspace}[\topsep]{% \def\FancyVerbAboveVspace{#1}\def\FancyVerbBelowVspace{#1}}

% init \fvset{vspace}

% patch fancyvrb internals \xpatchcmd\FV@ListVSpace {@topsepadd=\FancyVerbVspace} {@topsepadd=\FancyVerbAboveVspace} {}{\PatchFailed} \xpatchcmd\FV@EndList {@endparenv} {@topsepadd\dimexpr@topsepadd-\FancyVerbAboveVspace +\FancyVerbBelowVspace\relax @endparenv} {}{\PatchFailed} \makeatother

\parindent=0pt \begin{document}

\newcommand\controlGroup[1]{\par \subsection*{#1} \begin{minipage}[t]{.45\textwidth} \lipsum[1][1] \begin{flushleft}\ttfamily content % trivlist env\ content % control group \end{flushleft} \lipsum[1][1] \end{minipage} \qquad\ignorespaces }

\controlGroup{Default} \begin{minipage}[t]{.45\textwidth} \lipsum[1][1] \begin{Verbatim} content % by default, above skip = content % below skip = \topsep \end{Verbatim} \lipsum[1][1] \end{minipage}

\controlGroup{\texttt{vspace=0pt}} \begin{minipage}[t]{.45\textwidth} \lipsum[1][1] \begin{Verbatim}[vspace=0pt] content content \end{Verbatim} \lipsum[1][1] \end{minipage}

\controlGroup{\texttt{above vspace=0pt}} \begin{minipage}[t]{.45\textwidth} \lipsum[1][1] \begin{Verbatim}[above vspace=0pt] content content \end{Verbatim} \lipsum[1][1] \end{minipage}

\controlGroup{\texttt{below vspace=0pt}} \begin{minipage}[t]{.45\textwidth} \lipsum[1][1] \begin{Verbatim}[below vspace=0pt] content content \end{Verbatim} \lipsum[1][1] \end{minipage}

\end{document}

enter image description here

The following three lines add minted interface:

\minted@def@optfv{vspace}
\minted@def@optfv{above vspace}
\minted@def@optfv{below vspace}
muzimuzhi Z
  • 26,474