Jak przetłumaczyć dokument LaTeX bez psucia matematyki, cytowań i etykiet
Co tłumaczyć w pliku .tex, co zostawić w spokoju i dlaczego przetłumaczony plik może się poprawnie skompilować, a mimo to zgubić tekst. Z przykładowym plikiem, dwoma darmowymi narzędziami sprawdzającymi i testem lokalnego LLM w 9 przebiegach.

Aby przetłumaczyć dokument LaTeX, tłumacz prozę oraz argumenty poleceń widoczne dla czytelnika, takie jak tytuły sekcji, podpisy, przypisy i tekst linków. Polecenia, nazwy środowisk, klucze \label, \ref i \cite, matematykę oraz bloki verbatim zostaw dokładnie tak, jak są. Następnie wprowadź jedną zmianę, której żaden tłumacz nie powinien za ciebie robić: skonfiguruj preambułę dla języka docelowego, ponieważ plik, który zachowuje angielską preambułę, może skompilować się bez błędu i mimo to wygenerować PDF z brakującym przetłumaczonym tekstem.
Ten ostatni punkt jest głównym wynikiem małego testu. Przetłumaczyliśmy 98-wierszowy artykuł LaTeX na uproszczony chiński dziewięć razy za pomocą lokalnego modelu, na trzy różne sposoby, i sprawdziliśmy każdy wynik skryptem oraz kompilatorem. Elementy, o które ludzie zwykle się martwią, wytrzymały we wszystkich dziewięciu przebiegach: etykiety, odwołania, cytowania, równania, adresy URL, kolumny tabel i nawiasy klamrowe wróciły nienaruszone, a każde odwołanie krzyżowe zostało rozwiązane. Problemy były gdzie indziej. Sześć przebiegów, których prompt mówił „nie zmieniaj preambuły”, było posłusznych, skompilowało się z kodem wyjścia 0 i wygenerowało pliki PDF bez jakiegokolwiek chińskiego tekstu. Jeden przebieg zastosował naszą zasadę „escapuj znak %” wewnątrz listingu kodu, więc PDF drukuje zbłąkany ukośnik wsteczny. A co najmniej trzy przebiegi przesunęły znaczenie zdania w sposób, którego żadne sprawdzenie strukturalne nie zauważy.
Szybka odpowiedź: co tłumaczyć, a co zostawić w spokoju
| Część pliku | Przykład z naszego pliku | Tłumaczyć? |
|---|---|---|
Preambuła: \documentclass, \usepackage, \newcommand | \newcommand{\wpm}{\mathrm{wpm}} | Nie, ale sam dodaj konfigurację języka docelowego (patrz poniżej) |
\title, \author, \date | \title{Estimating Reading Time for Translated Ebooks} | Tytuł i data tak; nazwy zwykle nie |
| Nagłówki | \section{Method}\label{sec:method} | Tak, tekst w nawiasach klamrowych; zachowaj etykietę |
| Etykiety i odwołania | \label{eq:time}, Section~\ref{sec:method}, \eqref{eq:time} | Zachowaj każdy klucz |
| Cytowania i klucze bibliografii | \cite{brysbaert2019}, \bibitem{rayner2016} | Zachowaj klucze; tłumacz tekst wpisu tylko jeśli twoja dziedzina to robi |
| Matematyka w linii i w bloku | $r_c$, T = \frac{N}{r} | Nie |
| Tekst wewnątrz matematyki | \text{ for English silent reading.} | Tak. Drukuje się jako zwykły tekst. |
| Makra przyjmujące tekst | \term{characters per minute} | Tłumacz argument, zachowaj polecenie |
| Podpisy i przypisy | \caption{Reading rates used in this paper.} | Tak |
| Bloki dosłowne i listingi kodu | shelfmark count --unit chars book.epub # 100% of body text | Nie, łącznie z komentarzami w nich |
\url i pierwszy argument \href | \href{https://example.org/shelfmark/survey}{online appendix} | Zachowaj URL; przetłumacz tekst linku |
| Znaki ze znakiem ucieczki | 20\%, \$12, R\&D | Zachowaj ukośnik w prozie |
Komentarze % | % TODO: replace the Chinese rate ... | Opcjonalne. Czytelnicy ich nie widzą. |
| Nierozdzielne spacje przed odwołaniami | Table~\ref{tab:rates} | Zachowaj w językach używających spacji; opcjonalne w chińskim i japońskim |
Wszystko inne to zwykła proza: akapity, streszczenie, elementy listy i komórki tabel.
Co testowaliśmy
Napisaliśmy sample-source.tex, krótki wymyślony artykuł o szacowaniu czasu czytania dla fikcyjnej aplikacji o nazwie Shelfmark. Kompiluje się bez błędów i zawiera po jednym przykładzie każdej konstrukcji z powyższej tabeli, a także tabelę booktabs, rysunek z podpisem, dwa komentarze %, blok verbatim z gołym % w środku oraz bibliografię w tekście.
Następnie poprosiliśmy lokalny model o przetłumaczenie go na uproszczony chiński na trzy sposoby:
- Cały plik. Wklej cały plik i poproś o przetłumaczony plik, który nadal się kompiluje.
- Z instrukcjami. To samo plus siedem reguł: nie zmieniaj preambuły, zachowaj każde polecenie, środowisko, etykietę, odwołanie i klucz cytowania, nie ruszaj matematyki poza
\text{}, nie ruszaj bloków dosłownych i URL-i, zachowaj znaki specjalne ze znakiem ucieczki, zachowaj nierozdzielne spacje i przetłumacz prozę, podpisy, przypisy i tekst linków. - Segmenty. Całkowicie pomiń preambułę w żądaniu (wysyłany jest tylko wiersz
\title, więc\datepozostaje po angielsku), podziel treść na puste linie, pomiń blok dosłowny, wyślij każdy fragment z tymi samymi regułami i złóż z powrotem.
Modelem był Qwen 3.6 27B (Q4_K_M) w LM Studio, z wyłączonym myśleniem i temperaturą 0,3, na Apple M4 Max z 64 GB pamięci. Każdy warunek uruchomiliśmy trzy razy, łącznie dziewięć uruchomień, 26 października 2026 r. Skrypt to run_llm_latex_test.py, a wszystkie dziewięć wyników opublikowano bez edycji w folderze outputs. Jeśli nigdy nie konfigurowałeś lokalnego modelu, nasz przewodnik po tłumaczeniu z lokalnym LLM omawia ustawienia.
Skompilowaliśmy każdy wynik za pomocą Tectonic 0.17.0, który używa silnika XeTeX, raz dokładnie w postaci zwróconej, a raz z dodaną do preambuły konfiguracją chińską. Następnie odczytaliśmy tekst z powrotem z każdego PDF-a. Był to mały test jednego modelu, jednej pary językowej i jednego pliku. Pokazuje, jakie problemy występują i jak je wychwycić. Nie rankinguje modeli ani promptów.
Wynik: struktura przetrwała; preambuła zdecydowała, czy tekst się pojawił
check_latex_translation.py porównał każdy wynik ze źródłem, a compile_check.py go skompilował. Pełne wyniki znajdują się w check-results.txt i compile-results.txt, a results.csv zawiera jeden wiersz na uruchomienie.
| Sprawdzenie | Cały plik | Zgodnie z instrukcją | Segmenty |
|---|---|---|---|
| Etykiety, odwołania, cytowania i klucze bibliografii bez zmian | 3 z 3 | 3 z 3 | 3 z 3 |
Matematyka bez zmian (tekst wewnątrz \text{} przetłumaczony) | 3 z 3 | 3 z 3 | 3 z 3 |
| Adresy URL, nawiasy klamrowe i kolumny tabeli nienaruszone | 3 z 3 | 3 z 3 | 3 z 3 |
| Model dodał chiński pakiet do preambuły | 3 z 3 | 0 z 3 | 0 z 3 |
| Kompiluje się w zwróconej postaci | 3 z 3 | 3 z 3 | 3 z 3 |
| Chiński tekst faktycznie w pliku PDF w zwróconej postaci | 3 z 3 | 0 z 3 | 0 z 3 |
| Blok dosłowny bez zmian | 3 z 3 | 2 z 3 | 3 z 3 |
Komentarze % pozostawione po angielsku | 3 z 3 | 3 z 3 | 1 z 3 |
| Każde odwołanie i cytowanie działa po dodaniu chińskiej konfiguracji | 3 z 3 | 3 z 3 | 3 z 3 |
Nasz walidator początkowo zgłosił zmienioną matematykę w pierwszym przebiegu. Matematyka była w porządku: chiński szyk zdania umieścił $N$ przed $r$ w jednym zdaniu. Opublikowany walidator porównuje segmenty matematyczne jako nieuporządkowany zbiór właśnie z tego powodu, więc zmiana kolejności jest dozwolona, ale zmiana symbolu nie.
1. „Nie dotykaj preambuły” dało PDF bez ani jednego chińskiego znaku
Zasada dotycząca preambuły brzmi jak najbezpieczniejsze możliwe polecenie. Preambuła naszego przykładu ładuje amsmath, booktabs i hyperref oraz definiuje trzy makra, a nic z tego nie wymaga tłumaczenia. Zatem przebiegi z instrukcją i segmentowe pozostawiły ją w spokoju, dokładnie tak, jak nakazano.
Ale domyślne czcionki w standardowej instalacji LaTeX-a nie mają chińskich znaków. Wszystkie sześć plików skompilowało się z kodem wyjścia 0. Tectonic ostrzegał, raz na każdy brakujący znak, liniami takimi jak Missing character: There is no 估 (U+4F30) in font [lmroman17-regular], a plik dziennika odnotował od 554 do 577 takich ostrzeżeń na przebieg. Ale ostrzeżenie nie zatrzymuje kompilacji. Gdy wyodrębniliśmy tekst z tych sześciu PDF-ów, zawierały nazwiska autorów, liczby i matematykę oraz zero chińskich znaków. Trzy PDF-y z całych plików zawierały od 481 do 490. Skrypt kompilujący, który sprawdza tylko, czy kompilacja się powiodła, albo osoba, która tylko zerka na koniec danych wyjściowych, wysłałaby wszystkie sześć.
Trzy przebiegi na całych plikach, które nie miały takiej zasady, same dodały \usepackage{ctex}, a ich PDF-y były kompletne. To nie jest powód, by pozwolić modelowi przepisywać preambułę. To powód, by uznać konfigurację języka docelowego za część zadania tłumaczeniowego, wykonaną raz, przez Ciebie:
- Chiński: załaduj ctex, który obsługuje pdfLaTeX, XeLaTeX i LuaLaTeX. Domyślnie dobiera czcionki dla Twojego systemu operacyjnego; nasz dziennik pokazuje, że ładuje swój zestaw czcionek dla macOS. Jeśli plik ma się kompilować tak samo na innych maszynach,
\usepackage[UTF8,fontset=fandol]{ctex}używa wolnych czcionek Fandol dystrybuowanych z TeX Live, które Tectonic również pobiera na żądanie. To właśnie dodajecompile_check.py. - Inne języki: załaduj babel z językiem docelowym, aby dzielenie wyrazów i generowane słowa, takie jak „Rysunek”, „Tabela” i „Streszczenie”, były zgodne z nowym językiem. Japoński, koreański i języki pisane od prawej do lewej wymagają własnej konfiguracji.
Po kompilacji sprawdź w dzienniku Missing character i przeczytaj PDF, a nie tylko kod wyjścia. Testowaliśmy tylko XeTeX przez Tectonic; inne silniki zgłaszają brakującą czcionkę inaczej.
2. Zasada ucieczki znaków przedostała się do listingu kodu
Nasze instrukcje mówiły, aby zachować ucieczkę znaków specjalnych, i w prozie to właściwa zasada: samotny % w LaTeX-u rozpoczyna komentarz i po cichu połyka resztę wiersza. Wszystkie dziewięć przebiegów zachowało 20\% w streszczeniu.
W pierwszym uruchomieniu z instrukcjami model zastosował regułę również wewnątrz bloku verbatim i przetłumaczył tam komentarz w kodzie:
source: shelfmark count --unit chars book.epub # 100% of body text
translation: shelfmark count --unit chars book.epub # 100\% 正文
Wewnątrz verbatim nic nie jest poleceniem, więc PDF wyświetla 100\% z ukośnikiem. Rozwiązaniem nie jest lepszy prompt. Nigdy nie wysyłaj bloków verbatim, lstlisting ani minted do tłumacza, tak jak w warunku segmentów. Następnie przetłumacz ręcznie dowolny komentarz w nich, jeśli Twoi czytelnicy tego potrzebują.
3. Komentarze przestrzegały granic żądania
Plik zawiera dwa komentarze %: notatkę nad definicjami makr i TODO nad listą kodu. Uruchomienia całościowe i z instrukcjami pozostawiły oba po angielsku. Warunek segmentów przetłumaczył TODO w dwóch z trzech uruchomień, ponieważ TODO przypadkowo znajdował się w tym samym bloku co akapit wysłany do tłumaczenia. Dwa uruchomienia całościowe dodały także własny komentarz po wstawionym pakiecie.
Nic z tego nie zmienia PDF. Ma to znaczenie, jeśli przetłumaczone źródło wraca do współautorów lub do repozytorium, gdzie przetłumaczone TODO nie pasuje już do oryginału, a dodatkowy komentarz pojawia się w każdym diffie. Sprawdzian zgłasza przetłumaczone komentarze jako ostrzeżenie, abyś mógł zdecydować.
4. Kontrole strukturalne przeszły, a znaczenie i tak się zmieniło
Streszczenie mówi: „etykieta z błędem 20% wciąż jest użyteczna”. W trzech z dziewięciu uruchomień chiński tekst mówił, że etykiety z błędem w granicach 20% wciąż są użyteczne, co zmienia tolerancję w próg. Kilka innych uruchomień zmieniło kolejność zdania tak, że zdanie „chociaż” odnosi się do niewłaściwej myśli, a jedno stało się trudne do zrozumienia. To są oceny jednego czytelnika porównującego chiński z angielskim, a nie zaślepiona recenzja, ale sedno nie zależy od dokładnej liczby: wszystkie kontrole strukturalne przeszły na tych plikach, ponieważ 20\%, makro i nawiasy klamrowe były poprawne.
Dwie inne zmiany były w porządku, ale warte odnotowania. Uruchomienia całościowe zapisały \$12 jako 12美元 („12 dolarów amerykańskich”), co całkowicie usuwa kwestię ucieczki znaków. Dwa uruchomienia całościowe usunęły też większość wiązań ~ przed \ref i \cite. Jest to nieszkodliwe w chińskim, który nie stawia spacji między słowami, ale w języku, który je stawia, brakujące wiązanie pozwala złamaniu wiersza oddzielić „Tabelę” od jej numeru. Sprawdzian zgłasza wiązania jako ostrzeżenie, a nie błąd.
Kontrola strukturalna mówi, że plik nadal działa. Nie może powiedzieć, że artykuł nadal mówi to samo. W tym celu użyj dwujęzycznej lektury streszczenia, twierdzeń i liczb, zgodnie z opisem w naszym przewodniku po recenzowaniu przetłumaczonego artykułu naukowego.
Proces, który się sprawdza
-
Zdobądź źródło i sprawdź, co możesz z nim zrobić. Na arXiv artykuły przesłane w TeX zwykle udostępniają źródło przez link Source na stronie streszczenia lub na stronie Other formats, jako plik gzip lub archiwum tar, gdy jest kilka plików (pomoc arXiv). Tłumaczenie na własny użytek to jedno. Publikacja tłumaczenia to co innego: własna niewyłączna licencja arXiv ogranicza ponowne wykorzystanie przez innych, podczas gdy CC BY i CC BY-SA pozwalają na adaptacje z podaniem autorstwa, a CC BY-NC-ND nie. W razie wątpliwości zapytaj autorów.
-
Najpierw skompiluj oryginał. Jeśli nie kompiluje się przed tłumaczeniem, nic, czego się później dowiesz, nie jest wiarygodne. Zachowaj oryginalny PDF do porównania.
-
Skonfiguruj język docelowy w preambule samodzielnie. Dodaj
ctexlubbabeljak powyżej, skompiluj raz z tekstem angielskim i zatwierdź tę zmianę osobno. -
Tłumacz treść bez preambuły i bez bloków verbatim. Użyj narzędzia, które parsuje LaTeX, lub wyślij treść w kawałkach z jawnymi regułami, jak w naszym warunku segmentów. TransLaTeX, open-source'owe narzędzie stworzone do tego celu, zastępuje konstrukcje LaTeX tokenami przed wysłaniem tekstu do tłumacza maszynowego. Jego dokumentacja mówi również, że pozostawia nagłówek dokumentu nietknięty, nie obsługuje makr i obsługuje tylko dokumenty jednoplikowe, bez
\input. Nawet dedykowane narzędzie pozostawia decyzję o preambule Tobie. -
Uruchom kontrolę strukturalną na każdej parze plików.
python3 check_latex_translation.py main.tex main-zh.tex --keep ShelfmarkPorównuje preambułę, nazwy poleceń, kolejność środowisk, etykiety, odwołania, cytowania, klucze bibliografii, matematykę, bloki verbatim, adresy URL, nieescapowane
%,&i#, równowagę nawiasów klamrowych, wiązania, komentarze oraz dowolne terminy, o których zachowanie poprosisz. Oczekuj, że linia preambuły nie przejdzie po kroku 3, gdy porównujesz z oryginałem; porównuj zamiast tego z zaktualizowanym plikiem angielskim. W przypadku projektu podzielonego na kilka plików\inputsprawdź każdą parę. -
Skompiluj i przeczytaj PDF.
python3 compile_check.py main-zh.texZgłasza nierozwiązane odwołania (
??), nierozwiązane cytowania ([?]) i brakujące glify. Następnie otwórz PDF i przeczytaj streszczenie, każdy podpis i każdą tabelę w porównaniu z oryginałem. -
Zrób dwujęzyczną lekturę twierdzeń i liczb. To tutaj nasze trzy zmienione zdania zostałyby wychwycone. Prowadź krótki słownik tłumaczeń terminów technicznych artykułu, aby ten sam termin nie był tłumaczony na trzy sposoby.
Gdzie pasuje BookTranslator
Tłumacz dokumentów BookTranslatora akceptuje pliki .tex wraz z PDF, DOCX, EPUB, Markdown i innymi formatami strukturalnymi. Jego FAQ mówi, że wynik jest zwracany w „użytecznym pliku w odpowiednim formacie, gdy ten format na to pozwala”.
Strona produktu nie opisuje, jak traktuje makra LaTeX, matematykę czy preambułę, i nie przepuściliśmy tego przykładu przez BookTranslator na potrzeby tego artykułu. Jakiegokolwiek narzędzia użyjesz, wykonaj kroki od 1 do 3 przed tłumaczeniem i kroki od 5 do 7 po nim. Plik, który zachowuje preambułę tylko po angielsku, nadal będzie się kompilować bez tekstu chińskiego, a zmienione twierdzenie nadal przejdzie każdą kontrolę strukturalną.
Jeśli masz tylko PDF artykułu, a nie jego źródło, proces jest inny: zobacz nasz przewodnik po tłumaczeniu artykułu naukowego z zachowaniem jego struktury. Jeśli Twoim źródłem jest Markdown, a nie LaTeX, ten sam podział na maszynerię i prozę ma zastosowanie, z innymi pułapkami; przetestowaliśmy je w Jak tłumaczyć pliki Markdown.
Pobierz pliki testowe
Wszystko z tego testu można swobodnie wykorzystywać:
- sample-source.tex: 98-wierszowa próbka w języku angielskim;
- check_latex_translation.py: narzędzie do sprawdzania struktury (wyłącznie biblioteka standardowa Pythona);
- compile_check.py: kompiluje każdy zwrócony plik w postaci otrzymanej oraz z chińską konfiguracją i zlicza nierozwiązane odwołania, nierozwiązane cytowania oraz brakujące glify (wymaga Tectonic i pdftotext);
- run_llm_latex_test.py: trzy warianty promptów dla dowolnego lokalnego serwera zgodnego z OpenAI;
- dziewięć wyników w folderze outputs, wraz z check-results.txt, compile-results.txt i results.csv.
Powiązane wpisy





