13

在 Emacs 上,在为自己编辑注释文本文档(.txt文档,而不是.tex文档)时,我使用,M-x set-input-method Ret TeX以便轻松访问各种 Unicode 字符。例如,键入\tospace会导致在文本中插入“→” ,键入会导致插入x^2“x 2 ”,因为我使用的字体分别支持 Unicode 代码点0x21920x00B2

该方法中特殊处理的字符之一是下划线键,_. 但是,我用于 Emacs 的字体似乎不支持各种下标字符的代码点,例如下标零(代码点 0x2080),因此当我输入 时_0,我的输出中出现了一些呈现为薄空白的内容. 在这种情况下,我宁愿只使用这两个字符_0

可以_0通过笨拙的击键序列来理解,_spacedel0因为序列space中间的击键会导致 Emacs 中止 TeX 输入法。但这很尴尬。

所以_,我的问题是:当我在 TeX 输入法中时,如何在本地自定义我的 Emacs 以完全不重新映射键?或者我怎样才能创建一个修改过的 TeX 输入法的克隆(或扩展等),它的魔力没有下划线?

到目前为止我尝试过的事情:

  • 我已经完成M-xdescribe-key_;但它只是绑定到self-insert-command,就像许多其他文本字符一样。我确实在post-self-insert-hook那里看到了一个,但我还没有探索过尝试使用它来颠覆 TeX 输入法。

到目前为止我还没有尝试过的事情:

  • 我没有尝试学习有关输入法架构或其源代码的任何内容。根据我对代码和方法的快速了解。这似乎不是我可以快速跳入的东西。
4

4 回答 4

6

所以这是我刚刚找到的解决方案:制作一份 TeX 输入法的个性化副本,删除所有不需要的条目。然后在使用时M-x set-input-method,选择个性化版本,而不是TeX

我会早点尝试过,但其内置文档set-input-mode并没有为我找到它的输入方法的实际来源提供足够的指导。只有在对 SO 进行另一次搜索并找到以下内容后:Emacs:无法激活输入法,我才能够获得足够的信息来自己完成此操作。

细节:

  1. 在 Emacs 中,打开/usr/share/emacs/22.1/leim/leim-list.el并找到您要自定义的输入法的条目。该条目将类似于以下形式:

    (register-input-method
     "TeX" "UTF-8" 'quail-use-package
     "\\" "LaTeX-like input method for many characters."
     "quail/latin-ltx")
    
  2. 请注意上面表格中最后一个元素中引用的文件名前缀。找到对应的Elisp源文件;在这种情况下,它是文件的相对路径quail/latin-ltx.el[.gz]。在 Emacs 中打开该文件,然后检查它;它应该具有方法重新映射的条目,包括期望的和不期望的。

  3. 在您的其他 Emacs 自定义项中制作该 Elisp 源文件的用户本地副本。在 Emacs 中打开该本地副本。

  4. 在你的本地副本中,找到(quail-define-package ...)文件中的表格,并更改包的名称;我用FSK-TeX了我的新名字,像这样:

    (quail-define-package
     "FSK-TeX" "UTF-8" "\\" t   ;; <-- The first argument here is the important bit to change.
     "LaTeX-like input method for many characters but not as many as you might think.
     ...)
    
  5. 浏览您的本地副本,并删除您不想要的映射的所有 S 表达式。

  6. leim-list.el在您的 .emacs 配置文件中,使用类似于您在步骤 1 中看到的表单注册您的自定义输入法:

    (register-input-method
     "FSK-TeX" "UTF-8" 'quail-use-package
     "\\" "FSK-customized LaTeX-like input method for many characters."
     "~/ConfigFiles/Elisp/leim/latin-ltx")
    
  7. 重启 Emacs 并测试你的新输入法;在我的情况下,通过执行M-x set-input-method FSK-TeX、输入a_0和确认a_0显示在缓冲区中。


因此,一旦安装了它,至少有一个答案比问题中列出的一些解决方法更尴尬(事实证明,Emacs 22 手册中也正式记录了作为切断输入法处理的一种方式)。

但是,我对这个解决方案并不满意,因为我更愿意继承未来对 TeX 模式的更改,并.emacs在启动时删除不需要的条目。

所以我会等着看是否有人提出比这更好的答案。

于 2013-03-03T16:55:39.727 回答
1

我自己没有对此进行测试,但这似乎正是您正在寻找的东西:

“如何在 emacs 中禁用 TeX 模式下的下划线下标” -来源

这个 blogpot 给出了两个解决方案:

  1. 由博文的作者:((setq font-lock-maximum-decoration nil)从最大值)

  2. 作为评论提到:

    (eval-after-load "tex-mode" '(fset 'tex-font-lock-subscript 'ignore))

于 2013-03-03T00:16:06.597 回答
1
于 2016-04-03T13:44:42.273 回答
0

正如pnkfelix answer中已经解释的那样,似乎我们必须制作 TeX 输入法的个性化副本。但是这里有一种更轻松的方法来做到这一点,无需任何文件调整。只需将以下内容放入您的.emacs:

(eval-after-load "quail/latin-ltx"
  '(let ((pkg (copy-tree (quail-package "TeX"))))
     (setcar pkg "MyTeX")
     (assq-delete-all ?_ (nth 2 pkg))
     (quail-add-package pkg)))
(set-input-method 'TeX)
(register-input-method "MyTeX" "UTF-8" 'quail-use-package "\\")
(set-input-method 'MyTeX)

重要的部分是assq-delete-all中间的那一行,它删除了所有以 . 开头的快捷方式条目_。这有点像 lisp hack,但它似乎有效。由于我也对以-and开头的快捷方式感到恼火,因此^我还使用以下两行来禁用它们:

     (assq-delete-all ?- (nth 2 pkg))
     (assq-delete-all ?^ (nth 2 pkg))

请注意,之后您可以M-x set-input-method随时指示TeXMyTeX在原始 TeX 输入法或自定义输入法之间切换。

于 2019-06-19T16:51:52.807 回答