\ vfill em tcolorbox com sidebyside

Oct 02 2020

Eu tenho alguns tcolorboxes sidebyside de altura variável inquebráveis.

Na parte inferior dessas caixas, quero ter no lado esquerdo uma linha e no lado direito um texto "separe aqui" no mesmo nível da linha.

Não tenho altura fixa, então não posso definir este atributo (?).

\documentclass[notitlepage]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}

\begin{document}

\begin{tcolorbox}[sidebyside,sidebyside align=top]
on left: \lipsum[1]
\vfill
\mbox{}{ \hrule}
\tcblower
text
\vfill
please separate here
\end{tcolorbox}

\begin{tcolorbox}[sidebyside,sidebyside align=top]
text
\vfill
\mbox{}{ \hrule}
\tcblower
on right:\lipsum[2]
\vfill
please separate here
\end{tcolorbox}

\end{document}

Respostas

1 muzimuzhiZ Oct 02 2020 at 19:48

O conteúdo superior e inferior de um lado a lado tcolorboxé colocado em um minipageambiente. Até que a altura de minipageseja especificada, um \vfillusado nele não terá efeito.

No exemplo a seguir, o efeito desejado é emulado por overlayopção. São utilizadas algumas dimensões internas tcolorboxe dois números mágicos (10pt, 12pt) evitáveis.

\documentclass[notitlepage]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}

\makeatletter
\tcbset{
  my sidebyside/.style={
    sidebyside, sidebyside align=top,
    enhanced, geometry nodes,
    bottom=2mm+14.4pt,
    overlay={
      \draw ([shift={(\kvtcb@leftupper+\kvtcb@boxsep, 10pt)}]frame.south west) 
         -- ([shift={(-.5*\kvtcb@sbs@gap, 10pt)}]frame.south);
      \node[shift={(.5*\kvtcb@sbs@gap, 10pt)}, inner sep=0pt, anchor=base west] at (frame.south) {please separate here};
    }
  }
}
\makeatother

\begin{document}

\begin{tcolorbox}[my sidebyside]
  \lipsum[2]
  \tcblower
  right-side is shorter
\end{tcolorbox}

\begin{tcolorbox}[my sidebyside]
  left-side is shorter
  \tcblower
  \lipsum[2]
\end{tcolorbox}

\end{document}