
次のコードを考えてみましょう。
\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
少し難しいです。ここでは、内部にネストtabularx
しtcolorbox
ますtcolorbox
...