저는 Python을 사용하여 알려진 태그 세트가 있는 html5 문서를 가져와 맞춤형 LaTeX 매크로를 사용하여 고품질 인쇄를 위해 LaTeX로 변환하고 싶습니다.
답변1
나는 많은 도구를 살펴보고 html 태그를 LaTeX 마크업에 매핑하는 재귀 함수가 있는 lxml을 선택했습니다. 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.