通过包含文件编译指令

通过包含文件编译指令

背景:

对于一个项目,我将所有标题.tex/.sty文件存储在中../../../Templates,并且所有文件都需要位于特定的相对直接位置,因此使用此相对层次结构可以强制执行该规则。

为了加快编译速度,我创建了一个预编译.fmt文件。现在要使用该文件,我可以执行以下操作之一:

  1. 在命令行中添加:

     -fmt ../../../Templates/MyPreamble
    
  2. 将以下行添加为我的 .tex 文件的第一行:

     %& ../../../Templates/MyPreamble
    

并且两种方法都可以正常工作。

问题:

我想要做的是将文件的第一行.tex作为

\input{../../../Templates/MySetup.tex}

MySetup.tex调用文件的内容.fmt如下:

%& ../../../Templates/MyPreamble

有什么办法可以做到这一点吗?

原因:

我也愿意接受任何其他建议,但我这样做的原因如下:

  1. 我使用了第一种方法,并调整了pdflatexTeXShop 中的命令以包含该指令。但是,当我在处理其他项目(例如,TeX.SE 答案)时,我不想要该预编译格式,因此需要一种方法来禁用它。因此决定不使用此方法。

  2. 我已经在第一行将所有文件设置为单个\input文件。如果我可以只更改一个文件,那么我只需更改文件即可轻松切换使用预编译格式或不使用预编译格式。是的,我可以使用 shell 脚本来更新所有文件,添加第一个注释行,但我宁愿不这样做。MySetup.texMySetup.tex

答案1

你的语法有点问题

 \input{../../../Templates/MySetup.tex}

需要\input一个带有一个参数的宏,该参数需要加载具有该定义的格式,因此您不能使用它来输入将加载该格式的文件。

您可以做的(这也是我的古老的 pre-latex2e 所做的)mylatex.ltx是重新定义事物,以便您可以拥有一个标准的乳胶前言,它将被正常读取,但您的自定义格式会\begin{document}根据需要跳转到自定义命令或注释。

如果你想保留现有的文件结构,\input那么在格式文件中只需定义

\def\input#1{\def\input{\@ifnextchar\bgroup\@iinput\@@input}}

这意味着如果你使用 latex 你的第一行

\input{foo}

将输入foo.tex,但如果使用您的自定义格式,则foo.tex不会被加载,但\input将被(重新)定义为其正常的乳胶定义,因此文件的其余部分将正常工作。

如果您执行几乎任何 tex 操作,切换格式就太晚了,因此格式规范必须在命令行或神奇的第一行注释中。

相关内容