
Gostaria de escrever alguns tutoriais para meus alunos, e para isso estou utilizando a exam
classe document e o solution
ambiente.
agora o problema é que tenho uma declaração
\printanswers
que preciso comentar para o tutorial e descomentar para a solução.
Eu esperava que houvesse uma maneira de compilá-lo uma única vez, e o arquivo de origem (digamos tutorial.tex) criasse dois PDFs -
- tutorial.pdf (sem soluções)
- tutorialSolution.pdf (com soluções)
A seguir está meu código fonte -
\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}
obrigado por qualquer ajuda que você possa fornecer. Gaurav
Responder1
Aqui está o que eu tinha em mente para um método que você pode usar para gerenciar esse tipo de fluxo de trabalho.
Você cria 3 arquivos. O primeiro é o seu arquivo principal, tutorial.tex
digamos:
\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}
Os outros dois são invólucros. Por exemplo, estes podem ser tutorialQuestions.tex
:
\documentclass{exam}
\input{tutorial}
e tutorialSolutions.tex
:
\documentclass{exam}
\printanswers
\input{tutorial}
Você pode então compilar tutorialSolutions.tex
separadamente tutorialQuestions.tex
sem substituir a outra versão. Ou você pode usar um script para gerenciar isso para você. (Como fazer isso depende do seu sistema operacional.) Também é possível usar vários auxiliares com o TeX para fazer muito disso e/ou fazer com que seu IDE automatize as coisas. No entanto, o que foi dito acima é a ideia básica que você incorpora da maneira que melhor se adapta às suas ferramentas preferidas.
Responder2
Enquantocfra resposta do é muito boa e genérica, também me deparei com esse problema e queria apresentar uma solução específica usando um IDE,TeXstudio.
Para conseguir isso, defini umcomando do usuário( Preferences > Build > User Commands
) como
"/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"
onde compile-exam.py
está um script python que escrevi (disponívelaqui):
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)
A partir daqui, defino um atalho de teclado para executar o comando ( Preferences > Shortcuts > Tools > User
)
Usando este atalho de teclado, o compilador produzirá exam1.pdf
e exam1Solutions.pdf
exibirá o arquivo Solutions no visualizador integrado (ainda com a capacidade de rolar até o local da última edição, etc.).
Observe também que você precisará chamar python
primeiro ou tornar o script executável e adicionar algo como #!/usr/bin/python
na primeira linha.
Obviamente, esta não é uma solução geral e requer a chamada de um programa externo, mas funciona bem e em um período de tempo razoável.