编写带有考试文档类的教程(带或不带解决方案)

编写带有考试文档类的教程(带或不带解决方案)

我想为我的学生写一些教程,为此我使用exam文档类和solution环境。

现在的问题是我有一份声明

\printanswers

我需要对教程进行评论,并取消对解决方案的注释。

我希望有一种方法可以让我一次编译它,并且源文件(例如 tutorial.tex)会创建两个 pdf -

  1. tutorial.pdf (不含解决方案)
  2. 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.pdfexam1Solutions.pdf在内置查看器中显示解决方案文件(仍然可以滚动到上次编辑的位置等)。

另请注意,您要么需要python先调用,要么使脚本可执行,然后#!/usr/bin/python在第一行添加类似的内容。

这显然不是一个通用的解决方案,确实需要调用外部程序,但它运行良好并且在合理的时间内。

相关内容