AUCTeX和主文件通过* .latexmain文件的方式,比如在vim中

我正在考虑从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',则同一项目目录中的所有文件也都是'latex'(如果未明确指定),而不是'tex',因为它是为我当前设置中的一些文件定义的。

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

    看起来ffap函数有一些奇怪的行为。 当有文件dir / part-I.tex和dir / part-II.tex以及像input{dir/part-I}这样的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)
    

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

    (advice-add 'ffap-latex-mode :before-until #'(lambda (name) 
      (ffap-locate-file name 
                        '(".cls" ".sty" ".tex" "") 
                        (cons (file-name-directory TeX-master) 
                        '()))))
    
    链接地址: http://www.djcxy.com/p/33401.html

    上一篇: AUCTeX and master file by means of *.latexmain file, such as in vim

    下一篇: emacs auctex 11.88: Symbol's value as variable is void: LaTeX