6

Is there something equivalent to "lines before break" for the end part in tcolorbox? If there is I can't find it ;-)

The following box should have at least 3 lines on the second page. As the code is created automatically any solution that involves manual break points (like break at) is not suitable.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tcolorbox,lipsum}
\tcbuselibrary{skins,breakable}
\begin{document}
\begin{tcolorbox}[enhanced,colback=lightgray!20!white,frame hidden,breakable]
a\\b\\c\\d\\e\\f\\g
\lipsum[1-4]
\end{tcolorbox}

\end{document}
3
  • 1
    Do you mean a bottom line for the first part of the box and a top line for the second part of the box? If yes, I also looked unsuccessfully for that. I planned to write a feature request to Thomas Sturm for that.
    – user31729
    Aug 6, 2014 at 15:03
  • No I don't mean rules but text lines. I don't want a lonely last line on a page. Aug 6, 2014 at 15:06
  • Ok, a slight misunderstanding ;-)
    – user31729
    Aug 6, 2014 at 16:44

1 Answer 1

8

There is a (very limited) support for that by using the enlargepage flexible option from version 3.12 (2014/07/29). This allows to enlarge the pre-last (becoming last) page to avoid such lonely lines. For example:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tcolorbox,lipsum}
\tcbuselibrary{skins,breakable}
\begin{document}
\begin{tcolorbox}[enhanced,colback=lightgray!20!white,frame hidden,breakable,
  enlargepage flexible=\baselineskip
  ]
a\\b\\c\\d\\e\\f\\g
\lipsum[1-4]
\end{tcolorbox}

\end{document}

Here, you avoid a single lonely line. If you insert some more lines, 2 lines will flip to the next page.

To avoid 2 lonely lines, you could use enlargepage flexible=2\baselineskip. Naturally, the enlarged page will become too large if you continue with that to higher values.

Note that this will not protect from getting a lonely line from one paragraph which is in the mid of other paragraphs. But at least, the worst case (a framed single line at the end) can be avoided...

4
  • 1
    Sounds like a Echternacher Springprozession: Two step forward, one step back ;-). enlargepage flexible=\baselineskip is ok in this case but a minimum height of split= option would be imho useful too. Aug 6, 2014 at 16:18
  • @UlrikeFischer I'm a little bit reluctant in changing the sensible breaking algorithm, but I will put your suggestion on my TODO list and I will see if it can be implemented without harm to other things. Aug 7, 2014 at 5:55
  • 2
    I found the solution: before upper={\widowpenalties=3 10000 10000 150}. This naturally won't work if the last line is a paragraph on its own but then I can use \par\nobreak. Aug 7, 2014 at 7:02
  • @UlrikeFischer Ah... eTeX goodies :-) Yes, that's much better than manually influencing the split points. Aug 7, 2014 at 11:25

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .