Emacs 25.3和Enriched mode——杂谈所见即所得和标记语言

打不出来是什么意思?unicode?图片?latex?

N,N-Dimethylformamide

两个N是斜体,逗号左右不空格。

化学上的要求。在我放弃org之前是打不出来的,现在不知道。

图片

这样不行?

我不想符号也变成斜的 :zipper_mouth_face:

其实MarkDown也有很多毛病,比如标准化的问题,但我总能找到可用的实现,org就不行啦。

好吧,我只是觉得因为这放弃 org 实在可惜

并且这些行为都可以根据自己的需求 hack 的,因为这是 emacs

我看过这一功能的实现,非常复杂,我是改不了的……

还有就是,我对时间管理不感兴趣,文学编程的话,我不是写代码的,也用不上,于是就坚持MarkDown咯

@twlz0ne asciidoc 初看了一下不错呀,支持特性挺全面。我把手头的 Nikola 主题搞完再仔细比较下(目前差不多能跑起来了)。

@LdBeth Nikola 原生支持 pandoc 后端。

我的感觉是现在大部分对标记语言的讨论都在一个分歧点上,那就是标记语言到底是辅助读者来看原始文档的,还是方便作者来生成格式文档的。

想知道 Nikola 比起 Hugo 还有什么优势?

有几个著名用户算不算?譬如 MATE 桌面、wxPython 的站点就是 Nikola 支撑的。 https://users.getnikola.com

markdown 扩展更全面,table、fenced code、footnote、toc 等老生常谈了,还支持我个人比较喜欢的 Definition Lists、Admonition、CodeHilite、WikiLinks 等等。使用时选项里打开就可以了,Hugo 的 markdown 扩展就比较平庸。

其实 reStructuredText 更强大些,python 官方文档就是这个写的,用来写书都没问题。缺点是不如 markdown 那么直观,编辑器支持要少一些。

语法高亮用的广受好评的 python 库 pygments,比那些用 javascript 高亮库的不知道要高到哪里去了。

原生支持 python notebook 渲染,想把 notebook 放到博客上去?木问题啊。

比较容易扩展,比如出厂内置的 chart 扩展:扔进去一堆数据,自动生成可交互的 SVG 图表。http://pygal.org/en/stable/

模版系统支持的是 Jinja2 和 Mako,特性多使用也比较广泛。

还有些比较贴心的特性:live reload,meta 头,readmore,thumbnail,草稿,定时发稿,多作者,禁止评论,多语支持,分页 rss ……等等。

可能还有些其它优势暂时想不起来,但大都可以追根溯源到一点:使用的是 python 工具链。众所周知,python 库出名的多,Nikola 则直接使用和整合了部分资源。也许使用 go 工具链的 Hugo 生成静态页面的速度要快上那么一点,但是对比以上这些,谁还在乎这个呢?:sunglasses:

2 个赞

一直犹豫要跳哪个坑,你给我指明了一条跳坑的捷径 :joy:

还有一点疑问,有没有 org-mode 到 Nikola 的比较好的工作流或者现成的插件?

还有,Python 阵营最出名的不是 Pelican 吗?

跳吧,一起跳 :joy:

Nikola 内置的 pandoc 后端支持 org,但我没试过不知道支持到啥程度。

还有个插件看介绍直接调用 emacs 来生成 html。https://plugins.getnikola.com/#orgmode

Pelican 挺早时候试过一次。就不能支持 live reload 么?写博客和开发主题时候很需要的。但没隔多久看到 Nikola 支持格式和特性更多,就义无反顾地弃彼坑跳此坑了 :joy: 刚才又去看了一眼,值得注意的是 API 设计比 Nikola 漂亮(最近被 Nikola 快坑哭了),其它没看到啥明显的变化。

有没有试过 org-emphasis-regexp-components 这个参数?

    ;; default : " \t('\"{"
    (setcar org-emphasis-regexp-components " \t,('\"{")
    (org-set-emph-re '_ t)

只加了逗号 , ,效果如下:

emacs

html

latex

第一张是 Emacs 下的显示,后面分别是导出为 html 和 LaTeX,导出的代码都是对的。

Emacs 下最后一行第二个逗号 显示 不对? ,原因是两个正则匹配糊到一起了,不过正常使用应该不太会出现这种情况。

4 个赞

第二句那个函数是怎么用的? '_ 是什么变量?能不能麻烦解释一下?

我猜是为了让设置生效,重新计算正则表达式?所以随便什么变量都行?

对的,但我不确定会不会产生冲突。

发现并不是这样的,是我误导了,表示抱歉。

_ ,用 -Q 启动开始并没有这个变量,是后来 set 产生的 (但是其它的变量 a 这种都不行,这点好奇怪!)。我以为这个是系统的变量。

看来还是要自己设一个变量或者用 custom-set-variables

这个 _ 好可疑,有谁知道么?

原来是这个啊,前两天我还在想,是不是可以添加一组非对称的 emphasis (",/" . "/"),但 org-emphasis-alist 并不是这种写法。如果允许这种形式,副作用可能更小一点。

目前是靠同一个正则表达式类似这种 [~=*/_+] 一起匹配一次,又要实现嵌套,所以会重叠。

感觉这种不带转义的标记能肯定要有所限制,本身是为了方便书写而牺牲准确度。比如我想表达 N/,/N 的斜体是不是就又不对了?

大神,您好。

我跟很多人抱怨过,您是第一个解决问题的人。请您继续测试如下的东东是否能正常。。

N,N,N′-三甲基乙二胺

μ-η^2^:η^2^

η,η

确实,其实这种问题的最终解决就交由 latex 处理,反正 org 和 latex 集成的很好

应该是这么写的:

(org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components)

看了 org-set-emph-re 定义:

(defun org-set-emph-re (var val)
  "Set variable and compute the emphasis regular expression."
  (set var val)
  (when (and (boundp 'org-emphasis-alist)
	     (boundp 'org-emphasis-regexp-components)
	     org-emphasis-alist org-emphasis-regexp-components)
    (pcase-let*
	((`(,pre ,post ,border ,body ,nl) org-emphasis-regexp-components)
	 (body (if (<= nl 0) body
		 (format "%s*?\\(?:\n%s*?\\)\\{0,%d\\}" body body nl)))
	 (template
	  (format (concat "\\([%s]\\|^\\)" ;before markers
			  "\\(\\([%%s]\\)\\([^%s]\\|[^%s]%s[^%s]\\)\\3\\)"
			  "\\([%s]\\|$\\)") ;after markers
		  pre border border body border post)))
      (setq org-emph-re (format template "*/_+"))
      (setq org-verbatim-re (format template "=~")))))

它的作用是把 " \t('\"{" 这种可读的表达式展开,然后重新赋值给变量,例如:

;; ---------------------------------
;; befor

(defvar foo " \t('\"{")
;; foo =>
;; " \t('\"

;; ---------------------------------
;; after

(org-set-emph-re 'foo foo)
;; foo => 
;; "\\([- 	('\"{]\\|^\\)\\(\\([=~]\\)\\([^ 	
;; ]\\|[^ 	
;; ].*?\\(?:
;; .*?\\)\\{0,1\\}[^ 	
;; ]\\)\\3\\)\\([- 	.,:!?;'\")}\\[]\\|$\\)"
2 个赞