About a year ago I posted about using in a Jekyll site for GitHub Pages. This had been an unsatisfying solution to me, since GH Pages restricts Jekyll plugins to their allowlist, meaning that if I didn’t want to manually add precompiled HTML pages, LaTeX rendering would have to be done client-side using JavaScript. Furthermore, I found out that kramdown, the Markdown compiler that GH Pages uses, has built-in support for KaTeX without needing to explicitly include additional Liquid tags, but GH Pages, too, has overridden configurations needed to enable using KaTeX as well!
On the other hand, GitLab Pages is much less restrictive with what’s allowed,
because the build process is literally just a
CI script.
This bypasses the plugins allowlist, but not the configuration overrides, which are from the github-pages
Gem.
The first thing to do, then, is to forego the Gem and include only the plugins I need in Gemfile
.
On top of that, I have the Gems required to use KaTeX as kramdown’s math engine.
source "https://rubygems.org"
gem "jekyll-feed"
gem "jekyll-gist"
gem "jekyll-paginate"
gem "jekyll-remote-theme"
gem "jekyll-scholar"
gem "katex"
gem "kramdown-math-katex"
github-pages
also specifies a number of default configurations,
but most of these are either Jekyll defaults
or undesirable (namely allowlist plugins and kramdown configurations).
I also already have a number of configurations set from when I was using GH Pages.
The below are the only missing configurations that needed adding in _config.yml
to include the Jekyll plugins and to enable using KaTeX for kramdown.
I use the KaTeX option to output MathML so that I don’t need to include a stylesheet.
plugins:
- jekyll-feed
- jekyll-gist
- jekyll-paginate
- jekyll-remote-theme
- jekyll-scholar
kramdown:
math_engine: katex
math_engine_opts:
output: mathml
Finally, to use GitLab Pages, there needs to be a CI configuration script to install Node.js
(which kramdown-math-katex
needs to run KaTeX) and to build the Jekyll site.
image: ruby:latest
pages:
script:
- apt-get update && apt-get -y install nodejs
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
Now inline LaTeX works everywhere using double dollar signs:
$$\int_{\partial \Omega} \omega = \int_{\Omega} d\omega$$
yields
.
There aren’t any delimiters for display-style math,
but you can always add \displaystyle
to a block of LaTeX.