AUCTeX和主文件通过* .latexmain文件,例如在vim-latex中

时间:2015-04-19 10:55:04

标签: vim emacs latex elisp auctex

我正在考虑从vim + latex-vim模块切换到emacs + evil + auctex等模块来编辑乳胶文件。我对emacs来说是全新的。

我为vim-latex编写了很多乳胶项目,在项目目录的不同层面上有许多文件。 在vim-latex中,主文件由文件{master-file-name} .latexmain定义,例如,如果主文件是main.tex,则在同一目录中有main.tex.latexmain。我希望在emacs中有类似的行为(理想情况下,当必要时使用emacs变量方法完成,例如,同一项目目录中的几个主文件)。

下面是找到主文件名称的代码(这是我的第一个elisp代码,所以非常欢迎任何关于它如何改进的评论)

(defun texmode-find-master-file ()
  "Finds the master file for TeX/LaTeX project by searching for '{file-name}.latexmain' in the rood directories"

  (let (foundFiles (currPath (expand-file-name "./")) result)
    (while (and (not foundFiles) (not (equal currPath "/")) )
      (setq foundFiles (directory-files currPath t ".*\.latexmain"))
      (setq currPath (expand-file-name (concat currPath "../")))
      )
    (setq result (file-name-sans-extension (car foundFiles)))
    (and (file-exists-p result) result)
    )
  )

但是,我无法找到可以插入此代码的位置来修改在AUCTeX中查找主文件的行为。但是可能有一种更简单或更美丽的方式吗?

相关问题是

  • 为了从主路径目录而不是当前目录开始(通过find-file-at-point或类似方式)\input{tex/blabla2.tex},我应该修改什么?例如,我有三个文件:projdir / main.tex,projdir / tex / blabla1.tex,projdir / tex / blabla2.tex;如果我正在编辑blabla2.tex并且\input{tex/blabla1.tex}我该如何打开此文件?
  • 如何强制AUCTeX定义与主文件中相同类型的文档,例如,如果主文件类型是' latex',那么同一项目目录中的所有文件也是'胶乳' (如果没有明确说明),不是' tex'因为它是为我当前设置中的某些文件定义的。

1 个答案:

答案 0 :(得分:2)

我终于找到了一些答案。下面的代码解决了一些问题(可以放在.emacs文件中)。我们还更改了默认目录,以强制find-file-at-point(ffap)从master-file目录开始查找文件。

似乎ffap函数有点奇怪的行为。当存在文件dir / part-I.tex和dir / part-II.tex以及类似\input{dir/part-I}的输入时,函数ffap不希望找到dir / part-I.tex,而使用{{1}它工作得很好。但这不是一个大问题。

最后,我仍然不知道如何根据主文件的类型选择文件类型......

\input{dir/part-II}

对于从master-dir文件以乳胶模式工作的ffap,我们使用以下命令:

(defun TeX-find-master-file ()
  "Finds the master file for TeX/LaTeX project 
  by searching for '{file-name}.latexmain' in the good directories"
  (let (foundFiles (currPath (expand-file-name "./")) foundFile)
    (while (and (not foundFiles) (not (equal currPath "/")) )
       (setq foundFiles (directory-files currPath t ".*\.latexmain"))
       (setq currPath (expand-file-name (concat currPath "../"))))
    (and
      (setq foundFile (car foundFiles))
      ; removing .latexmain extension
      (setq foundFile (file-name-sans-extension foundFile)) 
      (file-exists-p foundFile)
      foundFile)))

(defun TeX-set-master-file (&optional ignore1 ignore2 ignore3)
  "Finds the master file by means of TeX-find-master-file 
  and set TeX-master to it value"
  (setq TeX-master (or (TeX-find-master-file) TeX-master)))

;Finally we change the func TeX-master-file from AUCTeX
;  in order to first apply the logic with *.latexmain
;  and only then to apply the standard logic of AUCTeX
(advice-add 'TeX-master-file :before #'TeX-set-master-file)