Emacs AucTeX;如何设置C-C C-C默认命令?

Emacs AucTeX;如何设置C-C C-C默认命令?,emacs,auctex,Emacs,Auctex,我已在.emacs文件中设置了此选项: (添加hook'TeX模式hook (lambda() (setq TeX命令默认值为“LaTeX”)) (添加挂钩“乳胶模式挂钩” (lambda() (setq TeX命令默认值为“LaTeX”)) 我看到C-C-C绑定到TeX-command-master,它调用TeX-command-query。但是由于我的(TeX-master文件)是”,我希望调用默认命令,但一直希望调用“View”而不是“LaTeX”.如果您检查TeX命令查询的源代码,您会

我已在.emacs文件中设置了此选项:

(添加hook'TeX模式hook
(lambda()
(setq TeX命令默认值为“LaTeX”))
(添加挂钩“乳胶模式挂钩”
(lambda()
(setq TeX命令默认值为“LaTeX”))

我看到
C-C-C
绑定到
TeX-command-master
,它调用
TeX-command-query
。但是由于我的
(TeX-master文件)
,我希望调用默认命令,但一直希望调用“View”而不是“LaTeX”.

如果您检查
TeX命令查询的源代码,您会发现它检查文档中涉及的
TeX
(第4-9行)和
bbl
(第10-19行)文件的修改日期。除非这些文件比输出文件最近,并且没有已知的下一个要执行的命令(第20-22行)它将使用
“查看”
命令作为默认命令(第23行)

这种行为当然是合理的,因为通常情况下,除非有更改(修改的
tex
文件),否则您不想重新编译。除了“修补”命令外[张贴在下面,不建议使用,因为它不会接收自动更新;-)]实际上您没有什么可以做的

如果您决定使用补丁命令,则在加载原始命令后,只需将其放入init文件中的某个位置即可。例如,您可以将其包装到(替换
;按代码替换正文)

(加载后评估“tex buf”
"(progn)
身体
))
下面是经过修补的命令:

(defun-TeX命令查询(名称)
“查询用户要使用的TeX命令。”
(let*((默认值)
(cond((if)(字符串等名称TeX区域)
(TeX检查文件(concat名称“.”(TeX输出扩展名))
(名单名称)
TeX文件扩展名)
(TeX保存文档(TeX主文件)))
TeX命令(默认)
((和(memq主模式(doctex模式和乳胶模式))
;想知道bib文件是否比.bbl更新
;我们不关心bib文件是否在emacs中打开
(TeX检查文件(concat name“.bbl”)
(地图车)
(参考书目表)
(附加BibTeX文件扩展名)
TeX-Biber文件扩展名)
我们也应该在这里检查bst文件。
(如果使用Biber TeX命令Biber TeX命令BibTeX)
((TeX进程获取变量名)
“下一个是TeX命令
补丁来了
是TeX命令视图吗
TeX命令(默认)
补丁的结尾
(TeX命令显示)
(完成忽略案例t)
(回答(或特克斯指挥部队)
(完成阅读)
(concat“Command:(default“default”))
(TeX模式特定命令列表主模式)无
无TeX命令历史记录)
;如果答案是“乳胶”,则不会扩展为“乳胶”
(setq应答(汽车安全(TeX助理应答TeX命令列表)))
(若有)(及答复)
(不是(字符串等于答案“”))
回答
(默认值)

这里有一个链接,指向在OSX和Windows上使用AUCTeX的其他方法:compile命令与view命令分开,不依赖于是否修改了*.tex缓冲区来调用一个命令或另一个命令。谢谢-但这太多的代码让我无法思考所有的含义。放大图但是nt可以工作。这是有道理的。你也可以修改S表达式来替换那一个表达式?或者重新定义更简单?@SlipedLambda建议简单地重写一个函数,并在加载原始函数后对其求值(从而覆盖它)。不过,也可以使用类似(被盗)的方法执行匹配替换。就我个人而言,我认为覆盖是更好的解决方案(也更简单),因为它可以确保函数本身始终工作。哇,非常好的参考。我认为对于这样非常简单的事情,匹配替换将1)短于替换,2)在更新auctex包的情况下,您仍然可以通过这个小的替换获得更改的好处。毕竟这只是一个s表达式。但我不知道手册本身推动了重写。很高兴知道。