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

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

想知道 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。Plugins for Nikola

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 个赞

不是大婶,表示看不懂。 符号是全角的?

复杂的式子建议用 LaTex 写,正则表达式不是万能的,org-emphasis-regexp-components 修改不当会带来难以预料的副作用,有可能你解决了 a 问题,却制造了 b/c/d 问题。

1 个赞

其实我到现在还没弄清楚你的需求,是 emacs 显示还是导出 html 还是 LaTeX? :laughing:

pre 添加了 -, ., ,, :post 添加了 , ^。 貌似这个单引号和 ' 不一样。

    ;; default : (" \t('\"{" "- \t.,:!?;'\")}\\[" " \t\r\n" "." 1)
    (setq org-emphasis-regexp-components
         '("- \t.,:('\"{" "- \t.,:!?;′^'\")}\\[" " \t\r\n" "." 1))

弄不懂 ^2^ 是什么意思。效果如下,有没有副作就不得而知了。

emacs2

2 个赞

非常高兴能和您讨论。您说用LaTeX实现,我是赞同的,这种化学符号在LaTeX世界里也有专门的宏包,当然质量什么的可能不是那么让人满意,毕竟化学圈用的人太少了。

我一直的一个想法,在脚本语言中使用LaTeX的语法,Org和Markdown也确实都可以这么办,可嵌入了LeTeX都把这些化学名当成了数学符号,这是我不喜欢的,就好像上面的例子,里面还有中文呀。

总之,这种比较特殊的排版需求对于工具的要求比较高 :rofl:

谢谢您。我当然希望导出和显示都是正常的,起码导出要正常。^2^表示2是上标的,这是Pandoc扩展的Markdown语法,也是我一直使用的。(我觉得Org支持LaTeX风格的上标^{}是非常好的,Pandoc的扩展不美观,只是为了和Markdown原来的风格保持一致。)

您的尝试证明了,通过定制可以满足我的需求,这解决了我的一个吐槽。

也顺带回复一下您之前的问题,,这个不是什么全角半角的问题,因为所谓的「全角」只有涉及中文才有意义。这个符号是Prime,我毛病多喜欢用这种一般人不用的东西 :joy: 这和Xah有点像

我觉得您说的这两者不矛盾,如果转换器和显示器(就是能「渲染」出标记语言的东东)够好。

我用的是hakyll + org-mode 写博客,目前感觉还不错,没有很复杂的排版需求。