为什么前者有效而后者无效?

为什么前者有效而后者无效?

以下 MWE 效果很好:

\documentclass{beamer}
\usepackage[most]{tcolorbox}

\begin{document}
    \begin{tcolorbox}[title={This is a title},hbox]
    This is a body.
    \end{tcolorbox}
\end{document}

然而,以下无法编译使用 TeX Live 2018 XeLaTeX:

\documentclass{beamer}
\usepackage[most]{tcolorbox}
\newenvironment{TColorBox}[1]{\begin{tcolorbox}[title=#1,hbox]}
{\end{tcolorbox}}
\begin{document}
    \begin{TColorBox}{This is a title}
    This is a body.
    \end{TColorBox}
\end{document}

为什么前者有效而后者无效?

根本原因是什么?

答案1

您收到的错误消息是

LaTeX 错误:输入行 6 上的 \begin{tcolorbox} 以 \end{TColorBox} 结束。

这是当您尝试定义包含另一个环境的新环境时遇到的一个标准问题,本质上是因为 LaTeX 无法确定接下来需要关闭哪个环境。一种解决方法是使用:

\newenvironment{TColorBox}[1]{\tcolorbox[title=#1,hbox]}{\endtcolorbox}

这是可行的,因为TColorBox环境不会打开另一个环境。但是,我认为做你想做的事情的“正确”方法是使用\newtcolorbox

\documentclass{beamer}
\usepackage[most]{tcolorbox}

\newtcolorbox{TColorBox}[1]{title=#1,hbox}

\begin{document}

\begin{frame}{}
  \begin{TColorBox}{This is a title}
    This is a body.
  \end{TColorBox}
\end{frame}

\end{document}

输出如下:

在此处输入图片描述

相关内容