Org-mode and Jekyll
来点有意思的, 没错, 就是 Org-mode
作为一个虚假的 Emacer, 我最近被 org-mode 种草了. 于是我想要在之后好好了解一下 org-mode 以及用它来写博客, 而不是 markdown. (嘿嘿嘿… )
于是我做了一些小小的配置, 主要参考的是: org-mode で blog 这个网站. 其中使用到的插件为 jekyll-org, 并且最后加上我的一点点丢人现眼的, 微不足道的配置和测试.
配置
Jekyll Side
只需要做两件事情:
- 修改
_config.yml
文件- 在
plugins
下面添加一行:jekyll-org
即可plugins: - jekyll-org
- (optional) 为 org-mode 添加 liquid tag 支持:
org: liquid: true
等价于为每个文件都启用
#+liquid: enabled
的 prompt.
- 在
- 修改
Gemfile
文件- 添加
gem 'jekyll-org', '>= 1.1.0' gem "pygments.rb", "~> 2.3" # optional for syntax highlighting
或者可以直接命令行运行:
bundle add jekyll pygments.rb
- 关于语法高亮, 因为
minima
主题 (就是我用的这个) 自带高亮, 所以只确保bundle add pygments.rb
.
- 添加
然后就是快乐的使用体验了.
Org-mode
相比 markdown 的 yaml 配置:
layout: post
title: Title
date: 2022-12-04 12:00:00 +0800
math: true
categories: notes
在 org 下, 和一般 tag 一样:
#+layout: post
#+title: Org-mode and Jekyll
#+date: 2022-12-05
#+math: true
#+categories: jekyll
一些其他的配置
站内链接
这个目前我还不知道该如何实现.
因为在 markdown 方面, 我使用的方式是
site.github.url
来指出网页的根地址,
然后写相对地址.
目前的方式仍然是用老的那一套, 缺点就是没法在本地很好地处理相对跳转.
(就是很丑, 不过也无所谓了. 希望之后可以解决这个问题. )
数学公式
可以参考之前的一个笔记: 考完后的katex小教程.
然后在文档中添加: #+math: true
.
Github Pages and Github Actions
结果我发现, 问题并没有我想得那么简单就是了…
推送到 Github Page 上后, 发现了一个非常尴尬的问题:
Github Page 因为安全性考虑, 所以对可以使用的 plugin 设置了一个白名单,
而恰好, 这个白名单极其的狭窄, 并不包含我所使用的 jekyll-org
插件.
难道就无解了么?
一开始想要使用 这篇文章 中提到的方法来实现. 但是发现这样太麻烦了, 根本不好用. 所以打算走别的路线: 通过 Github Actions 来 build, 然后放到 gh-page branch, 让 Github Pages 到 gh-page 来生成网页.
原理是这样的, 但是实际操作还是很头疼, 因为一些不知道为什么的原因, 我没法在我的电脑上安装 jekyll 环境, 所以我使用的是 docker 镜像来实现的. 虽然并不知道是否是镜像的问题, 我在尝试现成的 Github Actions Workflow 的时候, 不是遇到 Ruby 和 Gem 版本不对, 就是遇到虽然成功了, 但是貌似渲染出了问题, 总之这样乱七八糟的, 让我很是不爽.
于是我打算了解一下如何自己写一个 Github Actions.
本地环境
每次测试都提交到 Github 上也未免有些尴尬… 所以换到本地先进行测试通过后再放到远程. 需要安装:
- nektos/act: 本地的 Github Actions,
brew install act
- docker: 我已经有了
(不过尴尬的是: 在我电脑上会报错的操作, 在服务器端并不会… 害, 那么就造作服务器也可以. )
基本的逻辑是这样的:
- 配置环境, 使用的是
actions/checkout
和ruby/setup-ruby
这两个已经写好了的 Action. - 生成静态网站, 也就是
_site
:bundle exec jekyll build
- 然后将这个静态网站推送到
gh-pages
分支, 也就是 Github Pages 去查看的分支.其中有一个坑就是, 因为一开始我使用 Jekyll 的时候, 将图片文件地址写成了
_img
, 而 Jekyll 默认不包含_
开头的文件, 并且 Github Pages 默认使用 Jekyll 来生成网页.于是就会导致我的网页图片无法正常显示…
一个曲线救国的方式就是在
gh-pages
中加入一个.nojekyll
的文件, 让 Github Pages 默认不使用 Jekyll.
具体的代码可以查看我的 仓库.
测试
因为我才刚开始使用 Org-mode, 所以我只能测试很小的一部分.
- 数学公式
$$A + B = C$$
以及行内公式 $x = f(x)$.
- 代码
5.times do |i| puts "I am lucky!" end
- 图片插入
- 链接跳转, 跳转至 测试, 貌似不行…
Org-mode
让我来介绍一下为什么我会想要使用 org-mode 吧.
契机是这个学期的 C 语言课程 (雾), 课程的作业及其朴素, 基本就是运行个代码就能够解决的问题. 所以我写了一个程序, 能够自动读取 (生成) 代码, 然后将运行的结果输出, 最后用 pdf 导出的一个程序.
(看到这里的大佬估计可以认出这就是一个 org-babel 就能够解决的问题, 但是我写的十分的丑陋, 并且还很难用. 如果有)