BookTranslator
BookTranslator

چگونه یک سند LaTeX را بدون خراب کردن ریاضیات، ارجاعات یا برچسب‌ها ترجمه کنیم

چه چیزی را در یک فایل .tex ترجمه کنیم، چه چیزی را دست نزنیم، و چرا یک فایل ترجمه‌شده می‌تواند بی‌خطا کامپایل شود و باز هم متنش را از دست بدهد. همراه با یک فایل نمونه، دو بررسی‌کننده رایگان، و یک آزمون ۹ باره با مدل زبانی محلی.

BookTranslator

BookTranslator Team

14 min read

برای ترجمه یک سند LaTeX، متن اصلی و آرگومان‌های خواننده‌محور دستورها را ترجمه کنید، مانند عنوان بخش‌ها، شرح‌ها، پانویس‌ها و متن پیوند. دستورها، نام محیط‌ها، کلیدهای \label، \ref و \cite، ریاضیات و بلوک‌های verbatim را دقیقاً همان‌طور که هستند رها کنید. سپس تغییری را اعمال کنید که هیچ مترجمی نباید به‌جای شما انجام دهد: مقدمه (preamble) را برای زبان مقصد تنظیم کنید، زیرا فایلی که مقدمه انگلیسی خود را نگه می‌دارد می‌تواند بدون خطا کامپایل شود و باز هم PDFای تولید کند که متن ترجمه‌شده در آن وجود ندارد.

این نکته آخر نتیجه اصلی یک آزمون کوچک است. ما یک مقاله LaTeX ۹۸ خطی را نه بار با یک مدل محلی به چینی ساده‌شده ترجمه کردیم، به سه روش مختلف، و هر نتیجه را با یک اسکریپت و یک کامپایلر بررسی کردیم. بخش‌هایی که معمولاً نگرانی‌شان وجود دارد در هر نه اجرا سالم ماندند: برچسب‌ها، ارجاعات، استنادها، معادلات، URLها، ستون‌های جدول و آکولادها دست‌نخورده بازگشتند و همه ارجاعات متقابل حل شدند. مشکلات جای دیگری بود. شش اجرایی که در دستورشان نوشته شده بود «مقدمه را تغییر نده»، اطاعت کردند، با کد خروج ۰ کامپایل شدند و 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.}بله
بلوک‌های verbatim و فهرست‌های کدshelfmark count --unit chars book.epub # 100% of body textخیر، شامل نظرات داخل آن‌ها
\url و اولین آرگومان \href\href{https://example.org/shelfmark/survey}{online appendix}نشانی را نگه دار؛ متن پیوند را ترجمه کن
نویسه‌های فرار20\%, \$12, R\&Dبک‌اسلش را در متن نگه دار
نظرات %% TODO: replace the Chinese rate ...اختیاری. خوانندگان هرگز آن‌ها را نمی‌بینند.
اتصال‌های قبل از ارجاع‌هاTable~\ref{tab:rates}در زبان‌هایی که از فاصله استفاده می‌کنند نگه دار؛ در چینی و ژاپنی اختیاری است

بقیه چیزها متن عادی هستند: پاراگراف‌ها، چکیده، آیتم‌های فهرست و سلول‌های جدول.

آنچه آزمایش کردیم

ما sample-source.tex را نوشتیم، یک مقاله کوتاه ساختگی درباره تخمین زمان مطالعه برای یک اپلیکیشن خیالی به نام Shelfmark. این فایل به‌درستی کامپایل می‌شود و شامل یک نمونه از هر ساختار در جدول بالا، به‌علاوه یک جدول booktabs، یک شکل با عنوان، دو نظر %، یک بلوک verbatim با یک % خالی در آن، و یک کتاب‌شناسی درون‌خطی است.

سپس از یک مدل محلی خواستیم آن را به سه روش به چینی ساده‌شده ترجمه کند:

  1. کل فایل. کل فایل را جای‌گذاری کنید و یک فایل ترجمه‌شده بخواهید که هنوز کامپایل شود.
  2. با دستور. همان، به‌علاوه هفت قانون: مقدمه را تغییر نده، همه دستورها، محیط‌ها، برچسب‌ها، ارجاع‌ها و کلیدهای استناد را نگه دار، ریاضیات را به‌جز \text{} دست نزن، بلوک‌های verbatim و نشانی‌ها را دست نزن، نویسه‌های خاص را فراری نگه دار، اتصال‌ها را نگه دار، و متن، عنوان‌ها، پانویس‌ها و متن پیوند را ترجمه کن.
  3. قطعه‌ها. مقدمه را کاملاً از درخواست خارج کنید (فقط خط \title فرستاده می‌شود، بنابراین \date به انگلیسی می‌ماند)، بدنه را در خطوط خالی تقسیم کنید، بلوک verbatim را رد کنید، هر قطعه را با همان قوانین بفرستید و دوباره سرهم کنید.

مدل Qwen 3.6 27B (Q4_K_M) در LM Studio بود، با تفکر خاموش و دمای 0.3، روی یک Apple M4 Max با 64 گیگابایت حافظه. هر شرط را سه بار اجرا کردیم، در مجموع نه اجرا، در 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 یک ردیف به ازای هر اجرا دارد.

بررسیکل فایلدستور داده شدهبخش‌ها
برچسب‌ها، ارجاعات، استنادها و کلیدهای کتاب‌نامه بدون تغییر۳ از ۳۳ از ۳۳ از ۳
ریاضیات بدون تغییر (متن داخل \text{} ترجمه شده)۳ از ۳۳ از ۳۳ از ۳
نشانی‌های اینترنتی، آکولادها و ستون‌های جدول دست‌نخورده۳ از ۳۳ از ۳۳ از ۳
مدل یک بسته چینی به مقدمه اضافه کرد۳ از ۳۰ از ۳۰ از ۳
همان‌طور که برگردانده شد کامپایل می‌شود۳ از ۳۳ از ۳۳ از ۳
متن چینی در واقع در PDF همان‌طور که برگردانده شد۳ از ۳۰ از ۳۰ از ۳
بلوک عین‌به‌عین بدون تغییر۳ از ۳۲ از ۳۳ از ۳
% توضیحات به انگلیسی باقی ماند۳ از ۳۳ از ۳۱ از ۳
هر ارجاع و استناد پس از افزودن تنظیمات چینی حل می‌شود۳ از ۳۳ از ۳۳ از ۳

بررسی‌کننده ما در ابتدا در اجرای اول تغییر در ریاضیات را گزارش کرد. ریاضیات درست بود: ترتیب کلمات چینی باعث شده بود $N$ در یک جمله قبل از $r$ قرار گیرد. به همین دلیل، بررسی‌کننده منتشرشده بخش‌های ریاضی را به‌صورت مجموعه‌ای بدون ترتیب مقایسه می‌کند، بنابراین جابه‌جایی مجاز است اما تغییر نماد مجاز نیست.

۱. «به مقدمه دست نزن» PDFی تولید کرد که هیچ چینی در آن نبود

قانون مقدمه مانند مطمئن‌ترین دستوری است که می‌توانید بدهید. مقدمه نمونه ما بسته‌های amsmath، booktabs و hyperref را بارگذاری می‌کند و سه ماکرو تعریف می‌کند و هیچ‌کدام نیازی به ترجمه ندارند. بنابراین اجراهای دستور داده‌شده و بخش‌ها آن را دقیقاً همان‌طور که گفته شد، رها کردند.

اما فونت‌های پیش‌فرض در یک نصب استاندارد LaTeX هیچ کاراکتر چینی ندارند. هر شش فایل با کد خروج ۰ کامپایل شدند. Tectonic هشدار داد، یک بار برای هر کاراکتر گمشده، با خطوطی مانند Missing character: There is no 估 (U+4F30) in font [lmroman17-regular]، و فایل لاگ بین ۵۵۴ تا ۵۷۷ مورد در هر اجرا ثبت کرد. اما هشدار ساخت را متوقف نمی‌کند. وقتی متن را از آن شش PDF استخراج کردیم، شامل نام نویسندگان، اعداد و ریاضیات بود و صفر کاراکتر چینی. سه PDF کل‌فایل بین ۴۸۱ تا ۴۹۰ کاراکتر چینی داشتند. یک اسکریپت ساخت که فقط موفقیت کامپایل را بررسی کند، یا شخصی که فقط انتهای خروجی را مرور کند، هر شش فایل را ارسال می‌کرد.

سه اجرای کل‌فایل، که چنین قانونی نداشتند، خودشان \usepackage{ctex} را اضافه کردند و PDFهایشان کامل بود. این دلیلی برای اجازه دادن به مدل برای بازنویسی مقدمه نیست. دلیلی است برای دیدن تنظیمات زبان مقصد به‌عنوان بخشی از کار ترجمه، که یک بار توسط شما انجام می‌شود:

  • چینی: بسته ctex را بارگذاری کنید که از pdfLaTeX، XeLaTeX و LuaLaTeX پشتیبانی می‌کند. به‌طور پیش‌فرض فونت‌های سیستم‌عامل شما را انتخاب می‌کند؛ لاگ ما نشان می‌دهد که مجموعه فونت macOS خود را بارگذاری می‌کند. اگر فایل باید روی ماشین‌های دیگر به همین شکل کامپایل شود، \usepackage[UTF8,fontset=fandol]{ctex} از فونت‌های رایگان Fandol توزیع‌شده با TeX Live استفاده می‌کند که Tectonic نیز به‌صورت درخواستی دانلود می‌کند. این همان چیزی است که compile_check.py اضافه می‌کند.
  • زبان‌های دیگر: بسته babel را با زبان مقصد بارگذاری کنید تا خط‌شکنی و کلمات تولیدشده مانند «شکل»، «جدول» و «چکیده» از زبان جدید پیروی کنند. ژاپنی، کره‌ای و زبان‌های راست‌به‌چپ هر کدام تنظیمات خود را نیاز دارند.

پس از کامپایل، لاگ را برای Missing character بررسی کنید و PDF را بخوانید، نه فقط کد خروج را. ما فقط XeTeX را از طریق Tectonic آزمایش کردیم؛ موتورهای دیگر فونت گمشده را متفاوت گزارش می‌دهند.

۲. قانون فرار به لیست کد نشت کرد

دستورات ما می‌گفتند کاراکترهای خاص را فرار دهید، و در متن این قانون درستی است: یک % خالی در 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 را به هیچ مترجمی نسپارید، همان‌طور که شرط segments عمل کرد. سپس هر توضیحی را در آن‌ها در صورت نیاز خوانندگانتان به‌صورت دستی ترجمه کنید.

۳. توضیحات از مرزهای درخواست پیروی کردند

فایل دو توضیح % دارد: یک یادداشت بالای تعریف‌های ماکرو و یک TODO بالای فهرست کد. اجراهای کل‌فایل و دستورمحور هر دو را به انگلیسی باقی گذاشتند. شرط segments در دو اجرا از سه اجرا TODO را ترجمه کرد، چون TODO تصادفاً در همان بلوکی قرار داشت که پاراگرافی برای ترجمه فرستاده بودیم. دو اجرای کل‌فایل نیز پس از بسته‌ای که درج کردند، توضیحی از خودشان اضافه کردند.

هیچ‌کدام از این‌ها PDF را تغییر نمی‌دهد. اگر منبع ترجمه‌شده به هم‌نویسندگان یا مخزنی بازگردد اهمیت پیدا می‌کند، جایی که TODO ترجمه‌شده دیگر با اصل مطابقت ندارد و یک توضیح اضافی در هر diff ظاهر می‌شود. بررسی‌کننده توضیحات ترجمه‌شده را به‌عنوان هشدار گزارش می‌دهد تا خودتان تصمیم بگیرید.

۴. بررسی‌های ساختاری قبول شدند و معنا هنوز تغییر کرد

چکیده می‌گوید «برچسبی که ۲۰٪ خطا دارد هنوز مفید است.» در سه اجرا از نه اجرا، متن چینی گفت برچسب‌هایی با خطای درون ۲۰٪ هنوز مفید هستند، که یک تحمل را به یک آستانه تبدیل می‌کند. چند اجرای دیگر جمله را بازآرایی کردند به‌طوری که بند «اگرچه» به ایده اشتباه متصل شد، و یکی از آن‌ها دنبال کردنش سخت شد. این‌ها داوری‌های یک خواننده است که چینی را با انگلیسی مقایسه می‌کند، نه یک بازبینی کور، اما نکته به شمارش دقیق بستگی ندارد: هر بررسی ساختاری روی آن فایل‌ها قبول شد، چون 20\%، ماکرو و آکولادها همه درست بودند.

دو تغییر دیگر بی‌اشکال بودند اما دانستنشان ارزشمند است. اجراهای کل‌فایل \$12 را به‌صورت 12美元 («۱۲ دلار آمریکا») نوشتند، که پرسش escape را کاملاً حذف می‌کند. دو اجرای کل‌فایل همچنین بیشتر پیوندهای ~ پیش از \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 را همان‌طور که بالا آمد اضافه کنید، یک بار با متن انگلیسی کامپایل کنید و آن تغییر را جداگانه commit کنید.

  4. بدنه را بدون مقدمه و بدون بلوک‌های verbatim ترجمه کنید. از ابزاری استفاده کنید که LaTeX را تجزیه می‌کند، یا بدنه را با قواعد صریح به قطعات تقسیم کنید، مانند شرط segments ما. TransLaTeX، یک ابزار متن‌باز که برای این کار ساخته شده، ساختارهای LaTeX را پیش از فرستادن متن به مترجم ماشینی با توکن جایگزین می‌کند. مستندات آن همچنین می‌گوید سرصفحه سند را دست‌نخورده نگه می‌دارد، از ماکروها پشتیبانی نمی‌کند و فقط اسناد تک‌فایلی را مدیریت می‌کند، بدون \input. حتی یک ابزار اختصاصی تصمیم درباره مقدمه را به شما واگذار می‌کند.

  5. بررسی ساختاری را روی هر جفت فایل اجرا کنید.

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

    این بررسی مقدمه، نام دستورها، ترتیب محیط‌ها، برچسب‌ها، ارجاع‌ها، استنادها، کلیدهای کتاب‌شناسی، ریاضیات، بلوک‌های verbatim، URLها، %، & و # بدون escape، توازن آکولادها، پیوندها، توضیحات و هر اصطلاحی که بخواهید حفظ شود را مقایسه می‌کند. انتظار داشته باشید که خط مقدمه پس از گام ۳ هنگام مقایسه با اصل شکست بخورد؛ به‌جای آن با فایل انگلیسی به‌روزشده‌تان مقایسه کنید. برای پروژه‌ای که در چند فایل \input تقسیم شده، هر جفت را بررسی کنید.

  6. کامپایل کنید و PDF را بخوانید.

    python3 compile_check.py main-zh.tex
    

    این بررسی ارجاع‌های حل‌نشده (??)، استنادهای حل‌نشده ([?]) و گلیف‌های گم‌شده را گزارش می‌دهد. سپس PDF را باز کنید و چکیده، هر عنوان شکل و هر جدول را با اصل مقایسه کنید.

  7. خوانش دوزبانه ادعاها و اعداد را انجام دهید. اینجا جایی است که سه جمله تغییرکرده ما گرفته می‌شدند. یک واژه‌نامه ترجمه کوتاه برای اصطلاحات فنی مقاله نگه دارید تا یک اصطلاح به سه شکل ترجمه نشود.

جایگاه BookTranslator

مترجم سند BookTranslator فایل‌های .tex را همراه با PDF، DOCX، EPUB، Markdown و سایر قالب‌های ساختاریافته می‌پذیرد. بخش پرسش‌های متداول آن می‌گوید نتیجه در «یک فایل قابل استفاده و مناسب قالب، هر زمان که آن قالب پشتیبانی کند» بازگردانده می‌شود.

صفحه محصول توضیح نمی‌دهد که چگونه با ماکروهای LaTeX، ریاضیات یا مقدمه رفتار می‌کند، و ما این نمونه را برای این مقاله از BookTranslator عبور ندادیم. هر ابزاری که استفاده می‌کنید، گام‌های ۱ تا ۳ را پیش از ترجمه و گام‌های ۵ تا ۷ را پس از آن انجام دهید. فایلی که مقدمه فقط انگلیسی را نگه دارد همچنان بدون متن چینی کامپایل می‌شود، و یک ادعای تغییرکرده همچنان از هر بررسی ساختاری عبور می‌کند.

اگر فقط PDF یک مقاله را دارید نه منبع آن، گردش کار متفاوت است: راهنمای ما برای ترجمه یک مقاله پژوهشی با حفظ ساختار آن را ببینید. اگر منبع شما Markdown است نه LaTeX، همان تفکیک میان ماشین و نثر اعمال می‌شود، با تله‌های متفاوت؛ ما آن‌ها را در چگونه فایل‌های Markdown را ترجمه کنیم آزمودیم.

فایل‌های آزمون را دریافت کنید

همه چیز از این آزمون آزادانه قابل استفاده مجدد است:

  • sample-source.tex: نمونه انگلیسی ۹۸ خطی؛
  • check_latex_translation.py: بررسی‌کننده ساختاری (فقط کتابخانه استاندارد پایتون)؛
  • compile_check.py: هر فایل را همان‌طور که برگردانده شده و با یک تنظیم چینی کامپایل می‌کند، و ارجاعات حل‌نشده، استنادهای حل‌نشده و نویسه‌های گم‌شده را می‌شمارد (نیازمند Tectonic و pdftotext)؛
  • run_llm_latex_test.py: سه شرط دستور برای هر سرور محلی سازگار با OpenAI؛
  • نه خروجی در پوشه outputs، همراه با check-results.txt، compile-results.txt و results.csv.

مطالب مرتبط