Emacs AUCTeX:运行编译命令n次

Emacs AUCTeX:运行编译命令n次,emacs,auctex,Emacs,Auctex,我想要一个函数,它要求输入一个数字n,然后执行默认的编译命令n次。也就是说,与C-C C-C即TeX命令主控程序不同,我不想被询问要运行哪个命令,它应该根据AUCTeX设置选择默认的编译命令。当然,如果发生任何错误,执行应该停止 然而,我知道这并不能满足我的需要,因为有时候我只想让emacs运行pdflatex五倍,而不考虑AUCTeX解析器认为什么是足够的 非常感谢您的帮助 编辑:我进一步研究了这个问题,并使用上面引用的代码,开始编写一个函数来实现这一点。然而,它有一个主要缺陷。首先让我告诉你

我想要一个函数,它要求输入一个数字n,然后执行默认的编译命令n次。也就是说,与C-C C-C即TeX命令主控程序不同,我不想被询问要运行哪个命令,它应该根据AUCTeX设置选择默认的编译命令。当然,如果发生任何错误,执行应该停止

然而,我知道这并不能满足我的需要,因为有时候我只想让emacs运行pdflatex五倍,而不考虑AUCTeX解析器认为什么是足够的

非常感谢您的帮助

编辑:我进一步研究了这个问题,并使用上面引用的代码,开始编写一个函数来实现这一点。然而,它有一个主要缺陷。首先让我告诉你代码:

(defcustom TeX-MultiTeX-Command "LaTeX" "Default MultiTeX command" :type 'string :group 'TeX-command)
(defun TeX-MultiTeX (n)
  "Run TeX-command n-times"
  (interactive "nRun TeX/LaTeX how many times: ")
  (while (> n 0)
      (TeX-command TeX-MultiTeX-Command 'TeX-master-file)
    (setq n (- n 1))))
如您所见,我实现了一个配置变量,用于选择正确的编译命令。现在让我提出一个问题:


LaTeX文档的编译需要一些时间,但是,我的函数会立即调用第二次和随后的compile命令执行。也许有人可以提供帮助,找到一种解决方案,在执行TeX command TeX MultiTeX command的TeX主文件之前检查编译是否已成功完成,然后执行所述函数,或者在编译完成时打印一些错误消息。

似乎需要一种同步方式来运行TeX命令。我没有word with-TeX命令,但是如果它使用编译API,可以让它等待编译完成,尽管不清楚如何完成。下面是一个使用编译完成函数实现所需效果的示例:

要求“cl”;对于词汇let 取消编译并等待编译取消 互动的 词法let done nil finish回调 setq完成回调 ;; 编译完成后,从中删除回调 ;; 编译完成函数并中断等待 兰姆达布夫味精 setq编译完成函数 delq finish回调编译完成函数 setq done t push finish回调编译完成函数 funcall compilefun 虽然没有完成 睡一觉 编辑
AUC TeX未使用编译模式生成TeX,因此上述方法无法工作。因为它对其他编译缓冲区仍然有用,所以我将它保留在答案中。实现TeX MultiTeX的另一种方法是将TeX process asynchronous绑定到nil,这将确保AUC-TeX等待命令完成。

似乎需要一种同步方式来运行TeX命令。我没有word with-TeX命令,但是如果它使用编译API,可以让它等待编译完成,尽管不清楚如何完成。下面是一个使用编译完成函数实现所需效果的示例:

要求“cl”;对于词汇let 取消编译并等待编译取消 互动的 词法let done nil finish回调 setq完成回调 ;; 编译完成后,从中删除回调 ;; 编译完成函数并中断等待 兰姆达布夫味精 setq编译完成函数 delq finish回调编译完成函数 setq done t push finish回调编译完成函数 funcall compilefun 虽然没有完成 睡一觉 编辑
AUC TeX未使用编译模式生成TeX,因此上述方法无法工作。因为它对其他编译缓冲区仍然有用,所以我将它保留在答案中。实现TeX MultiTeX的另一种方法是将TeX process asynchronous绑定到nil,这将确保AUC TeX等待命令完成。

在函数代码的帮助下,我开发了一个实现所需功能的函数,代码如下所示

我要感谢用户4815162342;虽然这个解决方案不是基于他的建议,但我认为他的解决方案可能对另一个问题有用。此外,我还要感谢TeX texify的作者TN,我无耻地采用并修改了他的代码来解决我的问题

defcustom TeX MultiTeX命令 默认MultiTeX命令 :键入“字符串:组”TeX命令 defun-TeX MultiTeX sentinel和可选程序sentinel 非交互式!呼叫当前LaTeX流程的标准哨兵。 如果还有剩余的内容,请启动下一个latex命令。 设置缓冲进程缓冲进程 funcall TeX MultiTeX sentinel程序sentinel 让案例折叠搜索为零 当字符串匹配\\完成\\退出\\哨兵 设置缓冲区TeX命令缓冲区 除非plist get TeX错误报告切换intern TeX主文件 TeX MultiTeX TeX MultiTeX num left defun-TeX-MultiTeX n 运行TeX命令n次 交互式nRun TeX/乳胶多少次: 当或以交互方式调用“任意” null boundp'TeX MultiTeX num left setq TeX MultiTeX num left n 如果>=TeX MultiTeX num left 1 程序 TeX命令TeX MultiTeX命令的TeX主文件 setq TeX MultiTeX num left-TeX MultiTeX num left 1 setq proc get buffer进程当前缓冲区 setq TeX MultiTeX sentinel进程sentinel进程 设置进程sentinel proc'TeX MultiTeX sentinel
在函数代码的帮助下,我开发了一个实现我所需功能的函数,下面给出了代码

我要感谢用户4815162342;虽然这个解决方案不是基于他的建议,但我认为他的解决方案可能对另一个问题有用。此外,我还要感谢TeX texify的作者TN,我无耻地采用并修改了他的代码来解决我的问题

defcustom TeX MultiTeX命令 默认MultiTeX命令 :键入“字符串:组”TeX命令 defun-TeX MultiTeX sentinel和可选程序sentinel 非交互式!呼叫当前LaTeX流程的标准哨兵。 如果还有剩余的内容,请启动下一个latex命令。 设置缓冲进程缓冲进程 funcall TeX MultiTeX sentinel程序sentinel 让案例折叠搜索为零 当字符串匹配\\完成\\退出\\哨兵 设置缓冲区TeX命令缓冲区 除非plist get TeX错误报告切换intern TeX主文件 TeX MultiTeX TeX MultiTeX num left defun-TeX-MultiTeX n 运行TeX命令n次 交互式nRun TeX/乳胶多少次: 当或以交互方式调用“任意” null boundp'TeX MultiTeX num left setq TeX MultiTeX num left n 如果>=TeX MultiTeX num left 1 程序 TeX命令TeX MultiTeX命令的TeX主文件 setq TeX MultiTeX num left-TeX MultiTeX num left 1 setq proc get buffer进程当前缓冲区 setq TeX MultiTeX sentinel进程sentinel进程 设置进程sentinel proc'TeX MultiTeX sentinel
这不是预期的效果。第一次编译是生成的,但是,编译完成后,没有达到循环变量减量。我在编译和等待调用前后添加了调试输出,并且没有达到post输出。当我给一些输入滚动鼠标,按下按钮等。下一个和下一个下一个编译过程产生,即再次两个编译过程同时执行。这种情况一直持续到只有一个进程在运行,然后一个进程也没有运行。@elemakil I修复了输入中断的问题,但结果证明AUX-TeX根本不使用编译模式,因此这种方法无法工作。幸运的是,binding TeX process asynchronous在我的简单测试中起作用,因此我更新了答案,改用它。无论如何,谢谢!我同意你的观点,并且认为这可能对其他用例有用。同时,我已经开发了一个不同的解决方案,借助于我在问题中链接的TeX-texify函数的代码。我已经发布了这个解决方案,也许你想看看它,并给出一些改进意见?我或多或少是在复制和粘贴TeX texify的代码,而没有完全理解每一部分的功能…@elemakil你读过我答案的更新版本了吗?您至少应该尝试一下我提出的解决方案,因为它是基于您以前的代码的,而且很难理解。只需忽略编译并等待,它只供参考。没有错误,但是在第一次编译完成后,编译命令不会重新执行。循环是迭代的,但我认为AUCTeX的编译例程没有被调用;这个假设是基于这样一个事实:AUCTeX的状态输出丢失,编译完成的速度太快,无法实际执行。这并不像预期的那样有效。第一次编译是生成的,但是,编译完成后,没有达到循环变量减量。我在编译和等待调用前后添加了调试输出,并且没有达到post输出。当我给一些输入滚动鼠标,按下按钮等。下一个和下一个下一个编译过程产生,即再次两个编译过程同时执行。这种情况一直持续到只有一个进程在运行,然后一个进程也没有运行。@elemakil I修复了输入中断的问题,但结果证明AUX-TeX根本不使用编译模式,因此这种方法无法工作。幸运的是,binding TeX process asynchronous在我的简单测试中起作用,因此我更新了答案,改用它。无论如何,谢谢!我同意你的观点,并且认为这可能对其他用例有用。同时,我已经开发了一个不同的解决方案,借助于我在问题中链接的TeX-texify函数的代码。我已经发布了这个解决方案,也许你想看看它,并给出一些改进意见?我或多或少是在复制和粘贴TeX texify的代码,而没有完全理解每一部分的功能…@elemakil你读过我答案的更新版本了吗?你至少应该试试我提出的解决方案,因为它是基本的
对您以前的代码进行了详细的分析,很容易理解。只需忽略编译并等待,它只供参考。没有错误,但是在第一次编译完成后,编译命令不会重新执行。循环是迭代的,但我认为AUCTeX的编译例程没有被调用;此假设基于以下事实:AUCTeX的状态输出丢失,编译完成的速度太快,无法实际执行。对其他功能进行一些调整,例如,在成功构建完成后自动显示pdf文件。感谢您与社区共享此代码。对其他功能进行了一些调整-例如,在成功构建完成后自动显示pdf文件。感谢您与社区共享此代码。