我在C++/Python中有几个代码项目,其中使用乳胶格式的描述和标签来生成用LaTeX+pstricks生成的PDF文档或图形。然而,我们也有一些纯文本输出,例如文档的HTML版本(我已经有代码来编写最小的标记)和一个非启用TeX的绘图呈现程序。
对于这些,我想消除表示物理单位所必需的TeX标记。这包括不间断(瘦)空格、\text、\mathrm等。将#frac{#1}{#2}之类的东西解析为#1/#2用于纯文本输出(并使用MathJax作为HTML)也很好。由于我们目前拥有的系统,我需要能够从Python中实现这一点,也就是说,理想情况下,我正在寻找Python包,但是我可以从Python调用一个非Python可执行文件并捕获输出字符串也可以。
我知道TeX StackExchange站点上的类似问题,但没有任何真正的编程解决方案:我看过detex、plasTeX和pytex,它们看起来都有点死气沉沉,而且没有真正做我需要的事情:将TeX字符串编程转换为具有代表性的纯文本字符串。
我可以尝试编写一个基本的TeX解析器,例如pyparsing,但是( a)这可能是一个充满陷阱的帮助,这将是值得赞赏的;( b)肯定有人曾经尝试过这样做,或者知道如何连接到TeX本身以获得更好的结果?
更新:谢谢你所有的答案.这确实是一个有点尴尬的要求!我可以使用较少的LaTeX解析,但在循环中考虑解析器而不是大量正则表达式的原因是,我希望能够很好地处理嵌套宏和多arg宏,并使支撑匹配正常工作。然后我就可以减少txt-无关的宏,比如\text和\mathrm,然后处理与txt相关的宏,比如\frac .也许,即使有适当的括号!我可以梦想..。就目前而言,雷克斯并没有做这么糟糕的工作。
发布于 2018-05-03 09:11:14
我知道这是一篇老文章,但由于这篇文章经常出现在乳胶- Python解析搜索中(如仅从格式化为arXiv的.tex文章中提取正文文本所示),所以这里留给大家看:这里有一个LaTeX解析器,它支持对解析树https://github.com/alvinwan/texsoup的搜索和修改。这是取自自述的示例文本,以及如何通过TexSoup与其交互。
from TexSoup import TexSoup
soup = TexSoup("""
\begin{document}
\section{Hello \textit{world}.}
\subsection{Watermelon}
(n.) A sacred fruit. Also known as:
\begin{itemize}
\item red lemon
\item life
\end{itemize}
Here is the prevalence of each synonym.
\begin{tabular}{c c}
red lemon & uncommon \\
life & common
\end{tabular}
\end{document}
""")
下面是如何导航解析树。
>>> soup.section # grabs the first `section`
\section{Hello \textit{world}.}
>>> soup.section.name
'section'
>>> soup.section.string
'Hello \\textit{world}.'
>>> soup.section.parent.name
'document'
>>> soup.tabular
\begin{tabular}{c c}
red lemon & uncommon \\
life & common
\end{tabular}
>>> soup.tabular.args[0]
'c c'
>>> soup.item
\item red lemon
>>> list(soup.find_all('item'))
[\item red lemon, \item life]
免责声明:我编写了这个库,但出于类似的原因。关于小波比故事(关于def
)的文章,TexSoup不处理定义。
发布于 2011-01-25 14:14:19
注意:要为普通的TeX编写完整的解析器要比您想象的要困难得多。TeX级别(不是LaTeX) \def
命令实际上扩展了TeX的语法。例如,\def\foo #1.{{\bf #1}}
将\foo goo.
展开为goo --注意,这个点已成为foo宏的分隔符!因此,如果您必须处理任何形式的TeX,而不受使用包的限制,则不建议依赖简单的解析。您需要TeX呈现。猫体是我所使用的,尽管它并不完美。
发布于 2011-01-25 10:09:46
尝试detex
(随大多数*TeX发行版一起提供),或改进版本:http://code.google.com/p/opendetex/
编辑:哦,我看你已经试过了。不过,opendetex可能对你有用。
https://stackoverflow.com/questions/4792065
复制相似问题