BookTranslator
BookTranslator

수식, 인용, 레이블을 깨뜨리지 않고 LaTeX 문서를 번역하는 방법

.tex 파일에서 무엇을 번역하고 무엇을 그대로 두어야 하는지, 그리고 번역된 파일이 오류 없이 컴파일되고도 텍스트를 잃을 수 있는 이유. 샘플 파일, 무료 검사기 두 개, 로컬 LLM 9회 테스트 포함.

BookTranslator

BookTranslator Team

25 min read

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}공백을 사용하는 언어에서는 유지, 중국어와 일본어에서는 선택 사항

나머지는 모두 일반 본문입니다: 단락, 초록, 목록 항목, 표 셀.

테스트한 내용

우리는 Shelfmark라는 가상 앱의 읽기 시간 추정에 관한 짧은 창작 논문인 sample-source.tex를 작성했습니다. 이 파일은 깔끔하게 컴파일되며 위 표의 각 구성 요소 예시 하나씩과 booktabs 표, 캡션이 있는 그림, % 주석 두 개, 맨 %가 포함된 verbatim 블록, 인라인 참고문헌을 포함합니다.

그런 다음 로컬 모델에게 이 파일을 중국어 간체로 세 가지 방식으로 번역하도록 요청했습니다:

  1. 전체 파일. 파일 전체를 붙여넣고 여전히 컴파일되는 번역 파일을 요청합니다.
  2. 지시 포함. 동일하게 하되 일곱 가지 규칙을 추가합니다: 프리앰블을 변경하지 말 것, 모든 명령, 환경, 레이블, 참조, 인용 키를 유지할 것, \text{}를 제외한 수학은 그대로 둘 것, 축자 블록과 URL은 그대로 둘 것, 특수 문자는 이스케이프된 상태로 유지할 것, 묶음 공백을 유지할 것, 본문, 캡션, 각주, 링크 텍스트를 번역할 것.
  3. 세그먼트. 프리앰블을 요청에서 완전히 제외하고(\title 줄만 전송하므로 \date는 영어로 유지), 본문을 빈 줄 기준으로 나누고, 축자 블록은 건너뛰고, 각 조각을 동일한 규칙으로 전송한 뒤 재조립합니다.

모델은 LM Studio에서 Qwen 3.6 27B (Q4_K_M)를 사용했으며, 사고 기능을 끄고 temperature 0.3으로 설정했고, Apple M4 Max 64GB 메모리 환경에서 실행했습니다. 2026년 10월 26일에 각 조건을 세 번씩, 총 아홉 번 실행했습니다. 스크립트는 run_llm_latex_test.py이며, 아홉 개 출력 모두 편집 없이 출력 폴더에 게시했습니다. 로컬 모델을 설정해 본 적이 없다면 로컬 LLM 번역 가이드에서 설정을 확인하세요.

우리는 모든 출력을 XeTeX 엔진을 사용하는 Tectonic 0.17.0으로 컴파일했는데, 반환된 그대로 한 번, 프리앰블에 중국어 설정을 추가한 상태로 한 번씩 컴파일했습니다. 그런 다음 각 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/33개 중 0개3개 중 0개
축자 블록 변경 없음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를 불러오고 세 개의 매크로를 정의하는데, 그중 번역이 필요한 것은 없습니다. 그래서 지시된 실행과 세그먼트 실행은 시키는 대로 그것을 그대로 두었습니다.

하지만 표준 LaTeX 설정의 기본 글꼴에는 중국어 문자가 없습니다. 그 여섯 파일은 모두 종료 코드 0으로 컴파일되었습니다. Tectonic은 누락된 문자마다 한 번씩 Missing character: There is no 估 (U+4F30) in font [lmroman17-regular] 같은 줄로 경고했고, 로그 파일에는 실행당 554–577개의 경고가 기록되었습니다. 그러나 경고는 빌드를 중단시키지 않습니다. 그 여섯 PDF에서 텍스트를 추출했을 때, 저자 이름, 숫자, 수학은 있었지만 중국어 문자는 하나도 없었습니다. 전체 파일 세 개의 PDF에는 481–490개의 중국어 문자가 있었습니다. 컴파일 성공 여부만 확인하는 빌드 스크립트나 출력 끝부분만 대충 훑는 사람이라면 여섯 개 모두를 그대로 배포했을 것입니다.

그런 규칙이 없었던 전체 파일 실행 세 개는 스스로 \usepackage{ctex}를 추가했고, 그 PDF는 완전했습니다. 그것이 모델이 프리앰블을 다시 쓰게 해야 할 이유는 아닙니다. 대상 언어 설정을 번역 작업의 일부로 보고, 한 번, 직접 해야 할 이유입니다:

  • 중국어: pdfLaTeX, XeLaTeX, LuaLaTeX를 지원하는 ctex를 불러오세요. 기본적으로 운영 체제에 맞는 글꼴을 선택하며, 로그에 따르면 macOS 글꼴 세트를 불러옵니다. 다른 컴퓨터에서도 동일하게 컴파일되어야 한다면 \usepackage[UTF8,fontset=fandol]{ctex}를 사용하세요. TeX Live와 함께 배포되는 무료 Fandol 글꼴을 사용하며, Tectonic도 필요할 때 이를 내려받습니다. compile_check.py가 추가하는 것이 바로 이것입니다.
  • 다른 언어: 대상 언어와 함께 babel을 불러오세요. 그러면 하이픈 연결과 "Figure", "Table", "Abstract" 같은 자동 생성 단어가 새 언어를 따릅니다. 일본어, 한국어, 오른쪽에서 왼쪽으로 쓰는 언어는 각각 고유한 설정이 필요합니다.

컴파일 후에는 로그에서 Missing character를 확인하고, 종료 코드만 보지 말고 PDF를 읽어 보세요. 우리는 Tectonic을 통한 XeTeX만 테스트했습니다. 다른 엔진은 누락된 글꼴을 다르게 보고합니다.

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% 오차가 있는 레이블도 여전히 유용하다"라고 되어 있습니다. 9번의 실행 중 3번에서 중국어는 오차가 20% 이내인 레이블이 여전히 유용하다고 말하여 허용 오차를 임계값으로 바꿨습니다. 다른 여러 실행에서는 "비록" 절이 잘못된 개념에 연결되도록 문장 순서를 바꾸었고, 하나는 따라가기 어려워졌습니다. 이는 한 독자가 중국어와 영어를 비교한 판단이지 맹검 검토는 아니지만, 요점은 정확한 횟수에 달려 있지 않습니다: 20\%, 매크로, 중괄호가 모두 올바르므로 해당 파일에서는 모든 구조 검사가 통과했습니다.

다른 두 가지 변경은 괜찮았지만 알아둘 가치가 있습니다. 전체 파일 실행에서는 \$12를 12美元("12 US dollars")로 작성하여 이스케이프 문제를 완전히 제거했습니다. 전체 파일 실행 두 번에서는 \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. 주장과 숫자를 이중 언어로 읽으세요. 여기서 우리의 변경된 세 문장이 잡혔을 것입니다. 논문의 기술 용어에 대한 짧은 번역 용어집을 유지하여 같은 용어가 세 가지로 번역되지 않도록 하세요.

BookTranslator가 적합한 곳

BookTranslator의 문서 번역기는 PDF, DOCX, EPUB, Markdown 및 기타 구조화된 형식과 함께 .tex 파일을 허용합니다. FAQ에 따르면 결과는 "해당 형식이 지원하는 경우 사용 가능한 형식에 맞는 파일"로 반환됩니다.

제품 페이지는 LaTeX 매크로, 수학, 프리앰블을 어떻게 처리하는지 설명하지 않으며, 이 기사를 위해 이 샘플을 BookTranslator로 실행하지 않았습니다. 어떤 도구를 사용하든 번역 전에 1–3단계를, 번역 후에 5–7단계를 수행하세요. 영어 전용 프리앰블을 유지하는 파일은 중국어 텍스트 없이도 컴파일되며, 변경된 주장은 모든 구조 검사를 통과합니다.

논문의 소스가 아닌 PDF만 있는 경우 워크플로가 다릅니다: 구조를 유지하면서 연구 논문 번역하기 가이드를 참조하세요. 소스가 LaTeX가 아닌 Markdown인 경우 기계와 산문의 동일한 분리가 적용되지만 함정이 다릅니다. Markdown 파일 번역 방법에서 테스트했습니다.

테스트 파일 받기

이 테스트의 모든 결과물은 자유롭게 재사용할 수 있습니다:

관련 글