File size: 2,893 Bytes
68fb5e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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]
        )