4

How can I make the gray part as tall as the title box (the red part)? I tried changing bottom and middle, but middle changes the space between the text and the lower box (which I don't want), and even if it didn't I'd still be eyeballing all the measures.

enter image description here

\documentclass{article}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}
\newlength{\cornerwidth}
\setlength{\cornerwidth}{.5mm}
% --------------------------
\begin{document}
\tcbset{title={1 January 2001}, 
           center title, 
           halign lower=center, 
           boxrule=\cornerwidth,
           sharp corners,
           bicolor, 
           collower=black, 
           colback=white, 
           colframe=black!75, 
           colbacklower=black!40,
           colbacktitle=red,
           coltitle=black}

\begin{tcolorbox}[overlay={\draw[tcbcolframe, line width=\cornerwidth] (segmentation.west)--(segmentation.east);}]
\lipsum[1]
\tcblower
89.50
\end{tcolorbox}
\end{document}
6
  • In your previous question I wanted to propose the use of a tcbsubtitle (which shares geometry with title) instead of a lower part. But I don't know how to avoid the empty line after that. If you find how to do it, I think you'll have a good solution for your problem.
    – Ignasi
    Commented Jun 19, 2019 at 7:50
  • See: tex.stackexchange.com/q/496429/1952
    – Ignasi
    Commented Jun 19, 2019 at 8:08
  • tcbsubtitlte was my first solution but I changed idea for two reasons: 1) I can't find a way to extend the borderlines to makethe connectionwith the vertical ones seamless this is what I mean 2) the empty line can technically beremoved with after={\vspace{-<some>pt}} in the tcbsubtitle options, butI didn't like that solution as I couldn't get the exact amount of space to subtract(basically the height of the white line plus the one of the border).
    – noibe
    Commented Jun 19, 2019 at 11:11
  • another problem with tcbsubtitle (which I just found out) is that it shares the geometry with title only in the “default“ case: for example, if I make the title \Huge, the title box will adjust but the subtitle one won't.
    – noibe
    Commented Jun 19, 2019 at 11:30
  • Yes, it's true. But you could always declare an special style which fixes these options for title and tcbsubtitle using the same parameter.
    – Ignasi
    Commented Jun 19, 2019 at 11:49

2 Answers 2

2

Instead of trying to adjust tcblower part geometry to title, I propose to use a tricky solution: forget the title and lowerbox and use two tcbsubtitle commands automatically added with before upper and after upper options.

As tcbsubtitle are part of tcolorbox contents, they show a vertical distance from top and bottom borders. This vertical space defined by boxsep option can be compensated with a negative top and bottom values. These top and bottom values are applied to main tcolorbox but each subtitle can use different particular values.

As every tcbtitle is a more or less regular tcbox and not a title plus a tcbox, there's no need for particular options like toptitle in one and top into the other. We can define a general geometry and style for both subtitles but still use particular settings for top and bottom. Following code shows how to do it.

I think this code solves problems 1, 2 and 3 (see comments above).

\documentclass{article}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}
% --

\tcbset{
    titlecommon/.style={
        fontupper=\Large\bfseries\sffamily,
        top=2mm,
        bottom=2mm,
        halign=center,
        sharp corners,
        leftrule=0.5mm, %to draw left side in subtitle box
        rightrule=0.5mm, %to draw right side in subtitle box
        opacityfill=.5,  %to test subtitles geometry and positioning
    },
    toptitle/.style={
        titlecommon,
        colframe=green,
        colback=green!20,
    },
    bottomtitle/.style={
        titlecommon,
        colframe=red,
        colback=red!20,
    },
}   

\newtcolorbox{twotitle}[3][]{
    enhanced,
    sharp corners,
    colback=white,
    colframe=black!75,
    notitle,
    before upper={\tcbsubtitle[toptitle]{#2}},
    after upper={\tcbsubtitle[bottomtitle]{#3}},
    top=-1.5mm, %-boxsep-toprule
    bottom=-1.5mm, %-boxsep-bottomrule
    #1,
}

\begin{document}
\begin{twotitle}[colback=orange!20]{Title}{Test}
\lipsum[1]
\end{twotitle}
\end{document}

enter image description here

3
  • Nice solution, good job.
    – noibe
    Commented Jun 19, 2019 at 18:04
  • If I try to change the color of the main text, for example to blue, with fontupper=\color{blue}, I get an extra line at the top before the title box. Why does it happen?
    – noibe
    Commented Jun 19, 2019 at 18:26
  • @noibe You should use colupper=blue, fontupper is used to fix font characteristics (boldface, size, serif, ...) but not it's color.
    – Ignasi
    Commented Jun 20, 2019 at 6:18
1

You could add a custom strut to the title...that would be making the top line taller, rather than the lower line smaller.

\documentclass{article}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}
\newlength{\cornerwidth}
\setlength{\cornerwidth}{.5mm}
% ----------------------------
\newcommand\mystrut{\rule[-6pt]{0pt}{19pt}}
\begin{document}
\tcbset{title={1 January 2001\mystrut}, 
           center title, 
           halign lower=center, 
           boxrule=\cornerwidth,
           sharp corners,
           bicolor, 
           collower=black, 
           colback=white, 
           colframe=black!75, 
           colbacklower=black!40,
           colbacktitle=red,
           coltitle=black}

\begin{tcolorbox}[overlay={\draw[line width=\cornerwidth] (segmentation.west)--(segmentation.east);}]
\lipsum[1]
\tcblower
89.50
\end{tcolorbox}
\end{document}

enter image description here

This attempts to reduce the lower box height:

\documentclass{article}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}
\newlength{\cornerwidth}
\setlength{\cornerwidth}{.5mm}
% ----------------------------
\begin{document}
\tcbset{title={1 January 2001}, 
           center title, 
           halign lower=center, 
           boxrule=\cornerwidth,
           sharp corners,
           bicolor, 
           collower=black, 
           colback=white, 
           colframe=black!75, 
           colbacklower=black!40,
           colbacktitle=red,
           coltitle=black}

\begin{tcolorbox}[overlay={\draw[line width=\cornerwidth] (segmentation.west)--(segmentation.east);}]
\lipsum[1]
\tcblower \makebox{\smash{\raisebox{-3pt}{89.50}}}
\end{tcolorbox}
\end{document}

enter image description here

1
  • But both of these solutions are hacks, I still need to eyeball the correct amount of space to add/subtract to make the two boxes the same height.
    – noibe
    Commented Jun 18, 2019 at 18:08

You must log in to answer this question.

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