[Tex/LaTex] tcolorbox breakable in multicol environment

environmentsmulticolpage-breakingtcolorbox

I would like to have my tcolorboxes with breakable inside my multicols environment.
But they do not break.
Also:

\documentclass[a4paper, twocolumn]{article}

Would not work for me, because for some sections I need the whole page and for some sections, I would like multiple columns.

My header is:

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{multicol}
\usepackage[svgnames]{xcolor}                           % colour extension
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}              % Todo notes
\usepackage[sfdefault,thin]{roboto}                     % Roboto font
\usepackage{fullpage}
\usepackage{longtable}                                  
\usepackage{tcolorbox}                                  % Colored boxes
\usepackage{xparse}                     % For squeezing of section titles
\tcbuselibrary{skins,breakable}              % breakable for tcolorboxes

My tcolorbox is:

\newenvironment{tada}
{\begin{tcolorbox}[colback=Green!14!white,
colframe=Green!10!blue!29!white,
sharp corners, breakable]}{\end{tcolorbox}} 

And I call it like:

\begin{multicols}{2}

\begin{tada}
** Here should be written the lipsum text **
\end{tada}

\end{multicols}

Now, if that is at the end of a page, the long lipsum text would not be broken by splitting of the tcolorbox as it should be by the command breakable above.

Someone have a clue how to solve this?

Best Answer

I had the same issue with a document of mine and what fixed the problem for me was this answer from egreg, so I included the code here too.

\RenewDocumentEnvironment{multicols}{mO{}}
 {%
  \ifnum#1=1
    #2%
  \else % More than 1 column
    \multicolmulticols{#1}[#2]
  \fi
 }
 {%
  \ifnum#1=1
  \else % More than 1 column
    \endmulticolmulticols
  \fi
 }

I hope this is what you were looking for (full MWE below).

tcolorbox multicolumn breakable

\documentclass[a4paper,]{article}
\usepackage{lipsum} %to use lipsum
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{multicol}
\usepackage[svgnames]{xcolor}                           
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}              
\usepackage[sfdefault,thin]{roboto}                     
\usepackage{fullpage}
\usepackage{longtable}                                  
\usepackage[many]{tcolorbox}                                  
\usepackage{xparse}                    
\tcbuselibrary{skins,breakable}              
\newenvironment{tada}
{\begin{tcolorbox}[enhanced jigsaw, colback=Green!14!white,
colframe=Green!10!blue!29!white,
sharp corners, breakable]}{\end{tcolorbox}} 
%
\let\multicolmulticols\multicols
\let\endmulticolmulticols\endmulticols

\RenewDocumentEnvironment{multicols}{mO{}}
 {%
  \ifnum#1=1
    #2%
  \else % More than 1 column
    \multicolmulticols{#1}[#2]
  \fi
 }
 {%
  \ifnum#1=1
  \else % More than 1 column
    \endmulticolmulticols
  \fi
 }
%

\begin{document}
\begin{multicols}{1}
\begin{tada}
\lipsum[1]
\end{tada}
\lipsum[1]
\end{multicols}
\begin{multicols}{2}
\lipsum[1]
\begin{tada}
\lipsum[2-4]
\end{tada}
\lipsum[5]
\end{multicols}
\end{document}
Related Question