在保存框中使用对齐吗?

在保存框中使用对齐吗?

我有一个名为“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}

相关内容