Comment traduire un document LaTeX sans casser les mathématiques, les citations ou les étiquettes
Ce qu'il faut traduire dans un fichier .tex, ce qu'il faut laisser intact, et pourquoi un fichier traduit peut compiler proprement tout en perdant son texte. Avec un fichier d'exemple, deux vérificateurs gratuits et un test local de LLM en 9 exécutions.

Pour traduire un document LaTeX, traduisez la prose et les arguments destinés au lecteur des commandes, comme les titres de section, les légendes, les notes de bas de page et le texte des liens. Laissez les commandes, les noms d'environnements, les clés \label, \ref et \cite, les mathématiques et les blocs verbatim exactement tels quels. Ensuite, faites une modification qu'aucun traducteur ne devrait faire à votre place : configurez le préambule pour la langue cible, car un fichier qui conserve son préambule anglais peut compiler sans erreur et produire un PDF où le texte traduit est absent.
Ce dernier point est le résultat principal d'un petit test. Nous avons traduit un article LaTeX de 98 lignes en chinois simplifié neuf fois avec un modèle local, de trois manières différentes, et avons vérifié chaque résultat avec un script et un compilateur. Les parties qui inquiètent habituellement ont tenu dans les neuf exécutions : les étiquettes, les références, les citations, les équations, les URL, les colonnes de tableaux et les accolades sont revenues intactes, et chaque renvoi croisé a été résolu. Les problèmes se situaient ailleurs. Les six exécutions dont l'invite disait « ne pas modifier le préambule » ont obéi, compilé avec un code de sortie 0 et produit des PDF sans aucun texte chinois. Une exécution a appliqué notre règle « échapper le signe % » à l'intérieur d'un listing de code, si bien que le PDF affiche une barre oblique inverse parasite. Et au moins trois exécutions ont modifié le sens d'une phrase d'une manière qu'aucune vérification structurelle ne peut détecter.
Réponse rapide : ce qu'il faut traduire et ce qu'il faut laisser intact
| Partie du fichier | Exemple de notre échantillon | Faut-il le traduire ? |
|---|---|---|
Préambule : \documentclass, \usepackage, \newcommand | \newcommand{\wpm}{\mathrm{wpm}} | Non, mais ajoutez vous-même la configuration de la langue cible (voir ci-dessous) |
\title, \author, \date | \title{Estimating Reading Time for Translated Ebooks} | Titre et date oui ; noms généralement non |
| Titres | \section{Method}\label{sec:method} | Oui, le texte entre accolades ; conservez l'étiquette |
| Étiquettes et références | \label{eq:time}, Section~\ref{sec:method}, \eqref{eq:time} | Conservez chaque clé |
| Citations et clés bibliographiques | \cite{brysbaert2019}, \bibitem{rayner2016} | Conservez les clés ; ne traduisez le texte des entrées que si votre domaine le fait |
| Mathématiques en ligne et hors ligne | $r_c$, T = \frac{N}{r} | Non |
| Texte à l'intérieur des mathématiques | \text{ for English silent reading.} | Oui. Il s'affiche comme du texte ordinaire. |
| Macros qui prennent du texte | \term{characters per minute} | Traduisez l'argument, conservez la commande |
| Légendes et notes de bas de page | \caption{Reading rates used in this paper.} | Oui |
| Blocs verbatim et listings de code | shelfmark count --unit chars book.epub # 100% of body text | Non, y compris les commentaires qu'ils contiennent |
\url et le premier argument de \href | \href{https://example.org/shelfmark/survey}{online appendix} | Conserver l'URL ; traduire le texte du lien |
| Caractères échappés | 20\%, \$12, R\&D | Conserver la barre oblique inverse dans la prose |
Commentaires % | % TODO: replace the Chinese rate ... | Facultatif. Les lecteurs ne les voient jamais. |
| Espaces insécables avant les références | Table~\ref{tab:rates} | À conserver dans les langues qui utilisent des espaces ; facultatif en chinois et en japonais |
Tout le reste est de la prose ordinaire : paragraphes, résumé, éléments de liste et cellules de tableau.
Ce que nous avons testé
Nous avons rédigé sample-source.tex, un court article inventé sur les estimations de temps de lecture pour une application fictive appelée Shelfmark. Il se compile proprement et contient un exemple de chaque construction du tableau ci-dessus, plus un tableau booktabs, une figure avec une légende, deux commentaires %, un bloc verbatim contenant un % nu, et une bibliographie en ligne.
Nous avons ensuite demandé à un modèle local de le traduire en chinois simplifié de trois manières :
- Fichier entier. Coller le fichier complet et demander un fichier traduit qui se compile toujours.
- Avec instructions. La même chose, plus sept règles : ne pas modifier le préambule, conserver chaque commande, environnement, étiquette, référence et clé de citation, laisser les mathématiques intactes sauf
\text{}, laisser les blocs verbatim et les URL intacts, garder les caractères spéciaux échappés, conserver les espaces insécables, et traduire la prose, les légendes, les notes de bas de page et le texte des liens. - Segments. Exclure entièrement le préambule de la requête (seule la ligne
\titleest envoyée, donc\datereste en anglais), découper le corps aux lignes vides, ignorer le bloc verbatim, envoyer chaque morceau avec les mêmes règles, et réassembler.
Le modèle était Qwen 3.6 27B (Q4_K_M) dans LM Studio, avec la réflexion désactivée et une température de 0,3, sur un Apple M4 Max avec 64 Go de mémoire. Nous avons exécuté chaque condition trois fois, neuf exécutions au total, le 26 octobre 2026. Le script est run_llm_latex_test.py, et les neuf sorties sont publiées sans modification dans le dossier outputs. Si vous n'avez jamais configuré de modèle local, notre guide de traduction avec un LLM local couvre les réglages.
Nous avons compilé chaque sortie avec Tectonic 0.17.0, qui utilise le moteur XeTeX, une fois exactement telle que renvoyée et une fois avec une configuration chinoise ajoutée au préambule. Ensuite, nous avons relu le texte de chaque PDF. Il s'agissait d'un petit test avec un modèle, une paire de langues et un fichier. Il montre quels problèmes surviennent et comment les détecter. Il ne classe pas les modèles ni les prompts.
Résultat : la structure a survécu ; le préambule a décidé si le texte apparaissait
check_latex_translation.py a comparé chaque sortie avec la source, et compile_check.py l'a compilée. Les sorties complètes sont dans check-results.txt et compile-results.txt, et results.csv contient une ligne par exécution.
| Vérification | Fichier entier | Instructed | Segments |
|---|---|---|---|
| Étiquettes, références, citations et clés bibliographiques inchangées | 3 sur 3 | 3 sur 3 | 3 sur 3 |
Mathématiques inchangées (texte à l'intérieur de \text{} traduit) | 3 sur 3 | 3 sur 3 | 3 sur 3 |
| URL, accolades et colonnes de tableau intacts | 3 sur 3 | 3 sur 3 | 3 sur 3 |
| Le modèle a ajouté un paquet chinois au préambule | 3 sur 3 | 0 sur 3 | 0 sur 3 |
| Compile tel quel | 3 sur 3 | 3 sur 3 | 3 sur 3 |
| Texte chinois réellement présent dans le PDF tel quel | 3 sur 3 | 0 sur 3 | 0 sur 3 |
| Bloc verbatim inchangé | 3 sur 3 | 2 sur 3 | 3 sur 3 |
Commentaires % laissés en anglais | 3 sur 3 | 3 sur 3 | 1 sur 3 |
| Chaque référence et citation est résolue après l'ajout de la configuration chinoise | 3 sur 3 | 3 sur 3 | 3 sur 3 |
Notre vérificateur a d'abord signalé des mathématiques modifiées lors de la première exécution. Les mathématiques étaient correctes : l'ordre des mots chinois avait placé $N$ avant $r$ dans une phrase. Le vérificateur publié compare les segments mathématiques comme une collection non ordonnée pour cette raison, donc la réorganisation est autorisée mais un symbole modifié ne l'est pas.
1. « Ne touchez pas au préambule » a produit un PDF sans aucun chinois
La règle du préambule semble être l'instruction la plus sûre que l'on puisse donner. Le préambule de notre échantillon charge amsmath, booktabs et hyperref et définit trois macros, et rien de tout cela n'a besoin d'être traduit. Les exécutions avec instruction et par segments l'ont donc laissé intact, exactement comme demandé.
Mais les polices par défaut d'une installation LaTeX standard ne contiennent aucun caractère chinois. Chacun de ces six fichiers s'est compilé avec le code de sortie 0. Tectonic a bien averti, une fois par caractère manquant, avec des lignes telles que Missing character: There is no 估 (U+4F30) in font [lmroman17-regular], et le fichier journal en a enregistré entre 554 et 577 par exécution. Mais un avertissement n'arrête pas la compilation. Lorsque nous avons extrait le texte de ces six PDF, ils contenaient les noms d'auteurs, les nombres et les mathématiques, et zéro caractère chinois. Les trois PDF issus du traitement du fichier entier en contenaient de 481 à 490. Un script de compilation qui vérifie seulement si la compilation a réussi, ou une personne qui ne survole que la fin de la sortie, aurait livré les six.
Les trois exécutions sur fichier entier, qui n'avaient pas une telle règle, ont ajouté \usepackage{ctex} d'elles-mêmes, et leurs PDF étaient complets. Ce n'est pas une raison pour laisser un modèle réécrire votre préambule. C'est une raison de considérer la configuration de la langue cible comme faisant partie du travail de traduction, effectuée une fois, par vous :
- Chinois : chargez ctex, qui prend en charge pdfLaTeX, XeLaTeX et LuaLaTeX. Par défaut, il choisit les polices pour votre système d'exploitation ; notre journal montre qu'il charge son jeu de polices macOS. Si le fichier doit se compiler de la même manière sur d'autres machines,
\usepackage[UTF8,fontset=fandol]{ctex}utilise les polices libres Fandol distribuées avec TeX Live, que Tectonic télécharge également à la demande. C'est ce quecompile_check.pyajoute. - Autres langues : chargez babel avec la langue cible, afin que la césure et les mots générés tels que « Figure », « Table » et « Abstract » suivent la nouvelle langue. Le japonais, le coréen et les langues de droite à gauche nécessitent chacun leur propre configuration.
Après la compilation, vérifiez le journal pour Missing character et lisez le PDF, pas seulement le code de sortie. Nous n'avons testé que XeTeX via Tectonic ; d'autres moteurs signalent une police manquante différemment.
2. La règle d'échappement a fui dans la liste de code
Nos instructions disaient de garder les caractères spéciaux échappés, et en prose c'est la bonne règle : un % nu en LaTeX commence un commentaire et avale silencieusement le reste de la ligne. Les neuf exécutions ont conservé 20\% dans le résumé.
Lors de la première exécution avec instructions, le modèle a également appliqué la règle à l'intérieur du bloc verbatim et y a traduit le commentaire de code :
source: shelfmark count --unit chars book.epub # 100% of body text
translation: shelfmark count --unit chars book.epub # 100\% 正文
À l'intérieur de verbatim, rien n'est une commande, donc le PDF affiche 100\% avec la barre oblique inverse. La solution n'est pas un meilleur prompt. Ne transmettez jamais les blocs verbatim, lstlisting ou minted à un traducteur, comme le faisait la condition segments. Traduisez ensuite tout commentaire qu'ils contiennent à la main si vos lecteurs en ont besoin.
3. Les commentaires ont suivi les limites de la demande
Le fichier contient deux commentaires % : une note au-dessus des définitions de macros et un TODO au-dessus de la liste de code. Les exécutions sur fichier entier et avec instructions ont laissé les deux en anglais. La condition segments a traduit le TODO dans deux exécutions sur trois, car le TODO se trouvait dans le même bloc qu'un paragraphe que nous avions envoyé pour traduction. Deux exécutions sur fichier entier ont également ajouté un commentaire de leur propre chef après le paquet qu'elles ont inséré.
Rien de tout cela ne change le PDF. Cela importe si la source traduite revient à des coauteurs ou dans un dépôt, où un TODO traduit ne correspond plus à l'original et un commentaire supplémentaire apparaît dans chaque diff. Le vérificateur signale les commentaires traduits comme un avertissement pour que vous puissiez décider.
4. Les contrôles structurels ont réussi et le sens a quand même changé
Le résumé dit « une étiquette qui est décalée de 20 % reste utile ». Dans trois exécutions sur neuf, le chinois disait que les étiquettes avec une erreur dans les 20 % restent utiles, ce qui transforme une tolérance en seuil. Plusieurs autres exécutions ont réordonné la phrase de sorte que la proposition « bien que » se rattache à la mauvaise idée, et une est devenue difficile à suivre. Il s'agit de jugements d'un lecteur comparant le chinois à l'anglais, pas d'une revue en aveugle, mais le point ne dépend pas du compte exact : tous les contrôles structurels ont réussi sur ces fichiers, car le 20\%, la macro et les accolades étaient tous corrects.
Deux autres changements étaient acceptables mais méritent d'être connus. Les exécutions sur fichier entier ont écrit \$12 comme 12美元 (« 12 dollars américains »), ce qui élimine entièrement la question de l'échappement. Deux exécutions sur fichier entier ont également supprimé la plupart des liens ~ avant \ref et \cite. C'est inoffensif en chinois, qui ne met pas d'espaces entre les mots, mais dans une langue qui en met, un lien manquant permet à un saut de ligne de séparer « Tableau » de son numéro. Le vérificateur signale les liens comme un avertissement, pas comme un échec.
Un contrôle structurel vous dit que le fichier fonctionne encore. Il ne peut pas vous dire que l'article dit toujours la même chose. Pour cela, utilisez une lecture bilingue du résumé, des affirmations et des chiffres, comme décrit dans notre guide pour relire un article de recherche traduit.
Un flux de travail qui tient la route
-
Obtenez la source et vérifiez ce que vous pouvez en faire. Sur arXiv, les articles soumis en TeX proposent généralement leur source via un lien Source sur la page du résumé ou la page Other formats, sous forme de fichier gzippé ou d'archive tar lorsqu'il y a plusieurs fichiers (aide arXiv). Traduire pour sa propre lecture est une chose. Publier la traduction en est une autre : la licence non exclusive d'arXiv limite la réutilisation par d'autres, tandis que CC BY et CC BY-SA autorisent les adaptations avec attribution, et CC BY-NC-ND non. En cas de doute, demandez aux auteurs.
-
Compilez d'abord l'original. S'il ne compile pas avant la traduction, rien de ce que vous apprendrez ensuite n'est fiable. Conservez le PDF original pour comparaison.
-
Configurez vous-même la langue cible dans le préambule. Ajoutez
ctexoubabelcomme ci-dessus, compilez une fois avec le texte anglais et validez ce changement séparément. -
Traduisez le corps sans le préambule et sans les blocs verbatim. Utilisez un outil qui analyse le LaTeX, ou envoyez le corps par morceaux avec des règles explicites, comme dans notre condition segments. TransLaTeX, un outil open source conçu pour cela, remplace les constructions LaTeX par des jetons avant d'envoyer le texte à un traducteur automatique. Sa documentation indique également qu'il laisse l'en-tête du document intact, ne prend pas en charge les macros et ne gère que les documents à fichier unique, sans
\input. Même un outil dédié vous laisse la décision du préambule. -
Exécutez le contrôle structurel sur chaque paire de fichiers.
python3 check_latex_translation.py main.tex main-zh.tex --keep ShelfmarkIl compare le préambule, les noms de commandes, l'ordre des environnements, les étiquettes, les références, les citations, les clés bibliographiques, les mathématiques, les blocs verbatim, les URL, les
%,&et#non échappés, l'équilibre des accolades, les liens, les commentaires et tous les termes que vous lui demandez de conserver. Attendez-vous à ce que la ligne du préambule échoue après l'étape 3 lorsque vous comparez à l'original ; comparez plutôt à votre fichier anglais mis à jour. Pour un projet réparti sur plusieurs fichiers\input, vérifiez chaque paire. -
Compilez et lisez le PDF.
python3 compile_check.py main-zh.texIl signale les références non résolues (
??), les citations non résolues ([?]) et les glyphes manquants. Ouvrez ensuite le PDF et lisez le résumé, chaque légende et chaque tableau par rapport à l'original. -
Faites une lecture bilingue des affirmations et des chiffres. C'est là que nos trois phrases modifiées auraient été repérées. Tenez un court glossaire de traduction pour les termes techniques de l'article afin qu'un même terme ne soit pas traduit de trois façons.
Où se situe BookTranslator
Le traducteur de documents de BookTranslator accepte les fichiers .tex ainsi que les formats PDF, DOCX, EPUB, Markdown et autres formats structurés. Sa FAQ indique que le résultat est renvoyé dans « un fichier utilisable et adapté au format chaque fois que ce format le permet ».
La page produit ne décrit pas comment il traite les macros LaTeX, les mathématiques ou le préambule, et nous n'avons pas fait passer cet échantillon par BookTranslator pour cet article. Quel que soit l'outil utilisé, faites les étapes 1 à 3 avant de traduire et les étapes 5 à 7 après. Un fichier qui conserve un préambule uniquement anglais compilera toujours sans texte chinois, et une affirmation modifiée passera toujours tous les contrôles structurels.
Si vous ne disposez que du PDF d'un article, et non de sa source, le flux de travail est différent : consultez notre guide pour traduire un article de recherche tout en conservant sa structure. Si votre source est en Markdown plutôt qu'en LaTeX, la même séparation entre mécanique et prose s'applique, avec des pièges différents ; nous les avons testés dans Comment traduire des fichiers Markdown.
Obtenez les fichiers de test
Tout le contenu de ce test est librement réutilisable :
- sample-source.tex : l'échantillon anglais de 98 lignes ;
- check_latex_translation.py : le vérificateur structurel (bibliothèque standard Python uniquement) ;
- compile_check.py : compile chaque fichier tel que renvoyé et avec une configuration chinoise, puis compte les références non résolues, les citations non résolues et les glyphes manquants (nécessite Tectonic et pdftotext) ;
- run_llm_latex_test.py : les trois conditions de prompt pour tout serveur local compatible OpenAI ;
- les neuf sorties dans le dossier outputs, avec check-results.txt, compile-results.txt et results.csv.
Articles connexes





