diff options
Diffstat (limited to 'Master/texmf-dist/doc/luatex/luatexja/lltjp-geometry.tex')
-rw-r--r-- | Master/texmf-dist/doc/luatex/luatexja/lltjp-geometry.tex | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/luatex/luatexja/lltjp-geometry.tex b/Master/texmf-dist/doc/luatex/luatexja/lltjp-geometry.tex new file mode 100644 index 00000000000..23f32a91579 --- /dev/null +++ b/Master/texmf-dist/doc/luatex/luatexja/lltjp-geometry.tex @@ -0,0 +1,256 @@ +%#! luajitlatex +\documentclass[a4paper,10pt]{ltjsarticle} +\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} +\def\pTeX{p\kern-.05em\TeX} +\def\cs#1{\text{\texttt{\char`\\#1}}} + +\lstset{ + basicstyle=\ttfamily, basewidth=0.5em, +} +\makeatletter\let\SX@Info=\relax\makeatother +\fboxsep=0mm + +\usepackage{hyperref,bookmark,xcolor} +\hypersetup{% + unicode, + colorlinks, + allbordercolors=1 1 1, + allcolors=blue, + pdftitle={lltjp-geometryパッケージ} +} + +\def\LuaTeX{Lua\TeX} +\definecolor{blue}{rgb}{0, 0.25, 1} + +\title{\textsf{lltjp-geometry}パッケージ} +\author{\LuaTeX-jaプロジェクト% + \thanks{\url{http://sourceforge.jp/projects/luatex-ja/wiki/FrontPage}}} +\begin{document} +\maketitle + +ページレイアウトの設定として,\href{http://www.ctan.org/pkg/geometry}% +{\textsf{geometry}パッケージ}が有名であるが, +これはp\LaTeX・\LuaTeX-jaの縦組クラスでは利用が不可能という問題があった. +本文書で解説する\textsf{lltjp-geometry}パッケージは,\textsf{geometry}パッケージを +縦組クラスに対応させるパッチである. + + +\section{利用方法} +\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{geometry}パッケージ読み込み時に +自動的に\textsf{lltjp-geometry}パッケージが読み込まれ,ユーザは何もしなくても良い. +\LuaTeX-jaで横組クラスを利用する時でも, +\textsf{lltjp-geometry}パッケージは自動的に動作を停止するので,横組時の挙動が +変わってしまうことはない. + +\subsection{\pTeX 系列} +\pTeX 系列では,\textsf{tarticle}, \textsf{tbook}, \textsf{treport}といった +\emph{縦組クラスを使う場合}にのみ, +\begin{lstlisting} +\usepackage{lltjp-geometry} +\usepackage[...]{geometry} +\end{lstlisting} +のように\emph{\textsf{geometry}パッケージの前}に読み込む. +\pTeX 系列では使用クラスが横組か縦組かの自動判定を行えない\footnote{% + 標準縦組クラスでは,\cs{begin\{document\}} の内部で組方向を縦組に変更するので, + プリアンブル中で判定できない. +}ので,\emph{横組クラスで読み込んではならない}. + +パッケージオプションは存在しない. + +\section{\textsf{lltjp-geometry}使用時の注意事項} + +\subsection{\texttt{twoside}指定時} +縦組の本は通常右綴じである.これを反映し, +\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{傍注} +縦組の場合,傍注は本文の上下に配置される\footnote{% + 二段組の場合は上下共に,一段組の場合は標準では下側だが, + \texttt{reversemp} が指定されたときには上側に配置される. +}.これにより,\emph{\texttt{includemp}(や \texttt{includeall})が +未指定の場合,傍注はヘッダやフッタに重なる}. +\texttt{includemp} 指定時は,\cs{footskip}, \cs{headsep} のいずれか +(二段組の場合は両方)を$\cs{marginparwidth} + \cs{marginparsep}$だけ +増加させる. + +\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$}に対し, +\[ + \cs{textheight} = f+\max(0, d-\cs{maxdepth}) +\] +が成り立つ. + +\pTeX 系列の標準縦組クラス\textsf{[u]tarticle}等, +及びそれを\LuaTeX-ja用に移植した\textsf{ltjtarticle}等では, + \cs{topskip} は\emph{横組時における}全角空白の高さ7.77588\,pt\footnote{% + 標準の\texttt{10pt}オプション指定時.以下同じ. + ところで,この量は公称フォントサイズの10\,ptか,もしくは + 全角空白の高さと深さを合わせた値の9.16446\,ptの間違いではないか,と筆者は考えている. + なお,奥村晴彦氏の\href{https://oku.edu.mie-u.ac.jp/~okumura/jsclasses/}% + {p\LaTeXe 新ドキュメントクラス}では公称ポイントサイズ10\,ptに設定されている. +}であり,\cs{maxdepth} はその半分の値(従って3.88794\,pt)である. + +いくつかのフォントについて,その中の文字の深さの最大値を見てみると +表\ref{tab:baseline}のようになっている. +\begin{table}[tb] + \layoutfloat[c]{% + \begin{tabular}<y>{ll} + \toprule + \bfseries フォント(10\,pt)&\bfseries 深さ(pt単位)\\ + \midrule + 横組用の標準和文フォント(\pTeX)&1.38855\\ + 縦組用の標準和文フォント(\pTeX)&4.58221\\ + \midrule + Computer Modern Roman 10\,pt&2.5\\ + Computer Modern Sans Serif 10\,pt&2.5\\ + Times Roman (\texttt{ptmr8t})&2.16492\\ + Helvetica Bold Oblique (\texttt{phvbo8t})&2.22491\\ + Palatino (\texttt{pplr8t})&2.75989\\ + \bottomrule + \end{tabular}} + \pcaption{いくつかのフォント中の,文字の深さの最大値 + \label{tab:baseline}} +\end{table} +欧文フォントのベースラインは,そのままでは和文との組み合わせが悪いので, +さらに$\textsf{tbaselineshift}=3.41666\,\textrm{pt}$だけ下がることを考えると, +最後の行に和文文字が来た場合はほぼ確実に深さが \cs{maxdepth} を超えてしまうことになる. +従って,本文領域を「\rensuji{$n$}行分」として指定するときによく使われる +\begin{equation} + \cs{textheight} = \cs{topskip} + (n-1)\cs{baselineskip} + \label{eq:nline} +\end{equation} +は\textsf{tarticle}クラスのデフォルトでは通用しない. + +通常の地の文のみの文章においてほぼ確実に\eqref{eq:nline}が成り立つようにするため, +\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{見かけ上の基本版面の位置} +\LaTeX では, +本文の一行目のベースラインは,本文領域の「上端」から + \ \cs{topskip}\ だけ「下がった」ところに来ることになっている. +あまり \cs{topskip} が小さいと,ユーザが大きい文字サイズを指定した時に1行目のベースライン +位置が狂う危険があるため, +\textsf{geometry}パッケージでは +\begin{quote} + \texttt{lines} オプション指定時,\cs{topskip} の値を最低でも + \cs{strutbox} の高さ($0.7\cs{baselineskip}$)まで引き上げる +\end{quote} +という仕様になっている. + +縦組の場合は,\cs{strutbox} に対応するボックスは \cs{tstrutbox} であるため, +\textsf{lltjp-geometry}では +\begin{quote} + \texttt{lines} オプション指定時,\cs{topskip} の値を最低でも + \emph{\cs{tstrutbox} の高さ($\cs{baselineskip}/2$)}まで引き上げる +\end{quote} +という挙動にした.見かけ上は \cs{topskip} の値制限が緩くなったが,前節で述べたように +欧文フォントのベースラインは和文に合うように下にずらされるので, +実用上は問題は起きないだろう. + +前節の \cs{maxdepth} の調整も考え合わせると,\emph{\LaTeX が認識する本文領域と, +実際の見た目の基本版面の位置とは異なる}ことに注意してほしい. + +\medskip +例えばA4縦を縦組で,公称フォントサイズ10\,pt,行送り18\,pt,30行左右中央 +というレイアウトにするため, +\begin{lstlisting} +\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} は +\[ + \cs{topskip} + (30-1)\cs{baselineskip} = 530.5\,\textrm{pt}. +\] + \item 従って,左余白と右余白は +\[ + \frac{210\,\textrm{mm}-\cs{textheight}}2 = 33.50394\,\textrm{pt}. +\] +\end{itemize} +しかし,実際にはページの最初の行のベースラインは,本文領域の右端から +\ \cs{topskip} だけ左にずれたところにあり, +一方ページの最終行のベースラインは本文領域の左端にある. +縦組和文フォントのベースラインは文字の左右中央を通ることから, +従って,\emph{見た目で言えば,右余白の方が$\cs{topskip} =8.5\,\textrm{pt}$だけ +大きい}ということになってしまう\footnote{% + 同様に,横組で \texttt{vcentering} を指定すると,見かけでは + $\cs{topskip}-\cs{Cht}+\cs{Cdp}$だけ上余白が大きいように見える. +}. + + +\end{document} |