Solved Exam.pdf
我的目标是当为真时输出\ifSolution
,The Exam.pdf
当\ifSolution
为假时输出。
然而,我不知道这个答案\jobname
与此相关,因为它只影响文件的名称,因此改变所有输出文件aux
。
PS 我正在用来lualatex
编译。
\newif\ifSolution
\ifSolution
% https://tex.stackexchange.com/a/252346/2288
\edef\TeXjobname{\jobname}
\edef\jobname{\detokenize{Solved Exam}}% <<< the output file is not "Solved Exam.pdf"
\documentclass[answers]{exam}
\else
% https://tex.stackexchange.com/a/252346/2288
\edef\TeXjobname{\jobname}
\edef\jobname{\detokenize{Exam}}% <<< the output file is not "Exam.pdf"
\documentclass{exam}
\fi
\begin{document}
\begin{questions}
\question a question
\begin{solution}
the solution
\end{solution}
\end{questions}
\end{document}
答案1
我假设您在 Windows 上使用 TeXStudio。这就是我要做的。
- 将以下文件保存到
compile.cmd
项目文件夹。非常重要的提醒:在编译文档之前请备份必要的文件!此脚本将在编译 TeX 文档之前自动删除“Solved Exam.pdf”和“The Exam.pdf”。请确保备份所有内容!
@echo off
echo cleaning old pdf files
del /Q "Solved Exam.pdf" "The Exam.pdf"
echo compiling new pdf file
lualatex.exe -synctex=1 -interaction=nonstopmode %1.tex
echo reading file mode
set filename="%1-mode.txt"
echo reading %filename%
set /p mode=<%filename%
echo the output indicates %mode% mode
IF "%mode%" EQU "exam" (
copy %1.pdf "The Exam.pdf"
echo output copied to "The Exam.pdf"
)
IF "%mode%" EQU "solution" (
copy %1.pdf "Solved Exam.pdf"
echo output copied to "Solved Exam.pdf"
)
在 TeXStudio 中,打开设置页面,确保“显示高级选项”复选框已勾选。在“构建”选项卡中,添加一个写入 的用户命令
cmd /c compile.cmd %
。\ifSolution
按如下方式重构您的文档。我所做的基本上是将的值写入\jobname-mode.txt
。cmd
脚本将读取此信息并相应地执行操作。
\documentclass{exam}
\usepackage{expl3}
\usepackage{etoolbox}
\newif\ifSolution
\ExplSyntaxOn
\AtEndDocument{
\iow_open:Nn \g_tmpa_iow {\jobname-mode.txt}
\ifSolution
\iow_now:Nn \g_tmpa_iow {solution}
\else
\iow_now:Nn \g_tmpa_iow {exam}
\fi
\iow_close:N \g_tmpa_iow
}
\ExplSyntaxOff
\Solutionfalse
\begin{document}
\begin{questions}
\question a question
\begin{solution}
the solution
\end{solution}
\end{questions}
\end{document}
- 现在,您可以通过单击菜单项工具->用户-><您的命令名称>或使用其相应的热键来编译文档。