以编程方式将 LaTeX 代码转换/解析为纯文本

2023-12-22

我有几个 C++/Python 代码项目,其中使用 LaTeX 格式的描述和标签来生成使用 LaTeX+pstricks 制作的 PDF 文档或图表。然而,我们也有一些纯文本输出,例如 HTML 版本的文档(我已经有代码来为此编写最小标记)和不支持 TeX 的绘图渲染器。

对于这些,我想消除例如所需的 TeX 标记。代表物理单位。这包括不间断(薄)空格、\text、\mathrm 等。将 \frac{#1}{#2} 之类的内容解析为 #1/#2 以获得纯文本输出(以及使用 MathJax 作为 HTML)。由于我们目前拥有的系统,我需要能够通过 Python 执行此操作,即ideally我正在寻找一个 Python 包,但我可以从 Python 调用并捕获输出字符串的非 Python 可执行文件也可以。

我知道TeX StackExchange 网站上有类似的问题 https://tex.stackexchange.com/questions/6431/options-for-converting-latex-to-plain-text,但没有任何真正的编程解决方案:我研究过 detex、plasTeX 和 pytex,它们看起来都有点死了,并没有真正做我需要的事情:TeX 字符串到代表的编程转换纯文本字符串。

我可以尝试使用例如编写一个基本的 TeX 解析器pyparsing,但是a)这可能充满陷阱,我们将不胜感激,b)肯定有人以前尝试过,或者知道一种方法来连接TeX本身以获得更好的结果?

Update:感谢您的所有回答...这确实似乎是一个有点尴尬的要求!我可以用较少的 LaTeX 解析来凑合,但考虑解析器而不是循环中的正则表达式负载的原因是我希望能够很好地处理嵌套宏和多参数宏,并获得大括号匹配才能正常工作。然后我可以例如首先减少与 txt 不相关的宏,例如 \text 和 \mathrm,然后处理与 txt 相关的宏,例如 \frac 最后...甚至可能使用适当的括号!好吧,我可以梦想......目前正则表达式并没有做那么糟糕的工作。


我知道这是一篇旧文章,但由于这篇文章经常出现在 Latex-python-parsing 搜索中(如仅从 .tex 格式的 arXiv 文章中提取正文文本 https://stackoverflow.com/questions/49779853/extract-only-body-text-from-arxiv-articles-formatted-as-tex),把这个留给下面的人:这是一个 Python 中的 LaTeX 解析器,支持对解析树的搜索和修改,https://github.com/alvinwan/texsoup 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 不处理定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式将 LaTeX 代码转换/解析为纯文本 的相关文章

随机推荐

  • AngularJS:将照片作为多部分表单数据上传并发布并获取响应

    我想上传图像并将其发布到我的服务器 该服务器应该将图像进一步发布到某些 API 并获取其响应 我可能可以将视图与类似的东西一起使用
  • 重新启动后,图库中图像的权限会丢失

    我的应用程序允许用户从图库或其他位置查看一些选定的图像 我通过以下方式请求图像的 Uri Intent photoPickerIntent new Intent Intent ACTION PICK photoPickerIntent se
  • Android 上出现“ 已恢复时意外恢复”消息是怎么回事?

    我的几个 Android 应用程序在 logcat 输出中显示以下类型的消息 I UsageStats 59 Unexpected resume of com totsp test while already resumed in com
  • 如何将动态数据添加到 QML 表

    我正在尝试从 Python 将行添加到表中 我正在使用用 QML 描述的 TableView 我不知道如何将模型添加到表中 除非模型也在 QML 中 但我不知道如何向模型添加值 import sys from PyQt5 QtCore im
  • Rails 中仅响应 json

    在我的只有 json 的 Rails 应用程序中 每当有人调用我的 Rails 应用程序并将接受标头设置为除 application json 之外的任何内容时 我想发送 406 代码 当我将内容类型设置为除 application jso
  • 我可以将评论信息保存在我的 Jar 文件中(由 Ant 生成)吗?

    当我使用 Ant 将项目构建为 Jar 文件时 我同时生成 javadoc 但是当我在新项目中使用这个 Jar 时 我在 Eclipse 中看不到 Jar 的注释 按 F2 因此 我尝试在新项目属性的 javadoc Location 中添
  • AngularJS:如何将 JSON 数据加载到作用域变量上

    我正在创建一个个人网站 我可以在其中不断更新内容 而无需操作HTML 我试图通过简单地加载和更新来实现这一点JSON文件 但现在我在加载时遇到问题JSON数据到scope多变的 HTML div div
  • 使用C#.net进行语音记录(winmm.dll)

    我的要求是构建一个实用程序 可以录制语音 通过麦克风 并将 wav 文件作为桌面和 Web 应用程序保存在磁盘上 对于特定用户 所以我选择了 activeX 技术 因为我没有找到任何其他更好的方法 也许你知道并且可以指导我 将非常受欢迎 我
  • 如何使用 Stream Writer 写入文件开头?

    我想将字符串插入到文件的开头 但是在流编写器中没有附加到开头的功能 那么我应该怎么做呢 我的代码是 string path Directory GetCurrentDirectory test txt StreamReader sreade
  • Go 中将 int 和 long 转换为字符串

    我有这样的并发例程 Routine 1 for 30 times Send string Routine 2 out lt chan string for case str lt out fmt Println str 现在 我想从例程 1
  • 同时通过管道发送到 grep 并重定向到 stdout

    在 Linux bash 中 我尝试运行命令并 grep 获取参数 command grep 但是 我需要重定向结果commad到标准输出并同时将其传送到 grep 我需要看到grep结果和command结果为标准输出 我用谷歌搜索了一下并
  • NHibernate 还是 Fluent NHibernate? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 部署 WAR 文件时出现问题。无法启动组件[]

    我目前在将 WAR 文件部署到 Tomcat7 服务器时遇到问题 我是使用 java 进行 Web 开发的新手 一切在 Eclipse 中运行良好 但是当我生成 WAR 文件并将其部署到服务器时 出现以下错误 无法启动组件 下面是日志转储
  • 在笔记本电脑上测试时使用 MeteorCamera.getPicture() 拍照时出错

    我正在努力使用 Meteor 的 mdg camera 插件向我的应用程序添加照片功能 目前 我没有任何 PhoneGap 设备设置 因此我正在我的笔记本电脑上进行测试 我想我在某处读到 当相机不可用时 Meteor 实现会回退并使用简单的
  • 使用 OpenCV detectorMultiScale 来找到我的脸

    我很确定我的总体主题是正确的 但我没有找到任何面孔 我的代码读取自c cv2 VideoCapture 0 即计算机的摄像机 然后 我进行以下设置以产生面部所在的位置 正如您所看到的 我正在循环遍历不同的scaleFactors和minNe
  • 在 C# 中使用 MailMessage 发送电子邮件

    我在使用 MailMessage 发送电子邮件时遇到一些问题 我有两个电子邮件帐户 电子邮件受保护 cdn cgi l email protection and 电子邮件受保护 cdn cgi l email protection 并且我希
  • 计算两个数据集的两点之间的距离(最近邻)

    我想计算两个不同数据集中两点之间的距离 我不想计算所有点之间的距离 只是到 datasetB 最近的点 一些例子 数据集 A 人员 http pastebin com HbaeqACi http pastebin com HbaeqACi
  • 为什么firefox没有水平滚动条可供选择

    为什么 FireFox 中没有水平滚动条用于此类选择
  • 如何从图像(jpg、png等)中提取图层

    给定一个图像 例如 CakePHP 徽标 如何将该图像转换回带有图层的 PSD 作为一个人 我可以轻松地弄清楚如何将其转换回带有图层的 PSD 我可以看出背景是带有星形边缘的圆形 因此 圆形星形部分位于后面 蛋糕图像位于其上方 并且单词 C
  • 以编程方式将 LaTeX 代码转换/解析为纯文本

    我有几个 C Python 代码项目 其中使用 LaTeX 格式的描述和标签来生成使用 LaTeX pstricks 制作的 PDF 文档或图表 然而 我们也有一些纯文本输出 例如 HTML 版本的文档 我已经有代码来为此编写最小标记 和不