Following up this answer to my previous question, I have the following problems to fix:
1- If the answers
option is disabled, I need setting twofilestrue
to generate only the exam without the solution.
2- When using lualatex
(i.e. \latexmkiffalse
) and the option answers
is enabled, I can't generate any pdf file. It goes into an endless compilation loop.
\documentclass{exam}
\usepackage{expl3}
\newif\iftwofiles
\twofilesfalse% false to print one file , true for both at a time
\newif\iflatexmkif
\latexmkiffalse% true to use latexmk , false to use lualatex
\ExplSyntaxOn
\str_new:N \g__diaa_solved_jobname_str
\iflatexmkif
\str_new:N \l__diaa_latexmk_engine_str
\str_const:Nn \l__diaa_latexmk { latexmk }
\else
\str_const:Nn \l__diaa_latex_cmd { lualatex }
\str_const:Nn \l__diaa_latex_options { -synctex=1 ~ -interaction=nonstopmode ~ -shell-escape }
\fi
\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 { " }
}
\sys_if_shell_unrestricted:T
{
\iflatexmkif
\sys_if_engine_luatex:T
{ \str_set:Nn \l__diaa_latexmk_engine_str { -lualatex ~ -g ~ -interaction=nonstopmode } }
\sys_if_engine_pdftex:T
{ \str_set:Nn \l__diaa_latexmk_engine_str { -pdf } }
\sys_if_engine_xetex:T
{ \str_set:Nn \l__diaa_latexmk_engine_str { -xelatex } }
\iftwofiles
\__diaa_build_solved_jobname:
\sys_shell_now:x
{% printing the solution
\l__diaa_latexmk \c_space_tl
\l__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
}
\sys_shell_now:x
{% printing the exam
\l__diaa_latexmk \c_space_tl
\l__diaa_latexmk_engine_str \c_space_tl
-usepretex="\string\AtBeginDocument{\string\printanswersfalse}" \c_space_tl
\c_sys_jobname_str
}
\stop
\else % one file
\legacy_if:nT { printanswers }
{
\__diaa_build_solved_jobname:
\sys_shell_now:x
{
\l__diaa_latexmk \c_space_tl
\l__diaa_latexmk_engine_str \c_space_tl
-jobname=\g__diaa_solved_jobname_str \c_space_tl
\c_sys_jobname_str
}
\stop
}
\fi
\else % lualatex
\iftwofiles
\__diaa_build_solved_jobname:
\sys_shell_now:x
{% printing the solution
\l__diaa_latex_cmd \c_space_tl
-jobname=\g__diaa_solved_jobname_str \c_space_tl
\l__diaa_latex_options \c_space_tl
"\string\AtBeginDocument{\string\printanswerstrue}" \c_space_tl
"\string\input{\c_sys_jobname_str}"
}
\sys_shell_now:x
{% printing the exam
\l__diaa_latex_cmd \c_space_tl
-jobname=\c_sys_jobname_str \c_space_tl
\l__diaa_latex_options \c_space_tl
"\string\AtBeginDocument{\string\printanswersfalse}" \c_space_tl
"\string\input{\c_sys_jobname_str}"
}
\stop
\else % one file
\legacy_if:nT { printanswers } % if answers is enabled
{
\__diaa_build_solved_jobname:
\sys_shell_now:x
{
\l__diaa_latex_cmd \c_space_tl
\l__diaa_latex_options \c_space_tl
-jobname=\g__diaa_solved_jobname_str \c_space_tl
\c_sys_jobname_str
}
\stop
}
\fi
\fi
}
\ExplSyntaxOff
\begin{document}
\begin{questions}
\question some question
\begin{solution}
the solution
\end{solution}
\end{questions}
\end{document}
\jobname
).