3

在 LaTeX 模式下C-c C-c必须:

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

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

其中tex-buf.el写道:

如果给出了前缀参数 OVERRIDE-CONFIRM,则确认将取决于它是肯定的,而不是 `TeX-command-list' 中的条目。

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

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

4

6 回答 6

2

看来,谜团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到任何键绑定。

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

如果有人碰巧知道...

PS 是TeX-save-query的,覆盖保存文件请求,也带有TeX-command-master,即C-c C-c. 但仍会要求您确认命令操作。

于 2013-02-05T02:14:56.977 回答
2

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

M-1 C-c C-c

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

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

(setq TeX-command-force "LaTeX")

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

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

于 2013-02-03T00:04:37.213 回答
2

构建和查看

同样,此解决方案不是修改 的行为,而是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-`")))

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

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

注意:正如 Tyler 所建议的,TeX-save-query变量是在本地更改的,因此旧的C-c C-c/TeX-command-master不受影响,并且会继续询问确认。

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

于 2013-02-05T22:08:53.427 回答
2

我对 OVERRIDE-CONFIRM 位困惑了一会儿,不知道它应该如何工作。如果你想在你的文件上自动运行 Latex,而不用担心先保存它,或者确认你想要 Latex(而不是查看、bibtex 等),你可以使用这样的函数:

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

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

于 2013-02-04T03:30:34.097 回答
0

如果您只是想在没有确认对话框的情况下编译乳胶源,只需将以下内容添加到您的 .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 上

于 2013-02-27T21:31:39.040 回答
0

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

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

latexmk -pdf -pvc myfile.tex

latexmk 将监视有问题的文件,并在您保存后立即重建它。如果您使用好的 pdf 查看器,它会注意到 PDF 的变化并立即重新显示。在 OS X 上,skim 可以很好地解决这个问题。

于 2015-02-14T12:33:20.793 回答