[英]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
,遵循一个相当简单的逻辑。
这是代码:
(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.