
Betrachten Sie den folgenden Code:
\documentclass{article}
\usepackage{tabularx}
\usepackage{colortbl}
\usepackage{array}
\usepackage{tcolorbox}
\newtcolorbox{testbox}{
width=.5\textwidth
}
\begin{document}
% \begin{testbox} %compilation fails when this is uncommented
% \begin{tcolorbox}[tabularx={l},width=4cm]
% test1 \\\hline
% test2
% \end{tcolorbox}
% \end{testbox}
\begin{tcolorbox}[width=.5\textwidth]
\begin{tcolorbox}[tabularx={l},width=4cm]
test1 \\\hline
test2
\end{tcolorbox}
\end{tcolorbox}
\end{document}
Das testbox
deklarierte Via newtcolorbox
ist genau dasselbe wie die Tcolorbox mit width=.5\textwidth
manuell hinzugefügter Option.
Wenn ich jedoch tabularx
in Letzteres ein anderes Feld mit Option einfüge, funktioniert es wie erwartet. Wenn ich jedoch in Meins dasselbe Feld einfüge, testbox
wird es nicht mehr kompiliert.
Irgendeine Ahnung, was hier passiert?
Antwort1
Der Grund für das Scheitern im ersten Fall ist, dass der Hack tabularx
den falschen Umgebungsnamen erhält. Dieser Name wird von der savedelimiter
Option gespeichert und von der äußeren Box automatisch gesetzt testbox
. Für innere Boxen werden fast alle Optionen auf ihre Standardwerte zurückgesetzt – savedelimiter
ist eine der sehr wenigen Optionen, die auf dem aktuellen Wert bleibt (für den reset
Schlüssel dokumentiert).
Das Beispiel wird repariert, indem man savedelimiter
direkt Folgendes verwendet:
\documentclass{article}
\usepackage{tabularx}
\usepackage{colortbl}
\usepackage{array}
\usepackage{tcolorbox}
\newtcolorbox{testbox}{
width=.5\textwidth
}
\begin{document}
\begin{testbox}
\begin{tcolorbox}[tabularx={l},width=4cm,savedelimiter=tcolorbox]
test1 \\\hline
test2
\end{tcolorbox}
\end{testbox}
\begin{tcolorbox}[width=.5\textwidth]
\begin{tcolorbox}[tabularx={l},width=4cm]
test1 \\\hline
test2
\end{tcolorbox}
\end{tcolorbox}
\end{document}
Wie David Carlisle schrieb: Das Verschachteln tabularx
ist ein wenig knifflig. Hier verschachteln wir tabularx
innerhalb eines tcolorbox
innerhalb eines tcolorbox
...