\usepackage{python}
Compile LaTeX a PDF desde Python con una sola solicitud HTTP. Use la biblioteca estándar requests o httpx para uso asíncrono; no requiere instalar ningún SDK.
\section{Installation}
No se necesita ningún SDK. La API de FormaTeX es una API REST HTTP estándar. Instale requests para uso síncrono o httpx si necesita compatibilidad con async.
pip install requests
# or with httpx for async
pip install httpx\section{Inicio rápido}
El siguiente ejemplo compila un documento LaTeX mínimo y guarda el PDF resultante en disco. Sustituya your-api-key por una clave de su panel .
import requests
API_KEY = "your-api-key" # get from formatex.io/dashboard/api-keys
API_URL = "https://api.formatex.io/api/v1"
latex_source = r"""
\documentclass{article}
\usepackage{amsmath}
\begin{document}
Hello from Python! $E = mc^2$
\end{document}
"""
response = requests.post(
f"{API_URL}/compile",
headers={
"X-API-Key": API_KEY,
"Content-Type": "application/json",
},
json={
"latex": latex_source,
"engine": "pdflatex",
},
)
response.raise_for_status()
with open("output.pdf", "wb") as f:
f.write(response.content)
print("PDF saved to output.pdf")\section{Authentication}
Todas las solicitudes a la API deben incluir una cabecera X-API-Key:
X-API-Key: your-api-key
os.environ["FORMATEX_API_KEY"] para leer la clave en tiempo de ejecución.\section{Engines}
Indique un campo engine en el cuerpo JSON. Valores admitidos: pdflatex, xelatex, lualatex, latexmk. Consulte la documentación de motores para más detalles.
# Choose your engine
for engine in ["pdflatex", "xelatex", "lualatex", "latexmk"]:
response = requests.post(
f"{API_URL}/compile",
headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
json={"latex": latex_source, "engine": engine},
)
print(f"{engine}: {response.status_code}, {len(response.content)} bytes")\section{Gestión de errores}
La API devuelve códigos de estado HTTP. Un 422 significa que su LaTeX no se pudo compilar: el cuerpo JSON contiene un campo error con un extracto del registro de TeX. 401 indica una clave de API no válida o ausente.
import requests
from requests.exceptions import HTTPError
def compile_latex(source: str, engine: str = "pdflatex") -> bytes:
"""Compile LaTeX to PDF, raising on error with useful message."""
try:
response = requests.post(
f"{API_URL}/compile",
headers={
"X-API-Key": API_KEY,
"Content-Type": "application/json",
},
json={"latex": source, "engine": engine},
timeout=30,
)
response.raise_for_status()
return response.content
except HTTPError as e:
if e.response.status_code == 422:
error_data = e.response.json()
raise ValueError(f"LaTeX compilation failed: {error_data.get('error')}") from e
elif e.response.status_code == 401:
raise PermissionError("Invalid API key. Check your FORMATEX_API_KEY.") from e
raise\section{Async}
Use httpx.AsyncClient para compilar documentos de forma concurrente en aplicaciones Python asíncronas, como FastAPI o scripts async.
import asyncio
import httpx
async def compile_latex_async(source: str) -> bytes:
async with httpx.AsyncClient() as client:
response = await client.post(
"https://api.formatex.io/api/v1/compile",
headers={
"X-API-Key": API_KEY,
"Content-Type": "application/json",
},
json={"latex": source, "engine": "pdflatex"},
timeout=30.0,
)
response.raise_for_status()
return response.content
# Run it
pdf_bytes = asyncio.run(compile_latex_async(latex_source))\section{Reference}
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| latex | string | Sí | Código fuente LaTeX completo como cadena de texto |
| engine | string | No | Motor que se usará. Valor predeterminado: "pdflatex". Opciones: pdflatex, xelatex, lualatex, latexmk |
POST https://api.formatex.io/api/v1/compile — Devuelve bytes de PDF sin procesar si tiene éxito ( 200), o un error JSON si falla ( 422/ 401).
\end{python}
Obtenga su clave de API, ejecute el inicio rápido y tenga su PDF en minutos.