由于我的前言中的一些命令(\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}