X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=doc%2Fluatexja.dtx;h=9ddbee0e7a82857a96c971f8c5c45137fd037c43;hb=cdf699d8291fe43b3850058cea776cbbb387876f;hp=1eb4433b208535a9b9c506f2a9301ac96c50444d;hpb=239f1ce2935dd6ceb408049bf8db8362d020cb88;p=luatex-ja%2Fluatexja.git diff --git a/doc/luatexja.dtx b/doc/luatexja.dtx index 1eb4433..9ddbee0 100644 --- a/doc/luatexja.dtx +++ b/doc/luatexja.dtx @@ -15,22 +15,7 @@ %%%%%%%% \makeatletter %%%%%%%% - -%%%%%%%% record loaded packages -\let\ltjpkglist\empty -\newif\if@real@append@list -\def\@append@newentry#1#2{{% - \@real@append@listtrue \def\@tempa{#2}% - \let\@pkglist\@append@newentry@pkglist#1% - \if@real@append@list - \let\@pkglist=\relax\xdef#1{#1\@pkglist{#2}}% - \fi}} -\def\@append@newentry@pkglist#1{% - \def\@tempb{#1}% - \ifx\@tempa\@tempb\@real@append@listfalse\fi} -\def\@addtofilelist#1{\@append@newentry\ltjpkglist{#1}} -\let\@listfiles\empty - +\directlua{if jit then jit.on() end} %<*en> \usepackage[margin=25mm,lmargin=30mm,rmargin=30mm,footskip=6mm]{geometry} \usepackage{luatexja-adjust}\ltjdisableadjust @@ -245,7 +230,7 @@ Japanese processing in computers (\textit{e.g.}, the UTF-8 encoding). ASCII \pTeX やそれの拡張物が用いられることが一般的であった.\pTeX は\TeX のエンジン拡張であり,(少々仕様上不便な点はあるものの)商業印刷の分野に も用いられるほどの高品質な日本語組版を可能としている.だが,それは弱点に -もなってしまった:\pTeX という(組版的に)満足なものがあったため,海外で +もなってしまった.\pTeX という(組版的に)満足なものがあったため,海外で 行われている数々の\TeX の拡張――例えば\eTeX や\pdfTeX ――や,TrueType, OpenType, Unicodeといった計算機で日本語を扱う際の状況の変化に追従すること を怠ってしまったのだ. @@ -312,29 +297,56 @@ The followings are major changes from \pTeX: \begin{itemize} %<*en> -\item A Japanese font is a tuple of a ``real'' font, a Japanese font - metric (\emph{JFM}, for short). +\item \emph{\LuaTeX-ja does all process only with Lua and \TeX\ macros}, +while \pTeX\ is an engine extension of \TeX82. +This means that several features of \pTeX\ are not completely implemented +in \LuaTeX-ja. +% +%<*ja> +\item \pTeX はエンジン拡張であったのに対し, +\emph{\LuaTeX-jaはLuaコードと\TeX マクロを用いて全てを実装している}. +そのため,\pTeX のいくつかの機能は\LuaTeX-ja に(そのままの形では)実装していない. +% +\begin{itemize} +%<*en> + \item \pTeX\ addes several primitives, such as \cs{kanjiskip}, +\cs{prebreakpenalty},~and,~\cs{ifydir}. They can be used as follows: % %<*ja> -\item 和文フォントは(小塚明朝,IPA明朝などの)実際のフォント,和文フォン - トメトリック(JFMと呼ぶ\footnote{混乱を防ぐため,p\TeX の意味での - JFM (\texttt{min10.tfm}) などは本ドキュメントでは\emph{和文用 - TFM}とよぶことにする.})の組である. + \item 例えば\pTeX で追加された次のようなプリミティブ % +\begin{verbatim} +\kanjiskip=10pt \dimen0=kanjiskip +\prebreakpenalty`ぁ=100 +\ifydir ... \fi +\end{verbatim} +% However, we cannot use them under \LuaTeX-ja. +% Instead of them, we have to write as the following. +% は\LuaTeX-jaには存在しない.\LuaTeX-jaでは以下のように記述することになる. +\begin{verbatim} +\ltjsetparameter{kanjiskip} \dimen0=\ltjgetparameter{kanjiskip} +\ltjsetparameter{prebreakpenalty={`ぁ,100}} +\ifnum\ltjgetparemeter{direction}=4 ... \fi +\end{verbatim} %<*en> \item In \pTeX, a line break after Japanese character is ignored (and doesn't yield a space), since line breaks (in source files) are permitted almost everywhere in Japanese texts. However, \LuaTeX-ja - doesn't have this function completely, because of a specification - of \LuaTeX. + doesn't have this feature completely, because of a specification + of \LuaTeX. For the detail, see Section~\ref{sec-lbreak}. % %<*ja> \item 日本語の文書中では改行はほとんどどこでも許されるので,\pTeX では和文文字 直後の改行は無視される(スペースが入らない)ようになっていた.しかし, \LuaTeX-ja では \LuaTeX の仕様のためにこの機能は完全には実装されていない. + 詳しくは\ref{sec-lbreak}章を参照. % +\end{itemize} + + + %<*en> \item The insertion process of glues/kerns between two Japanese characters and between a Japanese character and other characters @@ -402,15 +414,17 @@ The followings are major changes from \pTeX: \end{itemize} %<*ja> -\item \LuaTeX-jaでは,\pTeX と同様に漢字・仮名を制御綴内に用いることができ, -\cs{西暦} などが正しく動作するようにしている. -但し,制御綴中に使える和文文字が\pTeX・\upTeX と全く同じではないことに注意すること. +\item ****版からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている. +\LuaTeX のコールバックの制限などにより,特に異なった組方向のボックスを扱う場合には +仕様が異なるので注意. % +%<*en> +\item Japanese characters in discretionary break (\cs{discretionary}) is not supported. +% %<*ja> -\item ****版からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている. -\LuaTeX のコールバックの制限などにより,特に異なった組方向のボックスを扱う場合には -仕様が異なるので注意すること. +\item \cs{discretionary} 内に直接和文文字を記述することはサポートされない.和文文字をどう + しても使いたい場合は \cs{hbox} で括ること. % \end{itemize} @@ -540,23 +554,21 @@ and \emph{Japanese fonts} for fonts used in \textbf{JAchar}. %\subsection{Installation} %\subsection{インストール} -%To install the \LuaTeX-ja\ package, you will need: -%\LuaTeX-jaパッケージのインストールには,次のものが必要である. +%The following packages are needed for the \LuaTeX-ja\ package. +%\LuaTeX-jaパッケージには,次のパッケージ類が必要である. \begin{itemize} -\item \LuaTeX\ beta-0.74.0 (or later) -\item \Pkg{luaotfload} v2.2 (or later) -\item \Pkg{luatexbase} v0.6 -\item \Pkg{xunicode} v0.981~(2011/09/09) +\item \LuaTeX\ snapshot rev~5024 (or later) +\item \Pkg{luaotfload} v2.5 (or later) \item \Pkg{adobemapping} (Adobe cmap and pdfmapping files) -\item \Pkg{everysel} +\item \Pkg{everysel} (if you want to use \LuaTeX-ja with \LaTeXe) %\item \emph{IPAex fonts(\url{http://ipafont.ipa.go.jp/})} %\item \emph{IPAexフォント(\url{http://ipafont.ipa.go.jp/})} \end{itemize} %<*en> -\emph{This version of \LuaTeX-ja no longer supports \TeX~Live~2012 (or older version), -since \LuaTeX\ binary and \Pkg{luaotfload} is updated in -\TeX~Live~2013.} +\emph{This version of \LuaTeX-ja no longer supports \TeX~Live~2013 (or older version). +If you want to use this version with \TeX~Live~2014, you have to build a development +version of \LuaTeX\ from its source.} \medskip @@ -569,16 +581,10 @@ the following distributions: \item W32\TeX\ (in \texttt{luatexja.tar.xz}) \end{itemize} IPAex fonts are also available in these distributions. - -If you are using \TeX~Live~2014, you can install \LuaTeX-ja -from \TeX~Live manager (\texttt{tlmgr}): -\begin{lstlisting} -$ tlmgr install luatexja -\end{lstlisting} % %<*ja> -\emph{本バージョンの\LuaTeX-jaは\TeX~Live~2012以前では動作しない.} -これは,\LuaTeX と\Pkg{luaotfload}が\TeX~Live~2013において更新されたことによる. +\emph{本バージョンの\LuaTeX-jaは\TeX~Live~2013以前では動作しない.\TeX~Live~2014で +用いたい場合は,自力で\LuaTeX 開発版をソースからビルドする必要がある.} \medskip @@ -591,24 +597,33 @@ $ tlmgr install luatexja \end{itemize} これらのディストリビューションはIPAexフォントも収録している. W32\TeX においてはIPAexフォントは \texttt{luatexja.tar.xz} 内にある. - -例えば\TeX~Live~2014を利用しているなら,\LuaTeX-jaは\TeX~Live manager (\texttt{tlmgr})を -使ってインストールすることができる. -\begin{lstlisting} -$ tlmgr install luatexja -\end{lstlisting} % +% %<*ja> +% 例えば\TeX~Live~2015を利用しているなら,\LuaTeX-jaは\TeX~Live manager (\texttt{tlmgr})を +% 使ってインストールすることができる. +% \begin{lstlisting} +% $ tlmgr install luatexja +% \end{lstlisting} +% % +% %<*en> +% If you are using \TeX~Live~2015, you can install \LuaTeX-ja +% from \TeX~Live manager (\texttt{tlmgr}): +% \begin{lstlisting} +% $ tlmgr install luatexja +% \end{lstlisting} +% % + %\paragraph{Manual installation} %\paragraph{手動インストール方法} \begin{enumerate} %<*en> -\item Download the source archive, by one of the following method. +\item Download the source, by one of the following method. At the present, \LuaTeX-ja has no \emph{stable} release. \begin{itemize} -\item Copy the Git repository: +\item Clone the Git repository: \begin{lstlisting} $ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git \end{lstlisting} @@ -622,11 +637,11 @@ Note that the \texttt{master} branch, and hence the archive in CTAN, are not upd the forefront of development is not the \texttt{master} branch. % %<*ja> -\item ソースアーカイブを以下のいずれかの方法で取得する.現在公開されているのはあくまでも +\item ソースを以下のいずれかの方法で取得する.現在公開されているのはあくまでも 開発版であって,安定版でないことに注意. \begin{itemize} -\item Gitリポジトリの内容をコピーする: +\item Gitリポジトリをクローンする: \begin{lstlisting} $ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git \end{lstlisting} @@ -645,7 +660,7 @@ $ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git But only the contents in \texttt{src/} are needed to work \LuaTeX-ja. % %<*ja> -\item 「Gitリポジトリをコピー」以外の方法でアーカイブを取得したならば,それを展開する. +\item 「Gitリポジトリをクローン」以外の方法でアーカイブを取得したならば,それを展開する. \texttt{src/}をはじめとしたいくつかのディレクトリができるが, 動作には\texttt{src/}以下の内容だけで十分. % @@ -686,7 +701,11 @@ Note that \texttt{*.\{dtx,ins\}} and \texttt{ltj-kinsoku\_make.tex} are not need % %<*ja> \item \texttt{src}の中身を自分の\texttt{TEXMF}ツリーにコピーする. - 場所の例としては,例えば\texttt{TEXMF/tex/luatex/luatexja/}がある. + 場所の例としては,例えば +\begin{quote} + \texttt{TEXMF/tex/luatex/luatexja/} +\end{quote} + がある. シンボリックリンクが利用できる環境で,かつリポジトリを直接取得したのであれば, (更新を容易にするために)コピーではなくリンクを貼ることを勧める. % @@ -1309,7 +1328,7 @@ before \Pkg{luatexja-preset}: %\paragraph{General options} %\paragraph{一般的なオプション} -\begin{cslist} +\begin{cslist}[before*=] \item[nodeluxe] %<*en> @@ -1689,10 +1708,10 @@ If you want to use these functions, load \Pkg{luatexja-otf} package. %<*ja> \Pkg{otf}パッケージでは,それぞれ次のようなオプションが存在した: \begin{cslist} -\item[\cs{deluxe}] 明朝体・ゴシック体各2ウェイトと,丸ゴシック体を扱えるようになる. -\item[\cs{expert}] 仮名が横組・縦組専用のものに切り替わり,ルビ用仮名も +\item[deluxe] 明朝体・ゴシック体各2ウェイトと,丸ゴシック体を扱えるようになる. +\item[expert] 仮名が横組・縦組専用のものに切り替わり,ルビ用仮名も \ \cs{rubyfamily}\ によって扱えるようになる. -\item[\cs{bold}] ゴシック体を標準で太いウェイトのものに設定する. +\item[bold] ゴシック体を標準で太いウェイトのものに設定する. \end{cslist} しかしこれらのオプションは\Pkg{luatexja-otf}パッケージには存在しない. \Pkg{otf}パッケージが文書中で使用する和文用TFMを自前の物に置き換えていたのに対し, @@ -1733,7 +1752,7 @@ non-embedded fonts Ryumin-Light~and~GothicBBB-Medium as default Japanese fonts %<*ja> \LuaTeX から見える位置に \texttt{luatexja.cfg} があれば,\LuaTeX-jaはそれを読み込む. このファイルを用いるとplain~\TeX, \LaTeXe における標準和文フォントを -IPAex明朝・IPAexゴシックから変更することがdできる. +IPAex明朝・IPAexゴシックから変更することができる. しかし,基本的には\emph{文章中で用いるフォントは(例えば \Pkg{luatexja-preset} などで) 文書ソース内で指定するべき}であり,この \texttt{luatexja.cfg} は, 「IPAexフォントがインストールできない」など,IPAexフォントが使用できない場合にのみ @@ -2283,36 +2302,29 @@ xyz漢字 \end{LTXexample} %<*en> -Note that setting a positive value to -\Param{yalbaselineshift}~or~\Param{talbaselineshift} does not -increase the depth of \textbf{ALchar}, as shown below. -This is because these parameters are implemented by setting \verb+yoffset+ -field of a glyph node, and this does not increase the depth of the glyph. -This problem does not apply for \Param{yjabaselineshift}, since -\Param{yjabaselineshift}~and~\Param{tjabaselineshift} -use a different implementation method. -% -%<*ja> -なお,\Param{yalbaselineshift},~\Param{talbaselineshift}パラメータに -正の値を指定しても, -下の例のように\textbf{ALchar}の深さは増加しないことに注意. -これは,2パラメータがglyph~nodeの\verb+yoffset+を使って -実装されているためである. -\Param{yjabaselineshift},~\Param{tjabaselineshift}パラメータは -別の方法を使って実装しているので, -このような問題は起こらない. -% -\begin{LTXexample}[width=.3\textwidth] -\leavevmode\fboxsep=0pt - \ltjsetparameter{yjabaselineshift=0pt, - yalbaselineshift=0pt} -\vrule width 105pt height 0.4pt depth 0pt \hskip-95pt -\fbox{\ltjsetparameter{yalbaselineshift=10pt}あいうxyz} -\fbox{\ltjsetparameter{yalbaselineshift=-10pt}あいうxyz}\\ -\vrule width 105pt height 0.4pt depth 0pt \hskip-95pt -\fbox{\ltjsetparameter{yjabaselineshift=10pt}あいうxyz} -\fbox{\ltjsetparameter{yjabaselineshift=-10pt}あいうxyz} -\end{LTXexample} +Note that setting positive \Param{yalbaselineshift}~or~\Param{talbaselineshift} +parameters does not increase the depth of one-letter ``syllable'' $p$ of \textbf{Alchar}, if +its left-protrusion~(\cs{lpcode}) and right-protrusion~(\cs{rpcode}) are both non-zero. +This is because +\begin{itemize} +\item These two parameters are implemented by setting yoffset field of a +glyph node, and this does not increase the depth of the glyph. +\item To cope with the above situation, \LuaTeX-ja automatically supplies +a rule in every ``syllable''. +\item However, we cannot use this ``supplying a rule'' method if \dots +\end{itemize} + +This problem does not apply for \Param{yjabaselineshift}~nor~\Param{tjabaselineshift}. +% +%<*ja> +なお,以下の場合には1文字の\textbf{ALchar}からなる「音節」の深さは増加しないことに注意. +\begin{itemize} + \item \Param{yalbaselineshift},~\Param{talbaselineshift}パラメータが正になっている. + \item 「音節」を構成する唯一の文字$p$の +左余白への突出量(\cs{lpcode}),右余白への突出量(\cs{rpcode})がどちらも非零である. +\end{itemize} +\Param{yjabaselineshift},~\Param{tjabaselineshift}パラメータについてはこのような問題は起こらない. +% %<*ja> \paragraph{数式における挙動:\pTeX との違い} @@ -2369,6 +2381,7 @@ $\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ \suppressfloats[t] %<*ja> \section{\LuaTeX-jaにおける \cs{catcode}} +\label{sec-catcode} \subsection{予備知識:\pTeX と\upTeX における \cs{kcatcode}} \pTeX,\upTeX においては,和文文字が制御綴内で利用できるかどうか は \cs{kcatcode} の値によって決定されるのであった. @@ -2376,6 +2389,7 @@ $\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ % %<*en> \section{\cs{catcode} in \LuaTeX-ja} +\label{sec-catcode} \subsection{Preliminaries: \cs{kcatcode} in \pTeX\ and \upTeX} In \pTeX~and~\upTeX, the value of \cs{kcatcode} determines whether a Japanese character can be used in a control word. @@ -3011,7 +3025,7 @@ the current direction. One can use these in \cs{dimexpr} primitive, as the follo \begin{lstlisting} \dimexpr 2\ltjgetwd{42}-3pt\relax, \the\ltjgetwd{1701} \end{lstlisting} -By implementaion, the argument must be grouped as \verb+\ltjgetwd{42}+, +By its implementaion, the argument must be grouped as \verb+\ltjgetwd{42}+, if the argument consists of more than one token. \begin{LTXexample}[width=0.3\textwidth] \parindent0pt @@ -3070,7 +3084,10 @@ These commands set the dimension of \cs{box}. Unlike \cs{ltjgetwd}, one doe \end{lstlisting} のように \cs{wd} の代わりとして扱うことができる.引数が1桁の場合は, \cs{ltjgetwd3} のように引数をグループで括らなくても良いが,そうでない場合は -(通常の命令への引数のように)\verb+\ltjgetwd{42}+ とグループに括る必要がある. +(通常の命令への引数のように)\verb+\ltjgetwd{42}+ とグループに括る必要がある% +\footnote{\cs{afterassignment} を利用して実装すればグループに括る必要がなくなるのでは,と思 + うかもしれないが,それでは本文中に書いた例のように \cs{dimexpr} 中で使用でき + なくなってしまう.}. 使用例は以下の通りである. \begin{LTXexample}[width=0.3\textwidth] \parindent0pt @@ -3151,7 +3168,7 @@ Returned value&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\ \end{center} \begin{LTXexample}[width=0.3\textwidth] -\leavevmode\def\DIR{\ltjgetparameter{direction}} +\leavevmode\def\DIR{\ltjgetparameter{ direction}} \hbox{\yoko\DIR}, \hbox{\tate\DIR}, \hbox{\dtou\DIR}, \hbox{\utod\DIR}, \hbox{\tate$\hbox{tate math: \DIR}$} @@ -3181,6 +3198,7 @@ overridden by \LuaTeX-ja, using~\verb+\protected\def+. \begin{cslist}[style=standard] \item[\cs{unhbox}\textrm{, }\cs{unvbox}\textrm{, }\cs{unhcopy}\textrm{, }\cs{unvcopy}] \item[\cs{vadjust}\{\}] + \item[\cs{insert}\{\}] \item[\cs{lastbox}] \item[\cs{raise}\textrm{, }\cs{lower}\textrm{\ etc., }\cs{vcenter}] \item[\cs{vcenter}] @@ -3200,6 +3218,9 @@ overridden by \LuaTeX-ja, using~\verb+\protected\def+. \item[\cs{vadjust}\{\}] 一旦プリミティブ本来の挙動を行う.その後,の組方向が 周囲の垂直リストの組方向と一致しない場合にエラーを出力し, 該当の \cs{vadjust} を無効にする. + \item[\cs{insert}\{\}] + 一旦プリミティブ本来の挙動を行い,その後内の各ボックス・罫線の直前に組方向を示 + すdirection whatsitを挿入する. \item[\cs{lastbox}] ボックスの「中身」を現在の組方向に合わせるためのノード (\textit{dir\_box}という)を必要ならば除去し, 正しく「中身」のボックスが返されるように前処理をする. @@ -3252,14 +3273,14 @@ causes a error. We denote control sequences which are defined in \paragraph{JFM} %<*en> -As noted in Introduction, a JFM has measurements of characters and +a JFM has measurements of characters and glues/kerns that are automatically inserted for Japanese typesetting. The structure of JFM will be described in the next subsection. At the calling of \cs{jfont}, you must specify which JFM will be used for this font by the following keys: % %<*ja> -「はじめに」の節で述べたように,JFMは文字と和文組版で自動的に挿入される +JFMは文字と和文組版で自動的に挿入される グルー/カーンの寸法情報を持っている.JFMの構造は次の節で述べる. \cs{jfont} 命令の呼び出しの際には,どのJFMを用いるのかを以下のキーで 指定する必要がある: @@ -3554,20 +3575,22 @@ letter-spacing and the width of italic correction are not correct: \cs{tfont} で定義された縦組用和文フォントは, 以下の点が \cs{jfont} による横組用和文フォントとは異なる: \begin{itemize} - \item 出力時に,自動的に「\verb+vert+ feature相当」のグリフ置換が行われる. - これは,\Pkg{luaotfload}による各種featureのサポートとは全く別個に行われるもので, - いちいち \verb+vert+ featureを指定する必要はない. + \item 自動的に \texttt{vert}, \texttt{vrt2} の両OpenType featureが有効化される. +但し,以下の例の3行目に示すように,明示的に \texttt{vert}, \texttt{vrt2}(のいずれか)の +有効・無効を指定した場合は別である. \begin{lstlisting} -\tfont\S=file:KozMinPr6N-Regular.otf:jfm=ujis % OK +\tfont\S=file:KozMinPr6N-Regular.otf:jfm=ujisv + % vert and vrt2 are automatically activated +\tfont\T=file:KozMinPr6N-Regular.otf:jfm=ujisv;-vert % vert and vrt2 are not activated \end{lstlisting} \item \ref{ssec-math}節で述べる,数式中の和文フォントには縦組用和文フォントは指定できない. \item \texttt{jfm=}\ の部分には縦組用JFMを指定する. 以下の縦組用JFMが\LuaTeX-jaには同梱されており,違いを表\ref{tab-difjfm-tate}に示した. \begin{description} -\item[\tt jfm-ujis.lua] \LuaTeX-jaの標準縦組用JFMである.このJFMは\upTeX で +\item[\tt jfm-ujisv.lua] \LuaTeX-jaの標準縦組用JFMである.このJFMは\upTeX で 用いられるUTF/OTFパッケージ用の和文用TFMである \verb+upnmlminr-v.tfm+ を 元にしている. -\item[\tt jfm-min.lua] \pTeX に同梱されているデフォルトの和文用縦組TFM +\item[\tt jfm-tmin.lua] \pTeX に同梱されているデフォルトの和文用縦組TFM である \verb+tmin10.tfm+ に相当し,\texttt{min10.tfm} と同様に 「っ」など一部の文字幅が狭められている. \end{description} @@ -4041,12 +4064,11 @@ Furthermore, the glyph is shifted according to values of fields 和文文字を考えよう. \begin{itemize} \item -実際のグリフの「垂直位置」は,ベースラインが文字の物理的な左右方向の中央を通る +実際のグリフの「垂直位置」は,まずベースラインが文字の物理的な左右方向の中央を通る 位置となる. \item -また,この場合\texttt{align}フィールドは \texttt{'right'} なので, +また,この場合 \texttt{align} フィールドは \texttt{'right'} なので, 「水平位置」は字送り方向に「右寄せ」したものとなる(緑色の長方形). -その際,高さ・深さは,実フォントのascender, descenderの値が使われる. \item その後さらに \texttt{left} と \texttt{down} の値に従ってシフトされる のは横組用和文フォントと変わらない. @@ -4142,93 +4164,79 @@ using \texttt{jfm-test.lua} which contains the following: % \begin{lstlisting} [0] = { - chars = { '漢', 'ヒ*' }, + chars = { '漢' }, align = 'left', left = 0.0, down = 0.0, width = 1.0, height = 0.88, depth = 0.12, italic=0.0, }, [2000] = { - chars = { '。', '、*', 'ヒ' }, + chars = { '。', 'ヒ' }, align = 'left', left = 0.0, down = 0.0, width = 0.5, height = 0.88, depth = 0.12, italic=0.0, }, \end{lstlisting} -%句点「。」の幅は二分であるので +%ここで,次のような入力とその実行結果を考える: %Now consider the following input/output: \begin{LTXexample}[width=0.3\textwidth] -\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+vert -\setbox0\hbox{\a 。\inhibitglue 漢} +\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+hwid +\setbox0\hbox{\a ヒ漢} \the\wd0 \end{LTXexample} %<*en> -Now we look why the above source outputs 20\,pt, not 15\,pt. +Now we look why the above source outputs 15\,pt. \begin{enumerate} -\item The ideographic full stop ``。'' is converted to its vertical form ``\char"FE12''~(\texttt{U+FE12}), %" -by \verb+vert+ feature. -\item The character class of ``\char"FE12'' is zero, hence its width is fullwidth.%" -\item The character class of ``漢'', hence its width is fullwidth. -\item \cs{inhibitglue} makes that no glue will be inserted between ``。'' and ``漢''. -\item Hence the width of \cs{hbox} equals to 20\,pt. +\item The character ``ヒ'' is converted to its half width form ``ヒ'' by \verb+hwid+ feature. +\item According to the JFM, the character class of ``ヒ'' is 2000, hence its width is halfwidth. +\item The character class of ``漢'' is zero, hence its width is fullwidth. +\item Hence the width of \cs{hbox} equals to 15\,pt. \end{enumerate} -This example shows that the character class of a character is determined \emph{after +This example shows that the character class of a character is generally determined \emph{after applying font features by \Pkg{luaotfload}}. % %<*ja> -では,全角二分(15.0\,pt)となるのが自然……と思うかもしれないが,上の実行結果では20\,ptとなっている. -それは以下の事情によるものである: +上記の出力結果が,15\,ptとなっているのは理由によるものである: \begin{enumerate} -\item \verb+vert+ featureによって句点(\texttt{U+3002})が縦組用のグリフと置き換わる(\Pkg{luaotfload} による処理). -\item この縦組用句点のグリフは \texttt{U+FE12} であるため,その文字クラスは0となる. -\item 以上により文字クラス0とみなされるため,結果として「。」の幅は全角だと認識されてしまう. +\item \verb+hwid+ featureによって「ヒ」が半角幅のグリフ「ヒ」と置き換わる(\Pkg{luaotfload} による処理). +\item JFMによれば,この「ヒ」のグリフの文字クラスは2000である. +\item 以上により文字クラス2000とみなされるため,結果として「ヒ」の幅は半角だと認識される. \end{enumerate} この例は,\emph{文字クラスの決定はfont featureの適用によるグリフ置換の後に行われる}ことを 示している. % %<*en> -However, a starred specification like ``\texttt{'、*'}'' changes the rule. +However, ... Consider the following input: % %<*ja> -但し,「\texttt{'、*'}」のようにアスタリスクつきの指定があると, +但し,JFMによって決まる置換後のグリフの文字クラスが0である場合は, 状況は異なる. % \begin{LTXexample}[width=0.3\textwidth] \jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+vert -\a 漢、\inhibitglue 漢 +\a 漢。\inhibitglue 漢 \end{LTXexample} %<*en> -Here, the character class of the ideographic comma ``、''~(\texttt{U+3001}) is determined +Here, the character class of the ideographic full stop ``。''~(\texttt{U+3002}) is determined as following: \begin{enumerate} -\item As the case of ``。'', the ideographic comma ``、'' is converted to its vertical - form ``\char"FE11''~(\texttt{U+FE11}).%" -\item The character class of ``\char"FE11'' is zero. -\item However, \LuaTeX-ja remembers that this ``\char"FE11'' is obtained from ``、'' by - font features. The character class of ``、'' is \emph{non-zero value}, namely, 2000. -\item Hence the ideographic comma ``、'' in above belongs the character class~2000. +\item As the case of ``ヒ'', the ideographic full stop ``。'' is converted to its vertical + form ``\char"FE12''~(\texttt{U+FE12}).%" +\item The character class of ``\char"FE12'' is \emph{zero}. +\item However, \LuaTeX-ja remembers that this ``\char"FE12'' is obtained from ``。'' by + font features. The character class of ``。'' is \emph{non-zero value}, namely, 2000. +\item Hence the ideographic full stop ``。'' in above belongs the character class~2000. \end{enumerate} % %<*ja> -ここで,読点「、」(\texttt{U+3001})の文字クラスは,以下のようにして決まる. +ここで,句点「。」(\texttt{U+3002})の文字クラスは,以下のようにして決まる. \begin{enumerate} -\item とりあえず句点の時と同じように,\Pkg{luaotfload} によって縦組用読点のグリフに置き換わる. -\item 置換後のグリフは \texttt{U+FE11} であり,そのままでは文字クラスは0と判定される. -\item ところが,JFMには「\texttt{'、*'}」指定があるので,置換前の横組用読点のグリフによって文字クラスを判定する. -\item 結果として,上の出力例中の読点の文字クラスは2000となる. +\item \Pkg{luaotfload} によって縦組用句点のグリフに置き換わる. +\item 置換後のグリフは \texttt{U+FE12} であり,JFMに従えば文字クラスは\emph{0}と判定される. +\item この場合,置換前の横組用句点のグリフによって文字クラスを判定する. +\item 結果として,上の出力例中の句点の文字クラスは2000となる. \end{enumerate} % -%<*ja> -なお,「\texttt{'\hbox{}ヒ*'}」のようにアスタリスクつきの指定があっても, -置換後のグリフで判定した文字クラスの値が0でなければ,そちらをそのまま作用する. -\begin{LTXexample}[width=0.3\textwidth] -\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+hwid -\a 漢ヒひ -\end{LTXexample} -上の例では, -\texttt{hwid} featureにより,「ヒ」が半角の「ヒ」に置き換わるが, -文字クラスは「ヒ」の属する0\emph{ではなく},「ヒ」の属する2000となる. -% %\paragraph{仮想的な文字} %\paragraph{Imaginary characters} @@ -4531,7 +4539,7 @@ JFMで指定されているそれぞれの値をスケーリングしたもの 間に入るものがkernであれば,このフィールドの値は\ \texttt{[$j$]=\{false, , \}} である. はkernを表すノードそのものである\footnote{% -本バージョンでは利用可能ならばノードのアクセス手法にdirect access +本バージョンではノードのアクセス手法にdirect access modelを用いている.そのため,例えば\LuaTeX\ beta-0.78.2では,単なる自然数のようにし か見えないことに注意. }. @@ -4539,6 +4547,10 @@ glueであれば,\texttt{[$j$]=\{false, , , \}} で はglueの長さを表すノードそのものであり, $\text{}=\textit{from\_jfm}+\text{}$である. \end{itemize} +\item[ascent\textrm{, }descent] +…… +\item[chars\_cbcache] +…… \end{cslist} % @@ -5205,7 +5217,9 @@ With the help of this example, we remark the specification of \cs{inhibitglue}: simply ignored. % %<*ja> -\item \cs{inhibitglue} の垂直モード中での呼び出しは意味を持たない. +\item \emph{\cs{inhibitglue} の垂直モード中での呼び出しは意味を持たない}\footnote{% + この点は\TeX~Live~2014での\pTeX における \cs{inhibitglue} の仕様変更と同じである. +}. 4行目の入力で有効にならないのは,\cs{inhibitglue} の時点では垂直モードであり, \cs{noindent} の時点で水平モードになるからである. % @@ -7317,54 +7331,54 @@ u \def\OB{$\text{\sf O}_{\text{\sf B}}$} \begin{defn} %<*en> -A \emph{cluster} is a list of consecutive nodes in one of the following forms, +A \emph{cluster} is consecutive nodes in one of the following forms, with the \textit{id} of it: % %<*ja> -\emph{クラスタ}は以下の形のうちのどれかひとつをとる連続的なノードのリストである: +\emph{クラスタ}は以下の形のうちのどれかひとつをとるノードのリストである: % \begin{enumerate} %<*en> \item Nodes whose value of\ \verb+\ltj@icflag+ is in $[3,15)$. These nodes come from a hbox which is already packaged, by unpackaging (\cs{unhbox}). - The \textit{id} is \textit{id\_pbox}. + The \textit{id} of the cluster is \textit{id\_pbox}. % %<*ja> \item その \verb+\ltj@icflag+ の値が$[3,15)$に入るノードのリスト. これらのノードはある既にパッケージングされたhboxから \cs{unhbox} で アンパックされたものである. - その\textit{id}は\textit{id\_pbox}である. + この場合,クラスタの\textit{id}は\textit{id\_pbox}である. % %<*en> \item A inline math formula, including two \textit{math\_node}s at the boundary of it. - The \textit{id} is \textit{id\_math}. + The \textit{id} of the cluster is \textit{id\_math}. % %<*ja> \item インライン数式でその境界に2つの\textit{math\_node}を含むもの. - その\textit{id}は\textit{id\_math}である. + この場合,クラスタの\textit{id}は\textit{id\_math}である. % %<*en> -\item A \textit{glyph\_node}~$p$ with nodes which relate with it: +\item A \textit{glyph\_node}~$p$, which represents a \textbf{JAchar}, with nodes which relate with it: % %<*ja> -\item \textit{glpyh\_node}~$p$とそれに関係するノード: +\item \textbf{JAchar}を表す\textit{glyph\_node}~$p$とそれに関係するノード: % \begin{enumerate} %<*en> -\item A kern for the italic correction of~$p$. +\item[(a)] A kern for the italic correction of~$p$. % %<*ja> -\item $p$のイタリック補正のためのカーン. +\item[(a)] $p$のイタリック補正のためのカーン. % %<*en> -\item An accent attached to $p$ by \cs{accent}. +\item[(b)] An accent attached to $p$ by \cs{accent}. % %<*ja> -\item \cs{accent} による$p$に付随したアクセント. +\item[(b)] \cs{accent} による$p$に付随したアクセント. % \end{enumerate} \[ @@ -7382,41 +7396,51 @@ with the \textit{id} of it: \] %<*en> -The \textit{id} is \textit{id\_jglyph} or -\textit{id\_glyph}, according to whether the \textit{glyph\_node} -represents a Japanese character or not. +In this case, the \textit{id} is \textit{id\_jglyph}. +% +%<*ja> +この場合の\textit{id}は\textit{id\_jglyph}である. +% + +%<*en> +\item A list which begins from a \textit{glyph\_node} which represents a \textbf{ALchar}, + and consists of \textbf{ALchar} \textit{glyph\_node}s, + kerns for adjusting accents~(its subtype is 2), kerns for italic corrections and + kerns which are automatically inserted by \LuaTeX~or~luaotfload. + In this case, the \textit{id} is \textit{id\_glyph}. % %<*ja> -\textit{id}は\textit{glyph\_node}が和文文字を表すかどうかによって -\textit{id\_jglyph},もしくは\textit{id\_glyph}となる. +\item \textbf{ALchar}を表す\textit{glyph\_node},\cs{accent} によるアクセント位置補正用の + カーン(subtypeが2),そしてイタリック補正・カーニングによって挿入されたカーン達が連続 + したもの.この場合の\textit{id}は\textit{id\_glyph}である. % %<*en> \item An box-like node, that is, an hbox, a vbox, a rule (\cs{vrule}) and an \textit{unset\_node}. -The \textit{id} is \textit{id\_hlist} if the node is an +The \textit{id} of the cluster is \textit{id\_hlist} if the node is an hbox which is not shifted vertically, or \textit{id\_box\_like} otherwise. % %<*ja> -\item ボックス様のノード,つまり水平ボックス,垂直ボックス,罫線 (\cs{vrule}), +\item 水平ボックス(hbox),垂直ボックス,罫線 (\cs{vrule}), そして\textit{unset\_node}. - その\textit{id}は垂直に移動していないhboxならば\textit{id\_hlist}, + クラスタの\textit{id}は垂直に移動していないhboxならば\textit{id\_hlist}, そうでなければ\textit{id\_box\_like}となる. % %<*en> \item A glue, a kern whose subtype is not 2~(\textit{accent}), and a discretionary break. -The \textit{id} is \textit{id\_glue}, \textit{id\_kern} +The \textit{id} of the cluster is \textit{id\_glue}, \textit{id\_kern} and \textit{id\_disc}, respectively. % %<*ja> -\item グルー,subtypeが 2~(\textit{accent})ではないカーン,そして任意改行. - その\textit{id}はそれぞれ\textit{id\_glue}, \textit{id\_kern},そして +\item グルー,subtypeが 2~(\textit{accent})ではないカーン,そしてdiscretionary break. + その\textit{id} of the clusterはそれぞれ\textit{id\_glue}, \textit{id\_kern},そして \textit{id\_disc}である. % \end{enumerate} %<*en> -Let \textit{Np}, \textit{Nq} and \textit{Nr} denote a cluster. +We use \textit{Np}, \textit{Nq} and \textit{Nr} to denote a cluster. % %<*ja> 以下では\textit{Np}, \textit{Nq}, \textit{Nr}でクラスタを表す. @@ -7452,6 +7476,7 @@ $\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は,その和文文字 \item[\textit{id\_hlist}] 縦方向にシフトされていないhbox.\\ この場合,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$はそれぞれ$p$の内容を表すリストの, 先頭・末尾のノードである. +\medskip \begin{itemize} \item 状況によっては,\TeX ソースで言うと \begin{lstlisting} @@ -7889,30 +7914,6 @@ If this attempt fails, \LuaTeX-ja use the method ``\textsf{\Param{kanjiskip}~[K] そのため,「右空白」がglueであれば,その直前に \cs{penalty10000} を挿入する. \end{description} -なお,「右空白」はカーンの%,「左空白」は未定義の -\[ - \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}} -\] -のような状況を考える. -このとき,$a$,即ち「あ」の\Param{postbreakpenalty}がいかなる値であっても, -この2クラスタ間は最終的に -\begin{equation} - \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow -\Node{kern}{右空白}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}} -\label{eq-gref} -\end{equation} -となり,$a$分のペナルティは挿入されないことに注意して欲しい. -\Param{postbreakpenalty}は($a$は)殆どの場合が非負の値と考えられ,そのような場合では -\eqref{eq-gref}と -\[ - \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow -\Node{penalty}{$a$}\longrightarrow -\Node{kern}{右空白}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}} -\] -との間に差異は生じない% -\footnote{kern$\rightarrow$glueが1つの行分割可能点(行分割に伴うペナルティは0) -であるため,たとえ$a=10000$であっても,\textit{Nq}と\textit{Np}の間で行分割を禁止することはできない.}. - \paragraph{箱・グルー・カーンと和文Aの間} \textit{Np}が\textsf{箱}・グルー・カーンのいずれかで,\textit{Np}が\textsf{和文A}であった場合は, すぐ上の(\textit{Nq}と\textit{Np}の順序が逆になっている)場合と同じである. @@ -7970,6 +7971,69 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので, \end{itemize} % +%<*ja> +\section{ベースライン補正の方法} +\subsection{\texttt{yoffset} フィールド} +\Param{yalbaselineshift}等のベースライン補正は,基本的には対象となっている +\textit{glyph\_node}の \texttt{yoffset} フィールドの値を増減することによって +実装されている.なお,\texttt{yoffset} の値は上方向への移動量であるのに対し, +\Param{yalbaselineshift}などは下方向への移動量である. + +さて,\texttt{yoffset} の増減によって見かけのグリフ位置は上下に移動するが, +仮想ボディの高さ$h$,深さ$d$については +\begin{description} +\catcode`\<=12\catcode`\>=12 + \item[$\texttt{yoffset}\geq 0$のとき] +$h = \max(\texttt{height} + \texttt{yoffset}, 0)$, +$d = \max(\texttt{depth} - \texttt{yoffset}, 0)$, + \item[$\texttt{yoffset}<0$のとき] +$h = \max(\texttt{height} + \texttt{yoffset}, 0)$, $d=\texttt{depth}$. +\end{description} +という仕様になっている.つまり,\texttt{yoffset} が負(グリフを下ける)の場合に深さは増加しな +い(表\ref{tab:yoffset_and_im}参照). + +\begin{table}[t] +\caption{\texttt{yoffset} and imaginary body} +\label{tab:yoffset_and_im} +\centering\small +\fboxsep0pt +\def\T#1#2{\fcolorbox{blue}{white}{% + \setbox0=\hbox{\LARGE #1% + \directlua{ + local p = tex.nest[tex.nest.ptr].tail + p.yoffset = #2 * 65536 + }% + }% + \copy0\kern-\wd0\smash{\color{red}\vrule width \wd0 height 0.2pt depth 0.2pt}% +}} +\begin{tabular}{>{\bfseries}lccccc} +\toprule +\texttt{yoffset}&10\,pt&5\,pt&0&$-5$\,pt&$-10$\,pt\\ +\midrule +仮想ボディ&\T{y}{10}, \T{H}{10}&\T{y}{5}, \T{H}{5}&\T{y}{0}, \T{H}{0}% +&\T{y}{-5}, \T{H}{-5}&\T{y}{-10}, \T{H}{-10}\\[10pt] +\bottomrule +\end{tabular} +\end{table} + +\subsection{\textbf{ALchar}の補正} +上記の問題について,\textbf{ALchar}のベースライン補正では +「正しい深さ」を持った罫線(rule)を補うという対応策をとった. +この罫線による補正は,\textit{id}が\textit{id\_glyph}であるクラスタ単位, +大雑把に言えば音節単位で行われる. +文字列``Typeset''を +\begin{itemize} + \item フォントはLatin Modern Roman (\texttt{lmroman10-regular.otf}) 10\,pt + \item \Param{yalbaselineshift}は5\,pt +\end{itemize} +という状況で組んだ場合を例にとって説明しよう. + +\LuaTeX・\Pkg{luaotfload}によるカーニング・ハイフネーションが終わった段階では, + + + +% + %\section{Patch for the \Pkg{listings} Package} %\section{\Pkg{listings} パッケージへの対応} @@ -8508,8 +8572,9 @@ CMapが必要である. 非埋め込みの中国語・韓国語フォントを定義する場合,同様のキャッシュが生成される. キャッシュの名称,必要となるCMapについては表\ref{tab:cid-cache}を参照して欲しい. -\item[ivs\_***.lua] -フォント``\texttt{***}''における異体字情報を格納している.構造は以下の通り: +\item[extra\_***.lua] +フォント``\texttt{***}''における異体字セレクタの情報,縦組用字形への変換テーブル,そして +縦組時における幅を格納している.構造は以下の通り: % %<*en> \subsection{Use of Cache} @@ -8528,9 +8593,15 @@ if you specified \texttt{cid} key in \cs{jfont} to use other CID-keyed non-embedded fonts for Chinese or Korean, as in Page~\pageref{para-cid}. -\item[ivs\_***.lua] -This file stores the table of Unicode variants in a font ``\texttt{***}''. -The structure of the table is the following: +\item[extra\_***.lua] +This file stores the table which stores the following. +\begin{itemize} + \item unicode variants in a font ``\texttt{***}'' + \item vertical width of glyphs, if it is not equal to the sum of +the height of ascender and the depth of descender + \item vertical variants +\end{itemize} +The following is the structure of the that table. % \begin{table}[!tb] @@ -8556,16 +8627,18 @@ return { { [10955]={ -- U+2ACB "Subset Of Above Not Equal To" [65024]=983879, -- <2ACB FE00> + ["vwidth"]=0.98, -- vertical width }, [37001]={ -- U+9089 "邉" [0]=37001, -- <9089 E0100> 991049, -- <9089 E0101> ... + ["vert"]=995025, -- vertical variant }, ... }, ["chksum"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", -- checksum of the fontfile - ["version"]=4, -- version of the cache + ["version"]=2, -- version of the cache } \end{lstlisting} %<*ja> @@ -8680,8 +8753,13 @@ callbackに処理が回らない.そこで,\LuaTeX-ja では,\cs{everyhbox \cs{vbadness} を一時的に10000に変更し,hpack, vpack後に元の値に戻す」処理を行ってい る. }. - \item \cs{vsplit}によってvboxを分割した時の「残り」. + \item \cs{vsplit}によってvboxを分割した時の「残り」の先頭. \item \LuaTeX-ja読み込み前に作成したボックスの寸法を \cs{ltjsetwd} 等によって変更した時. + \item \cs{insert} によるinsertionでは,中身の先頭に\textit{direction}~whatsitは作られず, +その代わりに中身の各ボックス・罫線の直前に作られる\footnote{% + これは,ページ分割の過程でinsertionが分割される時,「現在のページで出力される部分」が空と + なることがあることによる.先頭にwhatsitを置くと,最悪でも「現在のページにwhatsitが + 残る」ことになってしまう.}. \end{itemize} なお,\verb+\vtop{...}+ の場合は,先頭にdirection whatsitを置くと ボックスの高さが常に0\,ptになるという問題が発生する.そのため,この場合に限っては @@ -8895,29 +8973,6 @@ ISO 32000-1:2008, \textit{Document management -- Portable document format -- Par \url{http://www.iso.org/iso/iso\_catalogue/catalogue_tc/catalogue\_detail.htm?csnumber=51502} \end{thebibliography} -\newpage -\appendix - -\section{Package versions used in this document} -This document was typeset using the following packages: - -\medskip - -{\makeatletter\tt\footnotesize - \def\@pkglist#1{% - \filename@parse{#1}\def\@temp{sty} - \ifx\@temp\filename@ext - \edef\reserved@a{% - \filename@base.% - \ifx\filename@ext\relax tex\else\filename@ext\fi}% - \leavevmode\hskip-13em\hbox to 13em{\filename@area\reserved@a\hss}% - \csname ver@\reserved@a\endcsname\par - \fi - }% -\parindent0pt\leftskip13em -\ltjpkglist - -\makeatother} \end{document} % %<*showexpl>