newenviroment 错误:额外 },或忘记 \endgroup \begin{gbox}

newenviroment 错误:额外 },或忘记 \endgroup \begin{gbox}
    \noindent
    \colorbox{gray!25}{
    \begin{minipage}{\textwidth}
    \vskip0.5cm
    \leftskip0.5cm
    \rightskip0.5cm

    Text Here!

\\\end{minipage}}

上面的代码运行良好,但我不想每次想要一个框时都重复它。然而,下面的代码不起作用。我想是因为彩盒从“开始”开始新环境并以“结束”结尾。那么,我该如何解决这个问题?

\newenvironment{gbox}
{
\noindent
\colorbox{gray!25}{
\begin{minipage}{\textwidth}
\vskip0.5cm
\leftskip0.5cm
\rightskip0.5cm
}
{
\\\end{minipage}}
}

答案1

对于这样的工作,最好使用tcolorbox或。但是,这是可行的。我曾使用过包。mdframedenviron

\documentclass[draft]{article}
\usepackage{xcolor,lipsum,environ}
\begin{document}
\NewEnviron{gbox}{%
\noindent\fboxsep=0pt
\colorbox{gray!25}{%
\begin{minipage}{\textwidth}%
\vskip.5cm
\leftskip.5cm
\rightskip0.5cm 
\BODY
\end{minipage}}%
}
\begin{gbox}
 \lipsum[1]
\end{gbox}
\end{document}

在此处输入图片描述

示例如下tcolorbox

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{lipsum}
\begin{document}
\begin{tcolorbox}[colback=red!5!white,colframe=red!5!white]
\lipsum[1]
\end{tcolorbox}
\end{document}

在此处输入图片描述

事情可能会变得更加精彩。详情:texdoc tcolorboxtexdoc.net

答案2

这是一个避免加载tcolorbox包而是使用lrbox环境的解决方案。

\documentclass{article}
\usepackage{xcolor}
\usepackage{lipsum}

\newsavebox{\mybox}
\newenvironment{gbox}
   {\begin{lrbox}{\mybox}
      \begin{minipage}{\dimexpr\linewidth-1cm}
  }{\end{minipage}%%
    \end{lrbox}%%
    \noindent
    \bgroup
      \setlength{\fboxsep}{0.5cm}%%
      \colorbox{gray!25}{\usebox{\mybox}}%%
    \egroup
  }


\pagestyle{empty}
\begin{document}

\begin{gbox}
  \lipsum[1]
\end{gbox}

\end{document}

在此处输入图片描述

相关内容