来点有意思的, 没错, 就是 Org-mode

作为一个虚假的 Emacer, 我最近被 org-mode 种草了. 于是我想要在之后好好了解一下 org-mode 以及用它来写博客, 而不是 markdown. (嘿嘿嘿… )

于是我做了一些小小的配置, 主要参考的是: org-mode で blog 这个网站. 其中使用到的插件为 jekyll-org, 并且最后加上我的一点点丢人现眼的, 微不足道的配置和测试.

配置

Jekyll Side

只需要做两件事情:

  1. 修改 _config.yml 文件
    • plugins 下面添加一行: jekyll-org 即可
      plugins:
        - jekyll-org
      
    • (optional) 为 org-mode 添加 liquid tag 支持:
      org:
        liquid: true
      

      等价于为每个文件都启用 #+liquid: enabled 的 prompt.

  2. 修改 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: 我已经有了

(不过尴尬的是: 在我电脑上会报错的操作, 在服务器端并不会… 害, 那么就造作服务器也可以. )

基本的逻辑是这样的:

  1. 配置环境, 使用的是 actions/checkoutruby/setup-ruby 这两个已经写好了的 Action.
  2. 生成静态网站, 也就是 _site: bundle exec jekyll build
  3. 然后将这个静态网站推送到 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
    
  • 图片插入

    /_img/meme/see-isnt-these-what-you-want.png

  • 链接跳转, 跳转至 测试, 貌似不行…

Org-mode

让我来介绍一下为什么我会想要使用 org-mode 吧.

契机是这个学期的 C 语言课程 (雾), 课程的作业及其朴素, 基本就是运行个代码就能够解决的问题. 所以我写了一个程序, 能够自动读取 (生成) 代码, 然后将运行的结果输出, 最后用 pdf 导出的一个程序.

(看到这里的大佬估计可以认出这就是一个 org-babel 就能够解决的问题, 但是我写的十分的丑陋, 并且还很难用. 如果有)