Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \documentclass[answers]{exam}
- \usepackage{expl3}
- \ExplSyntaxOn
- % Flag to enable Latexmk
- \bool_new:N \g__diaa_use_latexmk_bool
- % Uncomment the following line to use Latexmk
- % \bool_gset_true:N \g__diaa_use_latexmk_bool
- % Flag to output two files
- \bool_new:N \g__diaa_build_two_files_bool
- \legacy_if:nT { printanswers }
- {
- \bool_gset_true:N \g__diaa_build_two_files_bool
- }
- % Uncomment the following line to force build two files
- % \bool_gset_true:N \g__diaa_build_two_files_bool
- % Answers jobname variable
- \str_new:N \g__diaa_solved_jobname_str
- % LaTeX engine and options variables
- \str_new:N \g__diaa_latex_cmd_str
- \str_const:Nn \g__diaa_latex_options {-interaction=nonstopmode }
- % Latexmk engine and options variables
- \str_const:Nn \g__diaa_latexmk_str { latexmk }
- \str_new:N \g__diaa_latexmk_engine_str
- % Final build commands
- \str_new:N \g__diaa_cmd_questions_str
- \str_new:N \g__diaa_cmd_solved_str
- % Build the answer jobname
- \cs_new:Nn \__diaa_build_solved_jobname:
- {
- \str_gset:Nx \g__diaa_solved_jobname_str { \c_sys_jobname_str }
- \str_gremove_all:Nn \g__diaa_solved_jobname_str { " }
- \str_gput_left:Nn \g__diaa_solved_jobname_str { "[solved]~ }
- \str_gput_right:Nn \g__diaa_solved_jobname_str { " }
- }
- % Set engines based on current engine
- \cs_new:Nn \__diaa_set_engine:
- {
- \sys_if_engine_luatex:T
- {
- \str_gset:Nn \g__diaa_latex_cmd_str { lualatex }
- \str_gset:Nn \g__diaa_latexmk_engine_str { -lualatex ~ -g ~ -interaction=nonstopmode }
- }
- \sys_if_engine_pdftex:T
- {
- \str_gset:Nn \g__diaa_latex_cmd_str { pdflatex }
- \str_gset:Nn \g__diaa_latexmk_engine_str { -pdf ~ -g ~ -interaction=nonstopmode }
- }
- \sys_if_engine_xetex:T
- {
- \str_gset:Nn \g__diaa_latex_cmd_str { xelatex }
- \str_gset:Nn \g__diaa_latexmk_engine_str { -xelatex }
- }
- }
- % Build LaTeX questions command
- \cs_new:Nn \__diaa_build_latex_questions_cmd:
- {
- \str_gset:Nx \g__diaa_cmd_questions_str
- {
- \g__diaa_latex_cmd_str \c_space_tl
- -jobname=\c_sys_jobname_str \c_space_tl
- \g__diaa_latex_options \c_space_tl
- "\string\AtBeginDocument{\string\printanswersfalse}" \c_space_tl
- "\string\input{\c_sys_jobname_str}"
- }
- }
- % Build LaTeX answers command
- \cs_new:Nn \__diaa_build_latex_solved_cmd:
- {
- \str_gset:Nx \g__diaa_cmd_solved_str
- {
- \g__diaa_latex_cmd_str \c_space_tl
- -jobname=\g__diaa_solved_jobname_str \c_space_tl
- \g__diaa_latex_options \c_space_tl
- "\string\AtBeginDocument{\string\printanswerstrue}" \c_space_tl
- "\string\input{\c_sys_jobname_str}"
- }
- }
- % Build Latexmk questions command
- \cs_new:Nn \__diaa_build_latexmk_questions_cmd:
- {
- \str_gset:Nx \g__diaa_cmd_questions_str
- {
- \g__diaa_latexmk_str \c_space_tl
- \g__diaa_latexmk_engine_str \c_space_tl
- -usepretex="\string\AtBeginDocument{\string\printanswersfalse}" \c_space_tl
- \c_sys_jobname_str
- }
- }
- % Build Latexmk answers command
- \cs_new:Nn \__diaa_build_latexmk_solved_cmd:
- {
- \str_gset:Nx \g__diaa_cmd_solved_str
- {
- \g__diaa_latexmk_str \c_space_tl
- \g__diaa_latexmk_engine_str \c_space_tl
- -usepretex="\string\AtBeginDocument{\string\printanswerstrue}" \c_space_tl
- -jobname=\g__diaa_solved_jobname_str \c_space_tl
- \c_sys_jobname_str
- }
- }
- % Build the files
- \sys_if_shell_unrestricted:T
- {
- % Set up engines
- \__diaa_set_engine:
- % Build answers jobname
- \__diaa_build_solved_jobname:
- % Set up compile commands
- \bool_if:NTF \g__diaa_use_latexmk_bool
- {
- \__diaa_build_latexmk_questions_cmd:
- \__diaa_build_latexmk_solved_cmd:
- }
- {
- \__diaa_build_latex_questions_cmd:
- \__diaa_build_latex_solved_cmd:
- }
- % Build questions
- \sys_shell_now:x
- {
- \str_use:N \g__diaa_cmd_questions_str
- }
- % Build answers
- \bool_if:NT \g__diaa_build_two_files_bool
- {
- \sys_shell_now:x
- {
- \str_use:N \g__diaa_cmd_solved_str
- }
- }
- \stop
- }
- \ExplSyntaxOff
- \begin{document}
- \begin{questions}
- \question One of these things is not like the others; one of these things is
- not the same. Which one is different?
- \begin{oneparchoices}
- \choice John
- \choice Paul
- \choice George
- \choice Ringo
- \end{oneparchoices}
- \begin{solution}
- the solution
- \end{solution}
- \end{questions}
- \end{document}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement