
Considere el siguiente 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}
la testbox
vía declarada newtcolorbox
es exactamente la misma que la de tcolorbox con la opción width=.5\textwidth
agregada manualmente.
Sin embargo, si coloco otro cuadro con opción tabularx
en este último, funciona como se esperaba, si coloco el mismo cuadro en mi testbox
ya no se compila.
¿Alguna pista sobre lo que está pasando aquí?
Respuesta1
El motivo del error en el primer caso es que el truco tabularx
obtiene el nombre de entorno incorrecto. Este nombre se almacena mediante la savedelimiter
opción y el cuadro exterior lo establece testbox
automáticamente. Para los cuadros internos, casi todas las opciones se restablecen a sus valores predeterminados; savedelimiter
es una de las pocas opciones que permanece en el valor actual (documentado para la reset
clave).
El ejemplo se repara usando savedelimiter
directamente:
\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 escribió David Carlisle: Anidar tabularx
es un poco complicado. Aquí, anidamos tabularx
dentro de un tcolorbox
dentro de un tcolorbox
...