我也是使用的spacemacs,把上面的配置放在自己layer/config.el里面是没有问题的。然后再是eval after load,没有出现问题。
还好导出html是正常的,只是在org里渲染不正常。
另外还有一个无法解决的问题:行内代码。 org-mode用 =代码= ~代码~ 来表示行内代码。但是代码经常有等号,即使用 ~代码~ 这种格式来表示,代码里有个单引号也会挂掉。
如果只是想用orgmode输出HTML作为博客,那我找到一种方案:
用HTML引用。 就是用@@HTML:开标签/闭标签@@
来包裹标签。
另外有一个问题就是链接格式化的问题,为什么链接的格式化会往后延?如上图,只有第一个“豆瓣FM”是链接,结果链接的样式延生到后续的所有文本。我找了org-mode手册里的链接相关的资料,没有讲到这方面的问题。
因为 Org 没有考虑到中文的习惯,需要在 [[]]
后面加个空格。
那就只能 hack on Org。不然就用 Markdown 之类的别的。 我记得 melpa 上面有个 org-chniese,集成了一些针对中文的 hack,里面就有解决导出 html 的问题。
可以问问 Org 方面,感觉可以当作一个 Bug(?),因为链接后面的文字,即便没用空格隔开也完全没有必要高亮。
[[link][description]]FOOBAR
^^^^^^
org-submit-bug-report中
link 的问题要是能解决真是造福广大中文用户了,我都是自己 hack 解决的。
找到一个org-chinese-utils,在导出html的时候,会替换标记前后的空格。还不错!but,不会替换链接之后的空格。
关于 “Org 链接后面不加空格高亮有问题”,Org 的邮件列表上 Kaushal Modi 给出了一个 work-around:
(setq org-highlight-links (delete 'plain org-highlight-links))
我试了下能解决问题,但是副作用是会把 plain link 的高亮取消掉。
在org-mode中,有下标的时候会改变行高,这个可以设置吗?如何才能等高?
改变行高看着就不舒服了。
最新版的 org-mode 通过设置变量 org-emphasis-regexp-components 来支持中文行内格式化的方法貌似已经没用了。
Org mode version 9.2.3 (9.2.3-17-g4df705-elpaplus @ /home/james/.emacs.d/elpa/26.2/develop/org-plus-contrib-20190513/)
有同学碰到相同的问题吗?
org-chinese-utils 感觉好像是我写的,后来删库了,现在还能找到?
偶然在 Org-mode 的手册里发现了一个 zero width space,可以解决中文两边必须有空格的问题,同时不会影响展示效果(Spacemacs)。
使用方法:在需要插入空格的地方输入
C-x 8 <RET> zero width space <RET>
在orgmode里开启goto-address-mode
就可以高亮URL了
5年过去了……有更好的解决方案了吗?
我也想知道现在有没有更好的办法解决org-mode中文行内格式化的问题。
最近有了新思路:
先 selection 要 markup 的字段,然后键入相应的 markup 符号,自动在其前后插入 zero width space. 副作用是光标经过 zero width space 时会变细,不过不影响整体美观,操作也比较方便。
;;;###autoload
(defmacro org-surround-markup (&rest keys)
"Define and bind interactive commands for each of KEYS that surround the region or insert text.
Commands are bound in `org-mode-map' to each of KEYS. If the
region is active, commands surround it with the key character,
otherwise call `org-self-insert-command'."
`(progn
,@(cl-loop for key in keys
for name = (intern (concat "unpackaged/org-maybe-surround-" key))
for docstring = (format "If region is active, surround it with \"%s\", otherwise call `org-self-insert-command'." key)
collect `(defun ,name ()
,docstring
(interactive)
(if (region-active-p)
(let ((beg (region-beginning))
(end (region-end)))
(save-excursion
(goto-char end)
(insert ,key)
(insert-char #x200b) ;; Insert zero width space to make inline markup work.
(goto-char beg)
(insert-char #x200b)
(insert ,key)))
(call-interactively #'org-self-insert-command)))
collect `(define-key org-mode-map (kbd ,key) #',name))))
(org-surround-markup "~" "=" "*" "/" "_" "+" "$")
Evil 用户可以用 evil surround 来搞定。
(use-package evil-surround
:after evil
:config
(global-evil-surround-mode 1)
;; Use non-spaced pairs when surrounding with an opening brace.
;; Insert zero width space for org inline markup.
(evil-add-to-alist 'evil-surround-pairs-alist
?\* '("\x200B*" . "*\x200B")
?\+ '("\x200B+" . "+\x200B")
?\/ '("\x200B/" . "/\x200B")
?\~ '("\x200B~" . "~\x200B")
?\= '("\x200B=" . "=\x200B")
?\$ '("\x200B$" . "$\x200B")
?\_ '("\x200B_" . "_\x200B")))
参考: