taesiri's picture
fix startup
bb03e66
import gradio as gr
import subprocess
from PIL import Image
import re
def convert_and_compile(input_file):
docx_file = input_file.name
latex_file = "output.tex"
pdf_file = "output.pdf"
png_file = "output.png"
# Define the helper functions
def separate_text_equations(text):
text = re.sub(r"\\\(", "\n\\(", text)
text = re.sub(r"\\\)", "\\)\n", text)
return text
def remove_unnecessary_latex_commands(text):
lines = text.split("\n")
for i in range(len(lines)):
line = lines[i]
if "\\RL" in line:
line = re.sub(r"\\RL\{([^}]*)\}", r"\1", line)
if "\\text" in line:
line = re.sub(r"\\text\{([^}]*)\}", r"\1", line)
lines[i] = line
return "\n".join(lines).strip()
# Convert .docx to .md
subprocess.run(["pandoc", "-s", docx_file, "-t", "markdown", "-o", "intermediate.md"], check=True)
# Convert .md to .tex
subprocess.run(["pandoc", "-s", "intermediate.md", "-t", "latex", "-o", "intermediate.tex"], check=True)
# Extract content between \begin{document} and \end{document}
with open("intermediate.tex", "r") as f:
content = f.read()
content = re.search(r"\\begin\{document\}([\s\S]*)\\end\{document\}", content).group(1)
# Separate text and equations, and remove unnecessary LaTeX commands
content = separate_text_equations(content)
content = remove_unnecessary_latex_commands(content)
# Generate a new .tex file
with open(latex_file, "w") as f:
f.write("\\documentclass[12pt]{standalone}\n")
f.write("\\input{etc/cmd}\n")
f.write("\\usepackage[utf8]{inputenc}\n")
f.write("\\usepackage{amsmath}\n")
f.write("\\usepackage{amssymb}\n")
f.write("\\usepackage{hyperref}\n")
f.write("\\usepackage{varwidth}\n")
f.write("\\usepackage{adjustbox}\n")
f.write("\\begin{document}\n")
f.write("\\begin{adjustbox}{margin=5mm}\n")
f.write("\\begin{varwidth}{\\linewidth}\n")
f.write(content)
f.write("\n\\end{varwidth}\n")
f.write("\\end{adjustbox}\n")
f.write("\\end{document}")
# Compile LaTeX to PDF with XeLaTeX
subprocess.run(["xelatex", "-interaction=nonstopmode", latex_file], check=True)
# Convert PDF to PNG with pdftoppm
subprocess.run(["pdftoppm", "-png", "-singlefile", pdf_file, "output"], check=True)
# Load the PNG image and return it
return Image.open(png_file)
iface = gr.Interface(
fn=convert_and_compile,
inputs=gr.File(label="Upload .DocX"),
outputs=gr.Image(type="pil", label="Latex Output", show_label=False),
)
iface.launch()