Cum să traduci un document LaTeX fără a strica matematica, citările sau etichetele
Ce să traduci într-un fișier .tex, ce să lași neatins și de ce un fișier tradus poate compila fără erori și totuși să piardă textul. Cu un fișier exemplu, două verificatoare gratuite și un test local cu LLM în 9 rulări.

Pentru a traduce un document LaTeX, traduce textul narativ și argumentele comenzilor vizibile pentru cititor, cum ar fi titlurile de secțiuni, legendele, notele de subsol și textul linkurilor. Lasă comenzile, numele mediilor, cheile \label, \ref și \cite, matematica și blocurile verbatim exact așa cum sunt. Apoi fă o singură modificare pe care niciun traducător nu ar trebui să o facă în locul tău: configurează preambulul pentru limba țintă, deoarece un fișier care își păstrează preambulul în engleză poate compila fără eroare și totuși poate produce un PDF în care textul tradus lipsește.
Ultimul punct este rezultatul principal al unui test mic. Am tradus o lucrare LaTeX de 98 de linii în chineză simplificată de nouă ori cu un model local, în trei moduri diferite, și am verificat fiecare rezultat cu un script și un compilator. Părțile care de obicei îngrijorează lumea au rezistat în toate cele nouă rulări: etichetele, referințele, citările, ecuațiile, URL-urile, coloanele tabelelor și acoladele au revenit intacte, iar toate trimiterile încrucișate s-au rezolvat. Problemele au fost în altă parte. Cele șase rulări al căror prompt spunea „nu modifica preambulul” au ascultat, au compilat cu codul de ieșire 0 și au produs PDF-uri fără niciun text chinezesc. O rulare a aplicat regula noastră „escapează semnul %” în interiorul unui listat de cod, așa că PDF-ul afișează o bară oblică inversă rătăcită. Și cel puțin trei rulări au modificat sensul unei propoziții în moduri pe care nicio verificare structurală nu le poate vedea.
Răspuns rapid: ce să traduci și ce să lași neatins
| Parte a fișierului | Exemplu din fișierul nostru | Să o traduci? |
|---|---|---|
Preambul: \documentclass, \usepackage, \newcommand | \newcommand{\wpm}{\mathrm{wpm}} | Nu, dar adaugă singur configurarea pentru limba țintă (vezi mai jos) |
\title, \author, \date | \title{Estimating Reading Time for Translated Ebooks} | Titlul și data da; numele de obicei nu |
| Titluri de secțiuni | \section{Method}\label{sec:method} | Da, textul dintre acolade; păstrează eticheta |
| Etichete și referințe | \label{eq:time}, Section~\ref{sec:method}, \eqref{eq:time} | Păstrează fiecare cheie |
| Chei de citare și bibliografie | \cite{brysbaert2019}, \bibitem{rayner2016} | Păstrează cheile; traduce textul intrării doar dacă domeniul tău o face |
| Matematică inline și display | $r_c$, T = \frac{N}{r} | Nu |
| Text în interiorul matematicii | \text{ for English silent reading.} | Da. Se afișează ca text obișnuit. |
| Macrouri care primesc text | \term{characters per minute} | Traduce argumentul, păstrează comanda |
| Legende și note de subsol | \caption{Reading rates used in this paper.} | Da |
| Listări verbatim și de cod | shelfmark count --unit chars book.epub # 100% of body text | Nu, inclusiv comentariile din interiorul lor |
\url și primul argument al \href | \href{https://example.org/shelfmark/survey}{online appendix} | Păstrează URL-ul; traduce textul linkului |
| Caractere escape-ate | 20\%, \$12, R\&D | Păstrează backslash-ul în proză |
Comentarii % | % TODO: replace the Chinese rate ... | Opțional. Cititorii nu le văd niciodată. |
| Legături înaintea referințelor | Table~\ref{tab:rates} | Păstrează în limbile care folosesc spații; opțional în chineză și japoneză |
Tot restul este proză obișnuită: paragrafe, rezumat, elemente de listă și celule de tabel.
Ce am testat
Am scris sample-source.tex, o scurtă lucrare inventată despre estimări ale timpului de citire pentru o aplicație fictivă numită Shelfmark. Se compilează fără erori și conține câte un exemplu din fiecare construct din tabelul de mai sus, plus un tabel booktabs, o figură cu legendă, două comentarii %, un bloc verbatim cu un % simplu în el și o bibliografie inline.
Apoi am rugat un model local să o traducă în chineză simplificată în trei moduri:
- Fișier întreg. Lipește întregul fișier și cere un fișier tradus care încă se compilează.
- Cu instrucțiuni. La fel, plus șapte reguli: nu modifica preambulul, păstrează fiecare comandă, mediu, etichetă, referință și cheie de citare, lasă matematica în pace cu excepția
\text{}, lasă blocurile verbatim și URL-urile în pace, păstrează caracterele speciale escape-ate, păstrează legăturile și traduce proza, legendele, notele de subsol și textul linkurilor. - Segmente. Ține preambulul complet în afara cererii (se trimite doar linia
\title, astfel încât\daterămâne în engleză), împarte corpul la liniile goale, sari peste blocul verbatim, trimite fiecare bucată cu aceleași reguli și reasamblează.
Modelul a fost Qwen 3.6 27B (Q4_K_M) în LM Studio, cu gândirea dezactivată și temperatura 0.3, pe un Apple M4 Max cu 64 GB de memorie. Am rulat fiecare condiție de trei ori, nouă rulări în total, pe 26 octombrie 2026. Scriptul este run_llm_latex_test.py, iar toate cele nouă rezultate sunt publicate needitate în folderul outputs. Dacă nu ați configurat niciodată un model local, ghidul nostru de traducere cu LLM local acoperă setările.
Am compilat fiecare rezultat cu Tectonic 0.17.0, care folosește motorul XeTeX, o dată exact așa cum a fost returnat și o dată cu o configurație chinezească adăugată la preambul. Apoi am citit textul din fiecare PDF. Acesta a fost un test mic cu un singur model, o singură pereche de limbi și un singur fișier. Arată ce probleme apar și cum să le prindeți. Nu clasează modele sau prompturi.
Rezultat: Structura a supraviețuit; preambulul a decis dacă textul a apărut
check_latex_translation.py a comparat fiecare rezultat cu sursa, iar compile_check.py l-a compilat. Rezultatele complete sunt în check-results.txt și compile-results.txt, iar results.csv are un rând per rulare.
| Verificare | Fișier întreg | Instructat | Segmente |
|---|---|---|---|
| Etichete, referințe, citări și chei bibliografice neschimbate | 3 din 3 | 3 din 3 | 3 din 3 |
Matematică neschimbată (textul din interiorul \text{} tradus) | 3 din 3 | 3 din 3 | 3 din 3 |
| URL-uri, acolade și coloane de tabel intacte | 3 din 3 | 3 din 3 | 3 din 3 |
| Modelul a adăugat un pachet chinezesc în preambul | 3 din 3 | 0 din 3 | 0 din 3 |
| Se compilează ca returnat | 3 din 3 | 3 din 3 | 3 din 3 |
| Text chinezesc prezent efectiv în PDF ca returnat | 3 din 3 | 0 din 3 | 0 din 3 |
| Bloc verbatim neschimbat | 3 din 3 | 2 din 3 | 3 din 3 |
Comentariile % lăsate în engleză | 3 din 3 | 3 din 3 | 1 din 3 |
| Fiecare referință și citare se rezolvă după adăugarea configurației pentru chineză | 3 din 3 | 3 din 3 | 3 din 3 |
Verificatorul nostru a raportat inițial matematică modificată în prima rulare. Matematica era în regulă: ordinea cuvintelor în chineză plasase $N$ înaintea lui $r$ într-o propoziție. Verificatorul publicat compară segmentele matematice ca o colecție neordonată din acest motiv, așa că reordonarea este permisă, dar un simbol modificat nu este.
1. „Nu atinge preambulul” a produs un PDF fără chineză
Regula preambulului sună ca cea mai sigură instrucțiune pe care o poți da. Preambulul eșantionului nostru încarcă amsmath, booktabs și hyperref și definește trei macrocomenzi, iar nimic din toate acestea nu necesită traducere. Așa că rulările cu instrucțiuni și cu segmente l-au lăsat în pace, exact cum li s-a spus.
Dar fonturile implicite într-o configurație LaTeX standard nu au caractere chinezești. Toate cele șase fișiere s-au compilat cu cod de ieșire 0. Tectonic a avertizat, o dată pentru fiecare caracter lipsă, cu linii precum Missing character: There is no 估 (U+4F30) in font [lmroman17-regular], iar fișierul jurnal a înregistrat între 554 și 577 de astfel de avertismente pe rulare. Dar un avertisment nu oprește compilarea. Când am extras textul din cele șase PDF-uri, acestea conțineau numele autorilor, numerele și matematica, și zero caractere chinezești. Cele trei PDF-uri cu fișier întreg conțineau între 481 și 490. Un script de compilare care verifică doar dacă compilarea a reușit, sau o persoană care doar se uită la sfârșitul rezultatului, ar fi livrat toate cele șase.
Cele trei rulări cu fișier întreg, care nu au avut o astfel de regulă, au adăugat singure \usepackage{ctex}, iar PDF-urile lor erau complete. Acesta nu este un motiv să lași un model să-ți rescrie preambulul. Este un motiv să vezi configurarea limbii țintă ca parte a sarcinii de traducere, făcută o dată, de tine:
- Chineză: încarcă ctex, care suportă pdfLaTeX, XeLaTeX și LuaLaTeX. În mod implicit alege fonturi pentru sistemul tău de operare; jurnalul nostru arată că încarcă setul de fonturi macOS. Dacă fișierul trebuie să se compileze la fel pe alte mașini,
\usepackage[UTF8,fontset=fandol]{ctex}folosește fonturile gratuite Fandol distribuite cu TeX Live, pe care Tectonic le descarcă și el la cerere. Aceasta este ceea ce adaugăcompile_check.py. - Alte limbi: încarcă babel cu limba țintă, astfel încât despărțirea în silabe și cuvintele generate precum „Figura”, „Tabelul” și „Rezumat” să urmeze noua limbă. Japoneza, coreeana și limbile scriere-de-la-dreapta-la-stânga necesită fiecare propria configurare.
După compilare, verifică jurnalul pentru Missing character și citește PDF-ul, nu doar codul de ieșire. Am testat doar XeTeX prin Tectonic; alte motoare raportează un font lipsă în mod diferit.
2. Regula de escapare s-a scurs în listarea codului
Instrucțiunile noastre spuneau să păstrăm caracterele speciale escapat, iar în proză aceasta este regula corectă: un % simplu în LaTeX începe un comentariu și înghite în tăcere restul liniei. Toate cele nouă rulări au păstrat 20\% în rezumat.
În prima rulare cu instrucțiuni, modelul a aplicat regula și în interiorul blocului verbatim și a tradus comentariul de cod de acolo:
source: shelfmark count --unit chars book.epub # 100% of body text
translation: shelfmark count --unit chars book.epub # 100\% 正文
În interiorul verbatim, nimic nu este o comandă, așa că PDF-ul afișează 100\% cu bară inversă. Soluția nu este un prompt mai bun. Nu trimiteți niciodată blocuri verbatim, lstlisting sau minted către un traducător, așa cum a făcut condiția cu segmente. Apoi traduceți manual orice comentariu din ele dacă cititorii au nevoie de el.
3. Comentariile au respectat limitele cererii
Fișierul are două comentarii %: o notă deasupra definițiilor de macrocomenzi și un TODO deasupra listării de cod. Rulările pe fișier întreg și cele cu instrucțiuni le-au lăsat pe amândouă în engleză. Condiția cu segmente a tradus TODO-ul în două din trei rulări, pentru că TODO-ul se afla întâmplător în același bloc cu un paragraf pe care l-am trimis spre traducere. Două rulări pe fișier întreg au adăugat și un comentariu propriu după pachetul pe care l-au inserat.
Nimic din toate acestea nu schimbă PDF-ul. Contează dacă sursa tradusă ajunge înapoi la coautori sau într-un depozit, unde un TODO tradus nu mai corespunde originalului și un comentariu suplimentar apare în fiecare diff. Verificatorul raportează comentariile traduse ca avertisment, ca să puteți decide.
4. Verificările structurale au trecut, iar sensul s-a schimbat totuși
Rezumatul spune „o etichetă care este deplasată cu 20% este încă utilă”. În trei din nouă rulări, chineza spunea că etichetele cu o eroare în interiorul a 20% sunt încă utile, ceea ce transformă o toleranță într-un prag. Alte câteva rulări au reordonat propoziția astfel încât propoziția cu „deși” să se atașeze ideii greșite, iar una a devenit greu de urmărit. Acestea sunt judecăți ale unui singur cititor care compară chineza cu engleza, nu o evaluare orb, dar concluzia nu depinde de numărul exact: fiecare verificare structurală a trecut pe acele fișiere, pentru că 20\%, macrocomanda și acoladele erau toate corecte.
Alte două modificări au fost în regulă, dar merită știute. Rulările pe fișier întreg au scris \$12 ca 12美元 („12 dolari americani”), ceea ce elimină complet problema escaparării. Două rulări pe fișier întreg au eliminat și majoritatea legăturilor ~ dinaintea \ref și \cite. Acest lucru este inofensiv în chineză, care nu pune spații între cuvinte, dar într-o limbă care pune, o legătură lipsă lasă un sfârșit de rând să despartă „Tabelul” de numărul său. Verificatorul raportează legăturile ca avertisment, nu ca eșec.
O verificare structurală vă spune că fișierul încă funcționează. Nu vă poate spune că lucrarea spune în continuare același lucru. Pentru asta, folosiți o lectură bilingvă a rezumatului, a afirmațiilor și a numerelor, așa cum este descris în ghidul nostru despre revizuirea unei lucrări de cercetare traduse.
Un flux de lucru care rezistă
-
Obțineți sursa și verificați ce puteți face cu ea. Pe arXiv, lucrările trimise în TeX oferă de obicei sursa printr-un link Source pe pagina de rezumat sau pe pagina Other formats, ca fișier gzip sau arhivă tar când există mai multe fișiere (ajutor arXiv). Traducerea pentru propria lectură este un lucru. Publicarea traducerii este altul: licența neexclusivă a arXiv limitează reutilizarea de către alții, în timp ce CC BY și CC BY-SA permit adaptări cu atribuire, iar CC BY-NC-ND nu permite. Întrebați autorii când aveți îndoieli.
-
Compilați mai întâi originalul. Dacă nu se compilează înainte de traducere, nimic din ce aflați după aceea nu este de încredere. Păstrați PDF-ul original pentru comparație.
-
Configurați singur limba țintă în preambul. Adăugați
ctexsaubabelca mai sus, compilați o dată cu textul în engleză și faceți commit separat la această modificare. -
Traduceți corpul fără preambul și fără blocuri verbatim. Folosiți un instrument care analizează LaTeX sau trimiteți corpul în bucăți cu reguli explicite, ca în condiția noastră cu segmente. TransLaTeX, un instrument open-source creat pentru asta, înlocuiește constructele LaTeX cu tokenuri înainte de a trimite textul către un traducător automat. Documentația sa spune de asemenea că păstrează antetul documentului neatins, nu acceptă macrocomenzi și gestionează doar documente cu un singur fișier, fără
\input. Chiar și un instrument dedicat lasă decizia despre preambul în seama dumneavoastră. -
Rulați verificarea structurală pe fiecare pereche de fișiere.
python3 check_latex_translation.py main.tex main-zh.tex --keep ShelfmarkAceasta compară preambulul, numele comenzilor, ordinea mediilor, etichetele, referințele, citările, cheile bibliografiei, matematica, blocurile verbatim, URL-urile,
%,&și#neescapate, echilibrul acoladelor, legăturile, comentariile și orice termeni pe care îi cereți să fie păstrați. Așteptați-vă ca linia preambulului să eșueze după pasul 3 când comparați cu originalul; comparați în schimb cu fișierul englez actualizat. Pentru un proiect împărțit în mai multe fișiere\input, verificați fiecare pereche. -
Compilați și citiți PDF-ul.
python3 compile_check.py main-zh.texAcesta raportează referințe nerezolvate (
??), citări nerezolvate ([?]) și glife lipsă. Apoi deschideți PDF-ul și citiți rezumatul, fiecare legendă și fiecare tabel în comparație cu originalul. -
Faceți o lectură bilingvă a afirmațiilor și numerelor. Aici ar fi fost prinse cele trei propoziții modificate. Păstrați un scurt glosar de traducere pentru termenii tehnici ai lucrării, astfel încât același termen să nu fie tradus în trei feluri.
Unde se încadrează BookTranslator
Traducătorul de documente al BookTranslator acceptă fișiere .tex împreună cu PDF, DOCX, EPUB, Markdown și alte formate structurate. Întrebările frecvente spun că rezultatul este returnat într-un „fișier utilizabil, adecvat formatului, ori de câte ori formatul respectiv permite acest lucru”.
Pagina produsului nu descrie cum tratează macrocomenzile LaTeX, matematica sau preambulul și nu am rulat acest eșantion prin BookTranslator pentru acest articol. Indiferent de instrumentul folosit, faceți pașii 1–3 înainte de traducere și pașii 5–7 după. Un fișier care păstrează un preambul doar în engleză va compila în continuare fără text chinezesc, iar o afirmație modificată va trece în continuare toate verificările structurale.
Dacă aveți doar PDF-ul unei lucrări, nu sursa ei, fluxul de lucru este diferit: vedeți ghidul nostru despre traducerea unei lucrări de cercetare păstrându-i structura. Dacă sursa dumneavoastră este Markdown, nu LaTeX, se aplică aceeași separare între mecanism și proză, cu capcane diferite; le-am testat în Cum să traduceți fișierele Markdown.
Obțineți fișierele de test
Totul din acest test poate fi reutilizat gratuit:
- sample-source.tex: eșantionul englez de 98 de linii;
- check_latex_translation.py: verificatorul structural (doar biblioteca standard Python);
- compile_check.py: compilează fiecare fișier așa cum este returnat și cu o configurație chinezească și numără referințele nerezolvate, citările nerezolvate și glifele lipsă (necesită Tectonic și pdftotext);
- run_llm_latex_test.py: cele trei condiții de prompt pentru orice server local compatibil OpenAI;
- cele nouă rezultate din folderul outputs, împreună cu check-results.txt, compile-results.txt și results.csv.
Articole asociate





