我过去经常将大部分文件放在单独的分支文件,然后将/include
它们放在主树文档。当然,我不需要为所有单独的文件编写序言。
在我的 AUCTeX 偏好设置中我设置
;; " expands into csquotes macros
(setq LaTeX-csquotes-open-quote "\\enquote{"
LaTeX-csquotes-close-quote "}")
但我仍然无法从中受益分支文件,因为它们没有前言也没有\usepackage{csquotes}
命令。
是否有任何解决方法,让 AUCTeX 首选项适用于所有 .tex 文档,而不仅仅是csquote
明确指示包的地方?
答案1
正如 AUCTeX 没有实际的方法知道哪个文件是另一个文件的“父文件”,如果没有帮助,它也无法知道您已加载特定包。最好的办法是利用设置Local Variables
,该设置应出现在每个文件的末尾(或非常接近末尾)。以下内容将告诉 AUCTeX 该文件确实是主文件(在没有任何其他信息的情况下它将假定它是主文件):
%%% Local Variables:
%%% TeX-master: "master"
%%% End:
或者:
%%% Local Variables:
%%% TeX-master: t
%%% End:
现在,如果您有\include
d 或\input
ed 文件,则需要告诉 AUCTeX 这种关系。假设您的主文件被调用maindoc.tex
,并且它包含一个名为 的文件chapter01.tex
;那么在 中chapter01.tex
,您可以:
%%% Local Variables:
%%% TeX-master: "maindoc"
%%% End:
现在 AUCTeX 应该知道,当您要求运行 LaTeX 或 BibTeX(等)时,它应该运行命令maindoc
,而不是chapter01
。它还应该意识到主文件已加载csquotes
并允许您访问这些命令。
当然,如果你正在使用emacs
,你需要在中设置一些东西.emacs
。我在这方面使用了,例如:
;; AUCTeX + Reftex
(setq TeX-parse-self t) ; Enable parse on load
(setq TeX-auto-save t) ; Enable parse on save
(setq-default TeX-master nil) ; Query for master file <-- this one is key for this question
;; Turn on RefTeX for AUCTeX
(add-hook 'TeX-mode-hook 'turn-on-reftex)
(setq reftex-enable-partial-scans t)
(setq reftex-save-parse-info t)
(setq reftex-use-multiple-selection-buffers t)
一般来说,局部变量非常有用。例如,你可以设置要使用的 TeX 引擎;也许你想lualatex
在这个文件上使用:
%%% TeX-engine: luatex
或者您想要哪种模式(相当多余,但是):
%%% mode: latex
%%% mode: flyspell
%%% TeX-PDF-mode: t
...等等。有很多选择。
C-c C-n
最后要注意的一点是:如果在 AUCTeX 已经解析文件后手动添加这些变量,则直到您重新打开文件或使用强制 emacs 重新解析缓冲区时才会注意到更改。