|
本帖最后由 hbghlyj 于 2023-3-11 11:24 编辑 Here's a Python code replacing <em> tags with math delimiters and removing the <p> tags:
- import os
- import re
- def html_to_latex(html):
- # Remove <p> tags
- html = re.sub(r'<\/?p>', '', html)
- # Treat <em> tags as math
- html = re.sub(r'<em>(.*?)<\/em>', r'\\(\1\\)', html)
- # Treat <strong> tags as operator
- html = re.sub(r'<strong>(sin|cos|tan)<\/strong>', r'\\(\\\1\\)', html)
- html = re.sub(r'<strong>(.*?)<\/strong>', r'\\(\\textbf{\1}\\)', html)
- # Replace <sub> and </sub> tags with LaTeX commands
- html = re.sub(r'<sub>(.*?)</sub>', r'\\(_{\1}\\)', html).replace('>',r'\(>\)').replace('<',r'\(<\)')
- # Replace <sup> and </sup> tags with LaTeX commands
- html= re.sub(r'<sup>(.*?)</sup>', r'\\(^{\1}\\)', html)
- # Wrap math symbols with delimiter
- html = re.sub(r'(\\\(.*?\\\))|([Α-Ωα-ω\d=·\+′≌△⇒∠°-])', lambda m:r'\('+m.group(2)+r'\)' if m.group(2) else m.group(1), html)
- # Merge adjacent formulas if the only characters between them are comma or ( ) or whitespace
- html= re.sub(r'\\\)([\s,\(\)]*)\\\(', '\g<1>', html).replace('′',"'")
- return html
- # Find all HTML files in the current directory
- html_files = [file for file in os.listdir() if file.endswith('.html')]
- # Loop through each HTML file
- for file_name in html_files:
- with open(file_name, 'r') as f:
- contents = f.read()
- # Use regular expressions to remove all <img> tags
- contents = html_to_latex(contents)
- with open('converted/'+file_name, 'w') as f:
- f.write(contents)
复制代码 Example
- html = r'''<p>△<em>ABC</em>和△<em>PQR</em>满足如下条件:<em>A</em>和<em>P</em>分别是线段<em>QR</em>和<em>BC</em>的中点,<em>QR</em>和<em>BC</em>是∠<em>BAC</em>和∠<em>QPR</em>的内角平分线.求证<em>AB</em> + <em>AC</em> = <em>PQ</em> + <em>PR</em>.</p>
- <p>证:设<em>X</em>为线段<em>BC</em>、<em>PQ</em>中垂线的交点,<em>Q</em>′、<em>R</em>′是<em>Q</em>、<em>R</em>关于直线<em>XP</em>的对称点,<em>B</em>′、<em>C</em>′是<em>B</em>、<em>C</em>关于直线<em>XZ</em>的对称点.</p>
- <p>∴ ∠<em>Q</em>′<em>PB</em> = ∠<em>QPC</em> = ∠<em>RPC</em> ⇒ <em>Q</em>′、<em>P</em>、<em>R</em>三点共线.</p>
- <p>同理<em>Q</em>、<em>P</em>、<em>R</em>′;<em>B</em>′、<em>A</em>、<em>C</em>;<em>B</em>、<em>A</em>、<em>C</em>′分别三点共线.</p>
- <p>又 <em>XR</em> = <em>XR</em>′, <em>XQ</em> = <em>XQ</em>′, <em>XR</em> = <em>XQ</em> ⇒ <em>X</em>为<em>Q</em>、<em>Q</em>′、<em>R</em>、<em>R</em>′共圆的圆心.</p>
- <p>同理<em>X</em>为<em>B</em>、<em>B</em>′、<em>C</em>、<em>C</em>′共圆的圆心.</p>
- <p>设<em>Y</em>点是<em>XP</em>与<em>QR</em>的交点,<em>BY</em> = <em>YC</em>, ∠<em>BAY</em> = ∠<em>CAY</em>,</p>
- <p>∴ <em>B</em>、<em>A</em>、<em>C</em>、<em>Y</em>共圆,∠<em>RPQ</em> = ∠<em>PQQ</em>′ + ∠<em>PQ</em>′<em>Q</em> = 2∠<em>PQ</em>′<em>Q</em> = ∠<em>RXQ</em>.</p>
- <p>∴ <em>P</em>、<em>X</em>、<em>R</em>、<em>Q</em>共圆.同理<em>X</em>、<em>A</em>、<em>C</em>、<em>B</em>共圆.</p>
- <p>∴ <em>X</em>、<em>A</em>、<em>C</em>、<em>B</em>、<em>Y</em>五点共圆,∠<em>XCY</em> = ∠<em>XAT</em> = 90° = ∠<em>XPC</em>.</p>
- <p>∴ <em>YC</em> <sup>2</sup> = <em>YP</em>·<em>YX</em> = <em>TR</em>·<em>YQ</em> = <em>YX</em> <sup>2</sup>-<em>XR</em> <sup>2</sup>.</p>
- <p>又 <em>YC</em> <sup>2</sup> = <em>YX</em> <sup>2</sup>-<em>XC</em> <sup>2</sup> ⇒ <em>XR</em> = <em>XC</em>.</p>
- <p>∴ <em>B</em>、<em>B</em>′、<em>C</em>、<em>C</em>′、<em>R</em>、<em>R</em>′、<em>Q</em>、<em>Q</em>′共圆,圆心为<em>Y</em>,<em>YB</em>、<em>YC</em>为该圆的切线.</p>
- <p>∴ ∠<em>BXC</em>′ = ∠<em>YBC</em>′ = ∠<em>YXA</em> = 90°-∠<em>Q</em>′<em>YQ</em> = ∠<em>YQQ</em>′ = ∠<em>QXR</em>′.</p>
- <p>∴ △<em>BXC</em>′≌△<em>QXR</em>′ ⇒ <em>BC</em>′ = <em>QR</em>′.</p>
- <p>又 <em>BC</em>′ = <em>AB</em> + <em>AC</em>′ = <em>AB</em> + <em>AC</em>, <em>QR</em>′ = <em>QP</em> + <em>PR</em>′ = <em>PQ</em> + <em>PR</em>.</p>
- <p>∴ <em>AB</em> + <em>AC</em> = <em>PQ</em> + <em>PR</em>,命题得证.</p>
- <p>评注:此题看似不易下手,关键在于由内角平分到外角平分的过渡,一旦看到点<em>X</em>的好性质,问题便迎刃而解了.</p>'''
- html_to_latex(html)
复制代码
This will output:
- \(△ABC\)和\(△PQR\)满足如下条件:\(A\)和\(P\)分别是线段\(QR\)和\(BC\)的中点,\(QR\)和\(BC\)是\(∠BAC\)和\(∠QPR\)的内角平分线.求证\(AB+AC=PQ+PR\).
- 证:设\(X\)为线段\(BC\)、\(PQ\)中垂线的交点,\(Q'\)、\(R'\)是\(Q\)、\(R\)关于直线\(XP\)的对称点,\(B'\)、\(C'\)是\(B\)、\(C\)关于直线\(XZ\)的对称点.
- ∴ \(∠Q'PB=∠QPC=∠RPC⇒Q'\)、\(P\)、\(R\)三点共线.
- 同理\(Q\)、\(P\)、\(R'\);\(B'\)、\(A\)、\(C\);\(B\)、\(A\)、\(C'\)分别三点共线.
- 又 \(XR=XR'XQ=XQ'XR=XQ⇒X\)为\(Q\)、\(Q'\)、\(R\)、\(R'\)共圆的圆心.
- 同理\(X\)为\(B\)、\(B'\)、\(C\)、\(C'\)共圆的圆心.
- 设\(Y\)点是\(XP\)与\(QR\)的交点,\(BY=YC∠BAY=∠CAY\),
- ∴ \(B\)、\(A\)、\(C\)、\(Y\)共圆,\(∠RPQ=∠PQQ'+∠PQ'Q=2∠PQ'Q=∠RXQ\).
- ∴ \(P\)、\(X\)、\(R\)、\(Q\)共圆.同理\(X\)、\(A\)、\(C\)、\(B\)共圆.
- ∴ \(X\)、\(A\)、\(C\)、\(B\)、\(Y\)五点共圆,\(∠XCY=∠XAT=90°=∠XPC\).
- ∴ \(YC^{2}=YP·YX=TR·YQ=YX^{2}-XR^{2}\).
- 又 \(YC^{2}=YX^{2}-XC^{2}⇒XR=XC\).
- ∴ \(B\)、\(B'\)、\(C\)、\(C'\)、\(R\)、\(R'\)、\(Q\)、\(Q'\)共圆,圆心为\(Y\),\(YB\)、\(YC\)为该圆的切线.
- ∴ \(∠BXC'=∠YBC'=∠YXA=90°-∠Q'YQ=∠YQQ'=∠QXR'\).
- ∴ \(△BXC'≌△QXR'⇒BC'=QR'\).
- 又 \(BC'=AB+AC'=AB+ACQR'=QP+PR'=PQ+PR\).
- ∴ \(AB+AC=PQ+PR\),命题得证.
- 评注:此题看似不易下手,关键在于由内角平分到外角平分的过渡,一旦看到点\(X\)的好性质,问题便迎刃而解了.
复制代码 |
|