Emacs/AUCTeX前缀参数

Emacs/AUCTeX前缀参数,emacs,latex,elisp,auctex,Emacs,Latex,Elisp,Auctex,在乳胶模式下C-C C-C绑定到: (TeX-command-master &optional OVERRIDE-CONFIRM) 通常,这个交互函数运行一个命令,可能是一个LaTeX编译,请求确认 在tex buf.el中,其内容如下: 如果给出了前缀参数OVERRIDE-CONFIRM,则将进行确认 依赖于它是正数而不是“TeX命令列表”中的条目 这对我来说有点神秘,阅读C-hvtex命令列表没有帮助 如何将前缀参数传递给“TeX command master”以避免所有确认请求?

在乳胶模式下
C-C C-C
绑定到:

(TeX-command-master &optional OVERRIDE-CONFIRM)
通常,这个交互函数运行一个命令,可能是一个LaTeX编译,请求确认

tex buf.el
中,其内容如下:

如果给出了前缀参数OVERRIDE-CONFIRM,则将进行确认 依赖于它是正数而不是“TeX命令列表”中的条目

这对我来说有点神秘,阅读
C-hvtex命令列表
没有帮助

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

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

M-1C-C-C

但是,这实际上会添加另一个minibuffer确认,即关于用于编译LaTeX源代码的shell命令。如果没有prefix参数,则将使用依赖于命令的默认值

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

但是,这样做的缺点是,基本上是将C-C-C绑定到“latex”命令,不能使用任何其他命令,例如“bibtex”或“view”


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

我对OVERRIDE-CONFIRM位困惑了一段时间,不知道它应该如何工作。如果您想在文件上自动运行Latex,而不必先保存它,也不必确认您想要Latex(而不是view、bibtex等),您可以使用如下功能:

(取消我的跑步计划()
(互动)
(TeX保存文档(TeX主文件))
(TeX命令“LaTeX”'TeX主文件-1))

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

似乎
覆盖-确认
的奥秘还在继续。与此同时,一位同事建议,如果我们无法管理
TeX命令主机
,我们可以简单地重写它

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

(取消我的跑步计划()
(互动)
(如果(缓冲区修改-p)
(项目
(setq TeX保存查询nil)
(TeX保存文档(TeX主文件))
(TeX命令“LaTeX”'TeX主文件-1))
(特克斯视图)
当然,可以将
my run latex
绑定到任何键绑定

从用户的角度来看,这是我自己问题的解决方案。 是否单击关闭标记?好吧,从好奇的家伙的角度来看,我仍然有兴趣了解神秘的
TeX指挥大师
技术细节

如果有人碰巧知道

附言。 是,
TeX保存查询
覆盖保存文件请求,也使用
TeX命令主控程序
,即
C-C-C
。但仍将要求您确认命令操作

构建和查看 同样,此解决方案不是修改
TeX命令主机的行为,而是重写它。该命令的重写版本名为
buildview
,遵循一个相当简单的逻辑

  • 如果未修改LaTeX文件缓冲区,则运行默认查看器
  • 如果缓冲区是脏的,它将运行默认的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-`")))
    
    现在,您可以键入
    M-x构建视图
    并启动构建视图过程,或将其与新的键绑定(如“F2”)关联:

    (add-hook 'LaTeX-mode-hook '(lambda () (local-set-key (kbd "<f2>") 'build-view)))
    
    (添加钩子'LaTeX mode hook'(lambda()(本地设置键(kbd“”)'构建视图)))
    
    注意:根据Tyler的建议,
    TeX save query
    变量在本地更改,因此旧的
    C-C-C
    /
    TeX命令主控器
    不受影响,将继续请求确认


    请编辑此代码,使其更易于阅读

    如果您只是想在没有确认对话框的情况下编译latex源代码,只需将以下内容添加到.emacs中即可:

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

    (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)))) 
    
    然后你就可以继续写你的文档,做一个C-x C-s,C-C-C,然后C-C-v来查看它。像其他人建议的那样,您也可以对save命令执行相同的操作,并在save时自动编译它,但我的一些文档位于CVS中,因此我避免在其上设置挂钩


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

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

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

    latexmk-pdf-pvc myfile.tex

    latexmk将监视有问题的文件,并在保存文件后立即重建它。如果
    (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))))