![HTML 到 LaTex:如何使用 python 和 lxml 将 html 文档转换为带有自定义宏的 LaTeX](https://linux22.com/image/286895/HTML%20%E5%88%B0%20LaTex%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20python%20%E5%92%8C%20lxml%20%E5%B0%86%20html%20%E6%96%87%E6%A1%A3%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%B8%A6%E6%9C%89%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AE%8F%E7%9A%84%20LaTeX.png)
我想使用 python 获取具有已知标签集的 html5 文档并将其转换为 LaTeX,以便使用自定义的 LaTeX 宏进行高质量打印。
答案1
我研究了许多工具,最后选择了 lxml,它有一个递归函数,可以将 html 标签映射到 LaTeX 标记。它让你可以在一个地方轻松使用 Python 定义映射。我相信我是从书中的一个例子开始的,Python 网络编程基础
以下是 Python 2.7 中的最小工作示例:
# convert html document to LaTeX
import lxml.html # http://lxml.de/lxmlhtml.html
from lxml import etree
from io import StringIO, BytesIO
def html2latex(el): # fill in this function to catch and convert html tags
result = []
if el.text:
result.append(el.text)
for sel in el:
if False: # get info
print('tag',sel.tag)
print('text',sel.text)
print('tail',sel.tail)
print('attrib',sel.attrib)
if sel.tag in ["h1"]:
result.append('\hmchapter{%s}' % html2latex(sel))
elif sel.tag in ["td", "table"]:
result.append("<%s>" % sel.tag)
result.append(html2latex(sel))
result.append("</%s>" % sel.tag)
elif sel.tag in ["span"]: #
for att in sel.attrib.keys():
if att =='style':
if sel.attrib[att] == 'font-style:italic':
result.append(r'\textit{%s}' % (html2latex(sel)))
else:
result.append(html2latex(sel))
if sel.tail:
result.append(sel.tail)
return "".join(result)
def main():
# must be unicode or lxml parse crashes
html = u'''
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body >
<h1 class="hmchapter" data-hmvarbodychaptertitle = "My title">My title</h1>
text <span style="font-style:italic">in a specific context</span> and more.
</body>
</html>
'''
parser = etree.HTMLParser()
tree = etree.parse(StringIO(html), parser) # expects a file, use StringIO for string
root = tree.getroot()
latex = html2latex(root)
print latex
if __name__ == '__main__':
main()
打印结果为:
\hmchapter{My title} text \textit{in a specific context} and more.