新环境(带有嵌套环境,即 tcolorbox 和 tabularx)

新环境(带有嵌套环境,即 tcolorbox 和 tabularx)

这是我的代码:

% XeLaTeX
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tcolorbox}
\usepackage{environ}
\setlength\parindent{0pt}

\usepackage{array}
\usepackage{tabularx}

\newenvironment{solution}
    {
    \begin{tcolorbox}
    \begin{tabularx}{\textwidth}{p{0.7cm}X}
    }
    {
    \end{tabularx}
    \end{tcolorbox}
    }
\def\fakta#1{\stepcounter{fakta} F{\arabic{fakta}}: & #1 \\}
\def\contoh#1{\stepcounter{contoh} C{\arabic{fakta}}{\alph{contoh}}: & #1 \\}
\def\huraian#1{\stepcounter{huraian} H{\arabic{fakta}}{\alph{huraian}}: & #1 \\}

我正在尝试做类似的事情

\begin{solution}
\fakta{blablabla}
\end{solution}

但它不起作用,并且不断出现错误。为什么?

更新:

\newenvironment{solution}
  {
  \tabularx{\textwidth}{lX}
  }
  {
  \endtabularx
  }

^这个可以,但是这个不行:

\newenvironment{solution}
  {
  \begin{tcolorbox}
  \tabularx{\textwidth}{lX}
  }
  {
  \endtabularx
  \end{tcolorbox}
  }

答案1

在这两种情况下,你都会得到错误

! File ended while scanning use of \TX@get@body.

在第一种情况下,LaTeX 正在寻找\end{tabularx},但它没有找到,因为它隐藏在 里面\end{solution}

在第二种情况下\tabularx,LaTeX 会寻找\end{tcolorbox},它是处理 时的父环境\tabularx,但问题是一样的,因为\end{solution}不是有效的终止符。

正确的解决方案是使用\newtcolorbox

\documentclass[a4paper,12pt]{article}

\usepackage[table]{xcolor}
\usepackage{tcolorbox}
\usepackage{tabularx}

\newtcolorbox{solution}{tabularx=p{0.7cm}X}

\setlength\parindent{0pt}

\begin{document}

\begin{solution}
A & B
\end{solution}

\end{document}

答案2

我找到了另一种方法,通过使用 framedmd“重建” tcolorbox:

% in Preamble: \usepackage[framemethod=TikZ]{mdframed}

\newenvironment{solution}
  {
  \mdframed[roundcorner=7pt,backgroundcolor=gray!10,linewidth=1.5pt]
  \tabularx{\textwidth}{lX}
  }
  {
  \endtabularx
  \endmdframed
  }

相关内容