如果使用 -jobname 调用 pdflatex,则宏将检索源文件的真实名称

如果使用 -jobname 调用 pdflatex,则宏将检索源文件的真实名称

这个问题引出了包中的一个新功能:
从 0.6 版开始currfile通过新的软件包选项和编译器开关支持所请求的功能-recorder。有关详细信息,请参阅马丁的回答以下。

根据文献,我推测 Martin Scharrer 的currfile包会这样做。但是,虽然它可以很好地跟踪\inputs 和\includes 上的实际文件名,但主文件的名称.tex仍然设置为\jobname

\documentclass{article}
\usepackage{currfile}

\begin{document}
  I was compiled as job \texttt{\jobname} from the file \texttt{\currfilename}.
\end{document}

如果另存为test.tex并编译,pdflatex -jobname bla test.tex输出为:

在此处输入图片描述

即使编译也pdflatex -jobname bla "\input{test.tex}"不会改变输出。

答案1

随着呼叫

pdflatex -jobname bla "\RequirePackage{currfile}\input{test}"

\currfilename打印test.tex

在执行之前,必须先改变\input(实际上是)的含义。\@iinput

答案2

你说得对,我的currfile包应该会给你真正的文件名,但是没有办法直接从 TeX 读取真正的主文件名。因此我不得不使用\jobname

但是,我现在找到了一种方法,即读取编译器开关\jobname.fls生成的文件-recorder。此功能自 2012/05/06 的 v0.6 版本开始可用。请注意,-recorder已被使用latexmk,因此如果您正在使用它,则无需额外努力。

要启用此功能,只需加载currfile选项即可realmainfile。相关abspath选项会为您提供所有输入文件的绝对路径,它还将启用realmainfile

% 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]

\begin{document}

Jobname: \jobname

Main file (path): \currfilepath

\end{document}

如果您不需要完整的功能currfile(它将为每个输入文件更新几个宏),那么您可以直接使用子包currfile-abspath

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

\usepackage{currfile-abspath}

\getmainfile % In preamble or body

\begin{document}

Jobname: \jobname

Main file: \themainfile

\end{document}

相关内容