Seite 1 von 1

Ausrichtung der Grundline (Baseline) in tcolorbox-Boxen

Verfasst: Mo 18. Mär 2019, 22:46
von zerocon
Hi@all!

Ich würde gerne eine Auflistung von Tags machen, diese möchte ich durch farbige Boxen (mit abgerundeten Ecken) hervorherben. Das Paket tcolorbox scheint sehr mächtig zu sein, damit habe ich das hier gemacht:
\documentclass[11pt, a4paper, sans]{scrartcl}

\newlength{\tagheight}
\settoheight{\tagheight}{Agyl!}

\usepackage{tcolorbox}
\newtcbox{\tag}{%
	nobeforeafter,
	minipage,
	hbox,
	height=\tagheight+12pt,
	boxsep=-5pt,
	halign=center,
	valign=center
}

\begin{document}
	\tag{Yo} \tag{yo} \tag{aaaaaa} \tag{aaaMDF}
\end{document}
Ein Problem bekomme ich allerdings momentan nicht gelöst und finde dazu auch nichts so wirklich Passendes:
Ich hätte gerne, dass die Grundlinie (Baseline) der Tags auf einer Höhe ist. Im Moment kann ich das über den Parameter valign nur lokal für einen Tag beeinflussen, daher steht beim dritten Tag das a dann höher als beim vierten.

Hat jemand von euch einen Vorschlag, wie ich das in den Griff kriege?

THX, zerocon.

Verfasst: Di 19. Mär 2019, 07:56
von markusv
Hallo.

Mit der Kombination der Option on line und der Phantom-Anweisung \vphantom{Aj}, um ein Platzhalter für alle Boxen mit Großbuchstaben und Buchstabe mit Unterzug zu erhalten, klappt es soweit ganz gut:

\tag als Name der Box zu verwenden ist mindestens mutig, da dieser Befehl u.a. bereits vom amsmath-Package bereitgestellt wird und beim Laden des Paketes dementsprechend Fehler auftreten. Ich habe es daher in \mytag umgenannt:
\documentclass[fontsize=11pt]{scrartcl}
\usepackage{amsmath}
\usepackage{adjustbox}
\newlength{\tagheight}
\settoheight{\tagheight}{Agyl!}

\usepackage{tcolorbox}
\newtcbox{\mytag}{%
   on line,%Combines tcbox raise base with nobeforeafter 
   before upper=\vphantom{Ay},
   minipage,
   hbox,
   height=\tagheight+12pt,
   boxsep=-5pt,
   halign=center,
   valign=center
}

\begin{document}
   \mytag{Yo} \mytag{yo} \mytag{aaaaaa} \mytag{aaaMDF}
\end{document}

Verfasst: Di 19. Mär 2019, 08:06
von Gast
\documentclass[11pt, a4paper, sans]{scrartcl}

\newlength{\tagheight}
\setlength{\tagheight}{\ht\strutbox}

\usepackage{tcolorbox}
\newtcbox{\tag}{%
   nobeforeafter,
   minipage,
   hbox,
   height=\tagheight+\baselineskip,
   boxsep=-5pt,
   halign=center,
   valign=center,
%   box align=base,
%   sidebyside align=bottom,
   before upper=\strut,
   after lower=\strut% für mehrzeilige Boxen (was hier nicht der Fall ist)
}

\begin{document}
   \tag{Yo} \tag{yo} \tag{aaaaaa} \tag{aaaMDF}
\end{document}
Zwei weitere Optionen, die hilfreich sein können, habe ich mal auskommentiert.

Verfasst: Di 19. Mär 2019, 20:57
von zerocon
Super, vielen Dank! Wie kann ich es jetzt noch schaffen, dass die Grundlinie innerhalb und außerhalb eines Tags auf derselben Höhe ist?

Verfasst: Mi 20. Mär 2019, 00:38
von zerocon
Beziehungsweise eigentlich benötige ich das gerade gar nicht mehr, dass die Grundlinie innerhalb und außerhalb eines Tags diesselbe ist ...

Allerdings bin ich auf folgendes Problem gestoßen:
Wenn ich in einem Tag eine Klammer habe, ist die Box ganz leicht nach unten versetzt. Das ändert sich auch nicht, wenn ich
\settoheight{\tagheight}{Ay(}
statt
\settoheight{\tagheight}{Ay}
schreibe:

\documentclass[fontsize=11pt]{scrartcl}

\newlength{\tagheight}
\settoheight{\tagheight}{Ay}
\usepackage{tcolorbox}
\newtcbox{\mytag}{%
	on line,
	before upper=\vphantom{Ay},
	minipage,
	hbox,
	height=\tagheight+12pt,
	boxsep=-5pt,
	halign=center,
	valign=center
}
\begin{document}
	\mytag{y} \mytag{y(a)} \mytag{a}
\end{document}

Verfasst: Mi 20. Mär 2019, 09:16
von Gast
Kann ich bei Anwendung meines Vorschlags nicht nachvollziehen:
\documentclass[11pt, a4paper, sans]{scrartcl}

\newlength{\tagheight}
\setlength{\tagheight}{\ht\strutbox}

\usepackage{tcolorbox}
\newtcbox{\mytag}{%
   nobeforeafter,
   minipage,
   hbox,
   height=\tagheight+\baselineskip,
   boxsep=-5pt,
   halign=center,
   valign=center,
%   box align=base,
%   sidebyside align=bottom,
   before upper=\strut,
   after lower=\strut% für mehrzeilige Boxen (was hier nicht der Fall ist)
}

\begin{document}
    \mytag{y} \mytag{y(a)} \mytag{a}
\end{document}

Verfasst: Mi 20. Mär 2019, 14:30
von zerocon
Anonymous hat geschrieben:Kann ich bei Anwendung meines Vorschlags nicht nachvollziehen
Hast Recht, mit der Methode funktioniert's! Danke!
Hatte mich nur für den ersten Vorschlag entschieden, weil ich \strut und \strutbox nicht kannte und beim nachlesen auch nicht so richtig verstanden hab bzw. kompliziert fand. :)