\ai{pdf-generation}
Use GPT-4, Claude o cualquier LLM para generar código fuente LaTeX y luego compílelo a un PDF profesional con la API de FormaTeX. Dos llamadas a la API, tipos de documento ilimitados, resultado perfecto al píxel.
\section{El patrón}
El patrón es sencillo: pida a un LLM que produzca código fuente LaTeX sin procesar y luego envíe ese código mediante POST al endpoint de compilación de FormaTeX. El LLM se encarga de la estructura y el contenido del documento; FormaTeX se encarga de todo el pipeline de compilación de TeX Live. Obtiene un PDF de calidad de producción sin tener que gestionar una instalación de LaTeX.
El LLM escribe el LaTeX
Los LLM modernos producen LaTeX sintácticamente correcto de forma fiable, sobre todo con un prompt de sistema bien enfocado. GPT-4o, Claude Opus y Gemini Pro funcionan bien.
FormaTeX compila
POST the LaTeX string to https://api.formatex.io/api/v1/compile with your API key. Choose the engine: pdflatex and xelatex on every plan, lualatex and latexmk on Pro and above. Receive raw PDF bytes in the response.
Guarde o transmita el PDF
Escriba los bytes de la respuesta en un archivo, transmítalos como descarga en el navegador o súbalos a un almacenamiento en la nube, según lo requiera su flujo de trabajo.
\section{LaTeX frente a HTML}
| Criterio | LaTeX + FormaTeX | HTML a PDF |
|---|---|---|
| Matemáticas | Renderizado nativo de ecuaciones con amsmath | Soluciones alternativas con MathJax, fuentes inconsistentes |
| Tipografía | Saltos de línea Knuth–Plass, kerning profesional | Calidad de navegador, renderizado variable |
| Diseño de página | Márgenes precisos, encabezados, pies de página, varias columnas | Aproximado con CSS, rarezas de impresión |
| Cross-references | \ref, \cite, \label — automatic numbering | Manual o frágil, basado en JS |
| Documentos largos | Capítulos, secciones, índice, bibliografía | Difícil de gestionar a escala |
| Fiabilidad del LLM | Los LLM producen LaTeX válido con mayor consistencia | Los LLM producen CSS en línea inconsistente |
\section{Ejemplo en Python}
Ejemplo completo y ejecutable con el SDK de OpenAI para Python y la biblioteca requests. Llame a generate_pdf() con cualquier instrucción en lenguaje natural para recibir un archivo .pdf en disco.
import openai
import requests
openai_client = openai.OpenAI(api_key="your-openai-key")
FORMATEX_URL = "https://api.formatex.io/api/v1/compile"
FORMATEX_API_KEY = "your-formatex-key"
SYSTEM_PROMPT = """You are a LaTeX expert. When asked to create a document,
respond ONLY with valid LaTeX source code. No markdown fences, no explanation.
Always include \\documentclass, a complete preamble, and
\\begin{document}...\\end{document}. Use standard packages only."""
def generate_latex(prompt: str) -> str:
"""Ask GPT-4 to write a complete LaTeX document."""
response = openai_client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": prompt},
],
temperature=0.2, # Low temperature for deterministic LaTeX output
)
return response.choices[0].message.content
def compile_to_pdf(latex_source: str, engine: str = "pdflatex") -> bytes:
"""Compile LaTeX source with FormaTeX and return PDF bytes."""
response = requests.post(
FORMATEX_URL,
headers={
"X-API-Key": FORMATEX_API_KEY,
"Content-Type": "application/json",
},
json={"latex": latex_source, "engine": engine},
timeout=30,
)
response.raise_for_status()
return response.content
def generate_pdf(prompt: str, output_path: str, engine: str = "pdflatex") -> None:
"""End-to-end: prompt → LaTeX → PDF saved to disk."""
print(f"Generating LaTeX for: {prompt[:60]}...")
latex_source = generate_latex(prompt)
print("Compiling PDF with FormaTeX...")
pdf_bytes = compile_to_pdf(latex_source, engine)
with open(output_path, "wb") as f:
f.write(pdf_bytes)
print(f"PDF saved to {output_path} ({len(pdf_bytes):,} bytes)")
# Example usage
generate_pdf(
prompt=(
"Write a 3-page LaTeX technical report on transformer neural networks. "
"Include an abstract, introduction, the scaled dot-product attention "
"equation, a comparison table of model sizes, and a conclusion."
),
output_path="transformer_report.pdf",
engine="pdflatex",
)\section{Consejos para el prompt}
Exija LaTeX sin procesar en el prompt de sistema
Incluya "respond ONLY with valid LaTeX source code — no markdown fences, no explanation" en el mensaje de sistema. Sin esto, los modelos suelen envolver la salida en bloques ```latex que hay que eliminar.
Especifique la clase de documento de forma explícita
Tell the model which documentclass to use: "Use \documentclass{article}" or "\documentclass[12pt,a4paper]{report}". This prevents the model from choosing an inappropriate class.
Mantenga la temperatura baja
Ajuste la temperatura entre 0.1 y 0.3 para generar LaTeX. Una temperatura alta aumenta la probabilidad de comandos inventados o llaves faltantes que impiden la compilación.
Indique los paquetes que necesita
Indique explícitamente al modelo qué paquetes incluir: amsmath, graphicx, booktabs, hyperref. Los modelos a veces importan paquetes inexistentes cuando se les deja elegir libremente.
Valide antes de compilar
Strip markdown fences with a simple regex before POSTing. Check that the output contains \documentclass and \begin{document} — if not, re-prompt rather than wasting a compile request.
Use xelatex para contenido Unicode
If the document may contain non-ASCII characters (names, accents, CJK), set engine to xelatex and instruct the model to use \usepackage{fontspec} instead of inputenc.
\section{Related}
\end{pdf-generation}
Obtenga una clave de API de FormaTeX, copie el ejemplo de Python anterior y publique PDF profesionales generados por IA en menos de diez minutos.