Ключ tabularx не работает внутри объявленного поля newtcolorbox

Ключ tabularx не работает внутри объявленного поля newtcolorbox

Рассмотрим следующий код:

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

объявленное testboxотверстие newtcolorboxточно такое же, как и у tcolorbox с опцией, width=.5\textwidthдобавленной вручную.

Однако, если я помещу tabularxв последний еще один блок с опцией, он будет работать так, как и ожидалось, но если я помещу тот же блок в свой, testboxон больше не будет компилироваться.

Есть какие-нибудь подсказки, что здесь происходит?

решение1

Причина неудачи в первом случае в том, что взлом tabularxполучает неправильное имя среды. Это имя сохраняется опцией savedelimiterи автоматически устанавливается testboxвнешним ящиком. Для внутренних ящиков почти все опции возвращаются к значениям по умолчанию - savedelimiterэто одна из немногих опций, которая остается на текущем значении (задокументировано для resetключа).

Пример исправлен с помощью savedelimiterпрямого использования:

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

Как писал Дэвид Карлайл: Вложение tabularx— это немного сложно. Здесь мы вкладываем tabularxвнутрь внутри tcolorboxвнутри tcolorbox...

Связанный контент