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