代码之家  ›  专栏  ›  技术社区  ›  pnkfelix

如何在Emacs、TeX输入法中禁用下划线(_)下标

  •  13
  • pnkfelix  · 技术社区  · 12 年前

    在Emacs上,在为自己编辑注释的文本文档时(a .txt 文件 .tex 文档),我正在使用 M-x公司 set-input-method 雷特 TeX ,以便轻松访问各种Unicode字符。例如,键入 \ 空间 导致“→“插入到文本中,然后键入 x ^ 2. 原因“x 2. “,因为我使用的字体支持Unicode代码点 0x2192 0x00B2 分别地

    该方法中经过特殊处理的字符之一用于下划线键, _ 然而,我为Emacs使用的字体似乎不支持各种下标字符的代码点,例如下标零(代码点0x2080),因此当我键入 _ 0 ,我在输出中得到了一个被渲染为空白的东西。我宁愿只有这两个角色 _0 在这种情况下。

    可以 收到 _0 通过笨拙的击键顺序 _ 空间 德尔 0 ,由于 空间 序列中间的击键导致Emacs中止TeX输入方法。但这很尴尬。

    所以 ,我的问题是:如何在本地自定义Emacs以不重新映射 _ 当我使用TeX输入法时,是否有按键?或者,我如何创建TeX输入法的修改后的克隆(或扩展等),将下划线从其魔力中去掉?

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

    • 我已经做完了 M-x公司 describe-key 在…上 _ ; 但它只是注定 self-insert-command ,就像许多其他文本字符一样。我确实看到了 post-self-insert-hook 在那里,但我还没有尝试过用它来颠覆TeX输入法。

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

    • 我没有尝试学习任何关于输入法体系结构或其源代码的知识。从我对代码和方法的快速理解来看。我似乎无法迅速投入其中。
    4 回复  |  直到 12 年前
        1
  •  6
  •   Community CDub    7 年前

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

    我本来会早点尝试的,但是 set-input-mode 而它的同类并没有为我找到输入法的实际来源提供足够的指导。这是在对SO进行另一次搜索后发现的: Emacs: Can't activate input method 我能够获得足够的信息来独自完成这项工作。

    细节:

    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. 在.emacs配置文件中,使用类似于您在 leim-list.el 在步骤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 ,正在键入 _ 0 ,并确认 a_0 显示在缓冲区中。


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

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

    所以我会等着看是否有其他人能想出比这个更好的答案。

        2
  •  1
  •   Community CDub    4 年前

    我自己没有测试过,但这似乎正是你想要的:

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

    这个博客中给出了两个解决方案:

    1. 博客作者: (setq font-lock-maximum-decoration nil) (从最大值开始)

    2. 作为评论提及:

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

        3
  •  1
  •   m0rphism    9 年前

    这个 evil 类似vim的modal键绑定插件允许映射 _ 插入单个的关键 _ 字符:

    (set-input-method 'TeX)
    (define-key evil-insert-state-local-map (kbd "_ _")
      (lambda () (interactive) (insert "_")))
    (define-key evil-insert-state-local-map (kbd "^ ^")
      (lambda () (interactive) (insert "^")))
    

    什么时候 _ 然后 1 被按下,我们得到 ₁ 和以前一样,但是

    什么时候 _ 然后 _ 被按下,我们得到 _ .

    类似于 ^ .

        4
  •  0
  •   polio    5 年前

    如中所述 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 中间的行,删除以开头的所有快捷方式条目 _ 。这有点口齿不清,但似乎有效。因为我也对以开头的快捷方式感到恼火 - ^ ,我还使用以下两行来禁用它们:

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

    请注意,之后您可以 M-x set-input-method 在任何时候,并表明 TeX MyTeX 以在原始的TeX输入法或定制的输入法之间切换。