如何使用 \newenvironment;为什么此代码不起作用?我该如何修复它?

如何使用 \newenvironment;为什么此代码不起作用?我该如何修复它?

我一直在尝试找出原因,但我的 Latex 技能太弱,无法理解看似类似的问题。当我尝试这样做时:

\documentclass{memoir}
\usepackage{graphicx}
\usepackage{exsheets}
\usepackage{tcolorbox}

%#####################
\begin{document}

\newenvironment{oppg}{\begin{tcolorbox}\begin{question}}{\end{question}\end{tcolorbox}}


\begin{oppg}
Exercise text in a box
\end{oppg}

\begin{oppg}
Exercise text in a box
\end{oppg}

\end{document}

我收到一大堆错误。

我不明白为什么这不起作用。

我怎样才能将我的练习题包装到彩色盒子里?

谢谢!

答案1

可以将question环境包装在\tcolorboxenvironment重新定义中。

\documentclass{memoir}
\usepackage{graphicx}
\usepackage{exsheets}
\usepackage[most]{tcolorbox}

\begin{document}



\tcolorboxenvironment{question}{colback=yellow}  % 2nd arg is for tcolorbox options. 

\begin{question}
Exercise text in a box
\end{question}


\end{document}

编辑稍微灵活一点,不必question永远都是tcolorbox,我通过复制\LetLtxMacro并命名\oppg

这可以与 一起使用,\tcolorboxenvironmentquestion仍然是相同的环境。但是,两个环境共享相同的计数器(到目前为止)。

\documentclass{memoir}
\usepackage{graphicx}
\usepackage{exsheets}
\usepackage[most]{tcolorbox}
\usepackage{letltxmacro}


\begin{document}

\LetLtxMacro\oppg\question


\tcolorboxenvironment{oppg}{colback=yellow,colframe=red}


\begin{question}%[print=false]
Exercise text in a box
\end{question}

\begin{oppg}[print=false]
Another box
\end{oppg}

\begin{oppg}
Another box
\end{oppg}


\end{document}

在此处输入图片描述

答案2

我刚刚(2015/07/04)向 CTAN 发送了更新,exsheets它允许以下(推荐)解决方案:

\SetupExSheets{
  question/pre-hook = \begin{tcolorbox} ,
  question/post-hook = \end{tcolorbox}
}

更新应该会在几天后在 TeX Live 和 MiKTeX 中推出。如果您不想等待:更新版本 (v0.19) 也可以在此处获得:https://bitbucket.org/cgnieder/exsheets/commits/tag/v0.19

完整示例:

在此处输入图片描述

\documentclass{article}
\usepackage{exsheets}[2015/07/04]
\usepackage{tcolorbox}
\usepackage{showframe} % just for showing page dimensions

\SetupExSheets{
  question/pre-hook = \begin{tcolorbox} ,
  question/post-hook = \end{tcolorbox} ,
  solution/pre-hook = \begin{tcolorbox} ,
  solution/post-hook = \end{tcolorbox} ,
  no-skip-below ,
  headings = tcolorbox
}

\DeclareInstance{exsheets-heading}{tcolorbox}{default}{
  join  = { title[r,B]number[l,B](.333em,0pt) } ,
  attach = {
    main[l,vc]title[l,vc](0pt,0pt) ;
    main[r,vc]points[l,vc](\marginparsep+5.5mm,0pt) % depending on the
                                % colorbox the 5.5mm may need adapting
  }
}

\begin{document}

\begin{question}{2}
  This is sample question 1.
\end{question}

\begin{solution}
  This is sample solution 1. 
\end{solution}

\begin{question}{1}
  This is sample question 2.
\end{question}

\begin{solution}
  This is sample solution 2. 
\end{solution}

\begin{question}[print=false]
  This is sample question 3 -- not printed.
\end{question}

\printsolutions

\end{document}

顺便说一句:您对 的使用\newenvironment并没有错。但是,exsheets' 环境和tcolorbox' 环境都不是简单环境。在内部exsheets使用并将内容放在一个框中……这是提供钩子以在问题/解决方案之前和之后放置代码的主要原因。environtcolorboxexsheets

相关内容