在 emacs 中双引号会产生 guillemets

在 emacs 中双引号会产生 guillemets

我在 emacs 中输入 tex 文档中的引号时遇到了一个非常奇怪的问题。我是一名编辑,所以我从出版商那里收到 tex 源文件并对其进行处理。我在 Ubuntu 14.04 上使用 emacs 24.3.1 和 auctex 11.87 进行工作。

几天前,出现了以下行为:当我"在源缓冲区中键入双引号键时,emacs 会插入 guillemets\og\fg{},而不是``'',这"在 LaTeX 模式下按下时通常会发生。

以下是我所能收集到的信息:

  1. 这只发生在我从发布商收到的文件中。这不会发生在我机器上现有的 tex 文件上,也不会发生在我创建的新文件中。
  2. 即使我使用该emacs -q命令启动 emacs 也会发生这种情况,因此它不会读取我的.emacs文件。
  3. 如果我从命令行将文件复制或移动到另一个位置,这种情况仍然会发生。
  4. 如果我从命令行将文件复制或移动到另一个位置,然后在 emacs 中删除其内容,仍然会发生这种情况。
  5. 如果我从 emacs 内部将文件内容复制到新缓冲区中,就不会发生这种情况。
  6. 如果我删除.aux.log文件,这种情况仍然会发生。
  7. "键与命令绑定TeX-insert-quote
  8. TeX-open-quote变量和的值分别TeX-close-quote``'',与往常一样。

由此我得出结论,emacs 正在读取与文件相关的一些我不知道的“秘密”信息。它不在我的设置中,似乎与文件内容无关。

任何想法/建议/修复都非常感谢。

更新:问题消失了一段时间,然后再次出现。根据 giordano 在评论中的建议,我检查了 的值TeX-quote-language,发现它是:

("french" "\\og " 
    (lambda nil (concat "\\fg" (unless (member "xspace" TeX-active-styles)"{}"))) nil)

TeX-quote-language-alist(但是,的值为nil。)我认为这是由于我需要用于工作的自定义类文件造成的。有没有办法在我的文件中添加一行来.emacs覆盖此行为?我只想要我的正常引号!

答案1

这是一个不会禁用法语文档中的 guillemets 的解决方案。感谢 Giordano 和 David Carlisle 提供收集信息所需的所有信息。

AUCTeX 认为任何加载您正在使用的类(称为foo.cls)的文档都是法语的。它认为,因为它已编译foo.cls成文件(foo.elfoo.elc),每次您加载加载该类的文档时,它都会读取该文件。

因此,为了避免出现您所看到的行为,您可以采取以下几种措施之一:

  • 选项 1:删除foo.elfoo.elc。(使用locate或操作系统的查找器来查找它;如果它位于您没有写入权限的目录中,例如/var/lib/auctex/emacs24,则您需要具有管理权限。)

  • 选项 2:编辑foo.el以删除有问题的行(它说francais因为foo.cls包含行\RequirePackage[english,francais]{babel},尽管在条件分支中。同样,您可能需要具有管理权限。

  • 选项 3:如果您无法编辑或删除foo.el,请创建您自己的 版本,foo.cls例如myfoo.cls,并将其替换\RequirePackage[english,francais]{babel}\@nameuse{RequirePackage}[english,francais]{babel};然后在您的文档中使用它。(如果您愿意,您可以myfoo.el通过M-x TeX-auto-generate在 emacs 中输入来创建。)

最后,当您确实需要处理法语文档并希望插入双引号键时,您可以通过添加到\usepackage[francais]{babel}序言中来告诉 AUCTeX 文档是法语的。(从 LaTeX 的角度来看,这是多余的,但无害。)

答案2

我找到了一个合理的解决方法这里在 SuperUser 上 (由 giordano 编写)。修复该问题的代码是:

(add-hook 'TeX-language-fr-hook
      (lambda ()
        (setq TeX-quote-language `("francais" "``" "''" ,TeX-quote-after-quote))))

显然,这并不能解决 AUCTeX 在不需要时进入法国模式的根本问题,但它确实为该问题提供了有效的解决办法。

相关内容