我有一个名为“quiz”的自定义环境,它将输入放入保存框中,然后根据包选项稍后使用它。代码运行良好,除非我使用 align* 环境,在这种情况下我会收到“缺少 \endgroup 插入”错误。
这是一个最小(非)工作示例。
\documentclass{article}
% Load required packages
\usepackage{amsmath}
\usepackage{ifthen}
% Define new 'quiz' environment
\newsavebox{\quizbox}
\newlength{\quizheight}
\newboolean{showanswer}
\setboolean{showanswer}{true}
\newenvironment{quiz}{%
\begin{lrbox}{\quizbox}
}{%
\end{lrbox}
\ifthenelse{\boolean{showanswer}}{%
\usebox{\quizbox}
}{%
\settoheight{\quizheight}{\usebox{\quizbox}}
\fbox{\begin{minipage}[\quizheight]{\linewidth}%
Answer:\hspace{\linewidth}\\[1em]
\end{minipage}}
}
}
\begin{document}
\begin{quiz}
\begin{align*}
R_o = \int_{t=0}^{t_{max}} R(t)
\end{align*}
Test
\end{quiz}
\end{document}
有什么想法吗?
答案1
正如egreg
评论中提到的,您可以使用 修复此问题minipage
。
附带评论一下——您可能还想看看answers
与您正在处理的类似的事情的软件包。
\documentclass{article}
% Load required packages
\usepackage{amsmath}
\usepackage{ifthen}
\usepackage[showframe=true]{geometry}
% Define new 'quiz' environment
\newsavebox{\quizbox}
\newlength{\quizheight}
\newboolean{showanswer}
\setboolean{showanswer}{true}
\newenvironment{quiz}{%
\begin{lrbox}{\quizbox}%
\begin{minipage}{\linewidth}%
}{%
\end{minipage}%
\end{lrbox}%
\ifthenelse{\boolean{showanswer}}{%
\noindent\usebox{\quizbox}%
}{%
\settoheight{\quizheight}{\usebox{\quizbox}}
\noindent\fbox{\begin{minipage}[\quizheight]{\dimexpr\linewidth-\fboxsep-\fboxsep\relax}%
Answer:\hspace{\linewidth}\\[1em]
\end{minipage}}
}
}
\begin{document}
\begin{quiz}
\begin{align*}
R_o = \int_{t=0}^{t_{max}} R(t)
\end{align*}
Test
\end{quiz}
\end{document}
答案2
lrbox
制作一个水平(LR)框,该框不能直接包含垂直(par)模式显示材料,您需要minipage
进入垂直模式
\begin{quiz}\begin{minipage}{\textwidth}
\begin{align*}
R_o = \int_{t=0}^{t_{max}} R(t)
\end{align*}
Test
\end{minipage}\end{quiz}