Org mode 中开启 pretty entities 时如何跳出上下标文字范围?

我用 rime 输入法,可以在除了 emacs 之外的其它任意地方输入数学符号,比如 leq 会转换为 ≤,而唯独 emacs 中不行。输入希腊字母则可以,这是怎么回事?好诡异啊

大家的也是这样吗?

现在的问题变为:

怎样告诉 org 我要结束上标的输入,比如 a^{sup} 我输入完 sup 之后接着输入的字符仍然是上标,因为花括号被隐藏了,输入空格也没有用。

图片

1 个赞

算了,我改用 org pretty entities 了。现在的问题是,怎样告诉 org 我要结束上标的输入,比如 a^{sup} 我输入完 sup 之后接着输入的字符仍然是上标,因为花括号被隐藏了,输入空格也没有用。

图片

我也想知道这个怎么实现,这个确实有点麻烦

其实这个功能实现起来很简单,但是找到一个合适的键位比较难。有什么比较容易按,但是又没有被 org 占用的键位呢?

给需要的同学吧:

(defun et/org-cycle (&optional arg)
  (interactive "P")
  (if (and org-pretty-entities
           org-pretty-entities-include-sub-superscripts
           (save-excursion
             (goto-char (max (line-beginning-position)
                             (- (previous-property-change (point)) 3)))
             (looking-at org-match-substring-regexp)))
      (decompose-region (line-beginning-position) (line-end-position))
      (goto-char (match-end 0))
    (org-cycle arg)))

绑定到 org-mode-map 中的 tab 就行了,我已经尽量将影响降低到最低,只用了一个正则表达式(没有用 org-element,那个太重了),如果你觉得还是不满意的话,那就只能 hack org-cycle 这个函数了(org-cycle 的功能非常多,用 around advice 还不如直接覆盖)。

注意这个只针对上下标用{}括起来,并且开启 pretty entities 的使用情形,其它情形完全没有必要 hack 。

1 个赞

个人认为绑定到tab不大好吧,可以考虑使用C-f来前进一个字母},这样更合理一点吧。

tab 不只可以前进一个字符,只要在上下标内,都可以立即跳出范围

刚刚又试了一下,发现原来的问题已经没有了,估计是刚更新了org的原因吧。

现在上下标的使用非常方便,你试试。

Org mode version 9.1 (9.1-20-ga4f139-elpaplus @ /.emacs.d/elpa/org-plus-contrib-20170911/)

我的是最新版,但是仍然有这个问题

你确定你开启了 pretty entities?

这个问题只有带花括号的上下标才有,不带花括号的不存在这个问题

带花括号的优势是上下标后面不必跟空格

有关的是这几个配置吧

(setq org-hide-emphasis-markers t
      org-catch-invisible-edits 'smart
      org-pretty-entities t
      org-use-sub-superscripts '{}	  )

不,没有关系

那你说的这个是什么意思?

我的意思是除了这两个:

org-pretty-entities t
org-pretty-entities-include-sub-superscripts t

和其它的都没有关系

然后你只有使用 a^{abc} 这种形式的上下标才能体会出来

这个默认是开启的。

这个是强制使用大括号,很好用。

我现在输入a^{b}c,会显示:Snipaste_2017-09-15_14-15-13

输入a^{b} c(依次输入,中间有一个空格),会显示: Snipaste_2017-09-15_14-16-20

没错,但是如果你想修改上标,把光标移到上标内部,然后再想出来呢?或者你同时还想使用不带花括号的上下标呢?

其实没有必要改 org-use-sub-superscripts 的值也是同样的行为。你只是还没有遇到我说的这种情况。当然很细微不容易注意。但是我是强迫症没法忍啊。

我强制使用了大括号,为了方便一些化学式的书写。

中间有空格的上下标的书写,直接移动就可以了,只是前面^部分不方便书写。

现在感觉已经方便不少了。

论坛里化学专业的人不少啊

其实我们之间还有一点使用上的差别,就是我在 org-mode 中开启了 smartparens,然后花括号都是成对输入的。这样说的话你应该能体会到我的痛苦了吧 :joy:

pretty entities 怎么输入带花括号的上标?

  1. C-c C-x \ 开启 pretty entities

  2. 依次按下:

    a ^ { s u p

  3. C-c C-x \ 关闭 pretty entities

  4. 得到:

     a^{}sup

那你应该先写完再用evil-substitute啊