使用python修改LaTex文件中的单词,忽略LaTeX标记

时间:2017-07-18 08:05:01

标签: python latex

我想运行一个自动化的#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命令,注释等。

感谢。

2 个答案:

答案 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']

“儿童”是strTexNode的混合体。您可以在那里挑选纯正的琴弦进行检查,然后自己走一下树。 children属性仅包含TextNode元素。

答案 1 :(得分:0)

当我得到你需要的东西时,python不应该是最合适的乐器。我认为您需要的是sedvim编辑器和一组编辑脚本。它比编写python脚本更快,更容易维护