如何在 latex 文件中测试 --jobname 编译选项

如何在 latex 文件中测试 --jobname 编译选项

由于我的前言中的一些命令(\synctex=1,,\makenomenclature\settocdepth{subsection}与程序不完全兼容--jobname,我想在这三行之前添加一个测试来检测--jobname在编译时是否指定。你知道做这种测试的方法吗?

或者也许您有另一种方法来编译我的文件,无论是否--jobname带有选项......

答案1

我应该强调,这只有当\jobname不等于文件名时才有效。

我知道的唯一方法是将文档名称硬编码到文件中。例如,如果您的文件名为,test.tex您可以进行以下测试:

\def\myjob{test}
\edef\myjob{\meaning\myjob}
\edef\tmpjob{\jobname}
\edef\tmpjob{\meaning\tmpjob}
\ifx\myjob\tmpjob
  \message{My own job: \jobname}
\else
  \message{Other job: \jobname}
\fi

之前\documentclass。这样你就知道你是否使用了你的常规的作业名称或已提供。我不认为您可以自动完成此操作,尽管我可能是错的。

执行上述操作的原因\edef\jobname是字符,\myjob是字母。因此,您需要将它们转移到同一个宏中,由\edef和完成\meaning。如果有疑问,您可以\message{\meaning}在每个步骤中执行 以查看执行的操作。

答案2

v0.6 版currfile现在可以使用编译器参数检测真正的主文件-recorder。您可以使用以下命令测试此名称是否与作业名称相同\ifcurrfile...,从而确定作业名称是否已更改:

% Compile with: (pdf|xe|lua|)latex -recorder filename
% Needs two runs with MiKTeX, one with TeX Live
\documentclass{article}

\usepackage[realmainfile]{currfile}[2012/05/06]

\ifcurrfile{\themainfile}{\jobname.tex}{%
%or: \ifcurrfilebase{\jobname}{%
    \message{No \string\jobname\space used!}%
}{%
    \message{\string\jobname\space was used!}%
}


\begin{document}
 ...
\end{document}

相关内容