繁体   English   中英

Emacs / AUCTeX前缀参数

[英]Emacs/AUCTeX prefix arguments

在LaTeX模式下, Cc Cc必然会:

(TeX-command-master &optional OVERRIDE-CONFIRM)

通常这个交互式函数运行一个命令,也许是一个LaTeX编译, 要求确认

tex-buf.el它写着:

如果给出前缀参数OVERRIDE-CONFIRM,则确认将取决于它是正数而不是“TeX-command-list”中的条目。

这对我来说有点神秘,并且阅读Ch v TeX-command-list没有帮助。

如何将前缀参数传递给“TeX-command-master”以避免所有确认请求?

查看Emacs的文档以了解有关前缀参数的信息。 通常,您可以使用Cu后跟数字传递命令前缀参数。 对于一位数字,您也可以输入Meta后跟数字。 因此,要将正前缀参数传递给TeX-command-master您可以键入:

M-1 Cc Cc

但是,这实际上会添加另一个迷你缓冲区确认,即关于用于编译LaTeX源的shell命令。 如果没有prefix参数,则使用与命令相关的默认值。

如果要避免有关要使用的命令的问题,可以通过以下方式将未记录的变量TeX-command-force绑定到“LaTeX”:

(setq TeX-command-force "LaTeX")

但是,这将有一个缺点,你基本上将Cc Cc绑定到“latex”命令,你不能使用任何其他命令,如“bibtex”或“view”。

除此之外,LaTeX模式不允许任何自定义Cc Cc 您最好的选择是建议函数TeX-command-query或将Cc Cc绑定到包装函数以动态设置TeX-command-force 如果您还想自动保存缓冲区,后者可能是首选选项。

我对OVERRIDE-CONFIRM位感到困惑了一段时间,并且无法弄清楚它应该如何工作。 如果你想在你的文件上自动运行Latex,而不用担心先保存它,或者确认你想要乳胶(而不是查看,bibtex等),你可以使用这样的函数:

(defun my-run-latex ()
  (interactive)
  (TeX-save-document (TeX-master-file))
  (TeX-command "LaTeX" 'TeX-master-file -1))

将它绑定到一些方便的东西,当你想使用默认的处理命令时,你仍然会有Cc Cc 如果“Latex”不是您要调用的处理器,则可能需要修改TeX-command行。

似乎OVERRIDE-CONFIRM的神秘面纱仍在继续。 与此同时,一位研究员建议,如果我们无法管理TeX-command-master ,我们可以简单地重写它。

在我的版本中,基于他的,如果未修改缓冲区,则启动外部查看器; 如果缓冲区被修改,则运行编译器。 没有确认保存或运行给定命令的所有内容。

(defun my-run-latex ()
  (interactive)
  (if (buffer-modified-p)
      (progn  
        (setq TeX-save-query nil) 
        (TeX-save-document (TeX-master-file))
        (TeX-command "LaTeX" 'TeX-master-file -1))
    (TeX-view)))

当然, my-run-latex可以将my-run-latex绑定到任何键绑定。

从用户的角度来看,这是我自己的问题的解决方案。 我是否点击关闭标签? 好吧,从好奇的家伙角度来看,我仍然有兴趣了解神秘的TeX-command-master技术TeX-command-master

如果有人碰巧知道......

PS是, TeX-save-query覆盖了保存文件请求,也使用了TeX-command-master ,即Cc Cc 但是仍然会要求您确认命令操作。

构建和查看

同样,此解决方案不是修改TeX-command-master的行为,而是重写它。 该命令的重写版本名为build-view ,遵循一个相当简单的逻辑。

  1. 如果未修改LaTeX文件缓冲区,它将运行默认查看器;
  2. 如果缓冲区是脏的,它将运行默认的LaTeX编译器,在构建之后,在默认查看器中打开输出。

这是代码:

(defun build-view ()
  (interactive)
  (if (buffer-modified-p)
      (progn  
    (let ((TeX-save-query nil)) 
    (TeX-save-document (TeX-master-file)))
    (setq build-proc (TeX-command "LaTeX" 'TeX-master-file -1))
    (set-process-sentinel  build-proc  'build-sentinel))
    (TeX-view)))

(defun build-sentinel (process event)    
  (if (string= event "finished\n") 
      (TeX-view)
    (message "Errors! Check with C-`")))

您现在可以键入Mx build-view并启动告知的构建视图过程或将其与新的键绑定关联,例如“F2”:

(add-hook 'LaTeX-mode-hook '(lambda () (local-set-key (kbd "<f2>") 'build-view)))

注意:根据Tyler的建议, TeX-save-query变量在本地更改,因此旧的Cc Cc / TeX-command-master不受影响,并将继续询问确认。

编辑此代码以使其更好或更容易阅读!

如果您只想在没有确认对话框的情况下编译乳胶源,只需将以下内容添加到.emacs:

(setq TeX-command-force "")

然后,您可以使用Cc Cc编译源代码,它不会要求确认。 此解决方案的唯一问题是您不能再更改命令,但对于大多数文档,您不会想要。 我可能会建议您同时将此添加到.emacs中以获得更大的灵活性,为您提供与前一行为相当的Cc Cc:

(define-key LaTeX-mode-map "\C-c\C-a"   
   ;;; 'a' for ask, change to anything you want 
  (lambda (arg) (interactive "P") 
    (let ((TeX-command-force nil)) 
      (TeX-command-master arg)))) 

然后,您可以处理您的文档,执行Cx Cs,Cc Cc然后使用Cc Cv查看它。 像其他人一样建议您也可以对save命令执行相同的操作并让它在保存时自动编译,但是我的一些文档在CVS中,因此我避免使用它。

感谢Ivan在这方面的一些帮助 - 不知道他是否在StackOverflow上

我认为这个问题的要点是“如何在没有所有按键和确认的情况下从AUCTeX快速编译我的TeX文档?”

我的答案是使用latexmk命令,而不是试图强迫AUCTeX这样做。

latexmk -pdf -pvc myfile.tex

latexmk将监控有问题的文件,并在保存后立即重建。 如果你使用一个好的pdf查看器,它会注意到PDF的变化并立即重新显示。 在OS X上,skim适用于此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM