Filehook,包含更多文件

Filehook,包含更多文件

根据我以前的问题,我现在有以下代码(片段):

\usepackage{currfile}
\usepackage{filehook}
\usepackage{environ}
\usepackage{amsmath}
\def\Introduction{Introduction}


\NewEnviron{introduction}{%
      \expandafter\long\expandafter\xdef\csname \currfilebase \Introduction \endcsname{\expandafter\unexpanded\expandafter{\BODY}}%
}%


\AtEndOfIncludeFile{Fourier}{%
  \section{\currfilebase}%
  \subsection{Introduction}%
  \csname \currfilebase \Introduction \endcsname%
 }%

然后我使用\include{Fourier},这个就成功了。但是我如何才能让它在多个文件上工作而不复制粘贴\AtEndOfIncludeFile部分?如果我这样做对全部文件我得到了相当奇怪的行为,所以我想手动添加文件。最好只在一个地方,但你不能拥有一切 :-)。

也就是说,我想包含更多文件,而\include{Pie}不必使用

\AtEndOfIncludeFile{Pie}{%
  \section{\currfilebase}%
  \subsection{Introduction}%
  \csname \currfilebase \Introduction \endcsname%
 }%

这只是逐字逐句的复制……

编辑:我有个主意。也许我可以把所有包含的内容放在一个文件夹中Includes,然后使用类似如何迭代文件夹中文件的名称。包含该文件夹中的所有文件(这样做没有坏处,因为它们仅在我使用主文件打印的环境中提供内容)。唯一的问题是:顺序。在这种情况下我该如何设置顺序?

答案1

我认为仅仅迭代子目录中的所有文件会占用太多的灵活性。您可以做的是\include对这些文件中的每一个文件使用\AtEndOfIncludes,然后检查它是否是代表此类子部分元信息的文件。例如:

\AtEndOfIncludes{%
    \ifcurrfiledir{/mydirectory/for/subsections}{%
        \section{\currfilebase}%
        \subsection{Introduction}%
        \csname \currfilebase \Introduction \endcsname%
  }{}%
}%

请注意,该路径取决于您的编译设置,并且可能是相对路径。要始终使用绝对路径,请参阅记录currfile作为abspath选项。

另一件可能有用的事情是检查\currfilebase\Introduction宏是否已定义:

\AtEndOfIncludes{%
    \ifcsname \currfilebase \Introduction \endcsname
        \section{\currfilebase}%
        \subsection{Introduction}%
        \csname \currfilebase \Introduction \endcsname%
        \subsection{Methods}%
        \csname \currfilebase \Methods \endcsname%
    \fi
}%

也可以看看常见问题解答以供参考。

如果您需要更复杂的行为,您当然可以结合这些方法。

相关内容