Welcome!

Jelle Langedijk

2026/08/14

Blog IndexHome

Welcome to my first true blogpost! If you can read this, my concept of writing an automated blogging mechanism using purely Bash, LaTeX, pandoc, HTML and CSS succeeded. Below some kind of FAQ, for the people that are new here.

What can(’t) it do?

We can do a lot of fun stuff with this. Below, in Figure 1 you can see a photo I took. The figure number left of this text is clickable, like hyperref’s in LaTeX!

A photo of a place somewhere in Europe

We can also make codeblocks, see the build script for the entire website below. The code is neatly placed in a scrollable code block. The color sheme is implemented in the template.html against which each blogpost page is build with pandoc.

#! /usr/bin/env bash

function build {
    # First build the main page
    pandoc main.tex -f latex -t html -s -o index.html --template './template.html' --metadata title='Jelle Langedijk' &&

    # If succeeds, build the blog index as well! :)
    ## First we compile a list of all blogfiles to include
    ## To Check the amount of blogiles there are:  echo ${#blog_files[0]}
    ## To index the array: ${blog_files[0]} (1,2,3,4...)
    mapfile -t blog_files < <( ls -t ./blog | grep .tex | grep -v -e main -e linkstoblogs )
    : > ./blog/linkstoblogs.tex # Send the null command to the file. Effectively clears it.
    for texname in ${blog_files[@]}; do
        htmlname="${texname/.tex/.html}"
        blogname="${texname/.tex/}"
        #blogdate=$(date -r "./blog/${texname}" "+%Y-%m-%d %H:%M:%S %Z")
        # Read (Custom) metadata block. use AWK do grab correct parts, use xargs to remove whitespaces
        blogdate=$(head -n 3 "./blog/${texname}" | grep date | awk '{$1=$2=""; print $0}' | xargs)
        blogtitle=$(head -n 3 "./blog/${texname}" | grep title | awk '{$1=$2=""; print $0}' | xargs)
        blogauthor=$(head -n 3 "./blog/${texname}" | grep author | awk '{$1=$2=""; print $0}' | xargs)
        # Compile the blog entry
        pandoc "./blog/${texname}" -f latex -t html -s -o "./blog/${htmlname}" --template './blog/template.html' --metadata title="${blogname}" --metadata date="${blogdate}" --metadata author="${blogauthor}" --mathjax
        echo "\href{./$htmlname}{$blogname [$blogdate]} \\\\ " >> ./blog/linkstoblogs.tex
        echo "Blog '$blogname' added to index"
    done

    ## Build the blog index
    pandoc ./blog/main.tex -f latex+latex_macros -t html5 -s -o ./blog/index.html --template './blog/template.html' --metadata title='Blog ⊂ jellel.me'

    # Done :D
    echo "Building finished succesfully!"
}
build

Since this codeblock directly points to the file on the Git repository, it is automatically updated each time I build this website. Rendering mathematics is handled via MathJax (on Cloudfare), see [eulerint] below. \[\int e^{x} dx = e^{x} + C \label{eq:eulerint}\] You can rightclick on the equation to change some MathJax settings if you like. TikZ figures are currently not supported yet, altough it should be possibe via (self-written) pandoc filters.

Why did you make this so hard?

Because it’s fun. And I really like typesetting in LaTeX.

What is the goal of the blog?

There is no real goal. I will not maintain any kind of schedule (e.g. posting once every \(x\) weeks). Contributions to the blog will only be made when I feel like writing about something, which can be anything: personal projects, coffee, things I read, things I saw, et cetera.



Made with LaTeX, pandoc, html and CSS. Found (spelling) mistakes? Feel free to open an issue on the repository.

The code of this webpage is publicly available, but without a license. The (raw) content on this webpage, including the code backing it is thus copyrighted. The only exception to this is the Ortica font designed by Ben Bovani that this website uses. It is licensed under the SIL Open Font License.

Hosted on StaticHost in Helsinki.