背景:
对于一个项目,我将所有标题.tex
/.sty
文件存储在中../../../Templates
,并且所有文件都需要位于特定的相对直接位置,因此使用此相对层次结构可以强制执行该规则。
为了加快编译速度,我创建了一个预编译.fmt
文件。现在要使用该文件,我可以执行以下操作之一:
在命令行中添加:
-fmt ../../../Templates/MyPreamble
将以下行添加为我的 .tex 文件的第一行:
%& ../../../Templates/MyPreamble
并且两种方法都可以正常工作。
问题:
我想要做的是将文件的第一行.tex
作为
\input{../../../Templates/MySetup.tex}
MySetup.tex
调用文件的内容.fmt
如下:
%& ../../../Templates/MyPreamble
有什么办法可以做到这一点吗?
原因:
我也愿意接受任何其他建议,但我这样做的原因如下:
我使用了第一种方法,并调整了
pdflatex
TeXShop 中的命令以包含该指令。但是,当我在处理其他项目(例如,TeX.SE 答案)时,我不想要该预编译格式,因此需要一种方法来禁用它。因此决定不使用此方法。我已经在第一行将所有文件设置为单个
\input
文件。如果我可以只更改一个文件,那么我只需更改文件即可轻松切换使用预编译格式或不使用预编译格式。是的,我可以使用 shell 脚本来更新所有文件,添加第一个注释行,但我宁愿不这样做。MySetup.tex
MySetup.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 操作,切换格式就太晚了,因此格式规范必须在命令行或神奇的第一行注释中。