OSDN Git Service

4c68e9dbca55acfe71f5f8e3b73dd5d7a19816d1
[luatex-ja/luatexja.git] / doc / lltjp-geometry.tex
1 %#! luajitlatex
2 \documentclass[a4paper,10pt]{ltjsarticle}
3 \usepackage[textwidth=45\zw, lines=45, columnsep=3\zw,
4    footskip=3\zw, showframe]{geometry}
5 \usepackage{listings,amsmath,booktabs,lltjext}
6 \usepackage[match]{luatexja-fontspec}
7 \usepackage[kozuka-pr6n]{luatexja-preset}\normalsize
8 \def\emph#1{\textbf{\textgt{\mathversion{bold}#1}}}
9 \def\headfont{\normalfont\bfseries\gtfamily}
10 \def\pTeX{p\kern-.05em\TeX}
11 \def\cs#1{\text{\texttt{\char`\\#1}}}
12
13 \lstset{
14   basicstyle=\ttfamily, basewidth=0.5em,
15 }
16 \makeatletter\let\SX@Info=\relax\makeatother
17 \fboxsep=0mm
18
19 \usepackage{hyperref,bookmark,xcolor}
20 \hypersetup{%
21         unicode,
22         colorlinks,
23         allbordercolors=1 1 1,
24         allcolors=blue,
25         pdftitle={lltjp-geometry.sty}
26 }
27
28 \def\LuaTeX{Lua\TeX}
29
30 \title{\texttt{lltjp-geometry.sty}}
31 \author{\LuaTeX-jaプロジェクト}
32 \begin{document}
33 \maketitle
34
35 \begin{abstract}
36 ページレイアウトの設定として,\textsf{geometry}パッケージが有名であるが,
37 これはp\LaTeX・\LuaTeX-jaの縦組クラスでは利用が不可能という問題があった.
38 本文書で解説する\texttt{lltjp-geometry.sty} は,\textsf{geometry}パッケージを
39 縦組クラスでも利用可能にするためのパッチである.
40 \end{abstract}
41
42 \section{利用方法}
43 \texttt{lltjp-geometry.sty} は,\LuaTeX-jaに標準で含まれている.
44 本パッケージの動作には\textsf{ifluatex}, \textsf{filehook}パッケージが必要である.
45
46 \subsection{\LuaTeX-ja}
47 \LuaTeX-jaの縦組クラス,\textsf{ltjtarticle}, \textsf{ltjtbook}, 
48 \textsf{ltjtreport}では自動的に \texttt{lltjp-geometry.sty} が読み込まれる.
49 ユーザは何もしなくても良い.
50
51 \subsection{\pTeX 系列}
52 \pTeX 系列では,\textsf{tarticle}, \textsf{tbook}, \textsf{treport}といった
53 \emph{縦組クラスを使う場合}にのみ,
54 \begin{lstlisting}
55 \usepackage{lltjp-geometry}
56 \usepackage[...]{geometry}
57 \end{lstlisting}
58 のように\emph{\textsf{geometry}パッケージの前}に読み込む.
59 パッケージオプションは存在しない.
60
61 \section{注意事項}
62 \subsection{\texttt{twoside}指定時}
63 \texttt{twoside} オプション指定時は,
64 \texttt{left}, \texttt{lmargin} は小口側の余白,
65 \texttt{right}, \texttt{rmargin} はノド側の余白を指す.
66 縦組の本は通常右綴じであることを反映させたものである.
67 その他にも,
68 \begin{itemize}
69 \item 左右余白比 \texttt{hmarginratio} の標準値は$3:2$に変更.
70 \item \texttt{bindingoffset} は\emph{右側}に余白を確保する.
71 \end{itemize}
72
73 \subsection{傍注}
74 縦組の場合,傍注は本文の上下に配置される\footnote{%
75   二段組の場合は上下共に,一段組の場合は標準では下側だが,
76   \texttt{reversemp} が指定されたときには上側に配置される.
77 }.これにより,\emph{\texttt{includemp}(や \texttt{includeall})が
78 未指定の場合,傍注はヘッダやフッタに重なる}.
79 \texttt{includemp} 指定時は,\cs{footskip}, \cs{headsep} のいずれか
80 (二段組の場合は両方)を$\cs{marginparwidth} + \cs{marginparsep}$だけ
81 増加させる.
82
83 \subsection{\texttt{lines}オプション指定時の \cs{maxdepth} 調整}
84 \LaTeX では,
85 最後の行の深さ\rensuji{$d$}と
86 本文領域の上端から最後の行のベースラインまでの距離\rensuji{$f$}に対し,
87 \[
88  \cs{textheight} = f+\max(0, d-\cs{maxdepth})
89 \]
90 が成り立つ.
91
92 \pTeX 系列の標準縦組クラス\textsf{[u]tarticle}等,
93 及びそれを\LuaTeX-ja用に移植した\textsf{ltjtarticle}等では,
94  \cs{topskip} は\emph{横組時における}全角空白の高さ7.77588\,pt\footnote{%
95   標準の\texttt{10pt}オプション指定時.以下同じ.
96   ところで,この量は公称フォントサイズの10\,ptか,もしくは
97   全角空白の高さと深さを合わせた値の9.16446\,ptの間違いではないか,と筆者は考えている.
98   なお,奥村晴彦氏のp\LaTeXe 新ドキュメントクラスでは公称ポイントサイズ10\,ptに設定されている.
99 }であり,\cs{maxdepth} はその半分3.88794\,ptである.
100
101 いくつかのフォントについて,その中の文字の深さの最大値を見てみると
102 表\ref{tab:baseline}のようになっている.
103 \begin{table}[tb]
104  \layoutfloat[c]{%
105  \begin{tabular}<y>{ll}
106   \toprule
107   \bfseries フォント(10\,pt)&\bfseries 深さ(pt単位)\\
108   \midrule
109   多くの横組用和文フォント(\pTeX)&1.38855\\
110   多くの縦組用和文フォント(\pTeX)&4.58221\\
111   \midrule
112   Computer Modern Roman 10\,pt&2.5\\
113   Computer Modern Sans Serif 10\,pt&2.5\\
114   Times Roman (\texttt{ptmr8t})&2.16492\\
115   Helvetica Bold Oblique (\texttt{phvbo8t})&2.22491\\
116   Palatino (\texttt{pplr8t})&2.75989\\
117   \bottomrule
118  \end{tabular}}
119  \pcaption{いくつかのフォント中の,文字の深さの最大値
120     \label{tab:baseline}}
121 \end{table}
122 欧文フォントのベースラインは,そのままでは和文との組み合わせが悪いので,
123 さらに$\textsf{tbaselineshift}=3.41666\,\textrm{pt}$だけ下がることを考えると,
124 最後の行に和文文字が来た場合はほぼ確実に深さが \cs{maxdepth} を超えてしまうことになる.
125 従って,本文領域を「\rensuji{$n$}行分」として指定するときによく使われる
126 \begin{equation}
127    \cs{textheight} = \cs{topskip} + (n-1)\cs{baselineskip}
128  \label{eq:nline}
129 \end{equation}
130 は\textsf{tarticle}クラスのデフォルトでは通用しない.
131
132 通常の地の文のみの文章においてほぼ確実に\eqref{eq:nline}が成り立つようにするため,
133 \texttt{lltjp-geometry.sty} では\emph{\texttt{lines}オプション指定時のみ} \cs{maxdepth} の値が
134 最低でも
135 \begin{quote}
136 公称ポイントサイズの半分に,欧文ベースラインのシフト量を加えた値%
137 \footnote{\textsf{tarticle}の場合だと,
138 $5\,\textrm{pt} + 3.41666\,\textrm{pt}=8.41666\,\textrm{pt}$である.}
139 \end{quote}
140 になるようにしている.
141
142
143 \subsection{\texttt{lines} オプション指定時の見かけ上の基本版面の位置}
144 \LaTeX では,
145 本文の一行目のベースラインは,本文領域の「上端」から
146  \ \cs{topskip}\ だけ「下がった」ところに来ることになっている.
147 あまり \cs{topskip} が小さいと,ユーザが大きい文字サイズを指定した時に1行目のベースライン
148 位置が狂う危険があるため,
149 \textsf{geometry}パッケージでは
150 \begin{quote}
151  \texttt{lines} オプション指定時,\cs{topskip} の値を最低でも
152  \cs{strutbox} の高さ($0.7\cs{baselineskip}$)まで引き上げる
153 \end{quote}
154 という仕様になっている.
155
156 縦組の場合は,\cs{strutbox} に対応するボックスは \cs{tstrutbox} であるため,
157 \begin{quote}
158  \texttt{lines} オプション指定時,\cs{topskip} の値を最低でも
159  \emph{\cs{tstrutbox} の高さ($\cs{baselineskip}/2$)}まで引き上げる
160 \end{quote}
161 という挙動にした.見かけ上は \cs{topskip} の値制限が緩くなったが,前節で述べたように
162 欧文フォントのベースラインは和文に合うように下にずらされるので,
163 実用上は問題は起きないだろう.
164
165 前節の \cs{maxdepth} の調整も考え合わせると,\emph{\LaTeX が認識する本文領域と,
166 実際の見た目の基本版面の位置とは異なる}ことに注意してほしい.
167
168 例えばA4縦,公称フォントサイズ10\,pt,行送り18\,pt,30行左右中央
169 \begin{lstlisting}
170 \baselineskip=18pt
171 \usepackage{lltjp-geometry}
172 \usepackage[a4paper,hcentering,lines=30]{geometry}
173 \end{lstlisting}
174 と指定すると,以下のように設定される.
175 \begin{itemize}
176  \item \cs{topskip} は \cs{tstrutbox} の高さ8.5\,ptに設定される.
177  \item 本文領域の「高さ」 \cs{textheight} は 
178 \[
179  \cs{topskip} + (30-1)\cs{baselineskip} = 530.5\,\textrm{pt}.
180 \]
181  \item 従って,左余白と右余白は
182 \[
183  \frac{210\,\textrm{mm}-\cs{textheight}}2 = 33.50394\,\textrm{pt}.
184 \]
185 \end{itemize}
186 しかし,実際にはページの最初の行のベースラインは,本文領域の右端から
187 \ \cs{topskip} だけ左にずれたところにあり,
188 一方ページの最終行のベースラインは本文領域の左端にある.
189 従って,\emph{見た目で言えば,右余白の方が$\cs{topskip} =8.5\,\textrm{pt}$だけ
190 大きい}ということになってしまう.
191
192 \end{document}