Convert MathJax in Obsedian to MathJax in Hugo

Hongtao Hao / 2022-05-11

In Obsedian, you just use:

But in Hugo, you need to use:

Similary,

$$Something here$$

needs to become

$$Something here$$

Then Obsedian and Hugo are the same.

Mathjax #

So, how to convert MathJax in Obsedian to that in Hugo?

We can use Python.

import re

# reaf file
f = open('yourfile.md', 'r')
txt = f.read()

# this line is from 4castle: https://stackoverflow.com/a/38645273
txt = re.sub(r'\$([^$]*)\$', r'$\1$', txt) txt = re.sub(r'\$\$([^$]*)\$\$', r'$$\1$$', txt)
with open('txt.md', 'w') as f:
f.write(txt)

I’ll explain line by line.

re.sub(r'\$([^$]*)\$', r'$\1$', txt) What this line does is to replace the pair of dollar sign with $$. Try that on txt = "I want to do that" and you’ll know that. The problem is that the above pattern does not work for string like this:$$I want to do that$$will become $$I want to do that$$ To solve the problem, we apply: re.sub(r'\\([^]*)\\', r'$$\1$$', txt) Images # Obsidian uses a different image importing method. Its format is like this: ![[hori-verti.png]] But we want it to be like this in Markdown: ![](images/hori-verti.png) This is a trivial task: txt = "![[hori-verti.png]]" # replace ![[ with ![](/image/ txt = re.sub(r'!$\[', '![](/image/', txt) # replace ]] with ) txt = re.sub(r'$\]', ')', txt) Script # This is the script: import re # the input obsedian file name input_fname = 'calc.md' # output file name output_fname = 'txt.md' # image directory image_dir = '/media/enblog/calc-pics/' # reaf file f = open(input_fname, 'r') txt = f.read() # this line is from 4castle: https://stackoverflow.com/a/38645273 txt = re.sub(r'\([^]*)\', r'\1', txt) txt = re.sub(r'\\([^]*)\\', r'$$\1$\$', txt)

# replace ![[ with ![](/image/
txt = re.sub(r'!$\[', f'![]({image_dir}', txt) # replace ]] with ) txt = re.sub(r'$\]', ')', txt)

with open(output_fname, 'w') as f:
f.write(txt)

Last modified on 2022-09-30