jlreq

jlreq는 아베 노리유키가 만든 일본어 document class입니다. 이름은 W3C 기술 문서 “Requirements for Japanese Text Layout”(JLReq / 日本語組版処理の要件) 에 따른 조판을 목표로 한다는 데서 왔습니다. 가장 큰 특징은 본문을 조판하는 영역인 *hanmen*을 숫자로 정밀하게 설계할 수 있다는 점입니다. pLaTeX, upLaTeX, LuaLaTeX 어느 쪽에서도 같은 쓰임으로 동작합니다. 이 페이지에서는 jlreq가 무엇을 위한 것인지, 어떤 옵션으로 판면을 설계하는지, 언제 js 계열 클래스 대신 선택하는지 살펴봅니다.

jlreq란 무엇인가

jlreq는 \documentclass{jlreq} 한 줄만으로 본격적인 일본어 조판을 시작할 수 있는 클래스입니다. 이름의 바탕이 된 JLReq, “Requirements for Japanese Text Layout” 은 CSS나 전자책 등에서 일본어를 올바르게 조판하려면 무엇이 필요한지 W3C가 정리한 기술 문서입니다. 일본 산업 규격 JIS X 4051(일본어 문서 조판 방법)을 주된 토대로 삼아, 제목, 그림과 표, 주석, 참조 기호 처리 같은 hanmen(본문 블록) 설계 지침까지 다룹니다. jlreq 클래스는 그 요구사항을 LaTeX 위에서 실현하려는 시도입니다.

또 하나의 축은 엔진 횡단성입니다. jlreq는 전통적인 pLaTeX / upLaTeX(DVI를 거쳐 dvipdfmx로 PDF를 만드는 경로)에서도, 현대적인 LuaLaTeX(LuaTeX-ja)(PDF를 직접 출력)에서도 동작합니다. 어떤 엔진으로 처리되는지는 클래스가 자동 판별하므로, 원고는 그대로 두고 처리계만 바꿀 수 있습니다. 명시하고 싶다면 platex / uplatex / lualatex를 클래스 옵션으로 넘깁니다(XeLaTeX는 대상이 아닙니다).

왜 jlreq인가(js 계열과의 차이)

오쿠무라 하루히코의 jsclasses(jsarticle 등)는 잘 다듬어진 기본 체재를 그대로 사용하는 설계라, 많은 상황에서 바로 아름답게 조판됩니다. 이에 비해 jlreq의 발상은 반대입니다. 핵심은 판면 자체를 설계하게 하는 것입니다. “본문 글자 크기는 몇 포인트, 한 줄은 몇 자, 한 페이지는 몇 줄, 행간은 얼마, 천·지·노도 여백은 얼마” 같은 출판에서 말하는 page design / hanmen 의 각 치수를 규격에 근거해 직접 지정할 수 있습니다.

그래서 지정된 판형, 자수, 행수를 엄격히 맞춰야 할 때, 예를 들어 책이나 동인지 조판, 세로쓰기 작품, 판면 치수가 정해진 제출물에서 jlreq가 힘을 발휘합니다. 반대로 논문을 빠르게 정돈된 기본 체재로 마무리하고 싶을 뿐이라면 jsclasses나 그 LuaLaTeX판 ltjsclasses로 충분한 경우가 많습니다. jlreq는 현재 TeX Live에 표준으로 포함되어 있으므로 별도 설치가 필요 없습니다.

기본 옵션과 글자 크기

문서 종류는 대괄호 옵션으로 전환합니다. 기본값은 article 상당이고, report를 넘기면 장(\chapter)을 가진 보고서형, book을 넘기면 책형이 됩니다. (jsclasses처럼 클래스 이름 자체가 나뉘는 것이 아니라, 하나의 jlreq를 옵션으로 전환한다는 점에 주의하세요.) 세로쓰기는 tate를 더합니다. 용지는 paper=로 지정하며, paper=a4, paper=b5(ISO B 계열. JIS B 계열은 b5j처럼), 또는 paper={148mm,210mm} 같은 실치수 지정도 가능합니다.

글자 크기는 라틴 문자와 일본어를 나누어 생각합니다. fontsize=가 라틴 문자 기준 크기(기본 10pt), jafontsize=가 일본어 크기입니다. 둘의 비율을 직접 주는 jafontscale=도 있으며 기본값은 1(일본어와 라틴 문자가 같은 크기)입니다. jlreq에서는 출판에서 쓰는 Q와 H 단위도 사용할 수 있어, 예를 들어 fontsize=13Q처럼 쓸 수 있습니다(1Q = 1H = 0.25mm).

옵션의미기본값
article / report / book문서 종류 전환(장 유무, 체재)article 상당
tate세로쓰기가로쓰기
platex / uplatex / lualatex엔진 명시(보통 자동 판별)자동 판별
paper=용지 크기: a4, b5, {폭,높이}
fontsize=라틴 문자 기준 글자 크기(Q/H 가능)10pt
jafontsize= / jafontscale=일본어 크기 / 일본어와 라틴 문자 비율비율 1

판면 설계하기

jlreq의 핵심은 판면 설계입니다. 본문을 조판하는 사각형 영역(*hanmen*)은 두 가지 사고방식 중 하나로 정할 수 있습니다. 하나는 안쪽에서 바깥쪽으로 가는 방식입니다. 글자 크기와 행간, 한 줄 길이, 한 페이지의 행 수를 주면 결과적으로 여백이 정해집니다. line_length=(한 줄 길이), number_of_lines=(페이지당 행 수), baselineskip=(행간)을 사용합니다. 다른 하나는 바깥쪽에서 안쪽으로 가는 방식입니다. 천(head_space=), 지(foot_space=), 노도(gutter=), 고구치(fore-edge=) 여백을 주어 판면을 정합니다.

치수에는 전용 단위가 편리합니다. zw 는 전각 한 글자의 폭(zen-width), zh 는 전각 한 글자의 높이(zen-height)를 나타내므로, 자수나 행간을 “글자 몇 개분”으로 자연스럽게 쓸 수 있습니다. 예를 들어 line_length=40zw는 한 줄 40자, baselineskip=1.75zw는 전각 1.75글자분의 행간입니다. 기본적으로 line_length는 용지의 문자 방향 폭의 0.75배, number_of_lines는 용지의 행 방향 높이의 0.75배 안에 들어가는 행 수, baselineskip은 일본어 크기의 1.7배입니다. head_spacefoot_space를 생략하면 판면은 상하 중앙에 놓입니다. 2단 조판에서는 단 사이를 column_gap=으로 지정합니다.

옵션의미기본값
line_length=한 줄 길이(자수)용지 폭의 0.75배
number_of_lines=페이지당 행 수높이의 0.75배에 들어가는 행 수
baselineskip=행간(행 피치)일본어 크기의 1.7배
gutter= / fore-edge=노도(제본 쪽) / 고구치(반대쪽) 여백
head_space= / foot_space=천 / 지 여백생략 시 상하 중앙
column_gap=2단 조판의 단 사이

세로쓰기 예

다음은 A5판 세로쓰기에서 판면을 안쪽에서 설계한 예입니다. tate로 세로쓰기를 만들고, paper=a5로 판형을 정하며, 일본어 13Q, 한 줄 40자, 한 페이지 17행, 행간 전각 1.75글자분처럼 수치로 판면을 지정합니다. 본문에 아무것도 더하지 않아도 이 한 줄로 출판물 같은 체재가 정해집니다.

latex
\documentclass[
  tate,                 % 縦組み
  paper=a5,             % A5 判
  fontsize=13Q,         % 級で指定(1 級 = 0.25mm)
  line_length=40zw,     % 1 行 40 字
  number_of_lines=17,   % 1 ページ 17 行
  baselineskip=1.75zw,  % 行送り
]{jlreq}
\begin{document}
\title{雪国}
\author{川端康成}
\maketitle
国境の長いトンネルを抜けると雪国であった。
\end{document}

LuaLaTeX로 처리하면 OS 글꼴을 사용해 PDF가 직접 나오고, upLaTeX로 처리하면 DVI를 거쳐 PDF를 얻습니다. 어느 쪽에서도 \documentclass 줄은 같아도 됩니다. 가로쓰기로 하고 싶다면 tate만 빼면 됩니다.

\jlreqsetup과 세부 조정

판면 치수는 클래스 옵션으로 정하지만, 주석, 인용, 목록, 제목 같은 세부 체재는 프리앰블에서 \jlreqsetup{...} 에 key=value를 나열해 정돈합니다. 여기서 각주, 방주(\sidenote), 와리추(\warichu), 후주(\endnote)의 표시 방식, 인용 들여쓰기(quote_indent=), 제목의 행 배정 등을 지정할 수 있습니다. 제목 자체를 다시 설계하는 \NewBlockHeading\ModifyHeading도 마련되어 있고, 세로중가로의 \tatechuyoko, 글자 맞춤의 \jidori 같은 일본어 조판 고유 명령도 사용할 수 있습니다.

이런 세부 설정을 처음부터 전부 외울 필요는 없습니다. 먼저 \documentclass 옵션으로 판형, 자수, 행수를 정하고, 필요해진 만큼만 \jlreqsetup으로 더해 가는 것이 현실적입니다. 자세한 목록은 texdoc jlreq로 열 수 있는 부속 취급 설명서(아베 노리유키의 일본어 매뉴얼)가 가장 정확합니다.

지정 치수가 있는 원고 시작하기

jlreq가 가장 효과적인 것은 입고처나 수업에서 “A5, 세로쓰기, 한 줄 38자, 한 페이지 18행”처럼 치수가 주어지는 상황입니다. 먼저 그 지정을 용지, 세로/가로, 글자 크기, 자수, 행수, 행간으로 분해하고 \documentclass 한 줄에 옮깁니다. 실제 원고를 쓰기 전에 한 페이지분의 더미 텍스트를 넣어 PDF를 만들고, 행수와 여백을 자로 확인한 뒤 본문으로 들어가면 마지막에 판면을 다시 짜는 일을 피할 수 있습니다.

latex
\documentclass[
  tate,
  paper=a5,
  fontsize=13Q,
  line_length=38zw,
  number_of_lines=18,
  baselineskip=1.75zw,
]{jlreq}

엔진은 자동 판별에 맡길 수 있지만, 공동 집필이나 CI에서는 명시하는 편이 사고가 적습니다. upLaTeX로 검증한 원고라면 uplatex, LuaLaTeX로 글꼴 지정까지 포함해 검증한 원고라면 lualatex를 옵션에 넣고, 빌드 명령도 같은 경로로 고정합니다.

판면을 정했다면 한 페이지로 검사하기

jlreq 설정은 강력한 만큼 수치를 잘못 넣어도 PDF는 나와 버릴 수 있습니다. 실제 본문을 쓰기 전에 한 페이지분의 더미 텍스트, 제목, 각주, 인용, 작은 그림이나 표를 넣고 자수, 행수, 노도, 고구치를 확인합니다. 특히 세로쓰기에서는 종이 위의 “행 방향”과 “자간 방향”이 가로쓰기와 바뀌므로, line_lengthnumber_of_lines를 반대로 해석하지 않았는지 먼저 봅니다.

  • 자수 — 구두점 위치만 보지 말고 본문에서 전각 글자 수를 셉니다.
  • 행수 — 일반 페이지와 제목이 있는 페이지 모두에서 본문 행이 예상 범위인지 봅니다.
  • 여백 — 제본 원고는 노도 쪽을 넓게 하고, PDF 제출만이라면 과도한 제본 여백을 피합니다.
  • 엔진 — upLaTeX와 LuaLaTeX에서 글꼴이 달라진다면 선택한 경로의 PDF만 기준으로 삼습니다.