我想运行一个自动化的#34;拼写检查程序"一些LaTex文件(除了拼写它还能检测某些自定义单词等)。我需要读取LaTex文件,在文档文本中找到某些单词(即如果它们是LaTeX标记代码的一部分则忽略单词),然后将每个单词包装在附加的LaTeX高亮标记中并将文件写回。 E.g。
\title{My Document}
...
I won the title!
如果我搜索" title",那么它应该忽略" \ title"。
这样,在渲染时,修改后的LaTeX将使用我添加的突出显示找到找到的单词,例如:
\title{My Document}
...
I won the \colorbox{red}{title}!
库会很有用,因为我最终可能需要额外的解析/控制功能,但现在我只需要进行简单的修改。
看起来困难的部分是从实际正文中识别LaTex命令,注释等。
感谢。
答案 0 :(得分:3)
您需要一个Python LaTeX解析器才能执行此操作。这看起来像一个很好的候选人https://github.com/alvinwan/TexSoup,有几个可用。
与BeautifulSoup一样,有搜索功能可以让你找到所有的文本节点,然后你可以使用常规的python split / search函数找到拼写错误的单词,然后用一组新的latex节点替换文本节点(带有所选单词周围的包装语法。)
TexSoup的文档对于如何将文档写回来有点不清楚,但是看看它们的源代码,它们似乎会覆盖repr
函数,所以:
with open('out.tex','w') as f:
f.write(repr(soup))
应该为你做。
修改强>
如果你看一下descendants
发电机:
>>> [x for x in soup.descendants if isinstance(x, str)]
['\x08egin', '(n.) A sacred fruit. Also known as:', '\x08egin', 'Here is the prevalence of each synonym.', '\x08egin', 'red lemon & uncommon ', 'Hello \textit', '.', 'Watermelon', 'red lemon', 'life', 'itemize', '& common', 'tabular', 'document']
“儿童”是str
和TexNode
的混合体。您可以在那里挑选纯正的琴弦进行检查,然后自己走一下树。 children
属性仅包含TextNode
元素。
答案 1 :(得分:0)
当我得到你需要的东西时,python不应该是最合适的乐器。我认为您需要的是sed
或vim
编辑器和一组编辑脚本。它比编写python脚本更快,更容易维护