我想为我的学生写一些教程,为此我使用exam
文档类和solution
环境。
现在的问题是我有一份声明
\printanswers
我需要对教程进行评论,并取消对解决方案的注释。
我希望有一种方法可以让我一次编译它,并且源文件(例如 tutorial.tex)会创建两个 pdf -
- tutorial.pdf (不含解决方案)
- tutorialSolution.pdf (附解决方案)
以下是我的源代码-
\documentclass{exam}
%\printanswers
\usepackage[T1]{fontenc}
\usepackage{pslatex}
\usepackage[pdftex]{color}
\usepackage[pdftex]{graphicx}
\begin{document}
\begin{questions}
\vskip 0.5 cm \question Question header \vskip 0.5cm
Question text
\begin{solution}
Solution text
\end{solution}
\end{questions}
\end{document}
感谢您提供的任何帮助。gaurav
答案1
以下是我想到的一种可用于管理此类工作流程的方法。
你创建了 3 个文件。第一个是你的主文件,tutorial.tex
例如:
\usepackage[T1]{fontenc}
\usepackage{pslatex}
\usepackage[pdftex]{color}
\usepackage[pdftex]{graphicx}
\begin{document}
\begin{questions}
\vskip 0.5 cm \question Question header \vskip 0.5cm
Question text
\begin{solution}
Solution text
\end{solution}
\end{questions}
\end{document}
另外两个是包装器。例如,这些可能是tutorialQuestions.tex
:
\documentclass{exam}
\input{tutorial}
和tutorialSolutions.tex
:
\documentclass{exam}
\printanswers
\input{tutorial}
然后,您可以单独编译tutorialSolutions.tex
和,tutorialQuestions.tex
而无需覆盖另一个版本。或者您可以使用脚本来为您管理这一点。(如何做到这一点取决于您的操作系统。)也可以使用 TeX 的各种帮助程序来完成很多工作和/或让您的 IDE 自动化操作。但是,以上是基本思想,然后您可以以最适合您首选工具的方式嵌入它。
答案2
尽管成本加运费的回答非常好,也很笼统,我也遇到了这个问题,想用一个IDE来提出一个具体的解决方案,特克斯工作室。
为了实现这一点,我定义了一个用户命令(Preferences > Build > User Commands
) 作为
"/path/to/script/compile-exam.py" %.tex -f | txs:///pdflatex | mv %.pdf %Solutions.pdf | mv %.synctex.gz %Solutions.synctex.gz | "/path/to/script/compile-exam.py" %.tex | txs:///pdflatex | txs:///view-pdf-internal "?m)Solutions.pdf"
compile-exam.py
我写的 Python 脚本在哪里(可用这里):
from argparse import ArgumentParser
import re
from shutil import copyfile
parser = ArgumentParser()
parser.add_argument('filename')
parser.add_argument('-f', '--forward', action='store_true')
args = parser.parse_args()
copyfile(args.filename, args.filename+'.bak')
basename = re.match(r".+(?=\.tex)", args.filename).group(0)
if args.forward:
contents = []
with open(args.filename, 'r') as in_file:
for line in in_file:
if r'\printanswers' in line:
contents.append('\printanswers\n')
else:
contents.append(line)
with open(args.filename, 'w') as out_file:
for line in contents:
out_file.write(line)
else:
contents = []
with open(args.filename, 'r') as in_file:
for line in in_file:
if r'\printanswers' in line:
contents.append('%\printanswers\n')
else:
contents.append(line)
with open(args.filename, 'w') as out_file:
for line in contents:
out_file.write(line)
从这里,我定义一个键盘快捷键来运行命令(Preferences > Shortcuts > Tools > User
)
使用此键盘快捷键,编译器将生成exam1.pdf
并exam1Solutions.pdf
在内置查看器中显示解决方案文件(仍然可以滚动到上次编辑的位置等)。
另请注意,您要么需要python
先调用,要么使脚本可执行,然后#!/usr/bin/python
在第一行添加类似的内容。
这显然不是一个通用的解决方案,确实需要调用外部程序,但它运行良好并且在合理的时间内。