BookTranslator
BookTranslator

Как да преведете LaTeX документ, без да счупите математика, цитати или етикети

Какво да превеждате в .tex файл, какво да оставите непокътнато и защо един преведен файл може да се компилира без грешки и въпреки това да загуби текста си. С примерен файл, два безплатни инструмента за проверка и тест с локален LLM в 9 пуска.

За да преведете LaTeX документ, преведете текста и аргументите на командите, които се виждат от читателя, като заглавия на секции, надписи, бележки под линия и текст на връзки. Оставете командите, имената на среди, ключовете на \label, \ref и \cite, математиката и verbatim блоковете точно както са. След това направете една промяна, която никой преводач не би трябвало да прави вместо вас: настройте преамбюла за целевия език, защото файл, който запазва английския си преамбюл, може да се компилира без грешка и въпреки това да създаде PDF с липсващ преведен текст.

Последната точка е основният резултат от един малък тест. Преведохме 98-редов LaTeX документ на опростен китайски девет пъти с локален модел, по три различни начина, и проверихме всеки резултат със скрипт и компилатор. Частите, за които хората обикновено се притесняват, се запазиха и в деветте пуска: етикети, препратки, цитати, уравнения, URL адреси, колони на таблици и скоби се върнаха непокътнати и всяка кръстосана препратка се разреши. Проблемите бяха другаде. Шестте пуска, чиято подкана казваше „не променяй преамбюла“, се подчиниха, компилираха се с код за изход 0 и създадоха PDF файлове без никакъв китайски текст в тях. Един пуск приложи нашето правило „екранирай знака %“ вътре в кодова листинг, така че PDF файлът отпечатва излишна обратна наклонена черта. И поне три пуска промениха значението на изречение по начин, който никаква структурна проверка не може да види.

Бърз отговор: какво да превеждате и какво да оставите непокътнато

Част от файлаПример от нашия образецДа се преведе ли?
Преамбюл: \documentclass, \usepackage, \newcommand\newcommand{\wpm}{\mathrm{wpm}}Не, но добавете сами настройката за целевия език (вижте по-долу)
\title, \author, \date\title{Estimating Reading Time for Translated Ebooks}Заглавие и дата – да; имена – обикновено не
Заглавия\section{Method}\label{sec:method}Да, текста в скобите; запазете етикета
Етикети и препратки\label{eq:time}, Section~\ref{sec:method}, \eqref{eq:time}Запазете всеки ключ
Ключове за цитати и библиография\cite{brysbaert2019}, \bibitem{rayner2016}Запазете ключовете; превеждайте текста на записа само ако вашата област го прави
Вградена и блокова математика$r_c$, T = \frac{N}{r}Не
Текст в математиката\text{ for English silent reading.}Да. Той се отпечатва като обикновен текст.
Макроси, които приемат текст\term{characters per minute}Преведете аргумента, запазете командата
Надписи и бележки под линия\caption{Reading rates used in this paper.}Да
Дословни блокове и кодshelfmark count --unit chars book.epub # 100% of body textНе, включително коментарите в тях
\url и първият аргумент на \href\href{https://example.org/shelfmark/survey}{online appendix}Запазете URL адреса; преведете текста на връзката
Екранирани символи20\%, \$12, R\&DЗапазете обратната наклонена черта в прозата
Коментари с %% TODO: replace the Chinese rate ...По избор. Читателите никога не ги виждат.
Свързващи интервали преди препраткиTable~\ref{tab:rates}Запазете в езици, които използват интервали; по избор в китайски и японски

Всичко останало е обикновена проза: абзаци, резюме, елементи от списъци и клетки от таблици.

Какво тествахме

Написахме sample-source.tex – кратка измислена статия за оценки на времето за четене на фиктивно приложение, наречено Shelfmark. Тя се компилира без грешки и съдържа по един пример за всяка конструкция от таблицата по-горе, плюс таблица с booktabs, фигура с надпис, два коментара с %, блок verbatim с голо % в него и вградена библиография.

След това помолихме локален модел да я преведе на опростен китайски по три начина:

  1. Цял файл. Поставете целия файл и поискайте преведен файл, който все още се компилира.
  2. С инструкции. Същото, плюс седем правила: не променяйте преамбюла, запазете всяка команда, среда, етикет, препратка и ключ за цитиране, оставете математиката непокътната с изключение на \text{}, оставете дословните блокове и URL адресите непокътнати, запазете специалните символи екранирани, запазете свързващите интервали и преведете прозата, надписите, бележките под линия и текста на връзките.
  3. Сегменти. Изключете преамбюла от заявката напълно (изпраща се само редът \title, така че \date остава на английски), разделете тялото на празни редове, пропуснете дословния блок, изпратете всяка част със същите правила и сглобете отново.

Моделът беше Qwen 3.6 27B (Q4_K_M) в LM Studio, с изключено мислене и температура 0.3, на Apple M4 Max с 64 GB памет. Пуснахме всяко условие три пъти, общо девет пускания, на 26 октомври 2026 г. Скриптът е run_llm_latex_test.py, а всичките девет резултата са публикувани без редакция в папката с резултати. Ако никога не сте настройвали локален модел, нашето ръководство за превод с локален LLM покрива настройките.

Компилирахме всеки резултат с Tectonic 0.17.0, който използва двигателя XeTeX, веднъж точно както е върнат и веднъж с добавена китайска настройка към преамбюла. След това прочетохме текста обратно от всеки PDF. Това беше малък тест на един модел, една езикова двойка и един файл. Той показва какви проблеми се случват и как да ги хванете. Не класира модели или подсказки.

Резултат: Структурата оцеля; преамбюлът реши дали текстът ще се появи

check_latex_translation.py сравни всеки резултат с изходния текст, а compile_check.py го компилира. Пълните резултати са в check-results.txt и compile-results.txt, а results.csv има по един ред за всяко пускане.

ПроверкаЦял файлИнструктиранСегменти
Етикети, препратки, цитати и ключове за библиография без промяна3 от 33 от 33 от 3
Математиката без промяна (текстът в \text{} е преведен)3 от 33 от 33 от 3
URL адреси, скоби и колони на таблици непокътнати3 от 33 от 33 от 3
Моделът добави китайски пакет в преамбюла3 от 30 от 30 от 3
Компилира се както е върнат3 от 33 от 33 от 3
Китайският текст действително е в PDF файла както е върнат3 от 30 от 30 от 3
Блокът с дословен текст е непроменен3 от 32 от 33 от 3
% коментарите са оставени на английски3 от 33 от 31 от 3
Всяка препратка и цитат се разрешават след добавяне на китайската настройка3 от 33 от 33 от 3

Нашият проверяващ инструмент първоначално отчете променена математика при първото изпълнение. Математиката беше наред: китайският словоред беше поставил $N$ преди $r$ в едно изречение. Публикуваният проверяващ инструмент сравнява математическите сегменти като неподредена колекция поради тази причина, така че пренареждането е разрешено, но променен символ – не.

1. „Не пипай преамбюла“ доведе до PDF без китайски текст

Правилото за преамбюла звучи като най-безопасната инструкция, която можете да дадете. Преамбюлът на нашия пример зарежда amsmath, booktabs и hyperref и дефинира три макроса, и нищо от това не се нуждае от превод. Затова инструктираните и сегментните изпълнения го оставиха на мира, точно както беше казано.

Но шрифтовете по подразбиране в стандартна LaTeX среда нямат китайски символи. И шестте файла се компилираха с код за изход 0. Tectonic предупреди, по веднъж за всеки липсващ символ, с редове като Missing character: There is no 估 (U+4F30) in font [lmroman17-regular], и лог файлът записа между 554 и 577 такива на изпълнение. Но предупреждението не спира компилацията. Когато извлекохме текста от тези шест PDF файла, те съдържаха имената на авторите, числата и математиката, и нула китайски символи. Трите PDF файла от цялостна обработка съдържаха от 481 до 490. Скрипт за компилация, който проверява само дали компилацията е успешна, или човек, който само преглежда края на изхода, щеше да публикува и шестте.

Трите изпълнения с цялостна обработка на файла, които нямаха такова правило, добавиха \usepackage{ctex} сами и техните PDF файлове бяха пълни. Това не е причина да позволите на модел да пренапише преамбюла ви. Това е причина да разглеждате настройката за целевия език като част от работата по превода, направена веднъж, от вас:

  • Китайски: заредете ctex, който поддържа pdfLaTeX, XeLaTeX и LuaLaTeX. По подразбиране избира шрифтове за вашата операционна система; нашият лог показва, че зарежда своя набор от шрифтове за macOS. Ако файлът трябва да се компилира по същия начин на други машини, \usepackage[UTF8,fontset=fandol]{ctex} използва безплатните шрифтове Fandol, разпространявани с TeX Live, които Tectonic също изтегля при поискване. Това е, което compile_check.py добавя.
  • Други езици: заредете babel с целевия език, така че пренасянето на думи и генерираните думи като „Figure“, „Table“ и „Abstract“ да следват новия език. Японският, корейският и езиците с писане от дясно на ляво се нуждаят от собствена настройка.

След компилиране проверете лога за Missing character и прочетете PDF файла, не само кода за изход. Тествахме само XeTeX чрез Tectonic; другите машини отчитат липсващ шрифт по различен начин.

2. Правилото за екраниране протече в списъка с код

Нашите инструкции казваха да запазваме специалните символи екранирани и в прозата това е правилното правило: самостоятелен % в LaTeX започва коментар и безшумно поглъща остатъка от реда. И деветте изпълнения запазиха 20\% в резюмето.

При първото изпълнение с инструкции моделът също приложи правилото вътре в блока verbatim и преведе коментара в кода там:

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

Вътре в verbatim нищо не е команда, така че PDF файлът отпечатва 100\% с обратната наклонена черта. Решението не е по-добър промпт. Никога не изпращайте блокове verbatim, lstlisting или minted към преводач, както направи условието със сегментите. След това преведете ръчно всеки коментар в тях, ако читателите ви се нуждаят от това.

3. Коментарите следваха границите на заявката

Файлът има два коментара с %: бележка над дефинициите на макроси и TODO над списъка с код. Изпълненията на целия файл и с инструкции оставиха и двата на английски. Условието със сегментите преведе TODO в две от три изпълнения, защото TODO се случи в същия блок като абзац, който изпратихме за превод. Две изпълнения на целия файл също добавиха свой коментар след пакета, който вмъкнаха.

Нищо от това не променя PDF файла. Това има значение, ако преведеният изходен код се върне при съавтори или в хранилище, където преведеният TODO вече не съвпада с оригинала и допълнителен коментар се появява във всеки diff. Проверяващият отчита преведените коментари като предупреждение, за да можете да решите.

4. Структурните проверки минаха, а значението все още се промени

Резюмето казва „етикет, който е сгрешен с 20%, все още е полезен“. В три от девет изпълнения китайският текст казваше, че етикети с грешка в рамките на 20% все още са полезни, което превръща толеранса в праг. Няколко други изпълнения пренаредиха изречението, така че клаузата „въпреки че“ се прикачи към грешната идея, а едно стана трудно за следване. Това са преценки на един читател, сравняващ китайския с английския, а не заслепена рецензия, но въпросът не зависи от точния брой: всяка структурна проверка мина на тези файлове, защото 20\%, макросът и скобите бяха всички правилни.

Две други промени бяха наред, но си струва да се знаят. Изпълненията на целия файл написаха \$12 като 12 долара („12 американски долара“), което премахва въпроса за екранирането напълно. Две изпълнения на целия файл също изпуснаха повечето от връзките с ~ преди \ref и \cite. Това е безвредно на китайски, който не поставя интервали между думите, но в език, който го прави, липсващата връзка позволява на нов ред да раздели „Таблица“ от номера ѝ. Проверяващият отчита връзките като предупреждение, а не като грешка.

Структурната проверка ви казва, че файлът все още работи. Тя не може да ви каже, че статията все още казва същото. За това използвайте двуезично четене на резюмето, твърденията и числата, както е описано в нашето ръководство за рецензиране на преведена научна статия.

Работен процес, който издържа

  1. Вземете изходния код и проверете какво можете да правите с него. В arXiv статиите, изпратени в TeX, обикновено предлагат изходния си код чрез връзка Source на страницата с резюмето или на страницата Other formats, като gzip файл или tar архив, когато има няколко файла (помощ на arXiv). Преводът за собствено четене е едно нещо. Публикуването на превода е друго: собственият неексклузивен лиценз на arXiv ограничава повторното използване от други, докато CC BY и CC BY-SA позволяват адаптации с посочване на авторството, а CC BY-NC-ND не. Питайте авторите, когато се съмнявате.

  2. Компилирайте оригинала първо. Ако той не се компилира преди превода, нищо, което научите след това, не е надеждно. Запазете оригиналния PDF за сравнение.

  3. Настройте целевия език в преамбюла сами. Добавете ctex или babel както по-горе, компилирайте веднъж с английския текст и ангажирайте тази промяна отделно.

  4. Преведете тялото без преамбюла и без блокове verbatim. Използвайте инструмент, който анализира LaTeX, или изпратете тялото на части с изрични правила, както в нашето условие със сегментите. TransLaTeX, инструмент с отворен код, създаден за това, заменя LaTeX конструкции с токени, преди да изпрати текста към машинен преводач. Документацията му също казва, че оставя заглавката на документа недокосната, не поддържа макроси и работи само с документи в един файл, без \input. Дори специализиран инструмент оставя решението за преамбюла на вас.

  5. Изпълнете структурната проверка на всяка двойка файлове.

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

    Тя сравнява преамбюла, имената на командите, реда на средите, етикетите, препратките, цитатите, ключовете в библиографията, математиката, блоковете verbatim, URL адресите, неекранираните %, & и #, баланса на скобите, връзките, коментарите и всички термини, които поискате да бъдат запазени. Очаквайте редът на преамбюла да се провали след стъпка 3, когато сравнявате с оригинала; сравнявайте с вашия актуализиран английски файл вместо това. За проект, разделен на няколко \input файла, проверете всяка двойка.

  6. Компилирайте и прочетете PDF файла.

    python3 compile_check.py main-zh.tex
    

    Той отчита неразрешени препратки (??), неразрешени цитати ([?]) и липсващи глифове. След това отворете PDF файла и прочетете резюмето, всеки надпис и всяка таблица в сравнение с оригинала.

  7. Направете двуезично четене на твърденията и числата. Тук нашите три променени изречения щяха да бъдат уловени. Поддържайте кратък преводачески речник за техническите термини на статията, така че един и същ термин да не се превежда по три начина.

Къде се вписва BookTranslator

Преводачът на документи на BookTranslator приема .tex файлове заедно с PDF, DOCX, EPUB, Markdown и други структурирани формати. Неговите ЧЗВ казват, че резултатът се връща в „използваем файл, подходящ за формата, когато този формат го поддържа“.

Страницата на продукта не описва как се отнася към LaTeX макроси, математика или преамбюла и не сме пускали тази извадка през BookTranslator за тази статия. Какъвто и инструмент да използвате, направете стъпки 1 до 3 преди превода и стъпки 5 до 7 след това. Файл, който запазва преамбюл само на английски, все още ще се компилира без китайски текст, а променено твърдение все още ще минава всяка структурна проверка.

Ако имате само PDF на статия, а не изходния ѝ код, работният процес е различен: вижте нашето ръководство за превод на научна статия, като се запазва структурата ѝ. Ако изходният ви код е Markdown, а не LaTeX, същото разделение между механизми и текст се прилага, с различни капани; тествахме ги в Как да превеждаме Markdown файлове.

Вземете тестовите файлове

Всичко от този тест е свободно за използване:

  • sample-source.tex: английската извадка от 98 реда;
  • check_latex_translation.py: структурната проверка (само стандартната библиотека на Python);
  • compile_check.py: компилира всеки върнат файл както е и с китайска настройка и отчита неразрешени препратки, неразрешени цитати и липсващи глифове (изисква Tectonic и pdftotext);
  • run_llm_latex_test.py: трите условия за подкана за всеки локален сървър, съвместим с OpenAI;
  • деветте изхода в папката outputs, заедно с check-results.txt, compile-results.txt и results.csv.

Свързани публикации