如何将latexmk绑定到Emacs中的一个键,并让它在出现任何错误时显示错误
我正在使用AUCTeX,我想绑定一个密钥,例如,如何将latexmk绑定到Emacs中的一个键,并让它在出现任何错误时显示错误,emacs,auctex,latexmk,Emacs,Auctex,Latexmk,我正在使用AUCTeX,我想绑定一个密钥,例如,C-0,该密钥执行以下操作: 保存活动文件而不提示我 在活动文件上运行latexmk,而不提示我 如果latexmk遇到任何错误,则显示错误 我的问题不是如何绑定一个键(Tyler在下面的评论中发布了一个链接),而是如何找到一个函数来完成第1-3项 我顺便打电话给Latexmk (添加钩子的乳胶模式钩子(lambda() (推 “(“Latexmk”“Latexmk%s”TeX运行TeX nil t” :help“在文件上运行Latexmk”)
C-0
,该密钥执行以下操作:
latexmk
,而不提示我latexmk
遇到任何错误,则显示错误我顺便打电话给Latexmk
(添加钩子的乳胶模式钩子(lambda()
(推
“(“Latexmk”“Latexmk%s”TeX运行TeX nil t”
:help“在文件上运行Latexmk”)
TeX命令列表)
这是我最新的KRC
$pdf_mode = 1;
$recorder = 1;
$latex = 'latex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';
$pdflatex = 'pdflatex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';
我使用的是Emacs 23.3和AUCTeX 11.86。这是否符合您的要求
(取消我的tex()
保存当前缓冲区并运行LaTeX,所有操作都没有提示或进一步的交互
(互动)
(保存缓冲区)
(TeX命令“LaTeX”'TeX主文件-1))
我不使用latexmk,但为了实现这一点,您只需在TeX命令列表
(可能只是“latexmk”或“latexmk”)中为latexmk使用的名称字符串切换字符串“LaTeX”
我很高兴你这么问,因为这对我现在很有用 假设您已经使用中的答案将
latexmk
添加到AUCTeX的命令列表中,您可以使用以下功能:
(defun运行latexmk()
(互动)
(保存缓冲区)
(TeX命令“Latexmk”'TeX主文件0)
(如果(plist get TeX错误报告开关(intern(TeX主文件)))
(下一个错误);;0->取消确认
并使用任何关键绑定技术将其绑定到C-0
;这里有一个是TeX模式的本地版本:
(定义按键TeX模式映射(kbd“C-0”)“运行latexmk”
runlatexmk
功能基于挖掘TeX命令主机
,并根据您的需要对其进行简化。请注意,对(下一个错误)
的调用可能并不总是发生,因为LaTeX可能会被错误弄糊涂,并暂停等待输入,类似这样的情况
(需要“tex buf”)
(defun运行latexmk()
(互动)
(let((TeX保存查询nil)
(TeX进程异步零)
(主文件(TeX主文件)))
(TeX保存文档“”)
(TeX运行TeX“latexmk”“latexmk”主文件)
(如果(plist get TeX错误报告开关(实习生主文件))
(TeX下一个错误t)
(小缓冲区消息“latexmk done”))
(添加挂钩“乳胶模式挂钩”
(lambda()(本地设置键(kbd“C-0”)#“run-latexmk)))
编辑:
TeX save document
保存您的主文件和任何子文件(如果您只有一个文件,它就是您的主文件),并且当TeX save query
为零时,它不会要求您确认。然后,TeX run TeX
使用通常用于运行TeX
的机制运行latexmk,该机制包括错误消息解析,但由于它通常启动异步进程,因此我们将TeX process asynchronous
设置为nil以等待它结束。奇怪的plist get
表单是检查TeX run TeX
中错误的文档化方法(参见TeX buf.el
中的注释),如果有错误,我们跳到第一个;如果没有错误,我们在迷你缓冲区中显示一条消息只是为了好玩
最后,
本地设置键
是将键绑定到函数的一种方法。您要求的功能与默认AucTex包中已有的功能非常接近。您可以从以下问题开始:哪个将为您排序latexmk,然后在必要时调整它,以获得您想要的特定行为。@Tyler谢谢。如何将这样的命令绑定到密钥?如果您按照第一个答案进行操作,C-C-C
应该使用latexmk编译您的tex文件(您可能需要更改配置文件以使latexmk作为默认值弹出,但AucTex通常知道该做什么)。实际运行的命令是TeX command master
,您可以使用通常的方法绑定它:@TylerC-C-C
即使是默认命令,仍然会提示我。在我得到“作为变量的符号值为void:TeX mode map”时,有一个后续问题当我尝试键绑定时,即使我在加载后将其包装为“tex”。当我尝试运行latexmk时,我也会得到“tex命令扩展:错误类型参数:stringp,nil”。@N.N.我承认我实际上并没有从键绑定运行它,而只是M-x运行latexmk
,这对我很有效。。。不过,现在试试看,我看不出你会犯什么错误。您可以通过将定义键
包装为(添加钩子的乳胶模式钩子(lambda()(定义键…)来修复“符号值…”错误
,这确保您处于LaTeX模式。我可以重现TeX命令扩展错误,但只有在我直接调用它时,上面的代码才不会…使用模式挂钩是解决了这两个问题,还是只解决了一个问题?模式挂钩修复了键绑定,但运行latexmk仍然返回“错误类型参数:stringp,nil”。我已使用有关设置的信息更新了我的问题(如果有)。我确实满足列表中的第1项和第2项。如果有错误,我希望有一个显示错误的窗口。我正在使用pdflatex的-interaction=nonstopmode
,因此我只希望看到它停止时出现的错误。抱歉,我不知道XMK是如何工作的,所以我不确定要去哪里。你激发了我去研究让Auctex来代替latexmk的想法——应该可以让Auctex计算出在不必不断点击C-C-C的情况下运行pdflatex和bibtex的次数。不过这需要更多的时间来探索。这与我一直在调整的内容非常接近。但至少在我的系统上是这样的(windows框),LaTeX异步运行,因此(plist get…)