chave tabularx falha dentro de uma caixa declarada newtcolorbox

chave tabularx falha dentro de uma caixa declarada newtcolorbox

Considere o seguinte código:

\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}

o testboxvia declarado newtcolorboxé exatamente igual ao tcolorbox com opção width=.5\textwidthadicionada manualmente.

Porém, embora se eu colocar outra caixa com opção tabularxnesta última ela funcione como esperado, se eu colocar a mesma caixa na minha testboxela não compila mais.

Alguma pista do que está acontecendo aqui?

Responder1

O motivo da falha no primeiro caso é que o hack tabularxobtém o nome de ambiente errado. Este nome é armazenado pela savedelimiteropção e definido testboxautomaticamente na caixa externa. Para caixas internas, quase todas as opções voltam aos seus valores padrão - savedelimiteré uma das poucas opções que permanece no valor atual (documentado para a resetchave).

O exemplo é reparado usando savedelimiterdiretamente:

\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}

Como escreveu David Carlisle: Aninhar tabularxé um pouco complicado. Aqui, aninhamo-nos tabularxdentro de um tcolorboxdentro de um tcolorbox...

informação relacionada