如何复制内容/vbox?

如何复制内容/vbox?

我正在尝试为讲义创建练习和答案环境,在其中键入\begin{exercise}... \end{exercise}后跟\begin{answer}...\end{answer}文本中的内容。我想在文本中包含练习语句,但让练习及其答案也出现在文档末尾。(如果将它们写入单独的 .tex 文件会更好,但这完全失败了,除非我坚持在环境中使用非常基本的 TeX。)

如果我删除第 8 行的最后一个代码,则以下代码有效\unvbox\temp@Exercisebox,我试图使用它来复制答案之前的练习环境。pdflatex 死机

! LaTeX Error: This may be a LaTeX bug.

有人知道如何修复这个问题吗,或者是否可以复制 vbox?(可能存在引用问题等)

\makeatletter

\newtheorem{@exercise}{Exercise}
\numberwithin{@exercise}{chapter}
\newtheorem{@exercisestar}[@exercise]{Exercise*}
\newtheorem{@exerciselight}[@exercise]{Exercise(Light)}

\newbox\@Exercisebox
\newbox\temp@Exercisebox
\def\@unknown{UNKNOWN}
\let\@currentexercise=\@unknown
\def\@bex#1{%
    \global\let\@currentexercise=\@unknown%
    \let\@oldlabel=\label%
    \def\label##1{\def\@args{##1}%
                  \global\let\@currentexercise=\@args%
                  \@oldlabel\@args
                  \let\label=\@oldlabel}%
    \global\setbox\@Exercisebox\vbox\bgroup\begin{#1}}
\def\@eex#1{\ifx\@currentexercise\@unknown\label{ex:\the@exercise}\else\fi%
    \end{#1}\egroup\global\setbox\temp@Exercisebox\copy\@Exercisebox%
    \unvbox\@Exercisebox}
\newenvironment{exercise}{\@bex{@exercise}}{\@eex{@exercise}}
\newenvironment{exerciselight}{\@bex{@exerciselight}}{\@eex{@exerciselight}}
\newenvironment{exercisestar}{\@bex{@exercisestar}}{\@eex{@exercisestar}}

\newbox\all@Answerbox
\newbox\temp@Answerbox
\newbox\@Answerbox
\newcounter{@prevchapter}
\def\tmp@ref#1{\ref#1}%
\newenvironment{answer}{%
    \global\setbox\@Answerbox\vbox\bgroup%
    \par%
    \topsep=0pt%
    \itemsep=0pt%
    \begin{trivlist}%
    %\color{SkyBlue}%
    \def\@args{\@currentexercise}
    \item[\hskip \labelsep {\bfseries Answer to Exercise \expandafter\tmp@ref\@args.}]%
}{%
    \qed\end{trivlist}%
    \egroup%@Answerbox
    \def\@tmp{}
    \ifnum \value{@prevchapter} < \value{chapter} \def\@tmp{\section*{Exercises of chapter \thechapter}\par}\fi%
    \global\setbox\temp@Answerbox\vbox{%
        \unvbox\all@Answerbox\par%
        \@tmp%
        \unvbox\temp@Exercisebox\par\unvbox\@Answerbox\vskip\z@%
    }%
    \global\setbox\all@Answerbox\copy\temp@Answerbox%
    \setcounter{@prevchapter}{\value{chapter}}
}

\newcommand{\shipoutAnswer}{\unvbox\all@Answerbox}
\makeatother

该代码是根据exerciseCTAN 中的包建模的,但我想使用定理风格的环境,并将练习语句与答案一起复制。该包没有这样做。我的代码还为每章中的答案添加了章节标题,并从答案标题到练习添加了有效的超链接(当加载 hyperref 时)。

相关内容