인코딩과 줄바꿈

.tex 파일은 결국 바이트열이고, 엔진은 이를 올바른 문자 인코딩으로 읽어야 제대로 해석할 수 있습니다. 줄바꿈 코드도 편집과 diff에 영향을 줍니다. 일본어는 역사적으로 여러 인코딩이 함께 쓰였기 때문에 여기서 자주 막힙니다. 결론부터 말하면 지금은 UTF-8 + LF로 통일하는 것이 맞습니다. 이 페이지는 각 인코딩과 줄바꿈, 변환 도구 nkf를 다룹니다.

문자 인코딩 — 지금은 UTF-8

문자 인코딩은 바이트와 문자의 대응 규칙입니다. 일본어에서는 역사적으로 Shift_JIS(구 Windows), EUC-JP(구 Unix), ISO-2022-JP(메일의 “JIS code”)가 쓰였고, 지금은 Unicode의 UTF-8이 보편 표준입니다. 최근 TeX Live와 LaTeX는 기본값이 UTF-8이므로 .texUTF-8로 저장하면 대부분의 문자 깨짐을 피할 수 있습니다. 인코딩이 어긋나면 흔한 문자 깨짐이 생깁니다.

인코딩주로 쓰인 곳
UTF-8현재 표준(Unicode); 새 작업은 이것으로 통일
Shift_JIS구 Windows 환경
EUC-JP구 Unix 환경
ISO-2022-JP메일, “JIS code”

(u)pLaTeX에서는 -kanji=utf8로 입력 인코딩을 명시할 수 있습니다(“컴파일 명령” 참조).

줄바꿈 코드 — LF / CRLF / CR

행 끝에는 보이지 않는 제어 바이트가 들어갑니다. LF(\n, Unix/macOS), CRLF(\r\n, Windows), CR(\r, 오래된 Mac)입니다. LaTeX 자체는 대체로 모두 허용하지만, 파일 안이나 팀 안에서 줄바꿈이 섞이면 diff가 지저분해지고 일부 도구에서 문제가 생깁니다. LF로 통일하고 Git에서는 .gitattributes로 정규화하는 것을 권장합니다.

terminal
# .gitattributes — 改行を正規化 / normalize newlines
*.tex text eol=lf

nkf로 변환하기

nkf(Network Kanji Filter) 는 일본어 인코딩과 줄바꿈을 판정하고 변환하는 표준 도구입니다. 먼저 nkf -g file로 현재 코드를 확인하고, -w로 UTF-8, -s로 Shift_JIS, -e로 EUC-JP, -j로 ISO-2022-JP로 변환합니다. 줄바꿈은 -Lu/-Lw/-Lm을 쓰고, --overwrite로 파일을 직접 덮어쓸 수 있습니다.

옵션기능
-g현재 인코딩과 줄바꿈 판정(변환하지 않음)
-wUTF-8(BOM 없음)로 변환
-s / -e / -jShift_JIS / EUC-JP / ISO-2022-JP로 변환
-Lu / -Lw / -Lm줄바꿈을 LF / CRLF / CR로 변환
--overwrite입력 파일을 직접 덮어쓰기
terminal
nkf -g old.tex                      # 文字コードを判定 / detect the encoding
nkf -w -Lu --overwrite old.tex      # UTF-8 + LF に変換して上書き / to UTF-8 + LF, in place
  • 새 파일이든 기존 파일이든 UTF-8 + LF로 통일합니다.
  • 오래된 Shift_JIS/EUC 소스는 nkf -w -Lu --overwrite *.tex로 일괄 변환합니다.
  • (u)pLaTeX에 UTF-8 입력을 확실히 읽히려면 필요할 때 -kanji=utf8을 사용합니다.
  • Git에서는 .gitattributes로 줄바꿈을 정규화하고, 헷갈리면 nkf -g로 판정합니다.