
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 testbox
via declarado newtcolorbox
é exatamente igual ao tcolorbox com opção width=.5\textwidth
adicionada manualmente.
Porém, embora se eu colocar outra caixa com opção tabularx
nesta última ela funcione como esperado, se eu colocar a mesma caixa na minha testbox
ela não compila mais.
Alguma pista do que está acontecendo aqui?
Responder1
O motivo da falha no primeiro caso é que o hack tabularx
obtém o nome de ambiente errado. Este nome é armazenado pela savedelimiter
opção e definido testbox
automaticamente 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 reset
chave).
O exemplo é reparado usando savedelimiter
diretamente:
\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 tabularx
dentro de um tcolorbox
dentro de um tcolorbox
...