找回密码
 快速注册
搜索
查看: 48|回复: 1

HTML to LaTeX

[复制链接]

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-3-2 09:28 |阅读模式
Some old websites use HTML to display math.
We can use ChatGPT to convert HTML to LaTeX:
Screenshot 2023-03-02 at 01-26-26 ChatGPT.png

Pandoc converts HTML to LaTeX, but didn't recognize HTML markup as math formula.
Screenshot 2023-03-02 at 01-29-13 Try pandoc!.png
Is there any other tools to convert HTML to LaTeX

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2023-3-6 09:17
本帖最后由 hbghlyj 于 2023-3-11 11:24 编辑 Here's a Python code replacing <em> tags with math delimiters and removing the <p> tags:
  1. import os
  2. import re
  3. def html_to_latex(html):
  4.     # Remove <p> tags
  5.     html = re.sub(r'<\/?p>', '', html)
  6.     # Treat <em> tags as math
  7.     html = re.sub(r'<em>(.*?)<\/em>', r'\\(\1\\)', html)
  8.     # Treat <strong> tags as operator
  9.     html = re.sub(r'<strong>(sin|cos|tan)<\/strong>', r'\\(\\\1\\)', html)
  10.     html = re.sub(r'<strong>(.*?)<\/strong>', r'\\(\\textbf{\1}\\)', html)
  11.     # Replace <sub> and </sub> tags with LaTeX commands
  12.     html = re.sub(r'<sub>(.*?)</sub>', r'\\(_{\1}\\)', html).replace('&gt;',r'\(>\)').replace('&lt;',r'\(<\)')
  13.     # Replace <sup> and </sup> tags with LaTeX commands
  14.     html= re.sub(r'<sup>(.*?)</sup>', r'\\(^{\1}\\)', html)
  15.     # Wrap math symbols with delimiter
  16.     html = re.sub(r'(\\\(.*?\\\))|([Α-Ωα-ω\d=·\+′≌△⇒∠°-])', lambda m:r'\('+m.group(2)+r'\)' if m.group(2) else m.group(1), html)
  17.     # Merge adjacent formulas if the only characters between them are comma or ( ) or whitespace
  18.     html= re.sub(r'\\\)([\s,\(\)]*)\\\(', '\g<1>', html).replace('′',"'")
  19.     return html
  20. # Find all HTML files in the current directory
  21. html_files = [file for file in os.listdir() if file.endswith('.html')]
  22. # Loop through each HTML file
  23. for file_name in html_files:
  24.         with open(file_name, 'r') as f:
  25.                 contents = f.read()
  26.         # Use regular expressions to remove all <img> tags
  27.         contents = html_to_latex(contents)
  28.         with open('converted/'+file_name, 'w') as f:
  29.                 f.write(contents)
复制代码
Example
  1. 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>
  2. <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>
  3. <p>∴ ∠<em>Q</em>′<em>PB</em> = ∠<em>QPC</em> = ∠<em>RPC</em> ⇒ <em>Q</em>′、<em>P</em>、<em>R</em>三点共线.</p>
  4. <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>
  5. <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>
  6. <p>同理<em>X</em>为<em>B</em>、<em>B</em>′、<em>C</em>、<em>C</em>′共圆的圆心.</p>
  7. <p>设<em>Y</em>点是<em>XP</em>与<em>QR</em>的交点,<em>BY</em> = <em>YC</em>, ∠<em>BAY</em> = ∠<em>CAY</em>,</p>
  8. <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>
  9. <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>
  10. <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>
  11. <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>
  12. <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>
  13. <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>
  14. <p>∴ ∠<em>BXC</em>′ = ∠<em>YBC</em>′ = ∠<em>YXA</em> = 90°-∠<em>Q</em>′<em>YQ</em> = ∠<em>YQQ</em>′ = ∠<em>QXR</em>′.</p>
  15. <p>∴ △<em>BXC</em>′≌△<em>QXR</em>′ ⇒ <em>BC</em>′ = <em>QR</em>′.</p>
  16. <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>
  17. <p>∴ <em>AB</em> + <em>AC</em> = <em>PQ</em> + <em>PR</em>,命题得证.</p>
  18. <p>评注:此题看似不易下手,关键在于由内角平分到外角平分的过渡,一旦看到点<em>X</em>的好性质,问题便迎刃而解了.</p>'''
  19. html_to_latex(html)
复制代码

This will output:
  1. \(△ABC\)和\(△PQR\)满足如下条件:\(A\)和\(P\)分别是线段\(QR\)和\(BC\)的中点,\(QR\)和\(BC\)是\(∠BAC\)和\(∠QPR\)的内角平分线.求证\(AB+AC=PQ+PR\).
  2. 证:设\(X\)为线段\(BC\)、\(PQ\)中垂线的交点,\(Q'\)、\(R'\)是\(Q\)、\(R\)关于直线\(XP\)的对称点,\(B'\)、\(C'\)是\(B\)、\(C\)关于直线\(XZ\)的对称点.
  3. ∴ \(∠Q'PB=∠QPC=∠RPC⇒Q'\)、\(P\)、\(R\)三点共线.
  4. 同理\(Q\)、\(P\)、\(R'\);\(B'\)、\(A\)、\(C\);\(B\)、\(A\)、\(C'\)分别三点共线.
  5. 又 \(XR=XR'XQ=XQ'XR=XQ⇒X\)为\(Q\)、\(Q'\)、\(R\)、\(R'\)共圆的圆心.
  6. 同理\(X\)为\(B\)、\(B'\)、\(C\)、\(C'\)共圆的圆心.
  7. 设\(Y\)点是\(XP\)与\(QR\)的交点,\(BY=YC∠BAY=∠CAY\),
  8. ∴ \(B\)、\(A\)、\(C\)、\(Y\)共圆,\(∠RPQ=∠PQQ'+∠PQ'Q=2∠PQ'Q=∠RXQ\).
  9. ∴ \(P\)、\(X\)、\(R\)、\(Q\)共圆.同理\(X\)、\(A\)、\(C\)、\(B\)共圆.
  10. ∴ \(X\)、\(A\)、\(C\)、\(B\)、\(Y\)五点共圆,\(∠XCY=∠XAT=90°=∠XPC\).
  11. ∴ \(YC^{2}=YP·YX=TR·YQ=YX^{2}-XR^{2}\).
  12. 又 \(YC^{2}=YX^{2}-XC^{2}⇒XR=XC\).
  13. ∴ \(B\)、\(B'\)、\(C\)、\(C'\)、\(R\)、\(R'\)、\(Q\)、\(Q'\)共圆,圆心为\(Y\),\(YB\)、\(YC\)为该圆的切线.
  14. ∴ \(∠BXC'=∠YBC'=∠YXA=90°-∠Q'YQ=∠YQQ'=∠QXR'\).
  15. ∴ \(△BXC'≌△QXR'⇒BC'=QR'\).
  16. 又 \(BC'=AB+AC'=AB+ACQR'=QP+PR'=PQ+PR\).
  17. ∴ \(AB+AC=PQ+PR\),命题得证.
  18. 评注:此题看似不易下手,关键在于由内角平分到外角平分的过渡,一旦看到点\(X\)的好性质,问题便迎刃而解了.
复制代码

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 15:32

Powered by Discuz!

× 快速回复 返回顶部 返回列表