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的 vianewtcolorbox与手动添加选项的 tcolorbox 完全相同width=.5\textwidth

但是,如果我将另一个带有选项的框tabularx放入后者,它会按预期工作,但如果我将同一个框放入我的框,testbox它就不会再编译。

对这里发生的事有任何线索吗?

答案1

第一种情况下失败的原因是 hacktabularx获得了错误的环境名称。此名称由选项存储,并由外部框自动savedelimiter设置为。对于内部框,几乎所有选项都设置回其默认值 -是极少数保持当前值的选项之一(针对密钥记录)。testboxsavedelimiterreset

该示例通过直接使用来修复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在嵌套tcolorboxtcolorbox……

相关内容