Учебники по написанию экзаменационных документов с решениями и без них

Учебники по написанию экзаменационных документов с решениями и без них

Я хотел бы написать несколько учебных пособий для своих студентов, и для этого я использую 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}

спасибо за любую помощь, которую вы можете оказать. Гаурав

решение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

Покаcfrответ очень хороший и общий, я тоже столкнулся с этой проблемой и хотел представить конкретное решение с использованием одной IDE,TeXstudio.

Чтобы достичь этого, я определилпользовательская команда( 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отобразит файл Solutions во встроенном средстве просмотра (с возможностью прокрутки до места последнего редактирования и т. д.).

Также обратите внимание, что вам нужно будет либо pythonсначала вызвать, либо сделать скрипт исполняемым и добавить что-то вроде этого #!/usr/bin/pythonв первой строке.

Это, конечно, не универсальное решение и требует вызова внешней программы, но оно работает хорошо и за разумное время.

Связанный контент