%#! luajitlatex
\documentclass[a4paper,10pt]{ltjsarticle}
-\usepackage[textwidth=45\zw, lines=45, columnsep=3\zw,
- footskip=3\zw, showframe]{geometry}
+\usepackage[textwidth=45\zw, lines=45, footskip=2\zh, verbose]{geometry}
\usepackage{listings,amsmath,booktabs,lltjext}
\usepackage[match]{luatexja-fontspec}
+\usepackage{unicode-math}
+\setmathfont{XITS Math}
+\setmainfont{TeX Gyre Termes}
+\setsansfont[Scale=0.95]{TeX Gyre Heros}
\usepackage[kozuka-pr6n]{luatexja-preset}\normalsize
\def\emph#1{\textbf{\textgt{\mathversion{bold}#1}}}
\def\headfont{\normalfont\bfseries\gtfamily}
colorlinks,
allbordercolors=1 1 1,
allcolors=blue,
- pdftitle={lltjp-geometry.sty}
+ pdftitle={lltjp-geometryパッケージ}
}
\def\LuaTeX{Lua\TeX}
+\definecolor{blue}{rgb}{0, 0.25, 1}
-\title{\texttt{lltjp-geometry.sty}}
-\author{\LuaTeX-jaプロジェクト}
+\title{\textsf{lltjp-geometry}パッケージ}
+\author{\LuaTeX-jaプロジェクト%
+ \thanks{\url{http://osdn.jp/projects/luatex-ja/wiki/FrontPage}}}
\begin{document}
\maketitle
-\begin{abstract}
-ページレイアウトの設定として,\textsf{geometry}パッケージが有名であるが,
+ページレイアウトの設定として,\href{http://www.ctan.org/pkg/geometry}%
+{\textsf{geometry}パッケージ}が有名であるが,
これはp\LaTeX・\LuaTeX-jaの縦組クラスでは利用が不可能という問題があった.
-本文書で解説する\texttt{lltjp-geometry.sty} は,\textsf{geometry}パッケージを
-縦çµ\84ã\82¯ã\83©ã\82¹ã\81§ã\82\82å\88©ç\94¨å\8f¯è\83½ã\81«ã\81\99ã\82\8bã\81\9fã\82\81ã\81®パッチである.
-\end{abstract}
+本文書で解説する\textsf{lltjp-geometry}パッケージは,\textsf{geometry}パッケージを
+縦çµ\84ã\82¯ã\83©ã\82¹ã\81«å¯¾å¿\9cã\81\95ã\81\9bã\82\8bパッチである.
+
\section{利用方法}
-\texttt{lltjp-geometry.sty} は,\LuaTeX-jaに標準で含まれている.
-本パッケージの動作には\textsf{ifluatex}, \textsf{filehook}パッケージが必要である.
+\textsf{lltjp-geometry}パッケージは,\LuaTeX-jaに標準で含まれている.
+本パッケージの動作には\href{http://www.ctan.org/pkg/ifluatex}{\textsf{ifluatex}},
+\href{http://www.ctan.org/pkg/filehook}{\textsf{filehook}}パッケージが必要である.
\subsection{\LuaTeX-ja}
-\LuaTeX-jaの縦組クラス,\textsf{ltjtarticle}, \textsf{ltjtbook},
-\textsf{ltjtreport}では自動的に \texttt{lltjp-geometry.sty} が読み込まれる.
-ユーザは何もしなくても良い.
+\LuaTeX-jaでは,\textsf{geometry}パッケージ読み込み時に
+自動的に\textsf{lltjp-geometry}パッケージが読み込まれ,ユーザは何もしなくても良い.
+\LuaTeX-jaで横組クラスを利用する時でも,
+\textsf{lltjp-geometry}パッケージは自動的に動作を停止するので,横組時の挙動が
+変わってしまうことはない.
\subsection{\pTeX 系列}
\pTeX 系列では,\textsf{tarticle}, \textsf{tbook}, \textsf{treport}といった
\usepackage[...]{geometry}
\end{lstlisting}
のように\emph{\textsf{geometry}パッケージの前}に読み込む.
+\pTeX 系列では使用クラスが横組か縦組かの自動判定を行えない\footnote{%
+ 標準縦組クラスでは,\cs{begin\{document\}} の内部で組方向を縦組に変更するので,
+ プリアンブル中で判定できない.
+}ので,\emph{横組クラスで読み込んではならない}.
+
パッケージオプションは存在しない.
-\section{注意事項}
+\section{\textsf{lltjp-geometry}使用時の注意事項}
+
\subsection{\texttt{twoside}指定時}
-\texttt{twoside} オプション指定時は,
-\texttt{left}, \texttt{lmargin} は小口側の余白,
-\texttt{right}, \texttt{rmargin} はノド側の余白を指す.
-縦組の本は通常右綴じであることを反映させたものである.
-その他にも,
+縦組の本は通常右綴じである.これを反映し,
+\texttt{twoside} オプション指定時には
\begin{itemize}
+\item \texttt{left}, \texttt{lmargin} は小口側の余白,
+\texttt{right}, \texttt{rmargin} はノド側の余白を指す.
\item 左右余白比 \texttt{hmarginratio} の標準値は$3:2$に変更.
\item \texttt{bindingoffset} は\emph{右側}に余白を確保する.
\end{itemize}
+と変更している.
+
+\subsection{widthとheight}
+\cs{textwidth}が字送り方向の長さ(縦)を表すのと同様に,
+\texttt{width}, \texttt{totalwidth}, \texttt{textwidth}キーの値も字送り方向を,また
+\texttt{height}, \texttt{totalheight}, \texttt{textheight}キーの値も行送り方向(横)を表すようになっている.
+
+しかし,\emph{用紙サイズについては例外}であり,物理的な意味での幅・高さを表す.
+\texttt{paperwidth}, \texttt{layoutwidth}はそれぞれ紙の横幅,レイアウトの横幅を,
+\texttt{paperheight}, \texttt{layoutheight}はそれぞれ紙の高さ,レイアウトの高さを表している.
+
+
\subsection{傍注}
縦組の場合,傍注は本文の上下に配置される\footnote{%
(二段組の場合は両方)を$\cs{marginparwidth} + \cs{marginparsep}$だけ
増加させる.
-\subsection{\texttt{lines}オプション指定時の \cs{maxdepth} 調整}
+\section{\texttt{lines}オプションに関する注意事項}
+本節の内容は,\textsf{lltjp-geometry}パッケージを読み込まない場合,
+つまり,横組クラスで\textsf{geometry}パッケージを普通に使用した場合にも
+当てはまる注意事項である.
+
+\subsection{\textsf{fontspec}パッケージとの干渉}
+\pTeX 系列では,次のように\textsf{fontenc}パッケージ読み込み直後に
+\textsf{geometry}パッケージを用いてレイアウトを設定すると,
+\texttt{lines} による指定が正しく働かないという症状が生じる:
+\begin{lstlisting}
+\documentclass{article}
+\usepackage{geometry}
+\usepackage{fontspec}
+\geometry{lines=20}
+\begin{document}
+hoge\typeout{\the\topskip, \the\baselineskip, \the\textheight}
+\end{document}
+\end{lstlisting}
+\cs{typeout} で \cs{topskip}, \cs{baselineskip}, \cs{textheight} の値を調べると
+\[
+ \frac{\cs{textheight} - \cs{topskip}}{\cs{baselineskip}} = 15.8\dot 3
+\]
+となることがわかるから,1ページには16行分入らないことがわかる.
+
+これは,\textsf{fontspec} の読み込みによって \cs{baselineskip} がなぜか
+10\,ptに変えられてしまい,\cs{geometry} 命令はその値に従って本文領域の高さを計算するためで
+ある.とりあえずの対策は,
+\cs{normalsize} によって \cs{baselineskip} を正しい値に再設定し,その後
+レイアウトを設定すれば良い:
+\begin{lstlisting}
+\usepackage{geometry}
+\usepackage{fontspec}
+\normalsize\geometry{lines=20}
+\end{lstlisting}
+
+なお,同様の症状は\textsf{newtxtext}パッケージなどでも発生するようなので,
+\pTeX 系列といえども無縁ではない.
+
+
+\subsection{\cs{maxdepth} の調整}
\LaTeX では,
最後の行の深さ\rensuji{$d$}と
本文領域の上端から最後の行のベースラインまでの距離\rensuji{$f$}に対し,
標準の\texttt{10pt}オプション指定時.以下同じ.
ところで,この量は公称フォントサイズの10\,ptか,もしくは
全角空白の高さと深さを合わせた値の9.16446\,ptの間違いではないか,と筆者は考えている.
- なお,奥村晴彦氏のp\LaTeXe 新ドキュメントクラスでは公称ポイントサイズ10\,ptに設定されている.
-}であり,\cs{maxdepth} はその半分3.88794\,ptである.
+ なお,奥村晴彦氏の\href{https://oku.edu.mie-u.ac.jp/~okumura/jsclasses/}%
+ {p\LaTeXe 新ドキュメントクラス}では公称ポイントサイズ10\,ptに設定されている.
+}であり,\cs{maxdepth} はその半分の値(従って3.88794\,pt)である.
いくつかのフォントについて,その中の文字の深さの最大値を見てみると
表\ref{tab:baseline}のようになっている.
\toprule
\bfseries フォント(10\,pt)&\bfseries 深さ(pt単位)\\
\midrule
- 多くの横組用和文フォント(\pTeX)&1.38855\\
- 多くの縦組用和文フォント(\pTeX)&4.58221\\
+ 横組用の標準和文フォント(\pTeX)&1.38855\\
+ 縦組用の標準和文フォント(\pTeX)&4.58221\\
\midrule
Computer Modern Roman 10\,pt&2.5\\
Computer Modern Sans Serif 10\,pt&2.5\\
は\textsf{tarticle}クラスのデフォルトでは通用しない.
通常の地の文のみの文章においてほぼ確実に\eqref{eq:nline}が成り立つようにするため,
-\texttt{lltjp-geometry.sty} では\emph{\texttt{lines}オプション指定時のみ} \cs{maxdepth} の値が
+\textsf{lltjp-geometry}では\emph{\texttt{lines}オプション指定時のみ} \cs{maxdepth} の値が
最低でも
\begin{quote}
公称ポイントサイズの半分に,欧文ベースラインのシフト量を加えた値%
\footnote{\textsf{tarticle}の場合だと,
$5\,\textrm{pt} + 3.41666\,\textrm{pt}=8.41666\,\textrm{pt}$である.}
\end{quote}
-になるようにしている.
+になるようにしている.\texttt{lines} オプション非指定時にはこのような調整は
+行われない.
-\subsection{\texttt{lines} オプション指定時の見かけ上の基本版面の位置}
+\subsection{見かけ上の基本版面の位置}
\LaTeX では,
本文の一行目のベースラインは,本文領域の「上端」から
\ \cs{topskip}\ だけ「下がった」ところに来ることになっている.
という仕様になっている.
縦組の場合は,\cs{strutbox} に対応するボックスは \cs{tstrutbox} であるため,
+\textsf{lltjp-geometry}では
\begin{quote}
\texttt{lines} オプション指定時,\cs{topskip} の値を最低でも
\emph{\cs{tstrutbox} の高さ($\cs{baselineskip}/2$)}まで引き上げる
前節の \cs{maxdepth} の調整も考え合わせると,\emph{\LaTeX が認識する本文領域と,
実際の見た目の基本版面の位置とは異なる}ことに注意してほしい.
-例えばA4縦,公称フォントサイズ10\,pt,行送り18\,pt,30行左右中央
+\medskip
+例えばA4縦を縦組で,公称フォントサイズ10\,pt,行送り18\,pt,30行左右中央
+というレイアウトにするため,
\begin{lstlisting}
-\baselineskip=18pt
+\documentclass{tarticle}
\usepackage{lltjp-geometry}
+\baselineskip=18pt
\usepackage[a4paper,hcentering,lines=30]{geometry}
\end{lstlisting}
-と指定すると,以下のように設定される.
+と指定すると,実際には以下のように設定される.
\begin{itemize}
\item \cs{topskip} は \cs{tstrutbox} の高さ8.5\,ptに設定される.
- \item 本文領域の「高さ」 \cs{textheight} は
+ \item 本文領域の「高さ」 \cs{textheight} は
\[
\cs{topskip} + (30-1)\cs{baselineskip} = 530.5\,\textrm{pt}.
\]
しかし,実際にはページの最初の行のベースラインは,本文領域の右端から
\ \cs{topskip} だけ左にずれたところにあり,
一方ページの最終行のベースラインは本文領域の左端にある.
+縦組和文フォントのベースラインは文字の左右中央を通ることから,
従って,\emph{見た目で言えば,右余白の方が$\cs{topskip} =8.5\,\textrm{pt}$だけ
-大きい}ということになってしまう.
+大きい}ということになってしまう\footnote{%
+ 同様に,横組で \texttt{vcentering} を指定すると,見かけでは
+ $\cs{topskip}-\cs{Cht}+\cs{Cdp}$だけ上余白が大きいように見える.
+}.
+
\end{document}