我正在尝试为讲义创建练习和答案环境,在其中键入\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
该代码是根据exercise
CTAN 中的包建模的,但我想使用定理风格的环境,并将练习语句与答案一起复制。该包没有这样做。我的代码还为每章中的答案添加了章节标题,并从答案标题到练习添加了有效的超链接(当加载 hyperref 时)。