考虑以下代码:
\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
设置为。对于内部框,几乎所有选项都设置回其默认值 -是极少数保持当前值的选项之一(针对密钥记录)。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}
正如 David Carlisle 所写:嵌套tabularx
有点棘手。在这里,我们嵌套tabularx
在嵌套tcolorbox
中tcolorbox
……