输出 PDF 文件的条件命名

输出 PDF 文件的条件命名

Solved Exam.pdf我的目标是当为真时输出\ifSolutionThe 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。这就是我要做的。

  1. 将以下文件保存到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"
)
  1. 在 TeXStudio 中,打开设置页面,确保“显示高级选项”复选框已勾选。在“构建”选项卡中,添加一个写入 的用户命令cmd /c compile.cmd %

  2. \ifSolution按如下方式重构您的文档。我所做的基本上是将的值写入\jobname-mode.txtcmd脚本将读取此信息并相应地执行操作。

\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}
  1. 现在,您可以通过单击菜单项工具->用户-><您的命令名称>或使用其相应的热键来编译文档。

相关内容