我有一系列讲义,其中散布着练习。我想为这些练习提供一个密钥,该密钥是与编译的笔记分开的文件,但其对应的 TeX 代码与笔记的代码相同,并指向练习所属的章节/部分。
例如,如果讲座的代码如下所示:
\begin{document}
\chapter{Lecture 1}
...
\begin{exercise}
What is 2 + 2?
\end{exercise}
\begin{solution}
4
\end{solution}
...
\begin{exercise}
What is 2 * 3?
\end{exercise}
\begin{solution}
6
\end{solution}
\chapter{Lecture 2}
...
\begin{exercise}
How many Canadian provinces are there?
\end{exercise}
\begin{solution}
10
\end{solution}
...
\begin{exercise}
What is the capital of Nova Scotia?
\end{exercise}
\begin{solution}
Halifax
\end{solution}
\end{document}
然后,与讲义相对应的 PDF 中将包含带有练习的讲座 1 和 2,但没有解决方案,但有单独的 PDF 包含讲座 1 中的练习的解决方案,还有另一个 PDF 包含讲座 2 中的解决方案,并且这些 PDF 会知道显示的解决方案来自讲座 1 中的练习 2,依此类推。
我能想到的最明显的解决方案是使用etoolbox
切换按钮仅显示带有练习的笔记或仅显示解决方案,但这样一来,我就必须\iftoggle
在各处手动创建每个讲座解决方案的 PDF,如果有几个讲座或者我需要回去进行更改以更改问题或讲座的编号,这很快就会变得乏味。
(如果在 LaTeX 中没有好的方法来做到这一点,那么涉及 shell 脚本的非 TeX 解决方案对我来说也是可以的。)
答案1
这是一种使用的方法答案包装和\includeonly
主(驱动)文件myfile.tex
\documentclass{book}
\usepackage{answers}
\newtheorem{exercise}{Exercise}[chapter]
\Newassociation{solution}{Soln}{mycor}
\renewcommand{\Solnlabel}[1]{\textbf{Answer #1}}
\includeonly{Lectures}
%\includeonly{Lecture1}
%\includeonly{Lecture2}
\begin{document}
\include{Lectures}
\include{Lecture1}
\include{Lecture2}
\end{document}
主(源)文件Lectures.tex
\Opensolutionfile{mycor}[Lecture1]
\chapter{Lecture 1}
...
\begin{exercise}
What is 2 + 2?
\begin{solution}
4
\end{solution}
\end{exercise}
...
\begin{exercise}
What is 2 * 3?
\begin{solution}
6
\end{solution}
\end{exercise}
\Closesolutionfile{mycor}
\Opensolutionfile{mycor}[Lecture2]
\chapter{Lecture 2}
...
\begin{exercise}
How many Canadian provinces are there?
\begin{solution}
10
\end{solution}
\end{exercise}
...
\begin{exercise}
What is the capital of Nova Scotia?
\begin{solution}
Halifax
\end{solution}
\end{exercise}
\Closesolutionfile{mycor}