Der Tabularx-Schlüssel schlägt in einer als Newtcolorbox deklarierten Box fehl

Der Tabularx-Schlüssel schlägt in einer als Newtcolorbox deklarierten Box fehl

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 testboxdeklarierte Via newtcolorboxist genau dasselbe wie die Tcolorbox mit width=.5\textwidthmanuell hinzugefügter Option.

Wenn ich jedoch tabularxin Letzteres ein anderes Feld mit Option einfüge, funktioniert es wie erwartet. Wenn ich jedoch in Meins dasselbe Feld einfüge, testboxwird es nicht mehr kompiliert.

Irgendeine Ahnung, was hier passiert?

Antwort1

Der Grund für das Scheitern im ersten Fall ist, dass der Hack tabularxden falschen Umgebungsnamen erhält. Dieser Name wird von der savedelimiterOption gespeichert und von der äußeren Box automatisch gesetzt testbox. Für innere Boxen werden fast alle Optionen auf ihre Standardwerte zurückgesetzt – savedelimiterist eine der sehr wenigen Optionen, die auf dem aktuellen Wert bleibt (für den resetSchlüssel dokumentiert).

Das Beispiel wird repariert, indem man savedelimiterdirekt 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 tabularxist ein wenig knifflig. Hier verschachteln wir tabularxinnerhalb eines tcolorboxinnerhalb eines tcolorbox...

verwandte Informationen