有没有好的清洁最小将定义明确的乳胶代码转换为 html(最好是 perl)?
我曾经使用过 htlatex 和 latex2html,但它们的目标过于宏大和复杂,结果却不够理想。它们及其输出很难修改、清理或进一步处理。我需要更简单的东西。我甚至考虑过用 md 编写文档,主要是因为 markdown 可以生成 latex 和 xhtml。但我的主要动机是能够创建新的干净文档。出于我自己的目的而使用 markdown 会失去很多 latex 功能,而无法获得我想要的 xhtml 功能。
现在,当我查看一些旧的示例文档时,我意识到我希望转换器做的大部分事情是理解简单的标准 latex 文档。我不需要它来理解用户定义的宏。我需要准解析器来创建有效的 xhtml 并最终促进转换为 epub。
我猜这已经被写过很多次了,所以如果有人知道一个 (perl-) 解析器可以做到这一点,请告诉我。我稍微考虑了一下我的需求列表:
关于注释(%)、转义符(\%、$、\\)等以及段落开头的智能。它应该相当智能,但不必完全防止巧妙的错误乳胶输入。(\%\\%$%\% 是什么意思?程序只需抱怨即可。)
了解特殊字符如何转换为 HTML 实体(例如 \"a、\gamma、\cdot)
字体形状、大小、粗细、颜色、下划线、上划线、删除线
直接等价环境的知识(例如 \begin{quote} 和 <quote>,或 \section 和 h1)
环境(例如 \begin{table} ... \end{table} 到 <div class="table",或 theorem 到 div class=theorem。)
tabulars 转为 table,graphicx 转为 img
表格智能(例如,& 到 <td>,\\ 到 <tr>,多列到跨行等);(如果有人有独立的 perl .pm 程序可以独立智能地执行此操作,请告诉我。)
枚举/逐项列出/描述列表
将数学运算传递到 mathjax(或者更好的是创建可重新缩放的 html+css-mathjax 最终输出)
href,包括内部和外部
(可能有一些间距,bigskip,medskip,smallskip,\;)
一些指令功能可以指示转换器包含原始 html 的位,或者忽略乳胶的部分。
一些功能可以决定无法识别的项目。例如,可以将它们放入具有类的特殊 div 中或放入注释和 css 样式中,并提供投诉选项和/或打印而不是注释。主要思想是,人们可以编写另一个 unix 过滤程序来挂接到该程序的输出并进行进一步处理。
任务紧凑、可定义。
有没有适合这个的好的入门 perl 程序?我的问题是我有太多其他任务,所以我开始编写一个程序,然后忽略它很长时间,几乎不记得它,然后程序遭受了 bitrot 的影响。保持它的独立性并以这种理解水平作为它自己的命令行程序应该意味着这样的转换器更有可能保持可维护性。表格到表格的转换似乎是最复杂的部分。上述许多任务似乎主要需要巧妙的正则表达式,仅此而已。
(PS:对我来说,它也可以作为我认为是好的 latex 文档的 lint 检查器,又名 usepackage{nag}。如果转换器可以生成漂亮的 html,那么 pandoc 也可以转换为其他格式。)
真挚地,
法律
答案1
我知道这可能已经写好了许多比我在这里用两天时间用普通的 perl 背景写出来的要好很多倍,但因为我找不到一个可读性强、能完成基本工作的好的入门书,所以我尝试
http://ivo-welch.info/computers/iawltx2html/
我本来想把它贴在这里,但因为它太长了,有 400 行 perl 代码(加上一个很长的实体数据库,加上一个文档示例)。400 行的 perl 程序应该相当易于维护。它也可以更好地进行重构。
将其视为一个良好的开端和概念验证。perl 程序不会尝试生成与 latex 外观相匹配的文档。相反,它尝试将合理的子集 latex 文档转换为 html 文档,以便稍后使用 css 和 mathjax 进行样式设置。它会通知用户哪些标签尚未转换(并且已传递以供后续处理)以及哪些标签应进行样式设置。
唉,我在使用表格时遇到了问题,尤其是 \hline(或 \toprule 等),以及格式化列。我试过
<table style="tr td:nth-child(2) { text-align:right }">
以及大约 20 种变体,包括各种版本的表、tr、td,但似乎都不起作用。
一个小麻烦是 Regexp::Common 平衡匹配包含括号,所以我必须去掉它们。它也无法处理两个连续的参数,在这种情况下,我会转而使用 {.*?} 进行匹配。这实际上主要是带有可选参数的命令的问题。这也处理得不好。
另一个麻烦是 <li> 和 <p> 仍然不平衡。因此,如果需要 xhtml,则需要使用 tidy 或 pandoc 进行清理。比我更聪明并且对 html 有更多了解的人(例如,还有什么其他标签可以结束段落标签?)可能可以相当轻松地修复这个问题。
我很想进一步修复这个 perl 程序,让它变得有用。对我来说,这个准解析器还将帮助我保持我的 latex 文件合理合理。我会知道哪些可以通过,哪些不能转换/识别。这是我长期以来一直渴望的事情。
但它已经相当有用了。
答案2
答案3
这非常α状态,并且可能永远都是这样,但我有一组 LaTeX 样式文件专门用于执行此操作。该项目是在 github 上。
特别是,有输出版本会将数学运算传递到 mathjax 感知系统。