MathJax がバージョン3になった。以前は
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$','$']],
processEscapes: true
},
CommonHTML: { matchFontHeight: false }
});
</script>
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_CHTML"></script>
などと書いていたものを
<script>
MathJax = {
chtml: {
matchFontHeight: false
},
tex: {
inlineMath: [['$', '$']]
}
};
</script>
<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
</script>
に一括置換したい。
上書きは怖いので,カレントディレクトリに new
というサブディレクトリを作り,そこに書き出すことにした。正規表現をうまく使うことがキモである:
#! /usr/bin/env python3
import sys
import re
for arg in sys.argv[1:]:
with open(arg) as f:
orig = f.read()
text = orig
text = re.sub(r'<script type="text/x-mathjax-config">.*?</script>',
'''<script>
MathJax = {
chtml: {
matchFontHeight: false
},
tex: {
inlineMath: [['$', '$']]
}
};
</script>''', text, count=1, flags=re.MULTILINE|re.DOTALL)
text = re.sub(r'<script async .*?</script>',
'''<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
</script>''', text, count=1)
if text != orig:
with open('new/' + arg, 'w') as f:
f.write(text)
うまくいったようである。
別の例として,<pre>...</pre>
を <pre><code>...</code></pre>
に直すコード:
for arg in sys.argv[1:]:
with open(arg) as f:
orig = f.read()
text = orig
text = re.sub(r'^<pre>$', '<pre><code>', text, flags=re.MULTILINE)
text = re.sub(r'^</pre>$', '</code></pre>', text, flags=re.MULTILINE)
if text != orig:
with open('new/' + arg, 'w') as f:
f.write(text)
さらに別の例として,<pre>...</pre>
の中の <code>
を <code class="prom">
に直す:
def foo(x):
t = x.group(0)
while True:
u = re.sub('<code>', '<code class="prom">', t)
if u == t:
return u
t = u
for arg in sys.argv[1:]:
with open(arg) as f:
orig = f.read()
text = orig
text = re.sub(r'^<pre>$.*?^</pre>$', foo, text, flags=re.MULTILINE|re.DOTALL)
if text != orig:
with open('new/' + arg, 'w') as f:
f.write(text)
Last modified: