获取 Emacs 的电子报价模式以与​​ AUCTeX 和 BibTeX 模式配合使用

获取 Emacs 的电子报价模式以与​​ AUCTeX 和 BibTeX 模式配合使用

我越来越喜欢electric-quote-modeEmacs,因为它是一种在文档中获取弯曲引号的便捷方式。但是,我似乎无法让它与 AUCTeX 或 BibTeX 模式配合使用。

我知道 AUCTeX 有自己的引号插入支持,这非常先进,可以与 babel 等交互。但我是一名csquotes用户,在我的序言中写道:

\usepackage[autostyle]{csquotes}
  \MakeAutoQuote{“}{”}
  \MakeAutoQuote*{‘}{’} % innerquotes

.emacs相应地,在我的(use-package的下:custom)中有:

(LaTeX-csquotes-open-quote "“")
(LaTeX-csquotes-close-quote "”")
(LaTeX-csquotes-quote-after-quote nil)

我那里也有:

(custom-set-variables
  ...
  '(electric-quote-mode t)
  ...
  )

AUCTeX 对引号的支持当然是有效的,但也有一些不便之处。首先,它使用不同的键盘键来插入引号(AUCTeX 使用双引号,而使用电子引号模式时,其他所有引号都使用反引号)。其次,我似乎找不到插入弯曲单引号的方法。第三,在 BibTeX 模式下,这两种方法都不起作用。

很长一段时间以来,我都认为这个问题与我的文档中被 AUCTeX 解析的某些内容有关。事实上,打开一个空白缓冲区并手动更改为可以LaTeX-mode让我获得一个具有有效电子报价模式的缓冲区。但是,在进一步测试后,我认为情况并非如此。请考虑以下最小文档:

\documentclass{article}

\begin{document}

\end{document}

如果我让 AUCTeX 解析该文档,将产生以下内容auto/test.el

(TeX-add-style-hook
 "test"
 (lambda ()
   (TeX-run-style-hooks
    "latex2e"
    "article"
    "art10"))
 :latex)

然后重新打开它,electric-quote-mode不再起作用(反引号键插入一个普通的反引号)。

我认为一个可能的冲突源是数学模式前缀,默认情况下它映射到反引号键。但我通常不启用它LaTeX-math-mode,即使设置LaTeX-math-abbrev-prefix为,"'"我仍然无法让电子报价模式工作。

self-insert-command在检查反引号的键映射(Ch k 反引号)时,我发现它在 LaTeX 模式和 BibTeX 模式下都有映射。

关于为什么会失败以及如何使其工作,您有什么想法吗?

答案1

顺便说一下,我能够通过调试我的初始化文件来解决 AUCTeX 的这个问题,并且通过更好地掌握 来找到 BibTeX 的解决方法electric-quote-mode

至于 AUCTeX 的问题,罪魁祸首是我在转移到 时use-package在初始化文件中添加了以下内容:

(use-package latex
  :ensure auctex
  :mode ("\\.tex\\'" . TeX-latex-mode)

  ... etc ...)

我真的不记得为什么我把它设置为TeX-latex-mode。我实际上已经研究了很多关于将 AUCTeX 移到use-package,也许太多了......

事实是:

(use-package latex
  :ensure auctex
  :mode ("\\.tex\\'" . LaTeX-mode)

  ... etc ...)

或者更简单:

(use-package latex
  :ensure auctex
  :defer t

  ... etc ...)

完成工作,并且正常工作electric-quote-mode。我不知道为什么会出现这个问题,但是它解决了它。

至于BibTeX模式,问题在于electric-quote-mode,根据的状态分别为,和(默认情况下,前两个为,第三个为),它被设计为仅在段落、注释electric-quote-paragraphelectric-quote-comment字符串electric-quote-stringt起作用nil

我不知道 Emacs 将 BibTeX 缓冲区视为什么(甚至不在条目之外,电子引号有效)。但是,这建议了以下解决方法。我可以用 注释感兴趣的行C-x C-;。注释该行后,就可以正常electric-quote工作。我根据需要编辑该行,然后使用 取消注释C-x C-;。当然,这不是最理想的,但对于标题包含引号的最终情况来说应该足够了,这是我能想到的唯一需要这样做的实际情况。

我留下这个答案,以防有人遇到同样的麻烦。但是,如果有谁对这些事情的内部运作有更多了解,愿意对问题所在提供实际解释,我很乐意接受。

相关内容