letxinet / modules /editor_tab.py
C2MV's picture
Initial upload for Build Small Hackathon
68fb5e2 verified
Raw
History Blame Contribute Delete
2.89 kB
import gradio as gr
import os
from backend.tools.latex_compiler import compiler
# Plantilla básica de documento LaTeX
DEFAULT_LATEX = r"""\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{hyperref}
\title{Documento LetXipu}
\author{Usuario}
\date{\today}
\begin{document}
\maketitle
\begin{abstract}
Este es un documento de prueba compilado localmente.
\end{abstract}
\section{Introducción}
Escribe aquí tu contenido...
\end{document}
"""
def compile_latex(tex_content, filename):
if not filename:
filename = "documento"
# Sanitizar nombre de archivo
filename = "".join([c for c in filename if c.isalpha() or c.isdigit() or c=='_']).strip()
if not filename:
filename = "documento"
result = compiler.compile(tex_content, filename)
if result["success"]:
return result["pdf_path"], "✅ Compilación exitosa."
else:
# Extraer el final del log para mostrar el error
error_msg = result.get("error", "Error desconocido")
logs = result.get("logs", "")
# Mostrar las últimas 20 líneas del log de LaTeX
if logs:
log_lines = logs.split("\n")
log_preview = "\n".join(log_lines[-20:])
return None, f"❌ {error_msg}\n\nDetalles:\n```text\n{log_preview}\n```"
return None, f"❌ {error_msg}"
def create_editor_tab():
with gr.Tab("✍️ Editor LaTeX", id="editor"):
gr.Markdown("## Editor LaTeX Local")
gr.Markdown("Escribe y compila código LaTeX directamente en la plataforma usando tu instalación local de TeX Live / MiKTeX.")
with gr.Row():
with gr.Column(scale=1):
filename_input = gr.Textbox(label="Nombre del archivo", value="paper_letxipu", placeholder="Sin espacios (ej. mi_documento)")
compile_btn = gr.Button("▶ Compilar PDF", variant="primary", size="lg")
status_output = gr.Markdown("Estado: Esperando...")
with gr.Column(scale=3):
with gr.Row():
# Editor de código
editor = gr.Code(
value=DEFAULT_LATEX,
language="markdown",
label="Código Fuente LaTeX",
lines=30,
interactive=True
)
# Visor de PDF (usamos File ya que gr.PDF no existe nativamente en esta versión)
pdf_viewer = gr.File(label="PDF Generado (Click para descargar/ver)", interactive=False)
compile_btn.click(
fn=compile_latex,
inputs=[editor, filename_input],
outputs=[pdf_viewer, status_output]
)