更新:
我已经详细测试了这个问题,结果附在问题的末尾。我猜现在问题变成了:当花括号不匹配时,如何避免 AUCTeX 的愚蠢诊断?
原始问题:
我有以下行
(add-hook 'LaTeX-mode-hook 'TeX-global-PDF-mode)
在我的emacs 中~.emacs
默认打开全局 pdf 模式。这样,通过为外部编辑器配置 TeXShop,我每次C-c C-c LaTeX
在 emacs 中都可以使用它作为预览器。
但是,有时在发生排版错误并C-c (backtick)
用于查看错误(详情如下)后,pdf 模式似乎被禁用。修复错误后,生成的是 dvi 而不是 pdf,并且 pdf 永远不会再更新。我需要退出 emacs 并重新启动才能恢复 pdf 模式。
为什么会出现这种情况?有什么解决办法吗?我正在使用 Emacs 24.3.0 和 AUCTeX 11.87(两者都是当前版本)。
更新:
触发问题的详细工作流程:
.tex
使用文件和(add-hook 'LaTeX-mode-hook 'TeX-global-PDF-mode)
启动文件启动 emacs 。初始模式是LaTeX/P Fill
、LaTeX-mode
主要模式、带有TeX-PDF-mode
和auto-fill-mode
次要模式(自动填充模式可能是由于我在启动文件中打开了自动填充;我没有测试 AUCTeX 是否默认以自动填充启动)。制造非标准花括号不匹配错误,例如,
% header \begin{document} \MACRO{ \end{document}
where
\MACRO
不是默认宏,但可能是在% header
with中定义的某些内容newcommand
。仍然LaTeX/P Fill
。C-c C-c RET
(LaTeX
默认使用排版)报错:LaTeX errors in `*DIR/FILE output*'. Use C-c ` to display.
仍然
LaTeX/P Fill
。C-c (backtick)
触发函数TeX-next-error
。出现一个奇怪的缓冲区,名为TeX Live 2012
。下面的迷你缓冲区提示options, RET:
此时,模式变为LaTeX Fill
;pdf 模式已切换。C-g
退出该功能。缓冲区返回到原始编辑缓冲区(但请注意,缓冲区TeX Live 2012
仍在后台;当您尝试退出 emacs 时,系统将提示您保存它)。仍然LaTeX Fill
。现在修复错误代码并
C-c C-c RET
再次执行。这一次,生成的是 dvi 而不是 pdf,因为现在TeX-PDF-mode
是nil
。
偏离:如果我按照步骤 4 中的提示而不是C-g
,我最终会得到TeX Live 2012
包含
\documentclass[OPTIONS]{CLASS}
\begin{document}
\end{document}
一个新文件!嗯,没什么帮助。我只是漏了一个花括号……而你却让我重写文件……尽管如此,TeX Live 2012
此时的缓冲区将是LaTeX/P Fill
。
最后,一个触发此行为的小工作示例:
\documentclass{amsart}
\newcommand{\set}[1]{\left\{#1\right\}}
\begin{document}
$\set{$
\end{document}
答案1
这是我的设置,我从来没有遇到过编译错误的问题。我只需修复错误并再次运行即可。
(require 'tex-site)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTex t)
(global-font-lock-mode t)
(setq font-lock-maximum-decoration t)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(TeX-PDF-mode t)
'(TeX-newline-function (quote newline-and-indent))
'(TeX-source-correlate-method (quote synctex))
'(TeX-source-correlate-mode t)
'(TeX-source-correlate-start-server t)
'(TeX-view-program-list (quote (("Okular" "okular -unique %o#src:%n%b"))) t)
'(TeX-view-program-selection (quote ((output-pdf "Okular"))) t)
)
当我运行代码时,您的 MWE 不会导致相同的问题。这可能是您的 Emacs 设置。