org-mode 导出 HTML 代码高亮难看

使用的是 Spacemacs,为什么我的 org-mode 导出的 HTML 文件样式中源代码的注释很难看,请问如何修改?

我得到的

Spacemacs Rocks 第二季 (好看的)

导出的源代码与可能与你的编辑器主题有关。

@XCREATES 请问如何导出和《21天学会Emacs》电子书一样的样式?

跟编辑器主题没关系吧,应该是导出模版的样式: http://orgmode.org/manual/CSS-support.html

说不准,有时候 emacs 导出代码的时候,会提取当前主题的颜色来使用。。。。 理由很简单: 既然用户用这种颜色的主题,肯定喜欢导出这种颜色

1 个赞

使用的是和作者一样的CSS主题, clone github仓库的,实测导出会跟着主题改

但还是跟作者不太一样, 不知道作者使用的是什么主题,我这里用的是solarized-light

某些情况下(我不知道)也许会受到影响,但是如果用 https://github.com/emacs-china/Spacemacs-rocks/blob/master/deploy.sh 脚本来生成,应该跟主题无关了。

不过这个脚本依赖特定版本(v8.3.6)的 org-mode,版本不对可能会出错,例如 org-mode 9.x 提示:

⋊> git clone --depth 1 https://github.com/emacs-china/Spacemacs-rocks/ && cd Spacemacs-rocks
⋊> sh ./deploy.sh
....
Please install htmlize from https://github.com/hniksic/emacs-htmlize

OP (@DL-85) 得到的高亮来自是 Emacs 的 Face (透过 htmlize.el),Spacemacs Rocks 得到的高亮来自 highlight.js

如果需要像 Spacemacs Rocks 那样,需要:

  1. 引入 highlight.js
  2. Org 导出 HTML 时禁用 htmlize.el
    • 交互模式下,我不知道怎么做到
    • Batch 下, htmlize.el 本来就不可用
  3. 替换 <pre ..> 标签的写法,参考 rasmus/org-html-wrap-blocks-in-code

禁用 htmlize.el 能顺利导出么,我对 org-mode 不太了解。现在用的是 emacs 几个版本正好都不是 org-mode 8.3:

⋊> sh ./deploy.sh emacs-25
Org-mode version 8.2.10 (release_8.2.10 @ /Applications/Emacs-25.3.app/Contents/Resources/lisp/org/)
Symbol’s function definition is void: org-element-update-syntax
⋊> sh ./deploy.sh emacs-26
Org mode version 9.1.2 (release_9.1.2-40-g6ca906 @ /Applications/Emacs-pretest-26.0.90.app/Contents/Resources/lisp/org/)
Please install htmlize from https://github.com/hniksic/emacs-htmlize

构建脚本(我做了些修改,使其支持指定 emacs)并没有显示禁用 htmlize,该特性只是处于不可用状态。但是 htmlize 不可用的时候会出错,如何忽略这个错误/显示禁用 htmlize?

看起来只是 8.3 可以,我们现在见到的 http://book.emacs-china.org 就是这么得到的。但貌似最近的版本不行了,如果强制使用 htmlize 的话,这就可以当作 Bug 了,因为 htmlize 本身就不好(但我承认它很酷),有足够的理由避免使用它:

  • 受 Emacs 配色影响,很难重现
  • Batch mode 下无效

我也不知道

http://book.emacs-china.org/ 的结果是在 Travis CI 上导出的,如果需要在本地导出的话:

$ wget -O - http://orgmode.org/org-8.3.6.tar.gz | tar xvz
$ emacs README.org --batch -l generate_readme.el -f org-html-export-to-html
$ open README.html

我修改了一下构建脚本,加入 htmlize:

  • deploy.sh

    -emacs README.org --batch --eval="(load-file \"generate_readme.el\")" -f org-html-export-to-html --kill
    +${1:-emacs} README.org --batch --eval="(load-file \"generate_readme.el\")" -f org-html-export-to-html --kill
    
  • generate_readme.el

    -(add-to-list 'load-path "./org-8.3.6/lisp")
    +(add-to-list 'load-path "~/.emacs.d/el-get-26.0.90/org-9.1.2/lisp")
    +(add-to-list 'load-path "~/.emacs.d/elpa-26.0.90/htmlize-20171017.141")
    

导出的效果如下:

似乎并没有什么问题?

htmlize.el 没发挥任何作用却必须得装上。

同意。然而我发现深背景的主题导出到默认白底 的网页效果简直hhhhhh 所以我把导出的代码块加了深色背景的css

导出的时候切亮色主题吧。。。

1 个赞

弱弱的问一下,spacemacs rocks 是用的 jekyll 生成 gh pages 的吗?

Edit:好吧,只有一个页面。

上游已经当作一个 Bug 修复了,现在把 org-html-htmlize-output-type 改成 nil 就行了。

https://github.com/emacs-china/org-mode/commit/3f8d67c4904a17a6a0165cc5d2bbe4ee16917f50

3 个赞

被这个脚本坑了一把,里边修改了全局的 git_author_namegit_author_email,当时没注意。后来往 github 推了几个提交之后才发现不对,还以为自己电脑被黑了,找了很久才找到原因。

不知道是不是可以改为项目本地设置,对 travis 有无影响?@xuchunyang @zilongshanren

这个脚本看起来只应该在 Travis CI 中运行,怎么被你运行了呢?是不小心么?

就是之前参与本帖讨论的时候运行过。