BookTranslator
BookTranslator

Cómo traducir un documento LaTeX sin romper las matemáticas, las citas ni las etiquetas

Qué traducir en un archivo .tex, qué dejar intacto y por qué un archivo traducido puede compilar sin errores y aun así perder su texto. Con un archivo de ejemplo, dos verificadores gratuitos y una prueba local de 9 ejecuciones con un LLM.

BookTranslator

BookTranslator Team

15 min read

Para traducir un documento LaTeX, traduce la prosa y los argumentos de los comandos que ve el lector, como los títulos de sección, los pies de figura, las notas al pie y el texto de los enlaces. Deja los comandos, los nombres de entornos, las claves de \label, \ref y \cite, las matemáticas y los bloques verbatim exactamente como están. Después, haz un cambio que ningún traductor debería hacer por ti: configura el preámbulo para el idioma de destino, porque un archivo que conserva su preámbulo en inglés puede compilar sin errores y aun así generar un PDF en el que falta el texto traducido.

Ese último punto es el resultado principal de una pequeña prueba. Tradujimos un artículo LaTeX de 98 líneas al chino simplificado nueve veces con un modelo local, de tres maneras distintas, y verificamos cada resultado con un script y un compilador. Las partes que suelen preocupar resistieron en las nueve ejecuciones: las etiquetas, las referencias, las citas, las ecuaciones, las URL, las columnas de las tablas y las llaves volvieron intactas, y todas las referencias cruzadas se resolvieron. Los problemas estaban en otro sitio. Las seis ejecuciones cuyo prompt decía «no cambies el preámbulo» obedecieron, compilaron con código de salida 0 y generaron PDF sin ningún texto en chino. Una ejecución aplicó nuestra regla de «escapar el signo %» dentro de un listado de código, así que el PDF imprime una barra invertida suelta. Y al menos tres ejecuciones cambiaron el significado de una frase de formas que ninguna comprobación estructural puede detectar.

Respuesta rápida: qué traducir y qué dejar intacto

Parte del archivoEjemplo de nuestro archivo de muestra¿Traducirlo?
Preámbulo: \documentclass, \usepackage, \newcommand\newcommand{\wpm}{\mathrm{wpm}}No, pero añade tú mismo la configuración del idioma de destino (ver abajo)
\title, \author, \date\title{Estimating Reading Time for Translated Ebooks}El título y la fecha sí; los nombres normalmente no
Encabezados\section{Method}\label{sec:method}Sí, el texto entre llaves; conserva la etiqueta
Etiquetas y referencias\label{eq:time}, Section~\ref{sec:method}, \eqref{eq:time}Conserva todas las claves
Citas y claves de bibliografía\cite{brysbaert2019}, \bibitem{rayner2016}Conserva las claves; traduce el texto de la entrada solo si tu campo lo hace
Matemáticas en línea y en bloque$r_c$, T = \frac{N}{r}No
Texto dentro de matemáticas\text{ for English silent reading.}Sí. Se imprime como texto normal.
Macros que reciben texto\term{characters per minute}Traduce el argumento, conserva el comando
Pies de figura y notas al pie\caption{Reading rates used in this paper.}Sí
Listados literales y de códigoshelfmark count --unit chars book.epub # 100% of body textNo, incluidos los comentarios que contienen
\url y el primer argumento de \href\href{https://example.org/shelfmark/survey}{online appendix}Conserva la URL; traduce el texto del enlace
Caracteres escapados20\%, \$12, R\&DConserva la barra invertida en el texto
Comentarios con %% TODO: replace the Chinese rate ...Opcional. Los lectores nunca los ven.
Ties antes de las referenciasTable~\ref{tab:rates}Consérvalos en idiomas que usan espacios; opcional en chino y japonés

Todo lo demás es texto normal: párrafos, resumen, elementos de lista y celdas de tabla.

Lo que probamos

Escribimos sample-source.tex, un breve artículo inventado sobre estimaciones de tiempo de lectura para una aplicación ficticia llamada Shelfmark. Compila sin errores y contiene un ejemplo de cada construcción de la tabla anterior, además de una tabla booktabs, una figura con leyenda, dos comentarios con %, un bloque verbatim con un % sin escapar y una bibliografía en línea.

Luego pedimos a un modelo local que lo tradujera al chino simplificado de tres maneras:

  1. Archivo completo. Pega el archivo entero y pide un archivo traducido que siga compilando.
  2. Con instrucciones. Lo mismo, más siete reglas: no cambiar el preámbulo, conservar cada comando, entorno, etiqueta, referencia y clave de cita, dejar las matemáticas intactas excepto \text{}, dejar intactos los bloques verbatim y las URL, mantener los caracteres especiales escapados, conservar los ties y traducir el texto, las leyendas, las notas al pie y el texto de los enlaces.
  3. Segmentos. Dejar el preámbulo completamente fuera de la solicitud (solo se envía la línea \title, así que \date permanece en inglés), dividir el cuerpo por líneas en blanco, omitir el bloque verbatim, enviar cada pieza con las mismas reglas y volver a ensamblar.

El modelo fue Qwen 3.6 27B (Q4_K_M) en LM Studio, con el razonamiento desactivado y temperatura 0.3, en un Apple M4 Max con 64 GB de memoria. Ejecutamos cada condición tres veces, nueve ejecuciones en total, el 26 de octubre de 2026. El script es run_llm_latex_test.py, y las nueve salidas están publicadas sin editar en la carpeta de salidas. Si nunca has configurado un modelo local, nuestra guía de traducción con LLM local cubre los ajustes.

Compilamos cada salida con Tectonic 0.17.0, que usa el motor XeTeX, una vez exactamente como se devolvió y otra con una configuración para chino añadida al preámbulo. Luego extrajimos el texto de cada PDF. Fue una prueba pequeña de un modelo, un par de idiomas y un archivo. Muestra qué problemas ocurren y cómo detectarlos. No clasifica modelos ni prompts.

Resultado: la estructura sobrevivió; el preámbulo decidió si aparecía el texto

check_latex_translation.py comparó cada salida con el original, y compile_check.py la compiló. Las salidas completas están en check-results.txt y compile-results.txt, y results.csv tiene una fila por ejecución.

ComprobaciónArchivo completoCon instruccionesSegmentos
Etiquetas, referencias, citas y claves de bibliografía sin cambios3 de 33 de 33 de 3
Matemáticas sin cambios (texto dentro de \text{} traducido)3 de 33 de 33 de 3
URLs, llaves y columnas de tabla intactas3 de 33 de 33 de 3
El modelo añadió un paquete chino al preámbulo3 de 30 de 30 de 3
Compila tal como se devuelve3 de 33 de 33 de 3
Texto en chino realmente presente en el PDF tal como se devuelve3 de 30 de 30 de 3
Bloque literal sin cambios3 de 32 de 33 de 3
Comentarios con % dejados en inglés3 de 33 de 31 de 3
Todas las referencias y citas se resuelven tras añadir la configuración para chino3 de 33 de 33 de 3

Nuestro verificador informó inicialmente de un cambio en las fórmulas en la primera ejecución. Las fórmulas estaban bien: el orden de las palabras en chino había colocado $N$ antes de $r$ en una frase. Por eso el verificador publicado compara los segmentos matemáticos como una colección no ordenada, de modo que se permite reordenar, pero no cambiar un símbolo.

1. «No toques el preámbulo» produjo un PDF sin chino

La regla del preámbulo suena como la instrucción más segura que se puede dar. El preámbulo de nuestra muestra carga amsmath, booktabs y hyperref y define tres macros, y nada de eso necesita traducción. Así que las ejecuciones con instrucciones y con segmentos lo dejaron intacto, exactamente como se les indicó.

Pero las fuentes predeterminadas en una configuración estándar de LaTeX no tienen caracteres chinos. Los seis archivos compilaron con código de salida 0. Tectonic advirtió, una vez por cada carácter faltante, con líneas como Missing character: There is no 估 (U+4F30) in font [lmroman17-regular], y el archivo de registro recogió entre 554 y 577 de ellas por ejecución. Pero una advertencia no detiene la compilación. Cuando extrajimos el texto de esos seis PDF, contenían los nombres de los autores, los números y las fórmulas, y cero caracteres chinos. Los tres PDF de archivo completo contenían de 481 a 490. Un script de compilación que solo comprueba si la compilación tuvo éxito, o una persona que solo echa un vistazo al final de la salida, habría entregado los seis.

Las tres ejecuciones de archivo completo, que no tenían esa regla, añadieron \usepackage{ctex} por su cuenta, y sus PDF estaban completos. Eso no es razón para dejar que un modelo reescriba tu preámbulo. Es razón para ver la configuración del idioma de destino como parte del trabajo de traducción, hecha una vez, por ti:

  • Chino: carga ctex, que es compatible con pdfLaTeX, XeLaTeX y LuaLaTeX. Por defecto elige fuentes para tu sistema operativo; nuestro registro muestra que carga su conjunto de fuentes de macOS. Si el archivo tiene que compilarse de la misma manera en otras máquinas, \usepackage[UTF8,fontset=fandol]{ctex} usa las fuentes gratuitas Fandol distribuidas con TeX Live, que Tectonic también descarga a petición. Eso es lo que añade compile_check.py.
  • Otros idiomas: carga babel con el idioma de destino, para que la partición de palabras y las palabras generadas como «Figura», «Tabla» y «Resumen» sigan el nuevo idioma. El japonés, el coreano y los idiomas de derecha a izquierda necesitan cada uno su propia configuración.

Después de compilar, busca Missing character en el registro y lee el PDF, no solo el código de salida. Solo probamos XeTeX a través de Tectonic; otros motores informan de una fuente faltante de manera diferente.

2. La regla de escape se filtró en el listado de código

Nuestras instrucciones decían que se mantuvieran escapados los caracteres especiales, y en prosa esa es la regla correcta: un % sin escapar en LaTeX inicia un comentario y se traga silenciosamente el resto de la línea. Las nueve ejecuciones mantuvieron 20\% en el resumen.

En la primera ejecución con instrucciones, el modelo también aplicó la regla dentro del bloque verbatim y tradujo el comentario de código que había allí:

source:      shelfmark count --unit chars book.epub  # 100% of body text
translation: shelfmark count --unit chars book.epub  # 100\% 正文

Dentro de verbatim, nada es un comando, así que el PDF imprime 100\% con la barra invertida. La solución no es un mejor prompt. Nunca envíes bloques verbatim, lstlisting o minted a un traductor, como hizo la condición de segmentos. Después, traduce a mano cualquier comentario que contengan si tus lectores lo necesitan.

3. Los comentarios respetaron los límites de la solicitud

El archivo tiene dos comentarios con %: una nota encima de las definiciones de macros y un TODO encima del listado de código. Las ejecuciones de archivo completo y con instrucciones dejaron ambos en inglés. La condición de segmentos tradujo el TODO en dos de tres ejecuciones, porque el TODO estaba en el mismo bloque que un párrafo que enviamos para traducir. Dos ejecuciones de archivo completo también añadieron un comentario propio después del paquete que insertaron.

Nada de esto cambia el PDF. Importa si el código fuente traducido vuelve a los coautores o a un repositorio, donde un TODO traducido ya no coincide con el original y un comentario extra aparece en cada diff. El verificador informa los comentarios traducidos como una advertencia para que tú decidas.

4. Las comprobaciones estructurales pasaron y el significado aun así cambió

El resumen dice "una etiqueta que se desvía un 20% sigue siendo útil". En tres de nueve ejecuciones, el chino decía que las etiquetas con un error dentro del 20% siguen siendo útiles, lo que convierte una tolerancia en un umbral. Varias otras ejecuciones reordenaron la frase de modo que la cláusula "aunque" se unía a la idea equivocada, y una se volvió difícil de seguir. Estos son juicios de un lector que compara el chino con el inglés, no una revisión a ciegas, pero el punto no depende del recuento exacto: todas las comprobaciones estructurales pasaron en esos archivos, porque el 20\%, la macro y las llaves eran correctos.

Otros dos cambios fueron aceptables pero vale la pena conocerlos. Las ejecuciones de archivo completo escribieron \$12 como 12美元 ("12 dólares estadounidenses"), lo que elimina por completo la cuestión del escape. Dos ejecuciones de archivo completo también eliminaron la mayoría de los enlaces ~ antes de \ref y \cite. Eso es inofensivo en chino, que no pone espacios entre palabras, pero en un idioma que sí lo hace, un enlace faltante permite que un salto de línea separe "Tabla" de su número. El verificador informa los enlaces como una advertencia, no como un fallo.

Una comprobación estructural te dice que el archivo sigue funcionando. No puede decirte que el artículo sigue diciendo lo mismo. Para eso, usa una lectura bilingüe del resumen, las afirmaciones y los números, como se describe en nuestra guía para revisar un artículo de investigación traducido.

Un flujo de trabajo que resiste

  1. Consigue el código fuente y comprueba qué puedes hacer con él. En arXiv, los artículos enviados en TeX suelen ofrecer su código fuente mediante un enlace Source en la página del resumen o en la página Other formats, como un archivo gzip o un archivo tar cuando hay varios archivos (ayuda de arXiv). Traducir para tu propia lectura es una cosa. Publicar la traducción es otra: la propia licencia no exclusiva de arXiv limita la reutilización por parte de otros, mientras que CC BY y CC BY-SA permiten adaptaciones con atribución, y CC BY-NC-ND no. Pregunta a los autores en caso de duda.

  2. Compila primero el original. Si no compila antes de la traducción, nada de lo que aprendas después es fiable. Conserva el PDF original para comparar.

  3. Configura el idioma de destino en el preámbulo tú mismo. Añade ctex o babel como se indicó antes, compila una vez con el texto en inglés y confirma ese cambio por separado.

  4. Traduce el cuerpo sin el preámbulo y sin bloques verbatim. Usa una herramienta que analice LaTeX, o envía el cuerpo por partes con reglas explícitas, como en nuestra condición de segmentos. TransLaTeX, una herramienta de código abierto creada para esto, reemplaza las construcciones de LaTeX con tokens antes de enviar el texto a un traductor automático. Su documentación también dice que mantiene intacta la cabecera del documento, no admite macros y solo maneja documentos de un solo archivo, sin \input. Incluso una herramienta dedicada deja en tus manos la decisión sobre el preámbulo.

  5. Ejecuta la comprobación estructural en cada par de archivos.

    python3 check_latex_translation.py main.tex main-zh.tex --keep Shelfmark
    

    Compara el preámbulo, los nombres de comandos, el orden de los entornos, las etiquetas, las referencias, las citas, las claves de bibliografía, las matemáticas, los bloques verbatim, las URL, los %, & y # sin escapar, el equilibrio de llaves, los enlaces, los comentarios y cualquier término que le pidas que conserve. Espera que la línea del preámbulo falle después del paso 3 cuando compares con el original; compara con tu archivo en inglés actualizado en su lugar. Para un proyecto dividido en varios archivos \input, comprueba cada par.

  6. Compila y lee el PDF.

    python3 compile_check.py main-zh.tex
    

    Informa de referencias sin resolver (??), citas sin resolver ([?]) y glifos faltantes. Luego abre el PDF y lee el resumen, cada pie de figura y cada tabla comparándolos con el original.

  7. Haz una lectura bilingüe de las afirmaciones y los números. Aquí es donde se habrían detectado nuestras tres frases cambiadas. Mantén un breve glosario de traducción para los términos técnicos del artículo, de modo que el mismo término no se traduzca de tres maneras distintas.

Dónde encaja BookTranslator

El traductor de documentos de BookTranslator acepta archivos .tex junto con PDF, DOCX, EPUB, Markdown y otros formatos estructurados. Sus preguntas frecuentes dicen que el resultado se devuelve en "un archivo utilizable y adecuado al formato siempre que ese formato lo admita".

La página del producto no describe cómo trata las macros de LaTeX, las matemáticas o el preámbulo, y no pasamos esta muestra por BookTranslator para este artículo. Sea cual sea la herramienta que uses, haz los pasos 1 a 3 antes de traducir y los pasos 5 a 7 después. Un archivo que mantiene un preámbulo solo en inglés seguirá compilando sin texto en chino, y una afirmación cambiada seguirá pasando todas las comprobaciones estructurales.

Si solo tienes el PDF de un artículo, no su código fuente, el flujo de trabajo es diferente: consulta nuestra guía para traducir un artículo de investigación manteniendo su estructura. Si tu fuente es Markdown en lugar de LaTeX, se aplica la misma separación entre maquinaria y prosa, con trampas diferentes; las probamos en Cómo traducir archivos Markdown.

Obtén los archivos de prueba

Todo lo de esta prueba es de libre reutilización:

Publicaciones relacionadas