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された via はnewtcolorbox、オプションが手動で追加された tcolorbox とまったく同じですwidth=.5\textwidth

tabularxただし、オプション付きの別のボックスを後者に配置すると期待どおりに動作しますが、同じボックスを自分のに配置するとtestbox、コンパイルされなくなります。

ここで何が起こっているのか何か手がかりはありますか?

答え1

最初のケースで失敗する理由は、ハックがtabularx間違った環境名を取得するためです。この名前はオプションによって保存されsavedelimiter、外側のボックスによって自動的に設定されますtestbox。内側のボックスでは、ほぼすべてのオプションがデフォルト値に戻されます。は、savedelimiter現在の値のままになる非常に少数のオプションの 1 つです (キーについて文書化されています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}

David Carlisle 氏は次のように書いています: ネストはtabularx少し難しいです。ここでは、内部にネストtabularxtcolorboxますtcolorbox...

関連情報