BookTranslator
BookTranslator

数式・引用・ラベルを壊さずにLaTeX文書を翻訳する方法

.texファイルで翻訳すべき箇所、そのままにすべき箇所、そして翻訳したファイルがエラーなくコンパイルできてもテキストが失われる理由を解説します。サンプルファイル、無料のチェッカー2つ、ローカルLLMによる9回のテスト付き。

BookTranslator

BookTranslator Team

24 min read

LaTeX文書を翻訳するには、本文と、コマンドの読者向け引数(セクションタイトル、キャプション、脚注、リンクテキストなど)を翻訳します。コマンド、環境名、\label、\ref、\citeのキー、数式、verbatimブロックはそのままにしてください。その後、翻訳者に任せるべきではない変更を1つ加えます。それはプリアンブルをターゲット言語用に設定することです。英語のプリアンブルを残したファイルは、エラーなくコンパイルできても、翻訳されたテキストが欠落したPDFを生成してしまうからです。

この最後の点が、小規模なテストの主な結果です。98行のLaTeX論文をローカルモデルで簡体字中国語に9回、3通りの方法で翻訳し、すべての結果をスクリプトとコンパイラで検証しました。通常懸念される部分は9回すべてで問題ありませんでした。ラベル、参照、引用、数式、URL、表の列、波括弧はそのまま返り、すべての相互参照が解決しました。問題は別のところにありました。「プリアンブルを変更しないでください」と指示した6回の実行はそれに従い、終了コード0でコンパイルされ、中国語テキストがまったく含まれないPDFを生成しました。1回の実行では「%記号をエスケープする」というルールをコードリスト内で適用したため、PDFに余分なバックスラッシュが印刷されました。そして少なくとも3回の実行では、構造チェックでは見えない形で文の意味が変わっていました。

簡単な答え:翻訳するものとそのままにするもの

ファイルの部分サンプルからの例翻訳する?
プリアンブル:\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}URL はそのまま、リンクテキストは翻訳
エスケープされた文字20\%, \$12, R\&D本文中ではバックスラッシュを保持
% コメント% TODO: replace the Chinese rate ...任意。読者が目にすることはありません。
参照前のタイTable~\ref{tab:rates}スペースを使う言語では保持。中国語と日本語では任意

それ以外はすべて通常の本文です:段落、概要、リスト項目、表のセル。

検証内容

sample-source.tex を作成しました。Shelfmark という架空のアプリの読書時間推定に関する短い創作論文です。問題なくコンパイルでき、上の表の各構文の例に加えて、booktabs の表、キャプション付きの図、2つの % コメント、裸の % を含む verbatim ブロック、インラインの参考文献リストが含まれています。

次に、ローカルモデルに簡体字中国語への翻訳を3通りの方法で依頼しました:

  1. ファイル全体。 ファイル全体を貼り付け、コンパイル可能な翻訳ファイルを要求。
  2. 指示付き。 同様にファイル全体を渡し、さらに7つのルールを追加:プリアンブルを変更しない、すべてのコマンド・環境・ラベル・参照・引用キーを保持する、数式は \text{} 以外変更しない、verbatim ブロックと URL はそのままにする、特殊文字のエスケープを保持する、タイを保持する、本文・キャプション・脚注・リンクテキストを翻訳する。
  3. セグメント分割。 プリアンブルをリクエストから完全に除外し(\title 行のみ送信するため \date は英語のまま)、本文を空行で分割し、verbatim ブロックをスキップし、各部分を同じルールで送信して再構築。

モデルは LM Studio 上の Qwen 3.6 27B(Q4_K_M)で、thinking をオフ、temperature 0.3、Apple M4 Max(64 GB メモリ)で実行しました。2026年10月26日に各条件を3回、合計9回実行しました。スクリプトは run_llm_latex_test.py で、9回の出力はすべて未編集のまま outputs フォルダ に公開されています。ローカルモデルの設定が初めての方は、ローカル LLM 翻訳ガイド で設定を説明しています。

すべての出力を Tectonic 0.17.0(XeTeX エンジンを使用)で、返されたままの状態とプリアンブルに中国語設定を追加した状態の2回コンパイルしました。その後、各 PDF からテキストを読み戻しました。これは1つのモデル、1つの言語ペア、1つのファイルによる小規模なテストです。どのような問題が発生するか、そしてそれをどう検出するかを示すものであり、モデルやプロンプトのランキングではありません。

結果:構造は維持されたが、テキストが表示されるかどうかはプリアンブルが決めた

check_latex_translation.py が各出力をソースと比較し、compile_check.py がコンパイルしました。完全な出力は check-results.txt と compile-results.txt にあり、results.csv には実行ごとに1行ずつ記録されています。

チェックファイル全体指示済みセグメント
ラベル、参照、引用、参考文献キーは変更なし3/33/33/3
数式は変更なし(\text{} 内のテキストは翻訳済み)3/33/33/3
URL、波括弧、表の列はそのまま3/33/33/3
モデルがプリアンブルに中国語パッケージを追加3/30/30/3
返されたままコンパイル可能3/33/33/3
返されたままの中国語テキストが実際にPDF内に存在3/33件中0件3件中0件
verbatimブロックは変更なし3件中3件3件中2件3件中3件
%コメントは英語のまま3件中3件3件中3件3件中1件
中国語の設定を追加した後、すべての参照と引用が解決される3件中3件3件中3件3件中3件

最初の実行で、チェッカーが数式の変更を報告しました。数式自体は問題ありませんでした。中国語の語順により、ある文で$N$が$r$の前に来ていたのです。公開されているチェッカーはこの理由から数式セグメントを順序なしの集合として比較するため、並べ替えは許容されますが、記号の変更は許されません。

1. 「プリアンブルに触れるな」で中国語が入っていないPDFが生成された

プリアンブルに関するルールは、与えられる指示の中で最も安全に聞こえます。サンプルのプリアンブルはamsmath、booktabs、hyperrefを読み込み、3つのマクロを定義していますが、そのいずれも翻訳する必要はありません。そのため、指示ありの実行もセグメント実行も、指示どおりにそれをそのままにしました。

しかし、標準的なLaTeX環境のデフォルトフォントには中国語の文字がありません。その6つのファイルはすべて終了コード0でコンパイルされました。Tectonicは不足している文字ごとに一度、Missing character: There is no 估 (U+4F30) in font [lmroman17-regular]のような行で警告を出し、ログファイルには実行ごとに554から577件の警告が記録されました。しかし警告はビルドを止めません。これら6つのPDFからテキストを抽出すると、著者名、数値、数式は含まれていましたが、中国語の文字はゼロでした。ファイル全体を対象とした3つのPDFには481から490文字が含まれていました。コンパイルが成功したかどうかだけを確認するビルドスクリプトや、出力の最後をざっと見るだけの人は、この6つすべてを出荷してしまったでしょう。

そのようなルールのなかったファイル全体を対象とした3つの実行では、自ら\usepackage{ctex}を追加し、PDFは完全なものになりました。それはモデルにプリアンブルを書き換えさせる理由にはなりません。対象言語の設定を翻訳作業の一部として、一度だけ自分で行うべき理由なのです。

  • 中国語: pdfLaTeX、XeLaTeX、LuaLaTeXをサポートするctexを読み込みます。デフォルトではお使いのオペレーティングシステム用のフォントを選択し、私たちのログではmacOS用のフォントセットを読み込んでいることが示されています。他のマシンでも同じようにコンパイルする必要がある場合は、\usepackage[UTF8,fontset=fandol]{ctex}を使うと、TeX Liveに同梱され、Tectonicもオンデマンドでダウンロードする無料のFandolフォントを使用します。compile_check.pyが追加するのはこれです。
  • その他の言語: 対象言語を指定してbabelを読み込むと、ハイフネーションや「Figure」「Table」「Abstract」などの生成される単語が新しい言語に従います。日本語、韓国語、右から左に書く言語には、それぞれ独自の設定が必要です。

コンパイル後は、ログでMissing characterを確認し、終了コードだけでなくPDFも読んでください。私たちはTectonic経由のXeTeXのみをテストしました。他のエンジンではフォント不足の報告方法が異なります。

2. エスケープルールがコードリストに漏れ出した

私たちの指示には特殊文字をエスケープしたままにするよう書かれており、本文ではそれが正しいルールです。LaTeXでは裸の%がコメントを開始し、行の残りを黙って飲み込んでしまいます。9回の実行すべてで、アブストラクトの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. コメントはリクエストの境界に従った

ファイルには 2 つの % コメントがあります。マクロ定義の上にある注記と、コードリストの上にある TODO です。ファイル全体実行と指示付き実行では、どちらも英語のまま残りました。セグメント条件では、3 回中 2 回で TODO が翻訳されました。TODO がたまたま翻訳対象として送った段落と同じブロックにあったためです。ファイル全体実行の 2 回では、挿入したパッケージの後に独自のコメントも追加されました。

これらはいずれも PDF には影響しません。問題になるのは、翻訳されたソースが共著者やリポジトリに戻る場合です。翻訳された TODO は元と一致しなくなり、余分なコメントが毎回の差分に現れます。チェッカーは翻訳されたコメントを警告として報告するので、判断はあなたに委ねられます。

4. 構造チェックは合格したが、意味は変わってしまった

アブストラクトには「20% ずれたラベルでもまだ有用である」と書かれています。9 回中 3 回で、中国語は誤差が 20% 以内 のラベルがまだ有用であるという意味になり、許容範囲が閾値に変わってしまいました。他のいくつかの実行では文の順序が入れ替わり、「although」節が誤った考えに係るようになり、1 回は理解しにくいものになりました。これは 1 人の読者が中国語と英語を比較した判断であり、盲検レビューではありませんが、要点は正確な回数には依存しません。それらのファイルでは、20\%、マクロ、波括弧がすべて正しかったため、すべての構造チェックに合格しました。

他に 2 つの変更は問題ありませんでしたが、知っておく価値があります。ファイル全体実行では \$12 を 12美元(「12 米ドル」)と書き、エスケープの問題を完全に取り除きました。また、ファイル全体実行の 2 回では、\ref と \cite の前の ~ タイをほとんど削除しました。これは中国語では無害です(中国語は単語間にスペースを入れないため)。しかし、スペースを入れる言語では、タイが欠けると改行によって「Table」とその番号が分離される可能性があります。チェッカーはタイを失敗ではなく警告として報告します。

構造チェックはファイルがまだ機能することを教えてくれますが、論文が同じことを述べているかはわかりません。そのためには、翻訳された研究論文のレビューのガイドで説明しているように、アブストラクト、主張、数値のバイリンガル読みを行ってください。

持ちこたえるワークフロー

  1. ソースを入手し、それを使って何ができるか確認する。 arXiv では、TeX で投稿された論文は通常、アブストラクトページまたは Other formats ページの Source リンクからソースを提供しています。複数ファイルの場合は 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. 主張と数値のバイリンガル読みを行う。 ここで、変更された 3 つの文が捕まったはずです。論文の専門用語について短い翻訳用語集を用意し、同じ用語が 3 通りに翻訳されないようにしてください。

BookTranslator の位置づけ

BookTranslator のドキュメント翻訳ツールは、PDF、DOCX、EPUB、Markdown などの構造化フォーマットとともに .tex ファイルを受け付けます。FAQ には、結果は「そのフォーマットがサポートする場合、使用可能でフォーマットに適したファイル」で返されると書かれています。

製品ページには、LaTeX マクロ、数式、プリアンブルをどのように扱うかが説明されておらず、この記事のためにこのサンプルを BookTranslator で実行したわけではありません。どのツールを使うにしても、翻訳前にステップ 1 から 3 を、翻訳後にステップ 5 から 7 を行ってください。英語のみのプリアンブルを保持するファイルは中国語テキストなしでもコンパイルでき、変更された主張はすべての構造チェックに合格してしまいます。

論文のソースがなく PDF しかない場合、ワークフローは異なります。構造を保ちながら研究論文を翻訳するガイドを参照してください。ソースが LaTeX ではなく Markdown の場合も、機械部分と散文の分離は同じように適用されますが、落とし穴は異なります。Markdown ファイルを翻訳する方法でそれらをテストしました。

テストファイルを入手する

このテストの成果物はすべて自由に再利用できます:

関連記事

数式・引用・ラベルを壊さずにLaTeX文書を翻訳する方法