BookTranslator
BookTranslator

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.

BookTranslator

BookTranslator Team

14 min read

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șieruluiExemplu din fișierul nostruSă 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 codshelfmark count --unit chars book.epub # 100% of body textNu, 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-ate20\%, \$12, R\&DPăstrează backslash-ul în proză
Comentarii %% TODO: replace the Chinese rate ...Opțional. Cititorii nu le văd niciodată.
Legături înaintea referințelorTable~\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:

  1. Fișier întreg. Lipește întregul fișier și cere un fișier tradus care încă se compilează.
  2. 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.
  3. Segmente. Ține preambulul complet în afara cererii (se trimite doar linia \title, astfel încât \date ră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.

VerificareFișier întregInstructatSegmente
Etichete, referințe, citări și chei bibliografice neschimbate3 din 33 din 33 din 3
Matematică neschimbată (textul din interiorul \text{} tradus)3 din 33 din 33 din 3
URL-uri, acolade și coloane de tabel intacte3 din 33 din 33 din 3
Modelul a adăugat un pachet chinezesc în preambul3 din 30 din 30 din 3
Se compilează ca returnat3 din 33 din 33 din 3
Text chinezesc prezent efectiv în PDF ca returnat3 din 30 din 30 din 3
Bloc verbatim neschimbat3 din 32 din 33 din 3
Comentariile % lăsate în engleză3 din 33 din 31 din 3
Fiecare referință și citare se rezolvă după adăugarea configurației pentru chineză3 din 33 din 33 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ă

  1. 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.

  2. 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.

  3. Configurați singur limba țintă în preambul. Adăugați ctex sau babel ca mai sus, compilați o dată cu textul în engleză și faceți commit separat la această modificare.

  4. 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ă.

  5. Rulați verificarea structurală pe fiecare pereche de fișiere.

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

    Aceasta 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.

  6. Compilați și citiți PDF-ul.

    python3 compile_check.py main-zh.tex
    

    Acesta 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.

  7. 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:

Articole asociate