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

AUCTeX和主文件通过*.latexmain文件,如在vim latex中,vim,emacs,latex,elisp,auctex,Vim,Emacs,Latex,Elisp,Auctex,我正在考虑从vim+latex vim模块切换到emacs+evil+auctex等模块来编辑latex文件。我对emacs是全新的 我有很多为vim latex编写的latex项目,在项目目录的不同级别上有许多文件。 在vim latex中,主文件由文件{master file name}.latexmain定义,例如,如果主文件是main.tex,则在同一目录中有main.tex.latexmain。我希望在emacs中有类似的行为(当需要时,理想情况下使用emacs变量方法来实现,例如,同

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

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

下面是查找主文件名的代码(这是我的第一个elisp代码,因此欢迎对如何改进它提出任何意见)

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

相关问题如下:

  • 为了从主路径目录而不是当前目录开始打开(通过在点或类似位置查找文件)
    \input{tex/blabla2.tex}
    ,我应该修改什么?例如,我有三个文件:projdir/main.tex、projdir/tex/blabla1.tex、projdir/tex/blabla2.tex;如果我正在编辑blabla2.tex,并且存在
    \input{tex/blabla1.tex}
    如何打开此文件
  • 如何强制AUCTeX定义与主文件中相同类型的文档,例如,如果主文件类型为“latex”,则同一项目目录中的所有文件也是“latex”(如果未明确指定),而不是“tex”,因为它是为我当前设置中的某些文件定义的

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

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

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

      (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)
      
      对于从主目录文件在latex模式下工作的ffap,我们使用以下命令:

      (advice-add 'ffap-latex-mode :before-until #'(lambda (name) 
        (ffap-locate-file name 
                          '(".cls" ".sty" ".tex" "") 
                          (cons (file-name-directory TeX-master) 
                          '()))))
      

      非常感谢。这正是我从vim切换到SpaceMac后所寻找的!
      (advice-add 'ffap-latex-mode :before-until #'(lambda (name) 
        (ffap-locate-file name 
                          '(".cls" ".sty" ".tex" "") 
                          (cons (file-name-directory TeX-master) 
                          '()))))