这是我的代码:
% 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
}