命令中的环境内的环境内

命令中的环境内的环境内

所以……我试图创建(我假设)一个简单的命令,尝试进行一些不错的格式化。这是我所拥有的。

\usepackage{enumitem}
\newenvironment{question}{\bf}{\normalfont}
\newenvironment{answer}{\it}{\normalfont}
\newcommand{\qna}[2]{
    \fcolorbox{black}{yellow}{
        \begin{question}
            #1
        \end{question}
        \begin{answer}
            #2
        \end{answer}
    }
}

现在,当我输入任何字符串时,这似乎都能完美运行。

\qna{Here's a q}{Here's an answer}

但当我尝试将非字符串作为第二个变量传递时,我遇到了问题。示例

\qna{Here's a q}{Here an answer in list format
\begin{enumerate}
    \item answer 1
    \item answer 2
\end{enumerate}
}

我得到的错误是

Something's wrong--perhaps a missing \item. }

我不知道我做错了什么以及有什么可以解决它的方法。

最小工作示例:

\documentclass[11pt]{book}

\usepackage{enumitem}
\usepackage{xcolor}

\newenvironment{question}{\bf}{\normalfont}
\newenvironment{answer}{\it}{\normalfont}
\newcommand{\qna}[2]{
    \fcolorbox{black}{yellow}{
        \begin{question}
            #1
        \end{question}
        \begin{answer}
        #2
        \end{answer}
    }
}


\begin{document}
    \qna{test}{test}
\end{document}

答案1

的问题\fcolorbox是不允许lists在里面。在这种情况下,minipageparbox会有所帮助,但两者都不可破坏。我使用tcolorbox包和tcolorbox环境来提供一个可破坏的盒子(以及许多其他可配置选项,例如盒子角、颜色、标题行等)

此外,类似exam或的软件包exsheets也是为此类任务而设计的。

我用xparse's\NewDocumentCommand表示'更容易'长篇论证到命令而不是\newcommand

\documentclass{article}

\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{xparse}%
\usepackage[breakable]{tcolorbox}
\newenvironment{question}{\bfseries}{\normalfont}%
\newenvironment{answer}{\itshape}{\normalfont}%

\NewDocumentCommand{\qna}{+m+m}{%
  \begin{tcolorbox}[breakable,colback=yellow]
        \begin{question}
          #1
        \end{question}
        \begin{answer}
            #2
        \end{answer}
      \end{tcolorbox}
}

\begin{document}


\qna{Here's a q}{Here an answer in list format
\begin{enumerate}
    \item answer 1
    \item answer 2
\end{enumerate}
}%

\end{document}

在此处输入图片描述

相关内容