我正在尝试创建一个 python 脚本,以便在排版之前立即对 LaTeX 文档进行一些正则表达式替换,但我似乎在使替换生效时遇到了一些问题。我的脚本如下:
# -*- coding: utf-8 -*-
import os, re, sys
tex = sys.argv[-1]
tex_file = open(tex, "r+")
tex_file_data = tex_file.read()
# DO SOME REGEXES
tex_file_data = re.sub(r"\b_(.*?)_\b", r"\emph{\1}", tex_file_data)
tex_file.write(tex_file_data)
# PROCESS THE DOCUMENT
os.system("xelatex --shell-escape " + tex_file.name)
但是,每次我尝试使用此脚本处理文档时,都会遇到常见! Missing $ inserted.
错误。根据正则表达式,这些下划线应该被替换为合适的语法。但是,如果我将最后一行替换为print(tex_file_data)
,控制台将显示更改已生效的文档。据我所知,问题似乎是编辑后的文档没有正确保存,但我不确定我做错了什么。
我该如何解决这个问题,以便脚本可以用于处理文档?
编辑:在@Yuushi 的建议下,我将脚本编辑如下:
# -*- coding: utf-8 -*-
import os, re, sys
with open(sys.argv[-1], "r+") as tex_file:
tex_file_data = tex_file.read()
tex_file_data = re.sub(r"\_(.*)\_", r"\\emph{\1}", tex_file_data)
tex_file.write(tex_file_data)
os.system("xelatex --shell-escape " + tex_file.name)
但是,我仍然收到! Missing $ inserted.
错误消息,这表明原始文档仍在发送到 LaTeX 编译器,而不是正则表达式。