newtcolorbox 선언 상자 내에서 tabularx 키가 실패합니다.

newtcolorbox 선언 상자 내에서 tabularx 키가 실패합니다.

다음 코드를 고려해보세요.

\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...

관련 정보