当使用该subfiles
包时,是否有一些命令可以获取主文档的名称,即使在编译其中一个子文档时也是如此?
下面是一个 MWE,它表达了我的想法:
\RequirePackage{filecontents}
%
\begin{filecontents*}{main.tex}
\documentclass{article}
\usepackage{subfiles}
\end{filecontents*}
%
\documentclass[main.tex]{subfiles}
\begin{document}
Child document's name: \jobname % this displays 'Child document's name: <the_name_you_gave_to_this_document>
Main document's name: % <some_command> -- this should display 'Main document's name: main'
\end{document}
<some_command>
我正在寻找的命令在哪里。
答案1
您传递给类的选项subfiles
存储在 中\preamble@file
,稍后\input
由类使用。要获取文件的基本名称,您可以使用 LaTeX 的\filename@parse
,它将基本名称存储在 中\filename@base
:
\RequirePackage{filecontents}
%
\begin{filecontents*}{main.tex}
\documentclass{article}
\usepackage{subfiles}
\makeatletter
\let\noibe@ifloaded\@ifl@aded
\def\mainfilename{%
\noibe@ifloaded{cls}{subfiles}%
{\filename@parse{\preamble@file}\filename@base}
{\jobname}%
}
\makeatother
\begin{document}
Child document's name: \jobname % this displays 'Child document's name: <the_name_you_gave_to_this_document>
Main document's name: \mainfilename % -- this should display 'Main document's name: main'
\end{document}
\end{filecontents*}
%
\documentclass[main.tex]{subfiles}
\makeatletter
\let\noibe@ifloaded\@ifl@aded
\def\mainfilename{%
\noibe@ifloaded{cls}{subfiles}%
{\filename@parse{\preamble@file}\filename@base}
{\jobname}%
}
\makeatother
\begin{document}
Child document's name: \jobname % this displays 'Child document's name: <the_name_you_gave_to_this_document>
Main document's name: \mainfilename % -- this should display 'Main document's name: main'
\end{document}
该命令检查加载的类是否为subfiles
。如果是,则您位于子文件中,主文件名存储在中\preamble@file
。否则,您位于主文件中,文件名是\jobname
其本身。当您在主文件中时,该命令\preamble@file
不存在,因此该命令会检查加载了哪个类并采取相应措施。