
다음 코드를 고려해보세요.
\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
현재 값을 유지하는 몇 안 되는 옵션 중 하나입니다( 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
...