%%%%%%%%
\makeatletter
%%%%%%%%
+\directlua{if jit then jit.on() end}
-%%%%%%%% 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
+\usepackage{amsmath,array,tikz,pict2e,multienum,float}
+\usepackage{booktabs,multicol,luatexja-ruby}
+\usepackage[all]{xy}
+\usepackage{lltjext,alltt}
+%%%%%%%% fonts
+\usepackage{luatexja-otf}
+\directlua{luatexja.otf.enable_ivs()}
+\usepackage[match]{luatexja-fontspec}
+\usepackage[kozuka-pr6n]{luatexja-preset}
+\usepackage{unicode-math}
+\setmainfont[Ligatures=TeX]{Linux Libertine O}
+\setmonofont[Scale=MatchLowercase, ItalicFont=lmmono10-italic.otf,
+ BoldFont=lmmonolt10-bold.otf, BoldItalicFont=lmmonolt10-boldoblique.otf
+]{lmmono10-regular.otf}
+\setmonojfont{KozGoPr6N-Regular.otf}
+\setmathfont[Scale=MatchLowercase]{xits-math.otf}
+\setsansfont[Scale=MatchLowercase,Ligatures=TeX]{Linux Biolinum O}
+%<*ja>
+\def\emph#1{\textbf{\textgt{#1}}}
+\def\headfont{\normalfont\bfseries\gtfamily}\normalsize
+%</ja>
%<*en>
+\frenchspacing
\usepackage[margin=25mm,lmargin=30mm,rmargin=30mm,footskip=6mm]{geometry}
\usepackage{luatexja-adjust}\ltjdisableadjust
\parskip=\smallskipamount
\advance\leftmargini-1\zw\advance\leftmarginii-1\zw
%</ja>
-\usepackage{amsmath,array,tikz,pict2e,multienum,float}
-\usepackage{booktabs,multicol,luatexja-ruby}
-\usepackage{xy,lltjext}
-
%%%%%%%% listings
%%%%%%%% IVS
% Suppress output from showexpl to stdout.
\let\SX@Info\relax
+%%%%%%%% colors
+%% modified from http://jfly.iam.u-tokyo.ac.jp/colorset/
+\usepackage{transparent}
+\definecolor{red}{rgb}{1, 0.16, 0}
+\definecolor{blue}{rgb}{0, 0.25, 1}
+\definecolor{gray}{rgb}{.50, .53, .56}
+\definecolor{green}{rgb}{.21, .63, .42}
+\definecolor{cyan}{rgb}{0.40, .80, 1}
+\definecolor{b_gray}{rgb}{0.78, 0.78, 0.80}
+\definecolor{b_pink}{rgb}{1, 0.82, 0.82}
+\definecolor{b_green}{rgb}{.53, .91, .69}
+\definecolor{b_cyan}{rgb}{0.70, .92, 98}
+
%%%%%%%% hyperref
\usepackage{hyperref,bookmark}
%<*en>
%<en>\newtheorem{defn}{Definition}
%<ja>\newtheorem{defn}{定義}
-%%%%%%%% fonts
-\usepackage{luatexja-otf}
-%<ja>\usepackage{lmodern}
-\directlua{luatexja.otf.enable_ivs()}
-\usepackage[match]{luatexja-fontspec}
-\usepackage[kozuka-pr6n]{luatexja-preset}
-\setmonojfont{KozGoPr6N-Regular.otf}
-%<*ja>
-\def\emph#1{\textbf{\textgt{#1}}}
-\def\headfont{\normalfont\bfseries\gtfamily}
-\usepackage{amssymb}
-%</ja>
-%<*en>
-\usepackage{unicode-math}
-\setmainfont[Ligatures=TeX]{TeX Gyre Termes}
-\setsansfont[Scale=0.95,Ligatures=TeX]{TeX Gyre Heros}
-\setmathfont{xits-math.otf}
-\frenchspacing
-%</en>
-
%%%%%%%% logo
\usepackage{metalogo}
\DeclareRobustCommand\eTeX{\ensuremath{\varepsilon}-\kern-.125em\TeX}
\DeclareRobustCommand\upTeX{up\kern-.15em\TeX}
\DeclareRobustCommand\pLaTeX{p\kern-.05em\LaTeX}
\DeclareRobustCommand\pLaTeXe{p\kern-.05em\LaTeXe}
-\DeclareRobustCommand\epTeX{\ensuremath{\varepsilon}-\kern-.125em\pTeX}
+\DeclareRobustCommand\epTeX{\ensuremath{\varepsilon}-\pTeX}
%%%%%%%% other macros
\newlist{cslist}{description}{1}
\vskip\belowcaptionskip}
\def\_{\leavevmode \kern .06em\vbox {\hrule \@width .333em}}
-\def\cs#1{\texttt{\upshape\textbackslash #1}}
+\def\cs#1{\texttt{\upshape\textbackslash\ltjsetparameter{autoxspacing=false}#1}}
%%%%%%%%
\makeatother
%%%%%%%%
\def\Node#1#2{\,\vcenter{\hbox{\fboxsep=1pt\fbox{\vbox{\small\halign{\hfil##\hfil\cr
- #1\mathstrut\cr\noalign{\hrule height.4pt}\strut#2\cr}}}}\,}}
+ #1\mathstrut\cr\noalign{\vskip1pt\hrule height.4pt\vskip1pt}\strut#2\cr}}}}}\,}
+\def\HNode#1#2#3#4{\,\vcenter{\hbox{\fboxsep=1pt\fbox{\vbox{\small\halign{\hfil##\hfil\cr
+ #1\mathstrut\cr\noalign{\vskip1pt\hrule height.4pt\vskip1pt}%
+ width:\hfill\ #2\cr height:\hfill\ #3\cr depth:\hfill\ #4\cr
+ }}}}}\,}
\protected\def\Param#1{\hyperlink{fld:#1}{\textsf{#1}}} % parameter name
\protected\def\DParam#1{\hypertarget{fld:#1}{\textsf{#1}}} % parameter name (definition)
ASCII \pTeX やそれの拡張物が用いられることが一般的であった.\pTeX は\TeX
のエンジン拡張であり,(少々仕様上不便な点はあるものの)商業印刷の分野に
も用いられるほどの高品質な日本語組版を可能としている.だが,それは弱点に
-ã\82\82ã\81ªã\81£ã\81¦ã\81\97ã\81¾ã\81£ã\81\9fï¼\9a\pTeX という(組版的に)満足なものがあったため,海外で
+ã\82\82ã\81ªã\81£ã\81¦ã\81\97ã\81¾ã\81£ã\81\9fï¼\8e\pTeX という(組版的に)満足なものがあったため,海外で
行われている数々の\TeX の拡張――例えば\eTeX や\pdfTeX ――や,TrueType,
OpenType, Unicodeといった計算機で日本語を扱う際の状況の変化に追従すること
を怠ってしまったのだ.
%<*en>
The \LuaTeX-ja package is under much influence of \pTeX\ engine. The initial
-target of development was to implement features of \pTeX. However,
-\emph{\LuaTeX-ja is not a just porting of \pTeX; unnatural
+target of development was to implement features of \pTeX. However,
+implementing all feature of \pTeX\ is impossible,
+since all process of \LuaTeX-ja must be implemented only by Lua and \TeX\ macros.
+Hence \emph{\LuaTeX-ja is not a just porting of \pTeX; unnatural
specifications/behaviors of \pTeX\ were not adopted}.
%</en>
%<*ja>
\LuaTeX-jaは,\pTeX に多大な影響を受けている.初期の開発目標は,\pTeX の機
-能をLuaコードにより実装することであった.しかし,開発が進むにつれ,\pTeX
+能をLuaコードにより実装することであった.しかし,(\pTeX はエンジン拡張であったのに対し)
+\LuaTeX-jaはLuaコードと\TeX マクロを用いて全てを実装していなければならないため,\pTeX
の完全な移植は不可能であり,また\pTeX における実装がいささか不可解になっ
ているような状況も発見された.そのため,\emph{\LuaTeX-jaは,もはや
\pTeX の完全な移植は目標とはしない.\pTeX における不自然な仕様・挙動があ
%</ja>
%<*en>
-The followings are major changes from \pTeX:
+The followings are major changes from \pTeX.
+For more detailed information, see Part~\ref{part-imp} or other sections of this manual.
%</en>
%<*ja>
以下は \pTeX からの主な変更点である.
+より詳細については第\ref{part-imp}部など本文書の残りを参照.
%</ja>
-\begin{itemize}
%<*en>
-\item A Japanese font is a tuple of a ``real'' font, a Japanese font
- metric (\emph{JFM}, for short).
+\paragraph{Command names} \pTeX\ addes several primitives, such as \cs{kanjiskip},
+\cs{prebreakpenalty},~and,~\cs{ifydir}. They can be used as follows:
+%</en>
+%<*ja>
+\paragraph{命令の名称} 例えば\pTeX で追加された次のようなプリミティブ
+%</ja>
+\begin{verbatim}
+\kanjiskip=10pt \dimen0=kanjiskip
+\tbaselineshift=0.1zw
+\dimen0=\tbaselineshift
+\prebreakpenalty`ぁ=100
+\ifydir ... \fi
+\end{verbatim}
+%<en> However, we cannot use them under \LuaTeX-ja.
+%<en> Instead of them, we have to write as the following.
+%<ja> は\LuaTeX-jaには存在しない.\LuaTeX-jaでは以下のように記述することになる.
+\begin{verbatim}
+\ltjsetparameter{kanjiskip=10pt} \dimen0=\ltjgetparameter{kanjiskip}
+\ltjsetparameter{talbaselineshift=0.1\zw}
+\dimen0=\ltjgetparameter{talbaselineshift}
+\ltjsetparameter{prebreakpenalty={`ぁ,100}}
+\ifnum\ltjgetparemeter{direction}=4 ... \fi
+\end{verbatim}
+%<*en>
+Note that \pTeX\ adds new two useful units, namely \texttt{zw}~and~\texttt{zh}.
+As shown above, they are changed by \cs{zw}~and~\cs{zh} respectively, in \LuaTeX-ja.
%</en>
%<*ja>
-\item 和文フォントは(小塚明朝,IPA明朝などの)実際のフォント,和文フォン
- トメトリック(JFMと呼ぶ\footnote{混乱を防ぐため,p\TeX の意味での
- JFM (\texttt{min10.tfm}) などは本ドキュメントでは\emph{和文用
- TFM}とよぶことにする.})の組である.
+特に注意してほしいのは,\pTeX で追加された \texttt{zw} と \texttt{zh} という単位を
+\LuaTeX-ja で扱うには,\cs{zw}, \cs{zh} と制御綴の形にしないといけないという点である.
%</ja>
%<*en>
-\item In \pTeX, a line break after Japanese character is ignored (and
+\paragraph{Linebreak after a Japanese character}
+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}.
%</en>
%<*ja>
-\item 日本語の文書中では改行はほとんどどこでも許されるので,\pTeX では和文文字
+\paragraph{和文文字直後の改行}
+日本語の文書中では改行はほとんどどこでも許されるので,\pTeX では和文文字
直後の改行は無視される(スペースが入らない)ようになっていた.しかし,
\LuaTeX-ja では \LuaTeX の仕様のためにこの機能は完全には実装されていない.
+ 詳しくは\ref{sec-lbreak}章を参照.
%</ja>
%<*en>
-\item The insertion process of glues/kerns between two Japanese
+
+\paragraph{Spaces related to Japanese characters}
+The insertion process of glues/kerns between two Japanese
characters and between a Japanese character and other characters
(we refer glues/kerns of both kinds as \textbf{JAglue}) is rewritten from
scratch.
%</en>
%<*ja>
-\item 2つの和文文字の間や,和文文字と欧文文字の間に入るグルー/カーン
+\paragraph{和文関連の空白}
+2つの和文文字の間や,和文文字と欧文文字の間に入るグルー/カーン
(両者をあわせて\textbf{JAglue}と呼ぶ)の挿入処理が0から書き直されている.
%</ja>
\begin{itemize}
%<*en>
-\item As \LuaTeX's internal ligature handling is ``node-based''
+\item As \LuaTeX's internal ligature handling is \emph{node-based}
(\textit{e.g.}, \verb+of{}fice+ doesn't prevent ligatures), the
- insertion process of \textbf{JAglue} is now ``node-based''.
+ insertion process of \textbf{JAglue} is now \emph{node-based}.
%</en>
%<*ja>
\item \LuaTeX の内部での合字の扱いは「ノード」を単位として行われるようになっている(例えば,
\item \emph{注意:上の2つの変更により,従来\textbf{JAglue}の挿入処理を分断するのに
使われていたいくつかの方法は用いることができない.具体的には,次の方法はもはや無効である:}
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
ちょ{}っと ちょ\/っと
-\end{verbatim}
+\end{lstlisting}
%<*en>
If you want to do so, please put an empty horizontal box (hbox) between it instead:
%</en>
%<*ja>
もし同じことをやりたければ,空の水平ボックス(hbox)を間に挟めばよい:
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
ちょ\hbox{}っと
-\end{verbatim}
-
+\end{lstlisting}
%<*en>
\item In the process, two Japanese fonts which only differ in their ``real''
%</ja>
\end{itemize}
+%<*en>
+\paragraph{Directions}
+From this version, \LuaTeX-ja supports vertical writing;
+but this feature must \emph{not} be confused with $\Omega$-style direction support of \LuaTeX\
+itself. ...
+%</en>
%<*ja>
-\item \LuaTeX-jaでは,\pTeX と同様に漢字・仮名を制御綴内に用いることができ,
-\cs{西暦} などが正しく動作するようにしている.
-但し,制御綴中に使える和文文字が\pTeX・\upTeX と全く同じではないことに注意すること.
-%</ja>
-
-%<*ja>
-\item ****版からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている.
-\LuaTeX のコールバックの制限などにより,特に異なった組方向のボックスを扱う場合には
-仕様が異なるので注意すること.
+\paragraph{組方向}
+本版からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている.
+なお,\LuaTeX 本体も,$\Omega$流の組方向をサポートしているが,それとは全くの別物であること
+に注意してほしい.
+\LuaTeX のコールバックや実装により,特に異なった組方向のボックスを扱う場合には
+\cs{wd}, \cs{ht}, \cs{dp}等の仕様が異なるので注意.詳細は第\ref{sec-direction}章を参照.
%</ja>
-\end{itemize}
%<*en>
-For detailed information, see Part~\ref{part-imp}.
+\paragraph{\cs{discretionary}}
+Japanese characters in discretionary break (\cs{discretionary}) is not supported.
%</en>
%<*ja>
-詳細については第\ref{part-imp}部を参照.
+\paragraph{\cs{discretionary}}
+ \cs{discretionary} 内に直接和文文字を記述することは,\pTeX においても想定されていなかった
+ 感があるが.\LuaTeX-jaにおいても想定していない.和文文字をどう
+ しても使いたい場合は \cs{hbox} で括ること.
%</ja>
+
+
%<en>\subsection{Notations}
%<ja>\subsection{用語と記法}
(see Subsection~\ref{ssec-setrange}).
%</en>
%<*ja>
-\item 文字は次の2種類に分けられる.この類別はユーザが後から変更可能である
+\item 文字は次の2種類に分けられる.この類別は固定されているものではなく,ユーザが後から変更可能である
(\ref{ssec-setrange}節を参照).
%</ja>
\begin{itemize}
%<*en>
-\item \textbf{JAchar}: standing for characters which used in Japanese typesetting,
+\item \textbf{JAchar}: standing for characters which is used in Japanese typesetting,
such as Hiragana,~Katakana, Kanji, and~other Japanese punctuation marks.
%</en>
%<*ja>
%<en>\subsection{Installation}
%<ja>\subsection{インストール}
-%<en>To install the \LuaTeX-ja\ package, you will need:
-%<ja>\LuaTeX-jaパッケージのインストールには,次のものが必要である.
+%<en>The following packages are needed for the \LuaTeX-ja\ package.
+%*ja>\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\ beta-0.80.0 (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 \Pkg{fontspec} v2.4
+%<en>\item \emph{IPAex fonts} (\url{http://ipafont.ipa.go.jp/})
+%<ja>\item \emph{IPAexフォント(\url{http://ipafont.ipa.go.jp/})}
\end{itemize}
+%<en>In summary, this version of \LuaTeX-ja no longer supports \TeX~Live~2014 (or older version).
+%<*ja>
+要約すると,本バージョンの\LuaTeX-jaは\TeX~Live~2014以前では動作しない\footnote{%
+ もっとも,自分で\LuaTeX のバイナリをSubversionリポジトリからビルドしていれば話は別である.
+}.
+%</ja>
%<*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.}
-
-\medskip
-
-Now \LuaTeX-ja is available from the following archive and distributions:
+Now \LuaTeX-ja is available from
+CTAN (in the \texttt{macros/luatex/generic/luatexja} directory), and
+the following distributions:
\begin{itemize}
- \item CTAN (in the \texttt{macros/luatex/generic/luatexja} directory)
\item MiK\TeX\ (in \texttt{luatexja.tar.lzma}); see the next subsection
\item \TeX\ Live (in \texttt{texmf-dist/tex/luatex/luatexja})
\item W32\TeX\ (in \texttt{luatexja.tar.xz})
\end{itemize}
-
-If you are using \TeX~Live~2014, you can install \LuaTeX-ja
-from \TeX~Live manager (\texttt{tlmgr}):
-\begin{verbatim}
-$ tlmgr install luatexja
-\end{verbatim}
+IPAex fonts are also available in these distributions.
%</en>
%<*ja>
-\emph{本バージョンの\LuaTeX-jaは\TeX~Live~2012以前では動作しない.}
-これは,\LuaTeX と\Pkg{luaotfload}が\TeX~Live~2013において更新されたことによる.
-
-\medskip
-
-現在,\LuaTeX-jaは以下のアーカイブ,およびディストリビューションに収録されている:
+現在,\LuaTeX-jaはCTAN (\texttt{macros/luatex/generic/luatexja})に収録されている他,
+以下のディストリビューションにも収録されている:
\begin{itemize}
- \item CTAN (\texttt{macros/luatex/generic/luatexja})
\item MiK\TeX\ (\texttt{luatexja.tar.lzma})
\item \TeX\ Live (\texttt{texmf-dist/tex/luatex/luatexja})
\item W32\TeX\ (\texttt{luatexja.tar.xz})
\end{itemize}
-
-例えば\TeX~Live~2014を利用しているなら,\LuaTeX-jaは\TeX~Live manager (\texttt{tlmgr})を
-使ってインストールすることができる.
-\begin{verbatim}
-$ tlmgr install luatexja
-\end{verbatim}
+これらのディストリビューションはIPAexフォントも収録している.
+W32\TeX においてはIPAexフォントは \texttt{luatexja.tar.xz} 内にある.
%</ja>
+% %<*ja>
+% 例えば\TeX~Live~2015を利用しているなら,\LuaTeX-jaは\TeX~Live manager (\texttt{tlmgr})を
+% 使ってインストールすることができる.
+% \begin{lstlisting}
+% $ tlmgr install luatexja
+% \end{lstlisting}
+% %</ja>
+% %<*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}
+% %</en>
+
%<en>\paragraph{Manual installation}
%<ja>\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:
-\begin{verbatim}
+\item Clone the Git repository:
+\begin{lstlisting}
$ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git
-\end{verbatim}
+\end{lstlisting}
\item Download the \texttt{tar.gz} archive of HEAD in the \texttt{master} branch from
\begin{flushleft}
\url{http://git.sourceforge.jp/view?p=luatex-ja/luatexja.git;a=snapshot;h=HEAD;sf=tgz}.
the forefront of development is not the \texttt{master} branch.
%</en>
%<*ja>
-\item ã\82½ã\83¼ã\82¹ã\82¢ã\83¼ã\82«ã\82¤ã\83\96ã\82\92以ä¸\8bã\81®ã\81\84ã\81\9aã\82\8cã\81\8bã\81®æ\96¹æ³\95ã\81§å\8f\96å¾\97ã\81\99ã\82\8bï¼\8eç\8f¾å\9c¨å\85¬é\96\8bã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81®ã\81¯ã\81\82ã\81\8fã\81¾ã\81§ã\82\82
+\item ソースを以下のいずれかの方法で取得する.現在公開されているのはあくまでも
開発版であって,安定版でないことに注意.
\begin{itemize}
-\item Gitã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\81®å\86\85容ã\82\92ã\82³ã\83\94ã\83¼する:
-\begin{verbatim}
+\item Gitã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\82\92ã\82¯ã\83ã\83¼ã\83³する:
+\begin{lstlisting}
$ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git
-\end{verbatim}
+\end{lstlisting}
\item \texttt{master}ブランチのスナップショット(\texttt{tar.gz}形式)をダウンロードする.
\begin{flushleft}
\url{http://git.sourceforge.jp/view?p=luatex-ja/luatexja.git;a=snapshot;h=HEAD;sf=tgz}.
But only the contents in \texttt{src/} are needed to work \LuaTeX-ja.
%</en>
%<*ja>
-\item ã\80\8cGitã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\82\92ã\82³ã\83\94ã\83¼」以外の方法でアーカイブを取得したならば,それを展開する.
+\item ã\80\8cGitã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\82\92ã\82¯ã\83ã\83¼ã\83³」以外の方法でアーカイブを取得したならば,それを展開する.
\texttt{src/}をはじめとしたいくつかのディレクトリができるが,
動作には\texttt{src/}以下の内容だけで十分.
%</ja>
格納した \texttt{ltj-kinsoku.lua} を生成するために,
以下を実行する必要がある:
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
$ cd src
$ lualatex ltjclasses.ins
$ lualatex ltjsclasses.ins
$ lualatex ltjltxdoc.ins
$ luatex ltj-kinsoku_make.tex
-\end{verbatim}
+\end{lstlisting}
%<*en>
-Note that \texttt{*.\{dtx,ins\}} and \texttt{ltj-kinsoku\_make.tex} are not needed in regular use.
+\emph{Do not forget The last line (processing \texttt{ltj-kinsoku\_make.tex})}.
+\texttt{*.\{dtx,ins\}} and \texttt{ltj-kinsoku\_make.tex} used here are not needed in regular use.
%</en>
%<*ja>
+\emph{最後の \texttt{ltj-kinsoku\_make.tex} の実行を忘れないように注意}.
ここで使用した \texttt{*.\{dtx,ins\}} と \texttt{ltj-kinsoku\_make.tex} は
通常の使用にあたっては必要ない.
%</ja>
%</en>
%<*ja>
\item \texttt{src}の中身を自分の\texttt{TEXMF}ツリーにコピーする.
- 場所の例としては,例えば\texttt{TEXMF/tex/luatex/luatexja/}がある.
+ 場所の例としては,例えば
+\begin{quote}
+ \texttt{TEXMF/tex/luatex/luatexja/}
+\end{quote}
+ がある.
シンボリックリンクが利用できる環境で,かつリポジトリを直接取得したのであれば,
(更新を容易にするために)コピーではなくリンクを貼ることを勧める.
%</ja>
\item If \texttt{mktexlsr} is needed to update the file name database, make it so.
%</en>
%<*ja>
-\item 必要があれば,\texttt{mktexlsr}を実行する.
+\item 必要があれば,\texttt{mktexlsr} を実行する.
%</ja>
\end{enumerate}
-%<en>\subsection{Cautions}
-%<ja>\subsection{注意点}
-
+%<*en>
+\subsection{Cautions}
+For changes from \pTeX, see Subsection~\ref{ssec:chgptex}.
+%</en>
+%<*ja>
+\subsection{注意点}
+\pTeX からの変更点として,\ref{ssec:chgptex}節も熟読するのが望ましい.
+ここでは一般的な注意点を述べる.
+%</ja>
\begin{itemize}
%<*en>
\item The encoding of your source file must be UTF-8. No other
%</ja>
\item%
%<*en>
-\textbf{Note for MiK\TeX\ users}\quad
+\textbf{Outdated note for MiK\TeX\ users}\quad
\LuaTeX-ja requires that several CMap files%
\footnote{\texttt{UniJIS2004-UTF32-\{H,V\}} and \texttt{Adobe-Japan1-UCS2}.}
must be found from \LuaTeX.
\LuaTeX-jaが動作するためには,\emph{導入・更新後の初回起動時に}
\texttt{UniJIS2004-UTF32-\{H,V\}}, \texttt{Adobe-Japan1-UCS2}という3つのCMapが
\LuaTeX によって見つけられることが必要である.
-しかしMiK\TeX ではそのようになっていないので,次のエラーが発生するだろう:
+しかしやや古いMiK\TeX ではそのようになっていないので,次のエラーが発生するだろう:
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
! LuaTeX error ...iles (x86)/MiKTeX 2.9/tex/luatex/luatexja/ltj-rmlgbm.lua
bad argument #1 to 'open' (string expected, got nil)
-\end{verbatim}
+\end{lstlisting}
%<*en>
If so, please execute a batch file which is written on
%<en>To use \LuaTeX-ja in plain \TeX, simply put the following at the beginning of the document:
%<ja>\LuaTeX-jaを plain \TeX で使うためには,単に次の行をソースファイルの冒頭に追加すればよい:
-\begin{verbatim}
+\begin{lstlisting}
\input luatexja.sty
-\end{verbatim}
+\end{lstlisting}
%<en>This does minimal settings (like \texttt{ptex.tex}) for typesetting Japanese documents:
%<ja>これで(\texttt{ptex.tex}のように)日本語組版のための最低限の設定がなされる:
\begin{tabular}{cccccc}
\toprule
\textbf{direction}&
-\textbf{classification}&\textbf{font name}&\bf `10\,pt'&\bf`7\,pt'&\bf`5\,pt'\\\midrule
+\textbf{classification}&\textbf{font name}&\bf ``10\,pt''&\bf``7\,pt''&\bf``5\,pt''\\\midrule
\smash{\raisebox{-1ex}{\emph{yoko} (horizontal)}}&
-\emph{mincho}&Ryumin-Light &\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\
-&\emph{gothic}&GothicBBB-Medium&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\
+\emph{mincho}&IPAex Mincho&\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\
+&\emph{gothic}&IPAex Gothic&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\
\midrule
\smash{\raisebox{-1ex}{\emph{tate} (vertical)}}&
-\emph{mincho}&Ryumin-Light &\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\
-&\emph{gothic}&GothicBBB-Medium&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\
+\emph{mincho}&IPAex Mincho&\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\
+&\emph{gothic}&IPAex Gothic&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\
\bottomrule
\end{tabular}
\end{center}
\begin{center}\small
\begin{tabular}{cccccc}
\toprule
-\emph{組方向}&\emph{字体}&\emph{フォント名}&\bf `10\,pt'&\bf`7\,pt'&\bf`5\,pt'\\\midrule
+\emph{組方向}&\emph{字体}&\emph{フォント名}&\bf ``10\,pt''&\bf``7\,pt''&\bf``5\,pt''\\\midrule
\smash{\raisebox{-1ex}{横組}}&
-明朝体&Ryumin-Light &\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\
-&ゴシック体&GothicBBB-Medium&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\
+明朝体&IPAex明朝&\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\
+&ゴシック体&IPAexゴシック&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\
\midrule
\smash{\raisebox{-1ex}{縦組}}&
-明朝体&Ryumin-Light &\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\
-&ゴシック体&GothicBBB-Medium&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\
+明朝体&IPAex明朝&\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\
+&ゴシック体&IPAexゴシック&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\
\bottomrule
\end{tabular}
\end{center}
%</ja>
\begin{itemize}
%<*en>
-\item It is widely accepted that fonts ``Ryumin-Light'' and
- ``GothicBBB-Medium'' aren't embedded into PDF files, and a PDF reader
- substitute them by some external Japanese fonts (\textit{e.g.},
- Ryumin-Light is substituted with Kozuka Mincho in Adobe Reader).
- We adopt this custom to the default setting.
+\item With \texttt{luatexja.cfg}, one can use other fonts
+as ``default'' Japanese fonts (Subsection~\ref{ssec-cfg}).
%</en>
%<*ja>
-\item ``Ryumin-Light''と``GothicBBB-Medium''はPDFファイルに埋め込まずに
- 名前参照のみで用いることが広く受け入れられており,この場合PDFリーダーが
- 適切な外部フォントで代用する(例えば,Adobe ReaderではRyumin-Lightは
- 小塚明朝で代替される).そこで,これらを引き続きデフォルトのフォントと
- して採用する.
+\item \texttt{luatexja.cfg} を用いることによって,標準和文フォントを
+IPAexフォントから別のフォントに置き換えることができる.\ref{ssec-cfg}節を参照.
%</ja>
%<*en>
%<ja>\subsection{\LaTeX で使う}
\label{ssec-ltx}
-\paragraph{\LaTeXe}
-
%<*en>
Using in \LaTeXe\ is basically same. To set up the minimal environment
for Japanese, you only have to load \texttt{luatexja.sty}:
\LaTeXe を用いる場合も基本的には同じである.日本語組版のための最低限の環境を
設定するためには,\texttt{luatexja.sty}を読み込むだけでよい:
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
\usepackage{luatexja}
-\end{verbatim}
+\end{lstlisting}
%<*en>
It also does minimal settings (counterparts in \pLaTeX\ are \texttt{%
plfonts.dtx} and \texttt{pldefs.ltx}):
\begin{center}\small
\begin{tabular}{ccccc}
\toprule
-\textbf{classification}&\textbf{family name}&\cs{mdseries}&\cs{bfseries}&\textbf{scale}\\\midrule
-\emph{mincho} (明朝体)&\tt mc&Ryumin-Light &GothicBBB-Medium&0.962216\\
-\emph{gothic} (\textgt{ゴシック体})&\tt gt&GothicBBB-Medium&GothicBBB-Medium&0.962216\\
+\textbf{classification}&\textbf{family}&\cs{mdseries}&\cs{bfseries}&\textbf{scale}\\\midrule
+\emph{mincho} (明朝体)&\tt mc&IPAex Mincho&IPAex Gothic&0.962216\\
+\emph{gothic} (\textgt{ゴシック体})&\tt gt&IPAex Gothic&IPAex Gothic&0.962216\\
\bottomrule
\end{tabular}
\end{center}
-Note that the bold series in both family are same as the medium series of \emph{gothic} family.
-This is a convention in \pLaTeX. This is trace that there were only 2~fonts (these are Ryumin-Light
-and GothicBBB-Medium) in early years of DTP. There is no italic nor slanted shape for
+Note that the bold series in both family are same as the medium series of \emph{gothic}
+ family. There is no italic nor slanted shape for
these \texttt{mc}~and~\texttt{gt}.
%</en>
%<*ja>
\begin{tabular}{ccccc}
\toprule
\emph{字体}&\emph{ファミリ}&\cs{mdseries}&\cs{bfseries}&\emph{スケール}\\\midrule
-明朝体&\tt mc&Ryumin-Light &GothicBBB-Medium&0.962216\\
-ゴシック体&\tt gt&GothicBBB-Medium&GothicBBB-Medium&0.962216\\
+明朝体&\tt mc&IPAex明朝&IPAexゴシック&0.962216\\
+ゴシック体&\tt gt&IPAexゴシック&IPAexゴシック&0.962216\\
\bottomrule
\end{tabular}
\end{center}
どちらのファミリにおいても,そのboldシリーズで使われるフォントは
-ゴシック体のmediumシリーズで使われるフォントと同じあることに注意.
-これは初期のDTPにおいて和文フォントが2つ(それがちょうど\
-Ryumin-Light, GothicBBB-Mediumだった)しか利用できなかった時の名残であり,\pLaTeX{}
-での標準設定とも同じである.
+ゴシック体のmediumシリーズで使われるフォントと同じであることに注意.
+また,どちらのファミリでもイタリック体・スラント体は定義されない.
%</ja>
-
%<en>\item Japanese characters in math mode are typeset by the font family \texttt{mc}.
%<ja>\item 数式モード中の和文文字は明朝体(\texttt{mc})で出力される.
+
+%<*en>
+\item If you use the \Pkg{beamer} class with the default font theme (which uses sans serif
+ fonts) and with \LuaTeX-ja, you might want to change default Japanese fonts to
+ \emph{gothic} family. The following line changes the default Japanese font family
+ to \emph{gothic}:
+%</en>
+%<*ja>
+\item \Pkg{beamer}クラスを既定のフォント設定で使う場合,既定欧文フォントがサンセリフなの
+ で,既定和文フォントもゴシック体にしたいと思うかもしれない.その場合はプリアンブルに
+次を書けばよい:
+%</ja>
+\begin{lstlisting}
+ \renewcommand{\kanjifamilydefault}{\gtdefault}
+\end{lstlisting}
+
+
\end{itemize}
%<*en>
がそれぞれ用意されている.
%</ja>
+%<*ja>
+\paragraph{脚注とボトムフロートの出力順序}
+オリジナルの\LaTeX では脚注がボトムフロートの上に来るようになっており,
+\pLaTeX では脚注がボトムフロートの下に来るように変更されている.
+
+\LuaTeX-jaでは「欧文クラスの中にちょっとだけ日本語を入れる」という利用も考慮し,
+脚注とボトムフロートの順序は\LaTeX 通りとした.もし\pLaTeX の出力順序が好みならば,
+\Pkg{stfloats}パッケージを利用して
+\begin{lstlisting}
+ \usepackage{stfloats}\fnbelowfloat
+\end{lstlisting}
+のようにすればよい.\Pkg{footmisc}パッケージを \texttt{bottom}\ オプションを指定して
+読み込むという方法もあるが,それだとボトムフロートと脚注の間が開いてしまう.
+%</ja>
+%%% ↑は英訳しない
+
+%<*en>
+\paragraph{\Pkg{geometry} package and classes for vertical writing}
+It is well-known that the \Pkg{geometry} package produces the following error, when classes for
+vertical writing is used:
+%</en>
+%<*ja>
+\paragraph{縦組での\Pkg{geometry}パッケージ}
+\pLaTeX の縦組用標準クラスファイルでは\Pkg{geometry}パッケージを利用することは出来ず,
+%</ja>
+\begin{lstlisting}
+! Incompatible direction list can't be unboxed.
+\@begindvi ->\unvbox \@begindvibox
+ \global \let \@begindvi \@empty
+\end{lstlisting}
+%<*en>
+Now, \LuaTeX-ja automatically applies the patch \Pkg{lltjp-geometry} to the
+\Pkg{geometry} package, when the direction of the document is \emph{tate} (vertical
+writing).
+This patch \Pkg{lltjp-geometry} also can be used in \pLaTeX; for the detail, please refer
+\url{lltjp-geometry.pdf}~(Japanese).
+%</en>
+%<*ja>
+というようなエラーが発生することが知られている.
+\LuaTeX-jaでは, \texttt{ltjtarticle.cls} といった縦組クラスの下でも
+\Pkg{geometry}パッケージが利用できるようにパッチ\Pkg{lltjp-geometry}パッケージを自動的に当てている.
+
+なお,\Pkg{lltjp-geometry}パッケージは\pTeX 系列でも明示的に読み込むことによって
+使用可能である.詳細や注意事項は \url{lltjp-geometry.pdf} を参照のこと.
+%</ja>
+
+
%<en>\section{Changing Fonts}
%<ja>\section{フォントの変更}
For \LaTeXe, \LuaTeX-ja adopted most of the font selection system of \pLaTeXe\ (in \texttt{plfonts.dtx}).
%</en>
%<*ja>
-\LaTeXe については,\LuaTeX-jaではフォント選択システムを\pLaTeXe\ (\texttt{plfonts.dtx})
-の大部分をそのまま採用している.
+\LaTeX で用いる際には,\pLaTeXe\ (\texttt{plfonts.dtx})用のフォント選択機構の大部分を流用している.
%</ja>
\begin{itemize}
%<*en>
attributes of Japanese fonts.
%</en>
%<*ja>
-\item \cs{fontfamily}, \cs{fontseries}, \cs{fontshape}, そして
- \cs{selectfont} が和文フォントの属性を変更するために使用できる.
+\item 和文フォントの属性を変更するには,\cs{fontfamily}, \cs{fontseries}, \cs{fontshape},
+ そしてそれらを反映させるために \cs{selectfont} を用いればよい.
%</ja>
%<*en>
\verb+\fontencoding{+<encoding>\verb+}+ changes the encoding of alphabetic fonts
or Japanese fonts depending on the argument. For example,
\verb+\fontencoding{JY3}+ changes the encoding of Japanese fonts to
- \texttt{JY3},and \verb+\fontencoding{T1}+ changes the encoding of
+ \texttt{JY3}, and \verb+\fontencoding{T1}+ changes the encoding of
alphabetic fonts to \texttt{T1}.
\cs{fontfamily} also changes the current Japanese font family,
the current alphabetic font family, \emph{or both}.
実装では \cs{DeclareFontFamily} を用いても問題は生じない.
\item 和文フォントのシェイプを定義するには,通常の \cs{DeclareFontShape} を使えば良い:
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
\DeclareFontShape{JY3}{mc}{bx}{n}{<-> s*KozMinPr6N-Bold:jfm=ujis;-kern}{}
% Kozuka Mincho Pr6N Bold
-\end{verbatim}
+\end{lstlisting}
%<*ja>
仮名書体を使う場合など,複数の和文フォントを組み合わせて使いたい場合は
\ref{ssec-altfont}節の \cs{ltjdeclarealtfont} と,その\LaTeX 版の\
\cs{DeclareAlternateKanjiFont}(\ref{ssec-nfsspat}節)を参照せよ.
%</ja>
+
\end{itemize}
%<*en>
\label{ssec-fontspec}
%<*en>
To coexist with the \Pkg{fontspec} package, it is needed to load
-\Pkg{luatexja-fontspec} package in the preamble, as follows:
+the \Pkg{luatexja-fontspec} package in the preamble, as follows:
\begin{quote}
\ttfamily \textbackslash usepackage[<options>]\{luatexja-fontspec\}
\end{quote}
This \Pkg{luatexja-fontspec} package
automatically loads \Pkg{luatexja} and \Pkg{fontspec}
-package, if needed.
+packages, if needed.
%</en>
%<*ja>
\Pkg{fontspec}パッケージと同様の機能を和文フォントに対しても用いる場合,
-\Pkg{luatexja-fontspec}ã\83\91ã\83\83ã\82±ã\83¼ã\82¸ã\82\92èªã\81¿è¾¼ã\82\80ï¼\9a
+\Pkg{luatexja-fontspec}ã\83\91ã\83\83ã\82±ã\83¼ã\82¸ã\82\92èªã\81¿è¾¼ã\82\81ã\81°ã\82\88ã\81\84ï¼\8e
\begin{quote}
\ttfamily \textbackslash usepackage[<options>]\{luatexja-fontspec\}
\end{quote}
%</ja>
%<*en>
-In \Pkg{luatexja-fontspec} package, the following seven~commands are defined as
+In the \Pkg{luatexja-fontspec} package, the following seven~commands are defined as
counterparts of original commands in the \Pkg{fontspec} package:
%</en>
%<*ja>
(that is, \texttt{kern} feature is set off) by default in these seven (or~eight) commands.
This is because of the compatibility with previous versions of \LuaTeX-ja
(see \ref{para-kern}).
+
+Below is an example of \cs{jfontspec}.
%</en>
%<*ja>
\Pkg{luatexja-fontspec} パッケージのオプションは以下の通りである:
また,これらの和文用のコマンドではフォント内のペアカーニング情報は標準では使用されない,
言い換えれば \texttt{kern} featureは標準では無効化となっている.
これは以前のバージョンの\LuaTeX-jaとの互換性のためである(\ref{para-kern}節を参照).
+
+以下に\cs{jfontspec}の使用例を示す.
%</ja>
\begin{LTXexample}[width=0.4\textwidth]
-\fontspec[Numbers=OldStyle]{LMSans10-Regular}
\jfontspec[CJKShape=NLC]{KozMinPr6N-Regular}
-JIS~X~0213:2004→辻
-
+JIS~X~0213:2004→辻\par
\jfontspec[CJKShape=JIS1990]{KozMinPr6N-Regular}
JIS~X~0208:1990→辻
\end{LTXexample}
\label{ssec-preset}
%<*en>
-To use standard Japanese font settings easily, one can load \Pkg{luatexja-preset}
+To use standard Japanese font settings easily, one can load the \Pkg{luatexja-preset}
package with several options. This package provides functions in a part of
-\Pkg{japanese-otf} package and a part of \Pkg{PXchfon} package by Takayuki Yato,
-and loads \Pkg{luatexja-fontspec}, hence \Pkg{fontspec} internally.
-
-If you need to pass some options to \Pkg{fontspec}, load \Pkg{fontspec} manually
-before \Pkg{luatexja-preset}:
+\Pkg{japanese-otf} package and a part of \Pkg{PXchfon} package by Takayuki Yato.
%</en>
%<*ja>
よく使われている和文フォント設定を一行で指定できるようにしたのが
\Pkg{luatexja-preset}パッケージである.このパッケージは,
\Pkg{otf}パッケージの一部機能と八登崇之氏による\Pkg{PXchfon}パッケージの一部機能とを
-合わせたような格好をしており,内部で\Pkg{luatexja-fontspec},従って
-\Pkg{fontspec}を読み込んでいる.
+合わせたような格好をしている.
+%</ja>
+
+%<en>\paragraph{General options}
+%<ja>\paragraph{一般的なオプション}
+\begin{cslist}[before*=]
+
+\item[fontspec]
+%<*en>
+With this option, Japanese fonts are selected using functionality of
+the \Pkg{luatexja-fontspec} package. This means that the \Pkg{fontspec} package is
+ automatically loaded by this package.
+\emph{This option is enabled by default.}
+
+If you need to pass some options to \Pkg{fontspec}, load \Pkg{fontspec} manually
+before \Pkg{luatexja-preset}:
+%</en>
+%<*ja>
+\Pkg{luatexja-fontspec}パッケージの機能を用いて和文フォントを選択する.
+これは,\Pkg{fontspec}パッケージが自動で読み込まれることを意味する.
+\emph{このオプションは標準で有効になっている.}
もし\Pkg{fontspec}パッケージに何らかのオプションを渡す必要がある
\footnote{例えば,数式フォントまで置換されてしまい,\cs{mathit}によってギリシャ文字の
斜体大文字が出なくなる,など.}場合は,
次のように\Pkg{luatexja-preset}の前に\Pkg{fontspec}を手動で読みこめば良い:
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
\usepackage[no-math]{fontspec}
\usepackage[...]{luatexja-preset}
-\end{verbatim}
+\end{lstlisting}
-%<en>\paragraph{General options}
-%<ja>\paragraph{一般的なオプション}
-\begin{cslist}
+\item[nfssonly]
+%<*en>
+With this option,selecting Japanese fonts won't be performed using the functionality of
+ the \Pkg{fontspec} package, but only standard NFSS2.
+
+This option will be disabled when \Pkg{luatexja-fontspec} package is loaded.
+Note that the \Pkg{fontspec} can coexist with the option as the following:
+\begin{lstlisting}
+\usepackage{fontspec}
+\usepackage[hiragino-pron,nfssonly]{luatexja-preset}
+\end{lstlisting}
+Note that the functionality of the \Pkg{luatexja-fontspec} package, such as
+ \cs{setmainjfont}, cannot be used in the example above.
+%</en>
+%<*ja>
+\LaTeX 標準のフォント選択機構(NFSS2)を用いて
+\texttt{ltjpm}(明朝),\texttt{ltjpg}(ゴシック),それに後に述べる \texttt{deluxe} オプ
+ ションが指定された場合には \texttt{ltjpmg}(丸ゴシック)という
+3つの和文フォントファミリを定義し,これらを用いる.
+
+欧文フォントの指定で\Pkg{fontspec}パッケージを読み込んでいる場合でも
+\begin{lstlisting}
+\usepackage{fontspec}
+\usepackage[hiragino-pron,nfssonly]{luatexja-preset}
+\end{lstlisting}
+のようにこのオプションを指定することは可能である.一方,
+パッケージ読み込み時に既に\Pkg{luatexja-fontspec}パッケージが読み込まれて
+ いる場合は \texttt{nfssonly} オプションは無視される.
+%</ja>
\item[nodeluxe]
%<*en>
\emph{This option is enabled by default.}
%</en>
%<*ja>
-\LaTeXe ç\92°å¢\83ä¸\8bã\81§ã\81®æ¨\99æº\96è¨å®\9aã\81®ã\82\88ã\81\86ã\81«ï¼\8cæ\98\8eæ\9c\9dä½\93ã\83»ã\82´ã\82·ã\83\83ã\82¯ä½\93ã\82\92å\90\841ã\82¦ã\82§ã\82¤ã\83\88ã\81§ä½¿ç\94¨ã\81\99ã\82\8bï¼\8e
+\LaTeXe 環境下の標準設定のように,明朝体・ゴシック体を各1ウェイトで使用する.
より具体的に言うと,この設定の下では
-\ \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+,
+\ \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+,
\verb+\gtfamily\mdseries+はみな同じフォントとなる.
\emph{このオプションは標準で有効になっている.}
%</ja>
because \textit{rounded gothic} is called \textit{maru gothic} (丸ゴシック) in Japanese.}.
The heavy weight of \textit{gothic} can be used by ``changing the family'' \cs{gtebfamily},
or \verb+\textgteb{...}+.
-This is because \Pkg{fontspec} package can handle only medium (\cs{mdseries}) and
+This is because the \Pkg{fontspec} package can handle only medium (\cs{mdseries}) and
bold (\cs{bfseries}).
%</en>
%<*ja>
明朝体2ウェイト・ゴシック体3ウェイトと,
丸ゴシック体 (\cs{mgfamily}, \verb+\textmg{...}+) を使用可能とする.
-ゴシック体は細字・太字・極太の3ウェイトがあるが,
-極太ゴシック体はファミリの切り替え (\cs{gtebfamily}, \verb+\textgteb{...}+) %
-で実現している.\Pkg{fontspec}では通常 (\cs{mdseries}) と太字 (\cs{bfseries}) しか扱えないために
-このような中途半端な実装になっている.
+ゴシック体は中字・太字・極太の3ウェイトがあるが,
+極太ゴシック体を使う場合,
+\begin{itemize}
+ \item \cs{gtebfamily}, \verb+\textgteb{...}+
+ \item \cs{ebseries} (周囲がゴシック体のとき,\texttt{nfssonly} オプション指定時のみ)
+\end{itemize}
+のいずれかを用いる.標準で \cs{ebseries} が準備されていないのは,バージョンが古い
+\Pkg{fontspec}では中字(\cs{mdseries})と太字(\cs{bfseries})しか扱えなかった名残である.
%</ja>
\item[expert]
%<*en>
-Use horizontal kana alternates, and define a command \cs{rubyfamily} to use kana
+Use horizontal/vertical kana alternates, and define a command \cs{rubyfamily} to use kana
characters designed for ruby.
%</en>
-%<ja>横組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる.
+%<*ja>
+横組・縦組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる\footnote{%
+ \cs{rubyfamily}とはいいつつ,実際にはフォントファミリを切り替えるのではない(通常では
+ font featureの追加,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替え).
+}.
+%</ja>
\item[bold]
%<en>Substitute bold series of \textit{gothic} for bold series of \textit{mincho}.
%<ja>「明朝の太字」をゴシック体の太字によって代替する.
同時に指定された場合の動作については全く考慮していない.
%</ja>
-\newpage
%<en>\paragraph{Presets for multi weight}
%<ja>\paragraph{多ウェイト用プリセットの一覧}
%<*en>
Besides \texttt{morisawa-pro}~and~\texttt{morisawa-pr6n} presets,
fonts are specified by font name, not by file name.
+In following tables, starred fonts (e.g.~KozGo\dots-Regular) are used for medium series of \textit{gothic},
+\emph{if and only if \texttt{deluxe} option is specified}.
%</en>
%<*ja>
\texttt{morisawa-pro}, \texttt{morisawa-pr6n}以外はフォントの指定は
(ファイル名でなく)フォント名で行われる.
+以下の表において,*\,つきのフォント(e,g,~KozGo\dots-Regular)は,\emph{\texttt{deluxe}オプション指定時に}
+ゴシック体中字として用いられるものを示している.
%</ja>
\begin{cslist}[style=standard]
\item[kozuka-pro] Kozuka Pro (Adobe-Japan1-4) fonts.
\end{tabular}
\end{center}
-%<*en>
-In above table, starred fonts (KozGo\dots-Regular) are used for medium series of \textit{gothic},
-\emph{if and only if \texttt{deluxe} option is specified}.
-%</en>
-%<*ja>
-上の表において,*つきのフォント(KozGo\dots-Regular)は,\emph{\texttt{deluxe}オプション非指定時に}
-ゴシック体細字として用いられる.
-%</ja>
-
-%<ja>\medskip
+%<ja>\newpage
\item[hiragino-pro] Hiragino Pro (Adobe-Japan1-5) fonts.
%<en> \\*[-\dimexpr\medskipamount+\baselineskip\relax]
\midrule
%<en>\textit{rounded gothic}
%<ja>\gt 丸ゴシック
-&&Hiragino~Maru~Gothic~ProN~W4&Hiragino~Maru~Gothic~ProN~W4\\
+&&Hiragino~Maru~Gothic~Pro~W4&Hiragino~Maru~Gothic~ProN~W4\\
\bottomrule
\end{tabular}
\end{center}
\end{tabular}
\end{center}
-\newpage
\item[yu-win] Yu fonts bundled with Windows~8.1.
%<en> \\*[-\dimexpr\medskipamount+\baselineskip\relax]
\item[yu-osx] Yu fonts bundled with OSX~Mavericks.
\end{tabular}
\end{center}
-\end{cslist}
+ \item[moga-mobo] MogaMincho, MogaGothic, and MoboGothic.
+%<en>These fonts can be downloaded from\\\hfill \url{http://yozvox.web.fc2.com/}.
+%<ja>これらのフォントは \url{http://yozvox.web.fc2.com/} からダウンロードできる.
+
+\begin{center}\small
+\begin{tabular}{clll}
+\toprule
+\bf family&\bf series&\bf default, \texttt{90jis}~option&\bf \texttt{jis2004} option\\
+\midrule
+ &medium&Moga90Mincho&MogaMincho\\
+%<en>\smash{\raisebox{1.5ex}{\textit{mincho}}}%
+%<ja>\smash{\raisebox{1.5ex}{\gt 明朝}}%
+ &bold&Moga90Mincho Bold&MogaMincho Bold\\
+\midrule
+ &&Moga90Gothic&MogaGothic\\
+ &\smash{\raisebox{1.5ex}{medium}}
+ &Moga90Gothic&MogaGothic\\
+\cmidrule(l){2-4}
+%<en>\textit{gothic}%
+%<ja>\gt ゴシック
+ &bold&Moga90Gothic Bold&MogaGothic Bold\\
+ &heavy&Moga90Gothic Bold&MogaGothic Bold\\
+\midrule
+%<en>\textit{rounded gothic}
+%<ja>\gt 丸ゴシック
+&&Mobo90Gothic&MoboGothic\\
+\bottomrule
+\end{tabular}
+\end{center}
+
+
+\end{cslist}
%<en>\paragraph{Presets for single weight}
%<ja>\paragraph{単ウェイト用プリセット一覧}
%<*en>
Next, we describe settings for using only single weight.
-In four settings below, we use same fonts for medium and bold (and heavy) weights.
-(Hence \verb+\mcfamily\bfseries+ and \verb+\mcfamily\mdseries+ yields same Japanese fonts,
-even if \texttt{deluxe} option is also specified).
%</en>
%<*ja>
-次に,単ウェイト用の設定を述べる.この4設定では「細字」「太字」の区別はない.
-また,丸ゴシック体はゴシック体と同じフォントを用いる.
+次に,単ウェイト用の設定を述べる.この4設定では
+明朝体太字・丸ゴシック体はゴシック体と同じフォントが用いられる.
%</ja>
\par\nobreak\medskip
{\centering\small
\midrule
%<*en>
\it mincho&Ryumin-Light (non-embedded)
-&IPAMincho&IPAexMincho&MS Mincho\\
+&IPA Mincho&IPAex Mincho&MS Mincho\\
\it gothic&GothicBBB-Medium (non-embedded)
-&IPAGothic&IPAexGothic&MS Gothic\\
+&IPA Gothic&IPAex Gothic&MS Gothic\\
%</en>
%<*ja>
\gtfamily 明朝体&Ryumin-Light(非埋込)
\bottomrule
\end{tabular}\par\medskip}
-
%<en>\paragraph{Using HG fonts}
%<ja>\paragraph{HGフォントの利用}
%<*en>
\midrule
%<*en>
\bf mincho medium
-&IPAMincho&IPAexMincho&MS Mincho\\\midrule
+&IPA Mincho&IPAex Mincho&MS Mincho\\\midrule
\bf mincho bold&
\multicolumn{3}{c}{HG Mincho E}\\\midrule
\bf Gothic medium\\
~~without \texttt{deluxe}
-&IPAGothic&IPAexGothic&MS Gothic\\
+&IPA Gothic&IPAex Gothic&MS Gothic\\
~~with {\tt jis2004}
-&IPAGothic&IPAexGothic&MS Gothic\\
+&IPA Gothic&IPAex Gothic&MS Gothic\\
\cmidrule(lr){1-4}
~~otherwise&
\multicolumn{3}{c}{HG Gothic M}\\\midrule
\multicolumn{3}{c}{HG Maru Gothic PRO}\\
%</en>
%<*ja>
-\gtfamily 明朝体細字
+\gtfamily 明朝体中字
&IPA明朝&IPAex明朝&MS明朝\\\midrule
\gtfamily 明朝体太字&
\multicolumn{3}{c}{HG明朝E}\\\midrule
-\gtfamily ゴシック体細字\\
+\gtfamily ゴシック体中字\\
単ウェイト時
&IPAゴシック&IPAexゴシック&MSゴシック\\
{\tt jis2004}指定時
Under \pLaTeX, \Pkg{japanese-otf} package (developed by Shuzaburo Saito) is
used for typesetting characters which is in Adobe-Japan1-6 CID but not
in JIS~X~0208. Since this package is widely used, \LuaTeX-ja
-supports some of functions in \Pkg{japanese-otf} package.
-If you want to use these functions, load \Pkg{luatexja-otf} package.
+supports some of functions in the \Pkg{japanese-otf} package,
+as an external package \Pkg{luatexja-otf}.
%</en>
%<*ja>
\subsection{\cs{CID}, \cs{UTF}と\Pkg{otf}パッケージのマクロ}
\pLaTeX では,JIS~X~0208にないAdobe-Japan1-6の文字を出力するために,
齋藤修三郎氏による\Pkg{otf}パッケージが用いられていた.このパッケージは
広く用いられているため,\LuaTeX-jaにおいても\Pkg{otf}パッケージの機能の
-一部をサポートしている.これらの機能を用いるためには\Pkg{luatexja-otf}パッケージ
-を読み込めばよい.
+一部を(\Pkg{luatexja-otf}という別のパッケージとして)実装した.
%</ja>
\begin{LTXexample}
%<*ja>
\Pkg{otf}パッケージでは,それぞれ次のようなオプションが存在した:
\begin{cslist}
-\item[\cs{deluxe}] 明朝体・ゴシック体各2ウェイトと,丸ゴシック体を扱えるようになる.
-\item[\cs{expert}] 仮名が横組・縦組専用のものに切り替わり,ルビ用仮名も
+\item[deluxe] 明朝体・ゴシック体各3ウェイトと,丸ゴシック体を扱えるようになる.
+\item[expert] 仮名が横組・縦組専用のものに切り替わり,ルビ用仮名も
\ \cs{rubyfamily}\ によって扱えるようになる.
-\item[\cs{bold}] ゴシック体を標準で太いウェイトのものに設定する.
+\item[bold] ゴシック体を標準で太いウェイトのものに設定する.
\end{cslist}
しかしこれらのオプションは\Pkg{luatexja-otf}パッケージには存在しない.
\Pkg{otf}パッケージが文書中で使用する和文用TFMを自前の物に置き換えていたのに対し,
\ref{ssec-fontspec}節 (\Pkg{fontspec}) の方法で手動で指定する必要がある.
%</ja>
+%<en>\subsection{Changing default Japanese fonts}
+%<ja>\subsection{標準和文フォントの変更}
+\label{ssec-cfg}
+%<*en>
+If \texttt{luatexja.cfg} can be seen from \LuaTeX, \LuaTeX-ja automatically reads it.
+The main use of \texttt{luatexja.cfg} is for changing default Japanese fonts,
+when IPAex fonts cannot be installed in \TeX~system.
+One should not overuse this \texttt{luatexja.cfg}; fonts which will be used in
+a document should be specified in its source.
+
+For example,
+\begin{lstlisting}
+\def\ltj@stdmcfont{IPAMincho}
+\def\ltj@stdgtfont{IPAGothic}
+\end{lstlisting}
+makes that IPA~Mincho and IPA~Gothic will be used as default Japanese fonts, instead of
+IPAex~Mincho and IPAex~Gothic.
-%<en>\section{Changing Parameters}
+For another example, the following two lines makes that
+non-embedded fonts Ryumin-Light~and~GothicBBB-Medium as default Japanese fonts
+(as the earlier version of \LuaTeX-ja):
+\begin{lstlisting}
+\def\ltj@stdmcfont{psft:Ryumin-Light}
+\def\ltj@stdgtfont{psft:GothicBBB-Medium}
+\end{lstlisting}
+%</en>
+%<*ja>
+\LuaTeX から見える位置に \texttt{luatexja.cfg} があれば,\LuaTeX-jaはそれを読み込む.
+このファイルを用いるとplain~\TeX, \LaTeXe における標準和文フォントを
+IPAex明朝・IPAexゴシックから変更することができる.
+しかし,基本的には\emph{文章中で用いるフォントは(例えば \Pkg{luatexja-preset} などで)
+文書ソース内で指定するべき}であり,この \texttt{luatexja.cfg} は,
+「IPAexフォントがインストールできない」など,IPAexフォントが使用できない場合にのみ
+応急処置的に用いるべきである.
+
+例えば
+\begin{lstlisting}
+\def\ltj@stdmcfont{IPAMincho}
+\def\ltj@stdgtfont{IPAGothic}
+\end{lstlisting}
+と記述しておけば,標準和文フォントがIPA明朝・IPAゴシックへと変
+更される.
+
+
+なお,20140906.0以前のバージョンのように,
+Ryumin-Light, GothicBBB-Mediumという名前の非埋込フォントを用いる場合は
+\begin{lstlisting}
+\def\ltj@stdmcfont{psft:Ryumin-Light}
+\def\ltj@stdgtfont{psft:GothicBBB-Medium}
+\end{lstlisting}
+と記述すればよい.
+%</ja>
+
+
+%<en>\section{Changing Internal Parameters}
%<ja>\section{パラメータの変更}
%<*en>
-There are many parameters in \LuaTeX-ja. And due to the behavior of \LuaTeX,
+There are many internal parameters in \LuaTeX-ja. And due to the behavior of \LuaTeX,
most of them are not stored as internal register of \TeX, but as an
original storage system in \LuaTeX-ja. Hence, to assign or acquire those
parameters, you have to use commands \cs{ltjsetparameter} and
\item 2番,3番,6番,7番,8番の文字範囲に属する文字は\textbf{JAchar}.
\end{itemize}
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, +8}}
-\end{verbatim}
+\end{lstlisting}
%<*en>
The argument to \textsf{jacharrange} parameter is a list of non-zero integer.
Negative integer $-n$ in the list means that ``each character in the range~$n$ is an
%</ja>
\begin{description}
%<*en>
-\newpage
-\item[Range~8${}^{\text{J}}$] The intersection of the upper half of ISO~8859-1
+
+\item[Range~8${}^{\kern.1em\text{J}}$] The intersection of the upper half of ISO~8859-1
(Latin-1 Supplement) and JIS~X~0208 (a basic character set for Japanese). This character range
consists of the following characters:
%</en>
%<*ja>
-\item[範囲8${}^{\text{J}}$] ISO~8859-1の上位領域(ラテン1補助)と
+\item[範囲8${}^{\kern.1em\text{J}}$] ISO~8859-1の上位領域(ラテン1補助)と
JIS~X~0208の共通部分.この文字範囲は
以下の文字で構成される:
%</ja>
\end{itemize}
\end{multicols}
%<*en>
-\item[Range~2${}^{\text{J}}$] Greek and Cyrillic letters. JIS~X~0208 (hence most of Japanese
+\item[Range~2${}^{\text{\kern.1emJ}}$] Greek and Cyrillic letters. JIS~X~0208 (hence most of Japanese
fonts) has some of these characters.
%</en>
%<*ja>
-\item[範囲2${}^{\text{J}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがってほとんどの
+\item[範囲2${}^{\text{\kern.1emJ}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがってほとんどの
和文フォント)はこれらの文字を持つ.
%</ja>
\begin{multicols}{2}
\end{itemize}
\end{multicols}
%<*en>
-\item[Range~3${}^{\text{J}}$] Punctuations and Miscellaneous symbols. The block list is
+\item[Range~3${}^{\text{\kern.1emJ}}$] Punctuations and Miscellaneous symbols. The block list is
indicated in Table~\ref{table-rng3}.
%</en>
%<*ja>
-\item[範囲3${}^{\text{J}}$] 句読点と記号類.ブロックのリストは表\ref{table-rng3}%
+\item[範囲3${}^{\text{\kern.1emJ}}$] 句読点と記号類.ブロックのリストは表\ref{table-rng3}%
に示してある.
%</ja>
\begin{table}[!tb]
\end{lstlisting}
%<en>\item[Range~5${}^{\text{A}}$] Surrogates and Supplementary Private Use Areas.
%<ja>\item[範囲5${}^{\text{A}}$] 代用符号と補助私用領域.
-%<en>\item[Range~6${}^{\text{J}}$] Characters used in Japanese. The block list is indicated in Table~\ref{table-rng6}.
-%<ja>\item[範囲6${}^{\text{J}}$] 日本語で用いられる文字.ブロックのリストは表\ref{table-rng6}に示す.
+%<en>\item[Range~6${}^{\text{\kern.1emJ}}$] Characters used in Japanese. The block list is indicated in Table~\ref{table-rng6}.
+%<ja>\item[範囲6${}^{\text{\kern.1emJ}}$] 日本語で用いられる文字.ブロックのリストは表\ref{table-rng6}に示す.
\begin{table}[!tb]
%<en>\caption{Unicode blocks in predefined character range~6.}\medskip
%<ja>\caption{文字範囲6に指定されているUnicodeブロック.}
\end{tabular}
\end{table}
%<*en>
-\item[Range~7${}^{\text{J}}$] Characters used in CJK languages, but not included in Adobe-Japan1-6.
+\item[Range~7${}^{\text{\kern.1emJ}}$] Characters used in CJK languages, but not included in Adobe-Japan1-6.
The block list is indicated in Table~\ref{table-rng7}.
%</en>
%<*ja>
-\item[範囲7${}^{\text{J}}$] CJK言語で用いられる文字のうち,Adobe-Japan1-6に
+\item[範囲7${}^{\text{\kern.1emJ}}$] CJK言語で用いられる文字のうち,Adobe-Japan1-6に
含まれていないもの.
ブロックのリストは表\ref{table-rng7}に示す.
%</ja>
\end{table}
\end{description}
-
-%<en>\newpage\subsection{\Param{kanjiskip} and \Param{xkanjiskip}}
+%<en>\subsection{\Param{kanjiskip} and \Param{xkanjiskip}}
%<ja>\subsection{\Param{kanjiskip}と\Param{xkanjiskip}}
\label{subs-kskip}
\begin{itemize}
%<*en>
\item Glues/kerns specified in JFM. If \cs{inhibitglue} is issued
- around a Japanese character, this glue will not be inserted at the
+ around a \textbf{JAchar}, this glue will not be inserted at the
place.
%</en>
%<*ja>
-\item JFMで指定されたグルー/カーン.もし \cs{inhibitglue} が和文文字の周りで
+\item JFMで指定されたグルー/カーン.もし \cs{inhibitglue} が\textbf{JAchar}の周りで
発行されていれば,このグルーは挿入されない.
%</ja>
%<*en>
仕様では,\Param{jaxspmode}, \Param{alxspmode}はテーブルを共有しており,
上のコードの1行目を次のように変えても同じことになる:
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
\ltjsetparameter{alxspmode={`あ,preonly}, jaxspmode={`\!,postonly}}
-\end{verbatim}
+\end{lstlisting}
%<*en>
One can use also numbers to specify these two parameters (see Subsection~\ref{ssec-param}).
%</en>
%</en>
%<*ja>
和文フォントと欧文フォントを合わせるためには,時々どちらかのベースラインの移動が
-必要になる.\pTeX ではこれは \cs{ybaselineshift} を設定することで
+必要になる.\pTeX ではこれは \cs{ybaselineshift}(または\cs{tbaselineshift})を設定することで
なされていた(\textbf{ALchar}のベースラインがその分だけ下がる).しかし,日本語が主ではない
文書に対しては,欧文フォントではなく和文フォントのベースラインを移動した方がよい.
このため,\LuaTeX-jaでは欧文フォントのベースラインのシフト量
}abcかな
\end{LTXexample}
+%<*en>
+Note that setting positive \Param{yalbaselineshift}~or~\Param{talbaselineshift}
+parameters does not increase the depth of one-letter \emph{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 \texttt{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 a syllable comprises just
+ one letter whose \cs{lpcode}~and~\cs{rpcode} are both non-zero.
+\end{itemize}
+
+This problem does not apply for \Param{yjabaselineshift}~nor~\Param{tjabaselineshift},
+becuse a \emph{JAchar} is encapsulated by a horizontal box if needed.
+%</en>
+%<*ja>
+なお,以下の場合には1文字の\textbf{ALchar}からなる「音節」の深さは増加しないことに注意.
+\begin{itemize}
+ \item \Param{yalbaselineshift},~\Param{talbaselineshift}パラメータが正になっている.
+ \item 「音節」を構成する唯一の文字$p$の
+左余白への突出量(\cs{lpcode}),右余白への突出量(\cs{rpcode})がどちらも非零である.
+\end{itemize}
+\emph{JAchar}は必要に応じて1文字ずつボックスにカプセル化されるため,
+\Param{yjabaselineshift},~\Param{tjabaselineshift}パラメータについてはこのような問題は起こらない.
+%</ja>
%<*ja>
\paragraph{数式における挙動:\pTeX との違い}
\begin{tabular}{lp{30\zw}}
\toprule
\emph{入力}&\vspace*{\dimexpr-\origbaselineskip-\smallskipamount}
-\begin{verbatim}
+\begin{lstlisting}
数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2\!/2$,
$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$
-\end{verbatim}\\
+\end{lstlisting}\\
\noalign{\vskip-\origbaselineskip}
\midrule
\emph{\pTeX}&
\end{table}
%</ja>
+%<*en>
+\subsection{\emph{kinsoku} parameters and OpenType features}
+Among parameters which related to Japanese word-wrapping process (\emph{kinsoku shori}),
+\begin{quote}
+ \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty},
+ \Param{postbreakpenalty}~and~\Param{kcatcode}
+\end{quote}
+are stored by each character codes. ...
+
+For example, a fullwidth katakana ``ア'' on line~10 in the below input is replaced to
+its halfwidth variant ``ア'', by \verb+hwid+ feature.
+However, the penalty inserted after it is 10 which is the \Param{postbreakpenalty} of
+``ア'', not 20.
+%</en>
+%<*ja>
+\subsection{禁則処理関連パラメータとfont feature}
+禁則処理や \Param{kanjiskip}, \Param{xkanjiskip} の挿入に関連したパラメータのうち
+\begin{quote}
+ \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty},
+ \Param{postbreakpenalty}, \Param{kcatcode}
+\end{quote}
+は,文字コードごとに設定する量である.
+
+\Pkg{fontspec}パッケージを使う(\ref{ssec-fontspec}節)場合など,
+各種のOpenType featureを適用することもあると思うが,前段落に述べたパラメータ類は,
+\emph{OpenType featureの適用前の文字コードによって判定される.}
+例えば,以下の例において10行目の「ア」は,\verb+hwid+ featureの適用により半角カタカナの「ア」
+に置き換わる.しかし,その直後に挿入される \Param{postbreakpenalty}は,置換前の「ア」に対する値10である.
+%</ja>
+
+\begin{LTXexample}[width=0.2\textwidth]
+\ltjsetparameter{postbreakpenalty={`ア, 10}}
+\ltjsetparameter{postbreakpenalty={`ア, 20}}
+
+\newcommand\showpostpena[1]{%
+ \leavevmode\setbox0=\hbox{#1\hbox{}}%
+ \unhbox0\setbox0=\lastbox\the\lastpenalty}
+
+\showpostpena{ア},
+\showpostpena{ア},
+{\addjfontfeatures{CharacterWidth=Half}\showpostpena{ア}}
+\end{LTXexample}
+
\clearpage
%<en>\part{Reference}
%<ja>\part{リファレンス}
\suppressfloats[t]
%<*ja>
\section{\LuaTeX-jaにおける \cs{catcode}}
+\label{sec-catcode}
\subsection{予備知識:\pTeX と\upTeX における \cs{kcatcode}}
\pTeX,\upTeX においては,和文文字が制御綴内で利用できるかどうか
は \cs{kcatcode} の値によって決定されるのであった.
%</ja>
%<*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.
\begin{itemize}
\item
\emph{Distinction between \textbf{JAchar} or \textbf{ALchar}}
-is controlled by using the character range, see Subsection~\ref{ssec-setrange}.
+is controlled by the character range, see Subsection~\ref{ssec-setrange}.
\item
\emph{Whether the character can be used in a control word}
is controlled by setting \cs{catcode} to 11~(enabled) or 12~(disabled), as usual.
\emph{Whether \Param{jcharwidowpenalty} can be inserted before the character}
is controlled by the lowermost bit of the \Param{kcatcode} parameter.
\item
-\emph{Ignoring linebreak after a \textbf{JAchar}} is always ignored.
+\emph{Linebreak after a \textbf{JAchar}} does not produce a space.
\end{itemize}
%</en>
%<*ja>
\LuaTeX 自身の \cs{catcode} でよい
\item[\Param{jcharwidowpenalty}が挿入可か]
\Param{kcatcode}パラメータの最下位ビット
- \item[直後の改行の無視]
-日本語しか想定していないので\textbf{JAchar}については一律有効
+ \item[直後の改行]
+日本語しか想定していないので,\textbf{JAchar}直後の改行で半角スペースが挿入されることはない.
\end{description}
%</ja>
%<*en>
-Default setting of \cs{catcode} of \LuaTeX\ can be found
-in \texttt{luatex-unicode-letters.tex},
-which is based on \texttt{unicode-letters.tex} (for \XeTeX).
+Default setting of \cs{catcode} of Unicode characters are located in
+\begin{description}
+ \item[plain \LuaTeX] \texttt{luatex-unicode-letters.tex}, which is based on \texttt{unicode-letters.tex}
+(for \XeTeX).
+ \item[\LuaLaTeX] now included in \LaTeX\ kernel as~\texttt{unicode-letters.def}.
+\end{description}
However, the default setting of \cs{catcode} differs
between \XeTeX\ and \LuaTeX, by the following reasons:
\begin{itemize}
- \item \texttt{luatex-unicode-letters.tex} is based on old \texttt{unicode-letters.tex}.
- \item The latter half of \texttt{unicode-letters.tex} sets
-\cs{catcode} of Kanji and kana characters to 11,
-via setting \cs{XeTeXcharclass}.
+ \item (plain format) \texttt{luatex-unicode-letters.tex} is based on old \texttt{unicode-letters.tex}.
+ \item The latter half of \texttt{unicode-letters.tex}~and~\texttt{unicode-letters.def}
+sets\cs{catcode} of Kanji and kana characters to 11, via setting \cs{XeTeXcharclass}.
-However, this latter half is simply omitted in
-\texttt{luatex-unicode-letters.tex}, hence
+However, this latter half does not exist (plain case), or not executed (\LaTeX~case) in \LuaTeX, hence
\cs{catcode} of Kanji and kana characters remains 12 in \LuaTeX.
\end{itemize}
In other words, Kanji nor kana characters cannot be used in
%<*ja>
ネイティブにUnicode全部の文字を扱える\XeTeX や\LuaTeX では,
文字が制御綴内で使用できるかは通常の欧文文字と同じく \cs{catcode}
-で指定することとなる.\XeTeX における \cs{catcode} の初期設定は\
-\texttt{unicode-letters.tex} 中に記述されており,\LuaTeX ではそれを
+で指定することとなる.plain \XeTeX における \cs{catcode} の初期設定は\
+\texttt{unicode-letters.tex} 中に記述されており,plain \LuaTeX ではそれを
元にした \texttt{luatex-unicode-letters.tex} を用いている.
+\LaTeX では \cs{catcode} の設定はカーネルに \texttt{unicode-letters.def} として統合され.
+このファイルを\XeLaTeX, \LuaLaTeX の両方が用いている.
+
だが,\XeTeX における \cs{catcode} の初期設定と
\LuaTeX におけるそれは一致していない:
\begin{itemize}
\item \texttt{luatex-unicode-letters.tex} の元になった\
\texttt{unicode-letters.tex} が古い
- \item \texttt{unicode-letters.tex} の後半部では
+ \item \texttt{unicode-letters.tex} 後半部や \texttt{unicode-letters.def} 後半部では
\cs{XeTeXcharclass} の設定を行なっており,
それによって漢字や仮名の \cs{catcode} が11に設定されている.
しかし,\texttt{luatex-unicode-letters.tex} ではこの「後半部」が
-まるごと省略されており,漢字や仮名の \cs{catcode} は12のまま.
+まるごと省略されており,また\LuaLaTeX でも \texttt{unicode-letters.def} 後半部は実行されな
+ い.従って漢字や仮名の \cs{catcode} は12のままになっている.
\end{itemize}
言い換えると,\LuaTeX の初期状態では漢字や仮名を制御綴内に
使用することはできない.
%<en>&\bf row&\bf col.&\bf \pTeX&\bf \upTeX&\bf\LuaTeX-ja\\
%<ja>&\bf 区&\bf 点&\bf \pTeX&\bf \upTeX&\fontseries{b}\selectfont\LuaTeX-ja\\
\midrule
-\D 3000&1&1&N&N&Y\\
+%\D 3000&1&1&N&N&Y\\
\D 30FB&1&6&N&Y&N\\
\D 309B&1&11&N&Y&N\\
\D 309C&1&12&N&Y&N\\
\D FF3E&1&16&N&N&Y\\
\D FFE3&1&17&N&N&Y\\
\D FF3F&1&18&N&N&Y\\
-\D 30FD&1&19&N&Y&Y\\
-\D 30FE&1&20&N&Y&Y\\
-\D 309D&1&21&N&Y&Y\\
-\D 309E&1&22&N&Y&Y\\
+%\D 30FD&1&19&N&Y&Y\\
+%\D 30FE&1&20&N&Y&Y\\
+%\D 309D&1&21&N&Y&Y\\
+%\D 309E&1&22&N&Y&Y\\
\D 3003&1&23&N&N&Y\\
\D 4EDD&1&24&N&Y&Y\\
\D 3005&1&25&N&N&Y\\
\D 3006&1&26&N&N&Y\\
\D 3007&1&27&N&N&Y\\
\D 30FC&1&28&N&Y&Y\\
+\D FF0F&1&31&N&N&Y\\
+\D FF3C&1&32&N&N&Y\\
\bottomrule
\end{tabular}\qquad
\begin{tabular}{cccccc}
%<en>&\bf row&\bf col.&\bf \pTeX&\bf \upTeX&\bf\LuaTeX-ja\\
%<ja>&\bf 区&\bf 点&\bf \pTeX&\bf \upTeX&\fontseries{b}\selectfont\LuaTeX-ja\\
\midrule
-\D FF0F&1&31&N&N&Y\\
-\D FF3C&1&32&N&N&Y\\
\D FF5C&1&35&N&N&Y\\
\D FF0B&1&60&N&N&Y\\
\D FF1D&1&65&N&N&Y\\
%<en>\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}Cyrillic letters (row 7)}&N&N&Y\\
%<ja>\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}ギリシャ文字(6区)}&Y&N&Y\\
%<ja>\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}キリル文字(7区)}&N&N&Y\\
-$\vphantom{\D 3000}$\\
\bottomrule
\end{tabular}\hss}\par
\end{table}
Table~\ref{table-kcat-diff} shows the difference.
Except for four characters ``・'',~``゛'', ``゜'',~``゠'',
\LuaTeX-ja admits more characters in a control word than \upTeX.
-\emph{Note that the ideographic space~\texttt{U+3000} can be used
-in a control word in \LuaTeX-ja.}
Difference becomes larger, if we consider
non-kanji JIS~X~0213 characters.
異なっているところだけを載せると,表\ref{table-kcat-diff}のようになる.
「・」「゛」「゜」「゠」を除けば,\LuaTeX-jaでは\upTeX より多くの文字が
制御綴に使用可能になっている.
-\textbf{特に重要なのは,全角空白(\texttt{U+3000})が
-\LuaTeX-jaでは制御綴中に使用可能であることである.}
JIS~X~0213の範囲に広げると,差異はさらに大きくなる.
詳細については例えば \url{https://github.com/h-kitagawa/kct} 中の\
-\texttt{kct-uni-out.pdf} などを参照すること.
+\texttt{kct-out.pdf} などを参照すること.
%</ja>
%<*ja>
\begin{tabular}{>{\bfseries}lcccc}
\toprule
-&横組&縦組 &\cs{dtou}「dtou方向」&「utod方向」\\
+&横組&縦組 &「dtou方向」&「utod方向」\\
\midrule
命令&\cs{yoko}&\cs{tate}&\cs{dtou}&\cs{utod}\\
字送り方向&水平右向き(→)&垂直下向き(↓)&垂直上向き(↑)&垂直下向き(↓)\\
%<*en>
\LuaTeX-ja supports four directions, as shown in Table~\ref{tab-dir}.
-The second column (\emph{yoko} direction) is just horizontal writing,
+The second column (\emph{yoko} direction) is just horizontal writing,
and the third column (\emph{tate} direction) is vertical writing.
The fourth column (\emph{dtou} direction) is actually a hidden feature of \pTeX.
We implemented this for debugging purpose.
\the\wd0,~\hbox{\tate \the\wd0}
\end{LTXexample}
-To access box dimensions \emph{with respect to current direction},
+To access box dimensions \emph{with respect to current direction},
one have to use the following commands instead of \cs{wd} wtc.
\begin{cslist}
- \item[\cs{ltjgetwd}\{<num>\}\textrm{, }\cs{ltjgetht}\{<num>\}\textrm{, }%
- \cs{ltjgetdp}\{<num>\}]
-These commands return \emph{an internal dimension} of \cs{box<num>} with respect to
+ \item[\cs{ltjgetwd}<num>\textrm{, }\cs{ltjgetht}<num>\textrm{, }%
+ \cs{ltjgetdp}<num>]
+These commands return \emph{an internal dimension} of \cs{box<num>} with respect to
the current direction. One can use these in \cs{dimexpr} primitive, as the followings.
-\begin{verbatim}
-\dimexpr 2\ltjgetwd{42}-3pt\relax, \the\ltjgetwd{1701}
-\end{verbatim}
-By implementaion, the argument must be grouped as \verb+\ltjgetwd{42}+,
-if the argument consists of more than one token.
+\begin{lstlisting}
+\dimexpr 2\ltjgetwd42-3pt\relax, \the\ltjgetwd1701
+\end{lstlisting}
+The following is an example.
\begin{LTXexample}[width=0.3\textwidth]
\parindent0pt
\setbox32767=\hbox{\yoko よこぐみ}
\fboxsep=0mm\fbox{\copy32767}
\vbox{\hsize=20mm
-\yoko YOKO \the\ltjgetwd{32767}, \\
- \the\ltjgetht{32767}, \\ \the\ltjgetdp{32767}.}
+\yoko YOKO \the\ltjgetwd32767, \\
+ \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
\vbox{\hsize=20mm\raggedleft
-\tate TATE \the\ltjgetwd{32767}, \\
- \the\ltjgetht{32767}, \\ \the\ltjgetdp{32767}.}
+\tate TATE \the\ltjgetwd32767, \\
+ \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
\vbox{\hsize=20mm\raggedleft
-\dtou DTOU \the\ltjgetwd{32767}, \\
- \the\ltjgetht{32767}, \\ \the\ltjgetdp{32767}.}
+\dtou DTOU \the\ltjgetwd32767, \\
+ \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
\end{LTXexample}
\item[\cs{ltjsetwd}<num>=<dimen>\textrm{, }\cs{ltjsetht}<num>=<dimen>\textrm{, }%
\cs{ltjsetdp}<num>=<dimen>]
-These commands set the dimension of \cs{box<num>}. Unlike \cs{ltjgetwd}, one does not need
+These commands set the dimension of \cs{box<num>}. One does not need
to group the argument <num>; four calls of \cs{ltjsetwd} below have the same meaning.
-\begin{verbatim}
+\begin{lstlisting}
\ltjsetwd42 20pt, \ltjsetwd42=20pt, \ltjsetwd=42 20pt, \ltjsetwd=42=20pt
-\end{verbatim}
+\end{lstlisting}
\end{cslist}
%</en>
\begin{cslist}
- \item[\cs{ltjgetwd}\{<num>\}\textrm{, }\cs{ltjgetht}\{<num>\}\textrm{, }%
- \cs{ltjgetdp}\{<num>\}]
+ \item[\cs{ltjgetwd}<num>\textrm{, }\cs{ltjgetht}<num>\textrm{, }%
+ \cs{ltjgetdp}<num>]
現在の組方向に応じたボックスの寸法の取得を行う.結果は内部長さであるため,
-\begin{verbatim}
-\dimexpr 2\ltjgetwd{42}-3pt\relax, \the\ltjgetwd{1701}
-\end{verbatim}
-のように \cs{wd}<num> の代わりとして扱うことができる.引数が1桁の場合は,
-\cs{ltjgetwd3} のように引数をグループで括らなくても良いが,そうでない場合は
-(通常の命令への引数のように)\verb+\ltjgetwd{42}+ とグループに括る必要がある.
+\begin{lstlisting}
+\dimexpr 2\ltjgetwd42-3pt\relax, \the\ltjgetwd1701
+\end{lstlisting}
+のように \cs{wd}<num> の代わりとして扱うことができる.
使用例は以下の通りである.
\begin{LTXexample}[width=0.3\textwidth]
\parindent0pt
\setbox32767=\hbox{\yoko よこぐみ}
\fboxsep=0mm\fbox{\copy32767}
\vbox{\hsize=20mm
-\yoko YOKO \the\ltjgetwd{32767}, \\
- \the\ltjgetht{32767}, \\ \the\ltjgetdp{32767}.}
+\yoko YOKO \the\ltjgetwd32767, \\
+ \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
\vbox{\hsize=20mm\raggedleft
-\tate TATE \the\ltjgetwd{32767}, \\
- \the\ltjgetht{32767}, \\ \the\ltjgetdp{32767}.}
+\tate TATE \the\ltjgetwd32767, \\
+ \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
\vbox{\hsize=20mm\raggedleft
-\dtou DTOU \the\ltjgetwd{32767}, \\
- \the\ltjgetht{32767}, \\ \the\ltjgetdp{32767}.}
+\dtou DTOU \the\ltjgetwd32767, \\
+ \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
\end{LTXexample}
\item[\cs{ltjsetwd}<num>=<dimen>\textrm{, }\cs{ltjsetht}<num>=<dimen>\textrm{, }%
\cs{ltjsetdp}<num>=<dimen>]
現在の組方向に応じたボックスの寸法の設定を行う.\cs{afterassignment} を2回利用して
実装しているので,次の4通りは全て同じ意味である.
-\begin{verbatim}
+\begin{lstlisting}
\ltjsetwd42 20pt, \ltjsetwd42=20pt, \ltjsetwd=42 20pt, \ltjsetwd=42=20pt
-\end{verbatim}
+\end{lstlisting}
設定値は「横組」「縦組及び \cs{utod} 方向」「\cs{dtou} 方向」
-の3種ごとに独立して記録される.……のときにどのようにボックスが配置されるか
-は,Gitリポジトリ内の \verb+test/test55-boxdim_diffdir.{tex,pdf}+ を
-参照してほしい.
+の3種ごとに独立して記録される.参考として,Gitリポジトリ内の
+ \verb+test/test55-boxdim_diffdir.{tex,pdf}+ を挙げておく.
\end{cslist}
%</ja>
%<*en>
\subsection{Getting current direction}
The \Param{direction} parameter returns the current direction, and
-the \Param{boxdir} parameter (with the argumant <num>)
+the \Param{boxdir} parameter (with the argument <num>)
returns the direction of a box register \cs{box}<num>.
The returned value of these parameters are a \emph{string}:
\begin{center}
%<*ja>
\subsection{組方向の取得}
「現在の組方向」や「<num>番のボックスの組方向」は,
-\pTeX では\cs{ifydir} や \cs{ifybox}<num> といった条件判断文を使って
+\pTeX では \cs{ifydir} や \cs{ifybox}<num> といった条件判断文を使って
判断することができた.
しかし,\LuaTeX-jaはあくまでも\TeX マクロとLuaコードで
記述されており,それでは新たな条件判断命令を作るのは難しい.
\end{LTXexample}
これらを用いれば,例えば
-\pTeX の \cs{ifydir}, \cs{iftbox200} と同等の条件判断を
-\begin{verbatim}
+\pTeX の \cs{ifydir},~\cs{ifybox200} と同等の条件判断を
+\begin{lstlisting}
\ifnum\ltjgetparameter{direction}=4
-\ifnum\ltjgetparameter{boxdir}{200}=3
-\end{verbatim}
+\ifnum\ltjgetparameter{boxdir}{200}=4
+\end{lstlisting}
のように行うことができる.
+\cs{iftdir} は少々面倒であるが,8で割った余りが3であるか否かを判断すれば良いから
+\begin{lstlisting}
+\ifnum\numexpr
+ \ltjgetparameter{direction}-(\ltjgetparameter{direction}/8)*8=3
+\end{lstlisting}
+とすればよい.
%</ja>
%<*en>
To cope with multiple directions, the following primitives are
overridden by \LuaTeX-ja, using~\verb+\protected\def+.
\begin{cslist}[style=standard]
- \item[\cs{unhbox}<num>\textrm{, }\cs{unvbox}<num>]
+ \item[\cs{unhbox}<num>\textrm{, }\cs{unvbox}<num>\textrm{, }\cs{unhcopy}<num>\textrm{, }\cs{unvcopy}<num>]
\item[\cs{vadjust}\{<material>\}]
+ \item[\cs{insert}<number>\{<material>\}]
\item[\cs{lastbox}]
- \item[\cs{raise}<dimen><box>\textrm{, }\cs{lower}<dimen><box>\textrm{\ etc., }\cs{vcenter}]
+ \item[\cs{raise}<dimen><box>\textrm{, }\cs{lower}<dimen><box>\textrm{\ etc., }\cs{vcenter}]
\item[\cs{vcenter}]
\end{cslist}
%</en>
\ \verb+\protected\def+ により再定義してある.
\begin{cslist}
- \item[\cs{unhbox}<num>\textrm{, }\cs{unvbox}<num>]
+ \item[\cs{unhbox}<num>\textrm{, }\cs{unvbox}<num>\textrm{, }\cs{unhcopy}<num>\textrm{, }\cs{unvcopy}<num>]
ボックスの組方向が現在のリストと異なる場合は事前にエラーメッセージを出力する.
\pTeX と異なり,エラーを無視して無理矢理 \cs{unhbox}, \cs{unvbox} を
続行させることもできるが,その場合の組版結果は保証しない.
\item[\cs{vadjust}\{<material>\}] 一旦プリミティブ本来の挙動を行う.その後,<material>の組方向が
周囲の垂直リストの組方向と一致しない場合にエラーを出力し,
該当の \cs{vadjust} を無効にする.
+ \item[\cs{insert}<number>\{<material>\}]
+ 一旦プリミティブ本来の挙動を行い,その後<material>内の各ボックス・罫線の直前に組方向を示
+ すdirection whatsitを挿入する.
\item[\cs{lastbox}] ボックスの「中身」を現在の組方向に合わせるためのノード
- (\textit{dir\_node}という)を必要ならば除去し,
+ (\textit{dir\_box}という)を必要ならば除去し,
正しく「中身」のボックスが返されるように前処理をする.
\item[\cs{raise}<dimen><box>\textrm{, }\cs{lower}<dimen><box>\textrm{\ etc., }\cs{vcenter}]
- 一方,こちらでは必要に応じて\textit{dir\_node}を作成する前処理を追加している.
+ 一方,こちらでは必要に応じて\textit{dir\_box}を作成する前処理を追加している.
\end{cslist}
%</ja>
%</en>
%<*ja>
フォントを(横組用)和文フォントとして読み込むためには,\cs{jfont} を
-\cs{font} プリミティブの代わりに用いる.
+\ \cs{font} プリミティブの代わりに用いる.
\cs{jfont} の文法は \cs{font} と同じである.
\LuaTeX-jaは\Pkg{luaotfload}パッケージを自動的に読み込むので,
TrueType/OpenTypeフォントにfeatureを指定したものを和文フォントとして用いる
\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:
%</en>
%<*ja>
-「はじめに」の節で述べたように,JFMは文字と和文組版で自動的に挿入される
+JFMは文字と和文組版で自動的に挿入される
グルー/カーンの寸法情報を持っている.JFMの構造は次の節で述べる.
\cs{jfont} 命令の呼び出しの際には,どのJFMを用いるのかを以下のキーで
指定する必要がある:
\begin{table}[t]
-%<en>\caption{Differences between JFMs shipped with \LuaTeX-ja}
-%<ja>\caption{\LuaTeX-ja に同梱されている JFM の違い}
+%<en>\caption{Differences between horizontal JFMs shipped with \LuaTeX-ja}
+%<ja>\caption{\LuaTeX-ja に同梱されている横組用JFMの違い}
%<en>\medskip
\label{tab-difjfm}
\ltjsetparameter{jacharrange={+3}}
\centering\small
-\def\r#1{{\jfont\g=file:KozMinPr6N-Regular.otf:jfm=#1 at 14.43324pt \g
-\setbox0=\vtop{\hsize=7\zw\noindent ◆◆◆◆◆◆◆
-ある日モモちゃんがお使いで迷子になって泣きました.}\copy0
-\vrule height 0pt depth \dp0}}
-\def\s#1{{\jfont\g=file:KozMinPr6N-Regular.otf:jfm=#1 at 14.43324pt \g
-\setbox0=\vtop{\hsize=7\zw\noindent ちょっと!何}\copy0}}
-\def\t#1{{\jfont\g=file:KozMinPr6N-Regular.otf:jfm=#1 at 19.24432pt \g
-\setbox0=\hbox{漢}%
-\vrule width 0.4pt height\ht0 depth\dp0\kern-.2pt\copy0
-\kern-\wd0\vrule width\wd0height .2pt depth .2pt
-\kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}%
-\kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}%
-\kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}}
-\begin{tabular}{rccc}
-\toprule
-&\tt jfm-ujis.lua&\tt jfm-jis.lua&\tt jfm-min.lua\\
-\midrule
-%<en>Example~1~\cite{min10}
-%<ja>例1~\cite{min10}
-&\r{ujis}&\r{jis}&\r{min}\\
-%<en>Example~2
-%<ja>例2
-&\s{ujis}&\s{jis}&\s{min}\\
-Bounding Box&\t{ujis}&\t{jis}&\t{min}\\
-\bottomrule
-\end{tabular}
+\def\r#1#2{%
+ \hbox{\Large\vrule
+ \parbox[b]{7\zw}{%
+ \addjfontfeatures{YokoFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent
+ ◆◆◆◆◆◆◆
+ ある日モモちゃんがお使いで迷子になって泣きました.
+ }\vrule}}
+\def\s#1#2{%
+ \Large
+ \parbox[b]{7\zw}{%
+ \addjfontfeatures{YokoFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent
+ ちょっと!何
+ }}
+\def\t#1#2#3{\hbox to 0pt{\hss%
+ \setbox0=\hbox{\addjfontfeatures{YokoFeatures={JFM=#1}}\huge #3}%
+ \textcolor{#2}{\transparent{0.5}\vrule width 0.4pt height\ht0 depth\dp0}\kern-.2pt\copy0
+ \textcolor{#2}{\transparent{0.5}\kern-\wd0\vrule width\wd0height .2pt depth .2pt
+ \kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+ \kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+ \kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}\hss}}
+{\Large\tabcolsep0pt
+\begin{tabular}{m{8\zw}m{8\zw}m{8\zw}}
+\leavevmode\hbox to 0pt{\r{ujis}{blue}\hss}\r{jis}{black}&
+\leavevmode\hbox to 0pt{\r{jis}{black}\hss}\r{min}{red}&
+\leavevmode\hbox to 0pt{\r{ujis}{blue}\hss}\r{min}{red}\\
+\leavevmode\hbox to 0pt{\s{ujis}{blue}\hss}\s{jis}{black}&
+\leavevmode\hbox to 0pt{\s{jis}{black}\hss}\s{min}{red}&
+\leavevmode\hbox to 0pt{\s{ujis}{blue}\hss}\s{min}{red}\\
+\leavevmode\qquad\t{ujis}{blue}{漢}\t{jis}{black}{漢}\qquad
+ \t{ujis}{blue}{っ}\t{jis}{black}{っ}&
+\leavevmode\qquad\t{jis}{black}{漢}\t{min}{red}{漢}\qquad
+ \t{jis}{black}{っ}\t{min}{red}{っ}&
+\leavevmode\qquad\t{ujis}{blue}{漢}\t{min}{red}{漢}\qquad
+ \t{ujis}{blue}{っ}\t{min}{red}{っ}\\
+\end{tabular}\par}
+
+(\textcolor{blue}{Blue: \texttt{jfm-ujis.lua}},
+\textcolor{black}{Black: \texttt{jfm-jis.lua}},
+\textcolor{red}{Red: \texttt{jfm-min.lua}})
\ltjsetparameter{jacharrange={-3}}
\end{table}
-
\begin{cslist}
\item[jfm=<name>]
%<*en>
%</en>
%<*ja>
\item[\tt jfm-min.lua] \pTeX に同梱されているデフォルトの和文用TFM
- である \verb+min10.tfm+ に相当する.
+(\verb+min10.tfm+)に相当し,行末で文字が揃うようにするために「っ」など一部の文字幅が変わっ
+ ている.\verb+min10.tfm+ については\cite{min10}が詳しい.
%</ja>
\end{description}
%<*en>
The difference among these three~JFMs is shown in Table~\ref{tab-difjfm}.
%</en>
%<*ja>
-これら3つのJFMの違いは表\ref{tab-difjfm}に示した.
+これら3つのJFMの違いは表\ref{tab-difjfm}に示した.表中の文例の一部には,
+\cite{min10}の図3,~4のものを用いた.
%</ja>
\begin{figure}
NFSS2用の命令(\ref{ssec-chgfnt}節,\ref{ssec-nfsspat}節)における指定では
カーニング情報は標準で使用する}ことになっているようである.
言い換えれば,カーニング情報を使用しない設定にするには,面倒でも
-\begin{verbatim}
+\begin{lstlisting}
\jfont\hoge=KozMinPr6N-Regular:jfm=ujis;-kern at 3.5mm
\DeclareFontShape{JY3}{fuga}{m}{n} {<-> s*KozMinPr6N-Regular:jfm=ujis;-kern}{}
-\end{verbatim}
+\end{lstlisting}
のように,\texttt{-kern} という指定を自分で追加しなければいけない.
\item
一方,\emph{\Pkg{luatexja-fontspec} の提供する \cs{setmainjfont}\
letter-spacing and the width of italic correction are not correct:
%</en>
\begin{LTXexample}[width=0.3\textwidth]
-\jfont\E=file:KozMinPr6N-Regular.otf:extend=1.5;jfm=ujis;-kern
+\jfont\E=KozMinPr6N-Regular:extend=1.5;jfm=ujis;-kern
\E あいうえお
-\jfont\S=file:KozMinPr6N-Regular.otf:slant=1;jfm=ujis;-kern
+\jfont\S=KozMinPr6N-Regular:slant=1;jfm=ujis;-kern
\S あいう\/ABC
\end{LTXexample}
%<en>\subsection{\cs{tfont}}
%<ja>\subsection{\cs{tfont} 命令}
+
+\begin{table}[t]
+%<en>\caption{Differences between vertical JFMs shipped with \LuaTeX-ja}
+%<ja>\caption{\LuaTeX-ja に同梱されている縦組用 JFM の違い}
+%<en>\medskip
+\label{tab-difjfm-tate}
+\catcode`\<=12\catcode`\>=12
+\ltjsetparameter{jacharrange={+3}}
+\small
+
+\def\r#1#2{%
+ \hbox{\tate\Large\vrule
+ \parbox{7\zw}{%
+ \addjfontfeatures{TateFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent
+ ◆◆◆◆◆◆◆
+ ある日モモちゃんがお使いで迷子になって泣きました.
+ }\vrule}}
+\def\s#1#2{%
+ \hbox{\tate\Large
+ \parbox{7\zw}{%
+ \addjfontfeatures{TateFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent
+ ちょっと!何
+ }}}
+\def\t#1#2#3{\hbox to 0pt{\hss%
+ \setbox0=\hbox{\addjfontfeatures{TateFeatures={JFM=#1}}\huge #3}%
+ \textcolor{#2}{\transparent{0.5}\vrule width 0.4pt height\ht0 depth\dp0}\kern-.2pt\copy0
+ \textcolor{#2}{\transparent{0.5}\kern-\wd0\vrule width\wd0height .2pt depth .2pt
+ \kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+ \kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+ \kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}\hss}}
+
+\begin{minipage}{.7\textwidth}
+\centering
+\leavevmode\hbox to 0pt{\r{ujisv}{blue}\hss}\r{tmin}{red}\quad
+\leavevmode\hbox to 0pt{\s{ujisv}{blue}\hss}\s{tmin}{red}\quad
+\raise4\zw\hbox{\tate\Large\t{ujisv}{black}{漢}\t{tmin}{red}{漢}\qquad
+ \t{ujisv}{black}{っ}\t{tmin}{red}{っ}}
+\end{minipage}%
+\begin{minipage}{.3\textwidth}
+\textcolor{blue}{Blue: \texttt{jfm-ujisv.lua}}\\
+\textcolor{red}{Red: \texttt{jfm-tmin.lua}}
+\end{minipage}
+\ltjsetparameter{jacharrange={-3}}
+\end{table}
+
%<*en>
...
%</en>
%<*ja>
\cs{tfont} はフォントを縦組用の和文フォントとして読み込む命令であり,
-\cs{jfont} の文法は \cs{jfont} と同じである.
+\cs{tfont} の文法は \cs{jfont} と同じである.
\cs{tfont} で定義された縦組用和文フォントは,
以下の点が \cs{jfont} による横組用和文フォントとは異なる:
\begin{itemize}
- \item 出力時に,自動的に「\verb+vert+ feature相当」のグリフ置換が行われる.
- これは,\Pkg{luaotfload}による各種featureのサポートとは全く別個に行われるもので,
- いちいち \verb+vert+ featureを指定する必要はない.
-\begin{verbatim}
-\tfont\S=file:KozMinPr6N-Regular.otf:jfm=ujis % OK
-\end{verbatim}
+ \item 自動的に \texttt{vert}, \texttt{vrt2} の両OpenType featureが有効化される.
+但し,以下の例の3行目に示すように,明示的に \texttt{vert}, \texttt{vrt2}(のいずれか)の
+有効・無効を指定した場合は別である.
+\begin{lstlisting}
+\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=<name>}\ の部分には縦組用JFMを指定する.現在同梱されているのは,
-OTFパッケージの \verb+upnmlminr-v.tfm+ を元にした\texttt{jfm-ujisv.lua}\ のみである.
+ \item \texttt{jfm=<name>}\ の部分には縦組用JFMを指定する.
+以下の縦組用JFMが\LuaTeX-jaには同梱されており,違いを表\ref{tab-difjfm-tate}に示した.
+\begin{description}
+\item[\tt jfm-ujisv.lua] \LuaTeX-jaの標準縦組用JFMである.このJFMは\upTeX で
+ 用いられるUTF/OTFパッケージ用の和文用TFMである \verb+upnmlminr-v.tfm+ を
+ 元にしている.
+\item[\tt jfm-tmin.lua] \pTeX に同梱されているデフォルトの和文用縦組TFM
+ である \verb+tmin10.tfm+ に相当し,\texttt{min10.tfm} と同様に
+ 「っ」など一部の文字幅が狭められている.
+\end{description}
\end{itemize}
+
+なお,\pTeX では,\cs{font},~\cs{jfont},~\cs{tfont}のどれでも欧文フォント・横組用和文フォン
+ト・縦組用和文フォントの定義が可能であったが,\LuaTeX-jaではそうでないので注意.
%</ja>
%<en>\subsection{Prefix \texttt{psft}}
are introduced in the \Pkg{luaotfload} package,
\LuaTeX-ja adds ``\texttt{psft:}''\ prefix in \cs{jfont} (and~\cs{font}),
to specify a ``name-only'' Japanese font which
-will not be embedded to PDF. Typical use of this prefix is to specify
-standard, non-embedded Japanese fonts, namely, ``Ryumin-Light'' and
-``GothicBBB-Medium''.
+will not be embedded to PDF.
+Note that these non-embedded fonts under current \LuaTeX\ has Identity-H encoding,
+and this violates the standard ISO32000-1:2008~(\cite{pdfstd}).
\emph{OpenType font features, such as ``{\tt +jp90}'',
have no meaning in name-only fonts using ``{\tt psft:}''\ prefix,
\cs{jfont}(と \cs{font} プリミティブ)では
\texttt{psft:}プリフィックスを用いることができる.
このプリフィックスを用いることで,PDFには埋め込まれない「名前だけの」
-和文フォントを指定することができる.「標準的な」非埋め込み和文フォント,
-つまり「Ryumin-Light」「GothicBBB-Medium」の指定でこのプリフィックスが使われる.
+和文フォントを指定することができる.
+なお,現行の\LuaTeX で非埋め込みフォントを作成するとPDF内でのエンコーディングが
+Identity-Hとなり,PDFの標準規格ISO32000-1:2008~(\cite{pdfstd})に非準拠になってしまう
+ので注意してほしい.
\emph{\texttt{psft} プリフィックスの下では
\texttt{+jp90} などのOpenType font featureの効力はない.
\label{ssec-jfm-str}
%<en>A JFM file is a Lua script which has only one function call:
%<ja>JFMファイルはただ一つの関数呼び出しを含むLuaスクリプトである:
-\begin{verbatim}
+\begin{lstlisting}
luatexja.jfont.define_jfm { ... }
-\end{verbatim}
+\end{lstlisting}
%<*en>
Real data are stored in the table which indicated above by
\verb+{ ... }+. So, the rest of this subsection are devoted to describe the
%<ja>(必須)
%<en>The amount of the length of the ``full-width''.
-%<ja>「全角幅」の長さ.この量が \cs{zw} の長さを決定する.
+%<*ja>
+「全角幅」の長さ.この量が \cs{zw} の長さとなる.\pTeX では
+「全角幅」\texttt{1zw} は「文字クラス0の文字」の幅と決められていたが,
+\LuaTeX-jaではここで指定する.
+%</ja>
\item[zh=<length>]
%<en>(required)
%<ja>(必須)
%<en>The amount of the ``full-height'' (height + depth).
-%<ja>「全角高さ」(height + depth)の長さ.通常は全角幅と同じ長さになるだろう.
+%<*ja>
+「全角高さ」(height + depth)の長さ.通常は全角幅と同じ長さになるだろう.
+\pTeX では 「全角高さ」\texttt{1zh} は「文字クラス0の文字」の高さと深さの和と決められていたが,
+\LuaTeX-jaではここで指定する.
+%</ja>
\item[kanjiskip=\{<natural>, <stretch>, <shrink>\}]
%<en>(optional)
\item 「\hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ*'+}」のような,文字それ自体の後にアスタリスクをつけたもの
\item いくつかの「仮想的な文字」(後に説明する)
\end{itemize}
-%</ja>
+%</ja>
\item[width=<length>, height=<length>, depth=<length>, italic=<length>]
%<en>(required)
3~fields are omitted, \texttt{left} and \texttt{down} are
treated as~0, and \texttt{align} field is treated as
\texttt{'left'}.
-The effects of these 3~fields are indicated in
+The effects of these 3~fields are indicated in
Figures \ref{fig-pos}~and~\ref{fig-pos-tate}.
%</en>
%<*ja>
\begin{minipage}{0.4\textwidth}%
\begin{center}\unitlength=10pt\small
\begin{picture}(15,12)(-1,-4)
-\color{black!10!white}% jfm
+\color{b_gray}% jfm
\put(0,0){\vrule width 12\unitlength height 8\unitlength depth 3\unitlength}
-\color{red!20!white}% step1
+\color{b_pink}% step1
\put(-1,-1.5){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength}
\color{red}% real glyph
\put(-1,5.5){\line(1,0){6}}
\put(-1,-4){\line(1,0){6}}
-\color{green!20!white}% real glyph
+\color{b_green}% real glyph
\put(3,0){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength}
\color{black}% jfm
\put(12.2,-1.5){\makebox(0,0)[l]{\texttt{depth}}}
\put(6,0.2){\makebox(0,0)[b]{\texttt{width}}}
-\color{green!50!black}% step1
+\color{green}% step1
\thicklines
\put(3,0){\vector(0,1){7}\vector(0,-1){2.5}\vector(1,0){6}}
\put(9,0){\line(0,1){7}\line(0,-1){2.5}}
\end{minipage}%
\begin{minipage}{0.6\textwidth}%
%<*en>
-Consider a Japanese character node which belongs to
+Consider a Japanese character node which belongs to
a character class whose the \texttt{align}
field is \texttt{'middle'}.
%</en>
%<*ja>
-\texttt{align}フィールドの値が\texttt{'middle'}であるような文字クラスに属する
+\texttt{align}フィールドの値が \texttt{'middle'} であるような文字クラスに属する
和文文字ノードを考えよう.
%</ja>
\begin{itemize}
the ``real'' glyph is centered horizontally (the green rectangle) first.
%</en>
%<*ja>
-\texttt{align}フィールドは\texttt{middle}なので,
+\texttt{align}フィールドは \texttt{'middle'} なので,
実際のグリフの位置はまず水平方向に中央揃えしたものとなる(緑色の長方形).
%</ja>
\item
\begin{minipage}{0.4\textwidth}%
\begin{center}\unitlength=10pt\small
\begin{picture}(15,12)(-6,0)
-\color{black!10!white}% jfm
+\color{b_gray}% jfm
\put(-6,0){\vrule width 12\unitlength height 11\unitlength}
-\color{red!20!white}% real glyph
+\color{b_pink}% real glyph
\put(-6.5,5.5){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength}
\color{red}% real glyph
\put(-6.5,11.5){\line(1,0){8}}
\put(-6.5,2.5){\line(1,0){8}}
-\color{green!20!white}% step1
+\color{b_green}% step1
\put(-4,3){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength}
\color{black}% jfm
\put(-3,10.8){\makebox(0,0)[t]{\texttt{depth}}}
\put(0.2,5.5){\makebox(0,0)[l]{\texttt{width}}}
-\color{green!50!black}% step1
+\color{green}% step1
\thicklines
\put(-4,3){\vector(0,1){6}\vector(0,-1){3}\vector(1,0){8}}
\put( 4,3){\line(0,1){6}\line(0,-1){3}}
(\dots)
%</en>
%<*ja>
-\texttt{align}フィールドの値が\texttt{'right'}であるような文字クラスに属する
+\texttt{align}フィールドの値が \texttt{'right'} であるような文字クラスに属する
和文文字を考えよう.
\begin{itemize}
\item
-実際のグリフの「垂直位置」は,ベースラインが文字の物理的な左右方向の中央を通る
+å®\9fé\9a\9bã\81®ã\82°ã\83ªã\83\95ã\81®ã\80\8cå\9e\82ç\9b´ä½\8dç½®ã\80\8dã\81¯ï¼\8cã\81¾ã\81\9aã\83\99ã\83¼ã\82¹ã\83©ã\82¤ã\83³ã\81\8cæ\96\87å\97ã\81®ç\89©ç\90\86ç\9a\84ã\81ªå·¦å\8f³æ\96¹å\90\91ã\81®ä¸å¤®ã\82\92é\80\9aã\82\8b
位置となる.
-\item
-また,この場合\texttt{align}フィールドは\texttt{middle}なので,
+\item
+また,この場合 \texttt{align} フィールドは \texttt{'right'} なので,
「水平位置」は字送り方向に「右寄せ」したものとなる(緑色の長方形).
-その際,高さ・深さは,実フォントのascender, descenderの値が使われる.
-\item
+\item
その後さらに \texttt{left} と \texttt{down} の値に従ってシフトされる
のは横組用和文フォントと変わらない.
\end{itemize}
%<*ja>
\paragraph{文字クラスの決定}
-æ\96\87å\97ã\81\8bã\82\89ã\81\9dã\81®æ\96\87å\97ã\81®å±\9eã\81\99ã\82\8bæ\96\87å\97ã\82¯ã\83©ã\82¹ã\82\92ç®\97å\87ºã\81\99ã\82\8bé\81\8eç¨\8bã\81¯å°\91ã\80\85è¤\87é\9b\91ã\81§ã\81\82ã\82\8bï¼\8e
-次の内容を一部に含んだ \texttt{jfm-test.lua} を用いて説明する.
+æ\96\87å\97ã\81\8bã\82\89ã\81\9dã\81®æ\96\87å\97ã\81®å±\9eã\81\99ã\82\8bæ\96\87å\97ã\82¯ã\83©ã\82¹ã\82\92ç®\97å\87ºã\81\99ã\82\8bé\81\8eç¨\8bã\81«ã\81¤ã\81\84ã\81¦ï¼\8c
+次の内容を含んだ \texttt{jfm-test.lua} を用いて説明する.
%</ja>
%<*en>
\paragraph{Character to character classes}
%</en>
\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}
-%<ja>句点「。」の幅は二分であるので
+%<ja>ここで,次のような入力とその実行結果を考える:
%<en>Now consider the following input/output:
\begin{LTXexample}[width=0.3\textwidth]
-\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+vert
-\setbox0\hbox{\a ã\80\82\inhibitglue 漢}
+\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+hwid
+\setbox0\hbox{\a ã\83\92漢}
\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}}.
%</en>
%<*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の適用によるグリフ置換の後に行われる}ことを
+この例は,\emph{文字クラスの決定はfont featureの適用によるグリフ置換の結果に基づく}ことを
示している.
%</ja>
%<*en>
-However, a starred specification like ``\texttt{'、*'}'' changes the rule.
-Consider the following input:
+However, if the class determined by the glyph after application of features is zero,
+\LuaTeX-ja adopts the class determined by the glyph \emph{before} application of features.
+The following input is an example.
%</en>
%<*ja>
-但し,「\texttt{'、*'}」のようにアスタリスクつきの指定があると,
-状況は異なる.
+但し,JFMによって決まる置換後のグリフの文字クラスが0である場合は,置換前の文字クラスを採用する.
%</ja>
\begin{LTXexample}[width=0.3\textwidth]
\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+vert
-\a æ¼¢ã\80\81\inhibitglue 漢
+\a æ¼¢ã\80\82\inhibitglue 漢
\end{LTXexample}
%<*en>
-Here, the character class of the ideographic comma ``、''~(\texttt{U+3001}) is determined
-as following:
+Here, the character class of the ideographic full stop ``。''~(\texttt{U+3002}) is determined
+as follows:
\begin{enumerate}
-\item As the case of ``ã\80\82'', the ideographic comma ``ã\80\81'' 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 ``ã\80\81'' is \emph{non-zero value}, namely, 2000.
-\item Hence the ideographic comma ``、'' in above belongs the character class~2000.
+\item As the case of ``ã\83\92'', the ideographic full stop ``ã\80\82'' is converted to its vertical
+ form ``\char"FE12''~(\texttt{U+FE12}) by \verb+vert+ feature.%"
+\item The character class of ``\char"FE12'', according to the JFM is \emph{zero}.
+\item However, \LuaTeX-ja remembers that this ``\char"FE12'' is obtained from ``。'' by
+ font features. The character class of ``ã\80\82'' is \emph{non-zero value}, namely, 2000.
+\item Hence the ideographic full stop ``。'' in above belongs the character class~2000.
\end{enumerate}
%</en>
%<*ja>
-ここで,読点「、」(\texttt{U+3001})の文字クラスは,以下のようにして決まる.
+ここで,句点「。」(\texttt{U+3002})の文字クラスは,以下のようにして決まる.
\begin{enumerate}
-\item とりあえず句点の時と同じように,\Pkg{luaotfload} によって縦組用読点のグリフに置き換わる.
-\item 置換後のグリフは \texttt{U+FE11} であり,そのままでは文字クラスは0と判定される.
-\item ã\81¨ã\81\93ã\82\8dã\81\8cï¼\8cJFMã\81«ã\81¯ã\80\8c\texttt{'ã\80\81*'}ã\80\8dæ\8c\87å®\9aã\81\8cã\81\82ã\82\8bã\81®ã\81§ï¼\8cç½®æ\8f\9bå\89\8dã\81®æ¨ªçµ\84ç\94¨èª点のグリフによって文字クラスを判定する.
-\item 結果として,上の出力例中の読点の文字クラスは2000となる.
+\item \Pkg{luaotfload} によって縦組用句点のグリフに置き換わる.
+\item 置換後のグリフは \texttt{U+FE12} であり,JFMに従えば文字クラスは\emph{0}と判定される.
+\item ã\81\93ã\81®å ´å\90\88ï¼\8cç½®æ\8f\9bå\89\8dã\81®æ¨ªçµ\84ç\94¨å\8f¥点のグリフによって文字クラスを判定する.
+\item 結果として,上の出力例中の句点の文字クラスは2000となる.
\end{enumerate}
%</ja>
-%<*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となる.
-%</ja>
%<ja>\paragraph{仮想的な文字}
%<en>\paragraph{Imaginary characters}
\item['jcharbdd']
%<en>A boundary between \textbf{JAchar} and anything else (such as \textbf{ALchar}, kern, glue,\,\ldots).
-%<ja>和文文字と「その他のもの」(欧文文字,glue,kern等)との境界.
+%<ja>\textbf{JAchar}と「その他のもの」(欧文文字,glue,kern等)との境界.
\item[$-1$]
%<en>The left/right boundary of an inline math formula.
\item JFM中の全ての数値を$1/0.962216$倍しておく.
\item \TeX ソース中で使用するところで,サイズ指定を0.962216倍にする.
\LaTeX でのフォント宣言なら,例えば次のように:
-\begin{verbatim}
+\begin{lstlisting}
\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[0.962216] psft:Ryumin-Light:jfm=jis}{}
-\end{verbatim}
+\end{lstlisting}
\end{itemize}
\item 上に述べた特殊文字は,\texttt{'boxbdd'}を除き文字クラスを全部0とする
(JFM中に単に書かなければよい).
font families. There is no relation between the value of
\cs{fam} and that of \cs{jfam}; with appropriate settings,
you can set both \cs{fam} and \cs{jfam} to the same value.
+Here <jfont\_cs> in the argument of \Param{jatextfont} etc.\ is
+a control sequence which is defined by \cs{jfont}, i.e.,
+a \emph{horizontal} Japanese font.
%</en>
%<*ja>
\LuaTeX-jaの数式中での和文フォントの扱いも同様である.
表\ref{tab-math}は数式フォントファミリに対する \TeX のプリミティブと対応する
ものを示している.\cs{fam} と \cs{jfam} の値の間には関係はなく,
適切な設定の下では \cs{fam} と \cs{jfam} の両方に同じ値を設定することができる.
+\Param{jatextfont} 他の第2引数<jfont\_cs>は,\cs{jfont} で定義された
+\emph{横組用}和文フォントである.\cs{tfont} で定義された
+\emph{縦組用}和文フォントを指定することは想定していない.
%</ja>
\begin{table}[!tb]
\item \texttt{align} is a number which is determined from \texttt{align}~field in the JFM:
\[
\begin{cases}
- 0&\text{\texttt{'left'} and the default value}\\0.5&\text{\tt 'middle'}\\1&\text{\tt 'right'}
+ 0&\text{\texttt{'left'} (default)}\\0.5&\text{\tt 'middle'}\\1&\text{\tt 'right'}
\end{cases}
\]
\item For $j\in \omega$, \texttt{[$j$]} stores a kern or a glue which will be inserted
間に入るものがkernであれば,このフィールドの値は\
\texttt{[$j$]=\{false, <kern\_node>, <ratio>\}} である.
<kern\_node>はkernを表すノードそのものである\footnote{%
-本バージョンでは利用可能ならばノードのアクセス手法にdirect access
+本バージョンではノードのアクセス手法にdirect access
modelを用いている.そのため,例えば\LuaTeX\ beta-0.78.2では,単なる自然数のようにし
か見えないことに注意.
}.
<spec\_node>はglueの長さを表すノードそのものであり,
$\text{<icflag>}=\textit{from\_jfm}+\text{<priority>}$である.
\end{itemize}
+\item[ascent\textrm{, }descent]
+……
+\item[chars\_cbcache]
+……
\end{cslist}
%</ja>
of \LuaTeX, see Section~\ref{sec-para}.
%</en>
%<*ja>
-先に述べたように,\cs{ltjsetparameter} と \cs{ltjgetparameter} は
-\LuaTeX-jaのほとんどのパラメータにアクセスするための命令である.
+先に述べたように,\LuaTeX-jaの内部パラメータにアクセスするには
+\cs{ltjsetparameter}(または \cs{ltjglobalsetparameter})と \cs{ltjgetparameter} を用いる.
\LuaTeX-jaが\pTeX のような文法(例えば,\verb+\prebreakpenalty`)=10000+)を
採用しない理由の一つは,\LuaTeX のソースにおける \verb+hpack_filter+
コールバックの位置にある.\ref{sec-para}章を参照.
\cs{ltjsetparameter} and \cs{ltjglobalsetparameter} are commands
for assigning parameters. These take one argument which is a
\texttt{<key>=<value>} list.
-The list of allowed keys are described in the next subsection.
-The difference between
-\cs{ltjsetparameter} and \cs{ltjglobalsetparameter} is only the
+The difference between these two commands is the
scope of assignment;
\cs{ltjsetparameter} does a local assignment and
\cs{ltjglobalsetparameter} does a global one.
-They also obey the value of \cs{globaldefs},
-like other assignment.
+They also obey the value of \cs{globaldefs}, like other assignments.
%</en>
%<*ja>
\cs{ltjsetparameter} と \cs{ltjglobalsetparameter} はパラメータを
-指定するための命令である.これらは\texttt{<key>=<value>}のリストを
-引数としてとる.許されるキーの一覧は次の節にある.
-\cs{ltjsetparameter} と \cs{ltjglobalsetparameter} の違いはスコープの
-違いのみで,
-\cs{ltjsetparameter} はローカルな指定,\cs{ltjglobalsetparameter} は
-グローバルな指定を行う.
-これらは他のパラメータ指定と同様に \cs{globaldefs} の値に従う.
+指定するための命令で,\texttt{<key>=<value>}のリストを
+引数としてとる.両者の違いはスコープであり,
+\cs{ltjsetparameter} はローカルな設定を行うのに対し,
+\cs{ltjglobalsetparameter} はグローバルな設定を行う.
+また,他のパラメータ指定と同様に \cs{globaldefs} の値にも従う.
%</ja>
%<*en>
%<*ja>
以下は \cs{ltjsetparameter} に指定することができるパラメータの一覧である.
[\cs{cs}]は\pTeX における対応物を示す.
-ã\81¾ã\81\9fï¼\8cã\81\9dã\82\8cã\81\9eã\82\8cã\81®ã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\81®å\8f³ä¸\8aã\81«ã\81\82ã\82\8b記号には次の意味がある:
+ã\81¾ã\81\9fï¼\8cã\81\9dã\82\8cã\81\9eã\82\8cã\81®ã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\81®å\8f³ä¸\8aã\81®記号には次の意味がある:
%</ja>
\begin{itemize}
%<*en>
%</ja>
\end{itemize}
-\begin{description}[font=\mdseries]
-\item[\DParam{jcharwidowpenalty}\,=<penalty>$^\ast$] [\cs{jcharwidowpenalty}]\
+\begin{cslist}[style=standard]
+\item[\DParam{jcharwidowpenalty}\,=<penalty>$^\ast$] [\cs{jcharwidowpenalty}]\
%<*en>
Penalty value for suppressing orphans. This penalty is inserted just
(see the description of \Param{jcharwidowpenalty} above).
%</en>
%<*ja>
-文字コードが<chr\_code>の文字が持つ付加的な属性値(attribute).
+文字コードが<chr\_code>の文字が持つ付加的な属性値.
現在のバージョンでは,<natural number>の最下位ビットが,その文字が句読点と
みなされるかどうかを表している(上の\Param{jcharwidowpenalty}の記述を参照).
%</ja>
この文字の前に挿入/追加されるペナルティの量を指定する.
例えば閉じ括弧「〗」は絶対に行頭にきてはならないので,
-\begin{verbatim}
+\begin{lstlisting}
\ltjsetparameter{prebreakpenalty={`〙,10000}}
-\end{verbatim}
+\end{lstlisting}
と,最大値の10000が標準で指定されている.他にも,小書きのカナなど,絶対禁止とい
うわけではないができれば行頭にはきて欲しくない場合に,0と
- 10000の間の値を指定するのも有用であろう.
+ 10000の間の値を指定するのも有用であろう.
+
+\pTeX では,\cs{prebreakpenalty}, \cs{postbreakpenalty}において,
+\begin{itemize}
+\item 一つの文字に対して,pre, postどちらか一つしか指定することができない%
+ \footnote{後から指定した方で上書きされる.}
+\item pre, post合わせて256文字分の情報を格納することしかできない
+\end{itemize}
+という制限があったが,\LuaTeX-jaではこれらの制限は解消されている.
%</ja>
%<*en>
Set a penalty which is inserted automatically before the character <chr\_code>,
to prevent a line starts from this character. For example, a line cannot started
with one of closing brackets ``〗'', so \LuaTeX-ja sets
-\begin{verbatim}
+\begin{lstlisting}
\ltjsetparameter{prebreakpenalty={`〙,10000}}
-\end{verbatim}
+\end{lstlisting}
by default.
-%</en>
+\pTeX\ has following restrictions on \cs{prebreakpenalty} and \cs{postbreakpenalty},
+but they don't exist in \LuaTeX-ja:
+\begin{itemize}
+ \item Both \cs{prebreakpenalty} and \cs{postbreakpenalty} cannot be set
+for the same character.
+ \item We can set \cs{prebreakpenalty} and \cs{postbreakpenalty} up to 256~characters.
+\end{itemize}
+%</en>
\item[\DParam{postbreakpenalty}\,=\{<chr\_code>,<penalty>\}$^\ast$]
[\cs{postbreakpenalty}]\
%<*ja>
文字コード<chr\_code>の\textbf{JAchar}が行末にくることを抑止するために,
この文字の後に挿入/追加されるペナルティの量を指定する.
-
-\pTeX では,\cs{prebreakpenalty}, \cs{postbreakpenalty}において,
-\begin{itemize}
-\item 一つの文字に対して,pre, postどちらか一つしか指定することができなかっ
- た(後から指定した方で上書きされる).
-\item pre, post合わせて256文字分の情報を格納することしかできなかった.
-\end{itemize}
-という制限があったが,\LuaTeX-jaではこれらの制限は解消されている.
%</ja>
%<*en>
Set a penalty which is inserted automatically after the character <chr\_code>,
to prevent a line ends with this character.
-\pTeX\ has following restrictions on \cs{prebreakpenalty} and \cs{postbreakpenalty},
-but they don't exist in \LuaTeX-ja:
-\begin{itemize}
- \item Both \cs{prebreakpenalty} and \cs{postbreakpenalty} cannot be set
-for the same character.
- \item We can set \cs{prebreakpenalty} and \cs{postbreakpenalty} up to 256~characters.
-\end{itemize}
%</en>
\item[\DParam{jatextfont}\,=\{<jfam>,<jfont\_cs>\}$^\ast$]
\item[\DParam{jaxspmode}\,=\{<chr\_code>,<mode>\}$^\ast$]\
%<*en>
-Setting whether inserting \Param{xkanjiskip} is allowed before/after a \textbf{JAchar} whose character code is <chr\_code>.
+Set whether inserting \Param{xkanjiskip} is allowed before/after a \textbf{JAchar} whose character code is <chr\_code>.
The followings are allowed for <mode>:
%</en>
%<*ja>
\item[\DParam{alxspmode}\,=\{<chr\_code>,<mode>\}$^\ast$] [\cs{xspcode}]\
%<*en>
-Setting whether inserting \Param{xkanjiskip} is allowed before/after a
+Set whether inserting \Param{xkanjiskip} is allowed before/after a
\textbf{ALchar} whose character code is <chr\_code>.
The followings are allowed for <mode>:
%</en>
%</en>
%<*ja>
\Param{jaxspmode}と\Param{alxspmode}は共通のテーブルを用いているため,
-これら2つのパラメータは互いの異名となっていることに注意する.
+これら2つのパラメータは互いの別名となっていることに注意する.
%</ja>
\item[\DParam{autospacing}\,=<bool>] [\cs{autospacing}]
しかし,自然長が \cs{maxdimen} の場合は,例外的に和文フォントのJFM側で指定されている
値を採用(こちらはフォントサイズに比例)することになっている.
%</ja>
+%<*en>
+The default glue which inserted between two \textbf{JAchar}s.
+Changing current Japanese font does not alter this parameter, as \pTeX.
+
+If the natural width of this parameter is \cs{maxdimen}, \LuaTeX-ja uses
+the value which is specified in the JFM for current Japanese font (See Subsection~\ref{ssec-jfm-str}).
+%</en>
\item[\DParam{xkanjiskip}\,=<skip>$^\ast$] [\cs{xkanjiskip}]\
\Param{kanjiskip}と同じように,通常ではフォントサイズに比例して変わることはないが,
自然長が \cs{maxdimen} の場合が例外である.
%</ja>
+%<*en>
+The default glue which inserted between a \textbf{JAchar} and an
+ \textbf{ALchar}.
+Changing current font does not alter this parameter, as \pTeX.
+
+As \Param{kanjiskip}, if the natural width of this parameter is \cs{maxdimen}, \LuaTeX-ja uses
+the value which is specified in the JFM for current Japanese font (See Subsection~\ref{ssec-jfm-str}).
+%</en>
\item[\DParam{differentjfm}\,=<mode>$^\dagger$]\
\item[\DParam{jacharrange}\,=<ranges>]
\item[\DParam{kansujichar}\,=\{<digit>, <chr\_code>\}$^\ast$] [\cs{kansujichar}]
-\item[\DParam{direction}\,=<dir>\ \hbox{\rm (always local)}]\
+\item[\DParam{direction}\,=<dir>\ \hbox{\rm (always local)}]\
%<*en>
Assigning to this parameter has the same effect as
\cs{yoko}~(if $\hbox{<dir>}=4$), \cs{tate}~(if $\hbox{<dir>}=3$),
\cs{dtou}~(if $\hbox{<dir>}=1$) or \cs{utod}~(if $\hbox{<dir>}=11$).
-If the argument <dir> is not one of 4,~3, 1~nor~11,
+If the argument <dir> is not one of 4,~3, 1~nor~11,
the behavior of this assignment is undefined.
%</en>
%<*ja>
動作は未定義である.
%</ja>
-\end{description}
+\end{cslist}
+
\subsection{\cs{ltjgetparameter}}
\label{ssec-getpar}
%<*en>
\emph{The return value of\/ \cs{ltjgetparameter} is
-always a string}. This is outputted by \texttt{tex.write()}, so any
-character other than space~``\texttt{\char32}''~(\texttt{U+0020}) has the category code
+always a string}, which is outputted by \texttt{tex.write()}.
+Hence any character other than space~``\texttt{\char32}''~(\texttt{U+0020}) has the category code
12~(other), while the space has 10~(space).
%</en>
%<*ja>
%<*ja>
\verb+\ltjgetparameter{autospacing}+ と \verb+\ltjgetparameter{autoxspacing}+ は,
\texttt{true}や\texttt{false}を返すの\emph{ではなく},
-1ã\81¨0のいずれかを返すことに注意,
+1ã\81\8b0のいずれかを返すことに注意,
%</ja>
\item
following, an additional argument---a character code, for example---is needed.
%</en>
%<*ja>
-第1引数が次のいずれかの場合には,さらに文字コードを第二引数としてとる.
+第1引数が次のいずれかの場合には,さらに文字コードを第2引数としてとる.
%</ja>
\begin{quote}
\sffamily
<chr\_code>\verb+}}+\\\null\hfill\verb+% 0 if JAchar, 1 if ALchar+
\end{quote}
+%<*en>
+\item Because the returned value is string, the following conditionals do not work
+if \Param{kanjiskip} (or~\Param{xkanjiskip}) has the stretch part or the shrink part.
+\begin{lstlisting}
+\ifdim\ltjgetparameter{kanjiskip}>\z@ ... \fi
+\ifdim\ltjgetparameter{xkanjiskip}>\z@ ... \fi
+\end{lstlisting}
+The correct way is using a temporary register.
+\begin{lstlisting}
+\@tempskipa=\ltjgetparameter{kanjiskip} \ifdim\@tempskipa>\z@ ... \fi
+\@tempskipa=\ltjgetparameter{xkanjiskip}\ifdim\@tempskipa>\z@ ... \fi
+\end{lstlisting}
+%</en>
+%<*ja>
+\item 返り値が文字列であることから,\Param{kanjiskip}や\Param{xkanjiskip}を直接
+\ \cs{ifdim} を使って比較することは望ましくない.伸び量や縮み量を持っている時には,
+次はエラーを発生させる:
+\begin{lstlisting}
+\ifdim\ltjgetparameter{kanjiskip}>\z@ ... \fi
+\ifdim\ltjgetparameter{xkanjiskip}>\z@ ... \fi
+\end{lstlisting}
+レジスタに一旦代入するのが良い:
+\begin{lstlisting}
+\@tempskipa=\ltjgetparameter{kanjiskip} \ifdim\@tempskipa>\z@ ... \fi
+\@tempskipa=\ltjgetparameter{xkanjiskip}\ifdim\@tempskipa>\z@ ... \fi
+\end{lstlisting}
+%</ja>
+
+\end{itemize}
+
+%<*ja>
+\subsection{\cs{ltjsetparameter} の代替}
+原則として各種内部パラメータの設定には \cs{ltjsetparameter} もしくは
+\ \cs{ltjglobalsetparameter}\ を用いることになるが,
+\cs{ltjsetparameter} の実行には時間がかかるという難点があり,
+\LuaTeX-ja の内部ではより高速に実行できる別の形式を用いている.
+\emph{本節は一般利用者むけの内容ではない.}
+
+\paragraph{\Param{kanjiskip}, \Param{xkanjiskip} の設定}
+\pLaTeXe 新ドキュメントクラスでは,
+\begin{lstlisting}
+\def\@setfontsize#1#2#3{%
+ ...
+ \kanjiskip=0zw plus .1zw minus .01zw
+ \ifdim\xkanjiskip>\z@
+ \if@slide \xkanjiskip=0.1em \else
+ \xkanjiskip=0.25em plus 0.15em minus 0.06em
+ \fi
+ \fi}
+\end{lstlisting}
+と,フォントサイズを変更するごとに \cs{kanjiskip}, \cs{xkanjiskip} を変更している.
+この \cs{@setfontsize} は文書の中で多数回実行されるので.
+\LuaTeX-ja 用に素直に書き換えた
+\begin{lstlisting}
+ \ltjsetparameter{kanjiskip=0\zw plus .1\zw minus .01\zw}
+ \@tempskipa=\ltjgetparameter{xkanjiskip}
+ \ifdim\@tempskipa>\z@
+ \if@slide
+ \ltjsetparameter{xkanjiskip=0.1em}
+ \else
+ \ltjsetparameter{xkanjiskip=0.25em plus 0.15em minus 0.06em}
+ \fi
+ \fi
+\end{lstlisting}
+としたのではタイプセットが遅くなってしまう.
+そこで,\cs{ltjsetparameter} の中で
+\begin{itemize}
+\item \cs{globaldefs} の値を読み取る \cs{ltj@setpar@global}
+\item \Param{kanjiskip} の設定を行う \cs{ltjsetkanjiskip}
+\item \Param{xkanjiskip} の設定を行う \cs{ltjsetxkanjiskip}
\end{itemize}
+を独立させ,\Pkg{ltjsclasses}では,
+\begin{lstlisting}
+ \ltj@setpar@global
+ \ltjsetkanjiskip{\z@ plus .1\zw minus .01\zw}
+ \@tempskipa=\ltjgetparameter{xkanjiskip}
+ \ifdim\@tempskipa>\z@
+ \if@slide
+ \ltjsetxkanjiskip.1em
+ \else
+ \ltjsetxkanjiskip.25em plus .15em minus .06em
+ \fi
+ \fi
+\end{lstlisting}
+としている.
+\cs{ltj@setpar@global}を直前に実行せず,単独で
+\cs{ltjsetkanjiskip}, \cs{ltjsetxkanjiskip}を実行することは想定されていないので注意.
+
+
+\paragraph{ベースライン補正量の設定}
+\pLaTeX の\Pkg{ascmac}パッケージでは,縦組の欧文ベースライン補正量の一時待避・復帰処理に
+\ \cs{@saveybaselineshift}\ という寸法レジスタを用い
+\begin{lstlisting}
+\@savetbaselineshift\tbaselineshift\tbaselineshift\z@
+...
+\tbaselineshift\@savetbaselineshift
+\end{lstlisting}
+という処理を行っている.
+
+これを\LuaTeX-ja 用に \cs{ltjsetparameter} を使って書き直すと,
+\begin{lstlisting}
+\@savetbaselineshift\ltjgetparameter{talbaselineshift}
+\ltjsetparameter{talbaselineshift=\z@}
+...
+\ltjsetparameter{talbaselineshift=\@savetbaselineshift}
+\end{lstlisting}
+となる.
+さて,縦組の欧文ベースライン補正量\Param{talbaselineshift}は,
+実際には \cs{ltj@tablshift} という属性レジスタに格納されている
+(\ref{sec-para}\nobreak 節参照).属性レジスタは長さではなく整数値を格納する\footnote{%
+ 従って,\texttt{\textbackslash @savetbaselineshift=\textbackslash ltj@tablshift}\
+ のように記述することはできない.属性レジスタを \cs{tbaselineshift} という名称にしなかっ
+ たのはそのためである.
+}ものであり,\cs{ltj@tablshift} は補正量を sp 単位で保持することから,
+上記のコードと同じ内容をより速い以下のコードで実現することができる.
+\begin{lstlisting}
+\@savetbaselineshift\ltj@tablshift sp%
+\ltj@tablshift\z@
+...
+\ltj@tablshift\@savetbaselineshift
+\end{lstlisting}
+この手法は \Pkg{ascmac} パッケージの\LuaTeX-ja対応パッチ \Pkg{lltjp-tascmac.sty} で
+実際に用いられている.\Pkg{lltjp-tascmac.sty} は自動的に読み込まれるので,
+ユーザは何も気にせず普通に \Pkg{ascmac} パッケージを \cs{usepackage} で読みこめば良い.
+%</ja>
%<en>\section{Other Commands for plain \TeX\ and \LaTeXe}
simply ignored.
%</en>
%<*ja>
-\item \cs{inhibitglue} の垂直モード中での呼び出しは意味を持たない.
+\item \emph{\cs{inhibitglue} の垂直モード中での呼び出しは意味を持たない}\footnote{%
+ この点は\TeX~Live~2014での\pTeX における \cs{inhibitglue} の仕様変更と同じである.
+}.
4行目の入力で有効にならないのは,\cs{inhibitglue} の時点では垂直モードであり,
\cs{noindent} の時点で水平モードになるからである.
%</ja>
For example, if \cs{hoge} uses \texttt{jfm-ujis.lua}, the standard JFM of \LuaTeX-ja,
then
-\begin{verbatim}
+\begin{lstlisting}
\ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}}
-\end{verbatim}
+\end{lstlisting}
does
\begin{quote}
If the current Japanese font is \cs{hoge}, \texttt{U+3000}--\texttt{U+30FF}
例えば,\cs{hoge} のJFMが\LuaTeX-ja標準の
\ \texttt{jfm-ujis.lua} であった場合,
-\begin{verbatim}
+\begin{lstlisting}
\ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}}
-\end{verbatim}
+\end{lstlisting}
は「\cs{hoge} を利用しているとき,
\texttt{U+3000}--\texttt{U+30FF}と
文字クラス1(開き括弧類)中の文字だけは \cs{piyo} を用いる」
\item[\cs{DeclareTateKanjiEncoding}\{<encoding>\}\{<text-settings>\}\{<math-settings>\}]
%<*en>
-In NFSS2 under \LuaTeX-ja, distinction between alphabetic font families
- and Japanese font families are only made by their
- encodings. For example, encodings OT1 and T1 are for
- alphabetic font families, and a Japanese font family cannot
+In NFSS2 under \LuaTeX-ja, distinction between alphabetic fonts
+ and Japanese fonts are only made by their
+ encodings. For example, encodings OT1 and T1 are encodings for
+ alphabetic fonts, and Japanese fonts cannot
have these encodings. These command define a new encoding
scheme for Japanese font families.
%</en>
%<*ja>
-\LuaTeX-jaã\81®NFSS2ã\81«ã\81\8aã\81\84ã\81¦ã\81¯ï¼\8c欧æ\96\87ã\83\95ã\82©ã\83³ã\83\88ã\83\95ã\82¡ã\83\9fã\83ªã\81¨å\92\8cæ\96\87ã\83\95ã\82©ã\83³ã\83\88ã\83\95ã\82¡ã\83\9fã\83ªは
+\LuaTeX-jaã\81®NFSS2ã\81«ã\81\8aã\81\84ã\81¦ã\81¯ï¼\8c欧æ\96\87ã\83\95ã\82©ã\83³ã\83\88ã\81¨å\92\8cæ\96\87ã\83\95ã\82©ã\83³ã\83\88は
そのエンコーディングによってのみ区別される.
-ä¾\8bã\81\88ã\81°ï¼\8cOT1ã\81¨T1ã\81®ã\82¨ã\83³ã\82³ã\83¼ã\83\87ã\82£ã\83³ã\82°ã\81¯æ¬§æ\96\87ã\83\95ã\82©ã\83³ã\83\88ã\83\95ã\82¡ã\83\9fã\83ªã\81«å¯¾ã\81\99ã\82\8bã\82\82ã\81®であり,
-å\92\8cæ\96\87ã\83\95ã\82©ã\83³ã\83\88ã\83\95ã\82¡ã\83\9fã\83ªã\81¯ã\81\93ã\82\8cã\82\89ã\81®ã\82¨ã\83³ã\82³ã\83¼ã\83\87ã\82£ã\83³ã\82°ã\82\92æ\8c\81ã\81¤ã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81ªã\81\84ï¼\8e
+ä¾\8bã\81\88ã\81°ï¼\8cOT1ã\81¨T1ã\81®ã\82¨ã\83³ã\82³ã\83¼ã\83\87ã\82£ã\83³ã\82°ã\81¯æ¬§æ\96\87ã\83\95ã\82©ã\83³ã\83\88ã\81®ã\82¨ã\83³ã\82³ã\83¼ã\83\87ã\82£ã\83³ã\82°であり,
+和文フォントはこれらのエンコーディングを持つことはできない.
これらコマンドは横組用・縦組用和文フォントのための新しいエンコーディングを
それぞれ定義する.
%</ja>
The above 3~commands are just the counterparts for \cs{DeclareFontEncodingDefaults} and~others.
%</en>
%<*ja>
-上記3つのコマンドはちょうど \cs{DeclareFontEncodingDefaults} などに対応するものである.
+上記3つのコマンドはちょうどNFSS2 の \cs{DeclareFontEncodingDefaults} などに対応するものである.
%</ja>
\item[\cs{reDeclareMathAlphabet}\{<unified-cmd>\}\{<al-cmd>\}\{<ja-cmd>\}]
\item[\cs{DeclareRelationFont}\{<ja-encoding>\}\{<ja-family>\}\{<ja-series>\}\{<ja-shape>\}\\*
\null\hfill\{<al-encoding>\}\{<al-family>\}\{<al-series>\}\{<al-shape>\}]
%<*en>
-This command sets the ``accompanied'' alphabetic font family (given by the latter 4~arguments)
-with respect to a Japanese font family given by the former 4~arguments.
+This command sets the ``accompanied'' alphabetic font (given by the latter 4~arguments)
+with respect to a Japanese font given by the former 4~arguments.
%</en>
%<*ja>
-ã\81\84ã\82\8fã\82\86ã\82\8bã\80\8cå¾\93å±\9e欧æ\96\87ã\80\8dã\82\92è¨å®\9aã\81\99ã\82\8bã\81\9fã\82\81ã\81®å\91½ä»¤ã\81§ã\81\82ã\82\8bï¼\8eå\89\8då\8d\8aã\81®4å¼\95æ\95°ã\81§è¡¨ã\81\95ã\82\8cã\82\8bå\92\8cæ\96\87ã\83\95ã\82©ã\83³ã\83\88ã\83\95ã\82¡ã\83\9fã\83ªã\81«å¯¾ã\81\97ã\81¦ï¼\8c
-ã\81\9dã\81®ã\83\95ã\82©ã\83³ã\83\88ã\81«å¯¾å¿\9cã\81\99ã\82\8bã\80\8cå¾\93å±\9e欧æ\96\87ã\80\8dã\81®ã\83\95ã\82©ã\83³ã\83\88ã\83\95ã\82¡ã\83\9fã\83ªã\82\92å¾\8cå\8d\8aã\81®4å¼\95æ\95°ã\81«ã\82\88ã\82\8aä¸\8eã\81\88ã\82\8bï¼\8e
+いわゆる「従属欧文」を設定するための命令である.前半の4引数で表される和文フォントに対して,
+そのフォントに対応する「従属欧文」のフォントを後半の4引数により与える.
%</ja>
\item[\cs{SetRelationFont}]
%<*en>
%<*ja>
現在の欧文フォントのエンコーディング/ファミリ/…… を,
\cs{DeclareRelationFont} か \cs{SetRelationFont} で指定された
-ç\8f¾å\9c¨ã\81®å\92\8cæ\96\87ã\83\95ã\82©ã\83³ã\83\88ã\83\95ã\82¡ã\83\9fã\83ªã\81«å¯¾å¿\9cã\81\99ã\82\8bã\80\8cå¾\93å±\9e欧æ\96\87ã\80\8dã\83\95ã\82©ã\83³ã\83\88ã\83\95ã\82¡ã\83\9fã\83ªに変更する.
+ç\8f¾å\9c¨ã\81®å\92\8cæ\96\87ã\83\95ã\82©ã\83³ã\83\88ã\81«å¯¾å¿\9cã\81\99ã\82\8bã\80\8cå¾\93å±\9e欧æ\96\87ã\80\8dã\83\95ã\82©ã\83³ã\83\88に変更する.
\cs{fontfamily} のように,有効にするためには \cs{selectfont} が必要である.
%</ja>
+ d_{\text{あ}} - d_{\text{M}},
\]
where $h_{a}$~and~$d_{a}$ denote the height of ``$a$'' and the depth, respectively.
-In \LuaTeX-ja, this \cs{adjustbaseline} does same task.
+In \LuaTeX-ja, this \cs{adjustbaseline} does same task, namely setting the
+ \Param{talbaselineshift} parameter.
%</en>
%<*ja>
\pLaTeXe では,\cs{adjustbaseline} は縦組時に「M」と「あ」の中心線を一致させるために,
+ d_{\text{あ}} - d_{\text{M}},
\]
ここで,$h_{a}$,~$d_{a}$はそれぞれ「$a$」の高さ・深さを表す.
-\LuaTeX-jaにおいても\cs{adjustbaseline} は同様の処理を行っている.
+\LuaTeX-jaにおいても\cs{adjustbaseline} は同様に\Param{talbaselineshift}パラメータの調整処
+ 理を行っている.
+
+同時に,これも\pLaTeXe の \cs{adjustbaseline} で行われていたが,
+「漢」の寸法を元に,(本節の最初に述べた,小文字で始まる)\cs{cht}, \cs{cwd} といった長さ変数を設定する.
%</ja>
\item[\cs{fontfamily}\{<family>\}]
%<*en>
As described in Subsection~\ref{ssec-fontspec}, this optional package
provides the counterparts for several commands defined in the
-\Pkg{fontspec} package.
+\Pkg{fontspec} package (requires \Pkg{fontspec}~v2.4).
In addition to OpenType font features in the original \Pkg{fontspec},
the following ``font features'' specifications are allowed for
the commands of Japanese version:
%</en>
%<*ja>
-\ref{ssec-fontspec}節で述べたように,この追加パッケージは\Pkg{fontspec}
+\ref{ssec-fontspec}節で述べたように,この追加パッケージは\Pkg{fontspec}%
パッケージで定義されているコマンドに対応する和文フォント用のコマンドを提供する.
+
\Pkg{fontspec}パッケージで指定可能な各種font featureに加えて,和文版のコマンドには
以下の``font feature''を指定することができる:
%</ja>
The \texttt{CID} key is effective only when with \texttt{NoEmbed}
described below. The same JFM cannot be used in both horizontal Japanese fonts and
- vertical Japanese fonts, hence the \texttt{JFM} key
+ vertical Japanese fonts, hence the \texttt{JFM} key
will be actually used in \texttt{YokoFeatures}~and~\texttt{TateFeatures} keys.
%</en>
%<*ja>
\texttt{CID} キーは下の \texttt{NoEmbed} と合わせて用いられたときのみ有効である.
また,横組用JFMと縦組用JFMは共用できないため,実際に \texttt{JFM} キーを用いる際は
-後に述べる\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ の中で用いる
+後に述べる\ \texttt{YokoFeatures} キーや \texttt{TateFeatures}\ の中で用いる
ことになる.
%</ja>
%</ja>
\begin{figure}[!tb]
-\begin{LTXexample}
+\begin{LTXexample}[width=0.25\textwidth]
\jfontspec[
- YokoFeatures={Color=007F00},
- TateFeatures={Color=00007F},
+ YokoFeatures={Color=007F00}, TateFeatures={Color=00007F},
TateFont=KozGoPr6N-Regular
]{KozMinPr6N-Regular}
-\parbox<y>{2\zw}[b]{横組のテスト}
-\parbox<t>{2\zw}[b]{縦組のテスト}
+\hbox{\yoko 横組のテスト}\hbox{\tate 縦組のテスト}
+\addjfontfeatures{Color=FF0000}
+\hbox{\yoko 横組}\hbox{\tate 縦組}
\end{LTXexample}
%<ja>\caption{\texttt{TateFeatures} 等の使用例}
%<en>\caption{An example of \texttt{TateFeatures} etc.}
\label{fig:yokotate-fontspec}
\end{figure}
+
\item[TateFeatures=\{<features>\}\textrm{, }TateFont=<font>]
-%<en> ...
+%<*en>
+The \texttt{TateFeatures} key specifies font features which are only turned~on in
+vertical writing, such as \texttt{Style=VerticalKana}~(\texttt{vkna} feature).
+Similarly, the \texttt{TateFont} key specifies the Japanese font which will be used only
+ in vertical writing.
+A demonstrarion is shown in Figure~\ref{fig:yokotate-fontspec}.
+%</en>
%<*ja>
+縦組において使用されるフォントや,縦組においてのみ適用されるfeature達を
+指定する.使用例は図\ref{fig:yokotate-fontspec}参照.
%</ja>
\item[YokoFeatures=\{<features>\}]
-%<en> ...
+%<*en>
+The \texttt{YokoFeatures} key specifies font features which are only turned~on in
+horizontal writing,.
+A demonstrarion is shown in Figure~\ref{fig:yokotate-fontspec}.
+%</en>
%<*ja>
+同様に,横組においてのみ適用されるfeature達を
+指定する.使用例は図\ref{fig:yokotate-fontspec}参照.
%</ja>
\paragraph{Remark on \texttt{AltFont}, \texttt{YokoFeatures}, \texttt{TateFeatures} keys}
In \texttt{AltFont},~\texttt{YokoFeatures},~\texttt{TateFeatures} keys,
one cannot specify per-shape settings such as \texttt{BoldFeatures}.
-For example,
+For example,
\begin{lstlisting}
AltFont = {
- { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold,
+ { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold,
Range="3000-"30FF, BoldFeatures={Color=007F00} }
}
\end{lstlisting}
\end{lstlisting}
On the other hand, \texttt{YokoFeatures}, \texttt{TateFeatures} and \texttt{TateFont}
-keys can be specified in each list in the \texttt{AltFont} key. Also,
+keys can be specified in each list in the \texttt{AltFont} key. Also,
one can specify \texttt{AltFont} inside \texttt{YokoFeatures},~\texttt{TateFeatures}.
+
+Note that features which are specified in \texttt{YokoFeatures}~and~\texttt{TateFeatures}
+are always interpreted \emph{after} other ``direction-independent'' features.
+This explains why \cs{addjfontfeatures} at~line~6 in~Figure~\ref{fig:yokotate-fontspec}
+has no effect, because a color specification is already done in
+\texttt{YokoFeatures}~and~\texttt{TateFeatures} keys.
%</en>
%<*ja>
\paragraph{\texttt{AltFont}, \texttt{YokoFeatures}, \texttt{TateFeatures} 等の制限}
例えば.
\begin{lstlisting}
AltFont = {
- { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold,
+ { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold,
Range="3000-"30FF, BoldFeatures={Color=007F00} }
}
\end{lstlisting}
\ \texttt{YokoFeatures},~\texttt{TateFeatures} 及び \texttt{TateFont} キーを
指定することは可能であり.また\ \texttt{YokoFeatures},~\texttt{TateFeatures} キーの
中身に \texttt{AltFont} を指定することができる.
+
+また,図\ref{fig:yokotate-fontspec}後半部では6行目の色の指定が効かず,
+2行目で指定した\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ による色の指定が有効になっ
+たままである.これは\emph{\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ によるfeature指定は
+組方向に依存しないfeature指定より後に解釈される}からである.
+
%</ja>
%</en>
%<*ja>
文字コードが(16進で)<hex\_number>の文字を出力する.
-このコマンドは \verb+\char"+<hex\_number>と似ているが,下の記述に注意すること.%"
+このコマンドは \verb+\char"+<hex\_number>と似ているが,下の注意を参照すること.%"
%</ja>
\end{cslist}
%<*ja>
-このパッケージは,\texttt{ajmacros.sty}(\Pkg{otf}パッケージ付属のマクロ集,井上浩一氏作)から
-漢字コードをUTF8にしたり,plain \LuaTeX でも利用可能するという
-修正を加えた \texttt{luatexja-ajmacros.sty} も自動的に読み込む.
-そのため,マクロ集にある \verb+\aj半角+ などのマクロもそのまま使用可能である.
+このパッケージは,マクロ集 \texttt{luatexja-ajmacros.sty}\footnote{\Pkg{otf}パッケージ付属の井上浩一氏によるマクロ集
+\texttt{ajmacros.sty} に対して
+漢字コードをUTF-8にしたり,plain \LuaTeX でも利用可能にするという
+修正を加えたものである.}\ も自動的に読み込む.
+\texttt{luatexja-ajmacros.sty} は,
+そのため,\Pkg{luatexja-otf} を読みこめば \texttt{ajmacros.sty} マクロ集にある \cs{aj半角} などのマクロもそのまま使うことができる.
%</ja>
+%<*en>
+This package automatically loads \texttt{luatexja-ajmacros.sty}, which is slightly
+modified version of \texttt{ajmacros.sty}\footnote{Useful macros by iNOUE Koich!, for the
+\Pkg{japanese-otf} package.}.
+Hence one can use macros which sre defined in \texttt{ajmacros.sty}, such as~\cs{aj半角}.
+%</en>
%<en>\paragraph{Remarks}
%<ja>\paragraph{注意}
有効にするには,\Pkg{luatexja-otf}パッケージを読み込んだ上で以下の命令を実行する%
\footnote{この命令を2回以上実行しても意味がない.}:}
%</ja>
-\begin{verbatim}
+\begin{lstlisting}
\directlua{luatexja.otf.enable_ivs()}
-\end{verbatim}
+\end{lstlisting}
%<ja> すると,上の命令を実行した箇所以降では,以下のようにIVSによる字形指定が有効となる.
%<en> After executing the command above, you can use IVS like the following:
\begin{LTXexample}
\def\outbox#1{{\Large%
\ltjsetparameter{kanjiskip=0pt plus .2\zw minus .2\zw}%
\setbox\gridbox=\hbox to 20\zw{\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb}%
- \hbox{\textcolor{cyan!50!white}{\copy\gridbox}\hskip-20\zw%
+ \hbox{\textcolor{cyan}{\copy\gridbox}\hskip-20\zw%
\vbox{\hsize=20\zw\noindent\leftskip0pt\rightskip0pt\parfillskip0pt#1}\vrule}%
}}
\begin{itemize}
\item 組方向オプション \texttt{<y>}(横組),\texttt{<t>}(縦組),
\texttt{<z>}\ の他に\ \texttt{<d>}(dtou方向),\texttt{<u>}(utod方向)を追加した.
-\texttt{<z>} と \texttt{<u>} の違いは,\texttt{<z>} が周囲の組方向が縦組のときにしか意味を持たない
+\texttt{<z>} と \texttt{<u>} の違いは,\texttt{<z>} が(\Pkg{plext} パッケージと同様に)
+周囲の組方向が縦組のときにしか意味を持たない
のに対し,\texttt{<u>} にはそのような制限がないことである.
\item \Pkg{plext} パッケージでは,表組(\texttt{tabular} 環境,\texttt{align} 環境等)や
(中身の最後が罫線などの時は,ボックスの下端)に一致するように配置する.
\item それ以外のときは,ボックスの中央が「数式の軸」に一致するように配置する.
\end{itemize}
-特に縦組の場合,「数式の軸」は……
- \item 連数字用命令 \cs{rensuji} における位置合わせオプション……
+ \item 連数字用命令 \cs{rensuji} における位置合わせオプション \texttt{[l]}, \texttt{[c]},
+ \texttt{[r]} の挙動を若干変更した.
+
\end{itemize}
}
%</ja>
\begin{cslist}
\item[tabular\textrm{, }array\textrm{, }minipage環境]
これらの環境は,
-\begin{verbatim}
+\begin{lstlisting}
\begin{tabular}<dir>[pos]{table spec} ... \end{tabular}
\begin{array}<dir>[pos]{table spec} ... \end{array}
\begin{minipage}<dir>[pos]{width} ... \end{minipage}
-\end{verbatim}
+\end{lstlisting}
のように,組方向オプション \texttt{\<dir\>} が拡張されている.
既に述べたように,組方向オプションに指定できる値は以下の5つであり,
それ以外を指定した時や無指定時は周囲の組方向と同じ組方向になる.
中央揃え(それ以外)される.
\item[picture環境]
図表作成に用いる \texttt{picture} 環境も,
-\begin{verbatim}
+\begin{lstlisting}
\begin{picture}<dir>(x_size, y_size)(x_offset,y_offset)
...
\end{picture}
-\end{verbatim}
+\end{lstlisting}
と組方向が指定できるように拡張されている.
$x$成分の増加方向は字送り方向,$y$成分の増加方向は行送り方向の\emph{反対方向}となる.
\Pkg{plext} パッケージと同様に
\item[tabular\textrm{, }array\textrm{, }minipage\textrm{ environments}]
These environments are extended by \texttt{\<dir\>}, which specifies the direction,
as follows:
-\begin{verbatim}
+\begin{lstlisting}
\begin{tabular}<dir>[pos]{table spec} ... \end{tabular}
\begin{array}<dir>[pos]{table spec} ... \end{array}
\begin{minipage}<dir>[pos]{width} ... \end{minipage}
-\end{verbatim}
+\end{lstlisting}
This option permits one of the following five values. If none of them is specified,
the direction inside the environment is same as that outside the enviromnent.
\begin{description}
If <width> is positive, the width of the box becomes this <width>.
In this case, <contents> will be aligned \dots
-\item[picture\textrm{environment}]
+\item[picture\textrm{\ environment}]
\item[\cs{rensuji}{[<pos>]}\{<contents>\}\textrm{, }\cs{rensujiskip}]
\attr{ltj@charclass}
%<*en>
-The character class of Japanese \textit{glyph\_node}.
+The character class of a \textbf{JAchar}. This attribute is only set on a
+ \textit{glyph\_node} which contains a \textbf{JAchar}.
%</en>
%<*ja>
-和文文字の\textit{glyph\_node}の文字クラス.
+\textbf{JAchar}の文字クラス.\textbf{JAchar}が格納された\textit{glyph\_node}でのみ使われる.
%</ja>
\attr{ltj@yablshift}
連続した場合でも「ボックスの境界」が識別できるようになっている.
%</ja>
-\attr{ltj@kcat$i$}
+\attr{ltj@kcat\,$i$}
%<*en>
Where $i$~is a natural number which is less than~7.
These 7~attributes store bit~vectors indicating which character block is regarded as a block of \textbf{JAchar}s.
\attr{ltj@dir}
%<*ja>
-ボックスにおける組方向を示す.通常のボックスでは
+\textit{direction}~whatsit(後述)において組方向を示すために,あるいは\textit{dir\_box}の
+ 組方向を用いる.\textit{direction}~whatsitにおいては値は
\begin{quote}
- \textit{dir\_dtou} (1), \textit{dir\_tate} (3),
+ \textit{dir\_dtou} (1), \textit{dir\_tate} (3),
\textit{dir\_yoko} (4), \textit{dir\_utod} (11)
\end{quote}
-のいずれかであり,これらに次を加えた値をとるボックスが作られることもあ
- る(\ref{sec-dir-imp}章参照).
+のいずれかであり,\textit{dir\_box}ではこれらに次を加えた値をとる(\ref{sec-dir-imp}章参照).
%</ja>
\begin{description}
\item[\textit{dir\_node\_auto} (128)]
%<*en>
The following function can be used to store data into a stack:
-\begin{verbatim}
+\begin{lstlisting}
luatexja.stack.set_stack_table(index, <any> data)
-\end{verbatim}
+\end{lstlisting}
Any values which except \texttt{nil}~and~NaN are usable as \textit{index}.
However, a user should use only negative integers or strings as \textit{index},
since natural numbers are used by \LuaTeX-ja itself.
%</en>
%<*ja>
スタックに値を設定するには,以下のLua関数を呼び出せば良い:
-\begin{verbatim}
+\begin{lstlisting}
luatexja.stack.set_stack_table(<any> index, <any> data)
-\end{verbatim}
+\end{lstlisting}
直感的には,スタックテーブル中のインデックス\textit{index}の値を\textit{data}にする,という意味である.
\textit{index}の値としては \texttt{nil} とNaN以外の任意の値を使えるが,
自然数は\LuaTeX-jaが使用する(将来の拡張用も含む)ので,
%<*en>
Stored data can be obtained as the return value of
-\begin{verbatim}
+\begin{lstlisting}
luatexja.stack.get_stack_table(index, <any> default, <number> level)
-\end{verbatim}
+\end{lstlisting}
where \textit{level} is the stack level, which is usually the value of \verb+\ltj@@stack+,
and \textit{default} is the default value which will be returned if no values are stored
in the stack table whose level is \textit{level}.
%</en>
%<*ja>
スタックの値は,
-\begin{verbatim}
+\begin{lstlisting}
luatexja.stack.get_stack_table(<any> index, <any> default, <number> level)
-\end{verbatim}
+\end{lstlisting}
の戻り値で取得できる.\textit{level}はスタックレベルであり,
通常は \verb+\ltj@@stack+ の値を指定することになるだろう.
\textit{default}はレベル\textit{level}のスタックに値が設定されていなかった場合に
%<*en>
\paragraph{Setting parameters}
-Figure~\ref{fig:setpar-def} shows the ``most outer'' definition of
+Figure~\ref{fig:setpar-def} shows the \emph{most outer} definition of
two commands,
\cs{ltjsetparameter} and \cs{ltjglobalsetparameter}.
Most important part is the last \cs{setkeys},
Hence, to add a key in \cs{ltjsetparameter}, one only have to add a key
whose prefix is \texttt{ltj} and whose family is \texttt{japaram}, as the following.
-\begin{verbatim}
+\begin{lstlisting}
\define@key[ltj]{japaram}{...}{...}
-\end{verbatim}
+\end{lstlisting}
\cs{ltjsetparameter}~and~\cs{ltjglobalsetparameter} automatically sets
\texttt{luatexja.isglobal}. Its meaning is the following.
このため,\cs{ltjsetparameter} に指定可能なパラメータを追加するには,
<prefix>を \texttt{ltj},<family>を \texttt{japaram} としたキーを
-\begin{verbatim}
+\begin{lstlisting}
\define@key[ltj]{japaram}{...}{...}
-\end{verbatim}
+\end{lstlisting}
のように定義すれば良いだけである.
なお,パラメータ指定がグローバルかローカルかどうかを示す \texttt{luatexja.isglobal} が,
\begin{align}
For parameters that do not need additional arguments, one only have to
define a function in the table \verb+luatexja.unary_pars+.
-For example, with the following function,
+For example, with the following function,
\verb+\ltjgetparameter{hoge}+ returns a \emph{string} \texttt{42}.
\begin{lstlisting}[numbers=left]
function luatexja.unary_pars.hoge (t)
Here the first argument $t$ is the stack level, as before.
The second argument $c$ is just the second argument of \cs{ltjgetparameter}.
-For parameters that need an additional argument, one also have to
+For parameters that need an additional argument, one also have to
execute the \TeX\ code like
-\begin{verbatim}
+\begin{lstlisting}
\ltj@@decl@array@param{fuga}
-\end{verbatim}
+\end{lstlisting}
to indicate that ``the parameter \texttt{fuga} needs an additional argument''.
%</en>
%<*ja>
引数$t$は,先に述べた通りのスタックレベルである.一方,引数$c$は\
\cs{ltjgetparameter} の第2引数を表す数値である.
しかしこれだけでは駄目で,
-\begin{verbatim}
+\begin{lstlisting}
\ltj@@decl@array@param{fuga}
-\end{verbatim}
+\end{lstlisting}
を実行し,\TeX インターフェース側に
「\verb+\ltjgetparameter{fuga}+ は追加引数が必要」ということを通知する必要がある.
%</ja>
->, auto, shorten >=1pt
]
\node [shape=rectangle, font=\scriptsize] (init) at (2,7) {start};
-\node [shape=circle,draw, fill=blue!20] (newline) at (4,7) {$N$};
-\node [shape=circle,draw, fill=blue!20] (midline) at (4,4) {$M$};
-\node [shape=circle,draw, fill=blue!20] (skipspc) at (8,7) {$S$};
-\node [shape=circle,draw, fill=red!20] (kanji) at (8,4) {$K$};
-\node [shape=rectangle,draw, fill=green!20] (scanacs) at (6,8) {scan a c.s.};
+\node [shape=circle,draw, fill=b_cyan] (newline) at (4,7) {$N$};
+\node [shape=circle,draw, fill=b_cyan] (midline) at (4,4) {$M$};
+\node [shape=circle,draw, fill=b_cyan] (skipspc) at (8,7) {$S$};
+\node [shape=circle,draw, fill=b_pink] (kanji) at (8,4) {$K$};
+\node [shape=rectangle,draw, fill=b_green] (scanacs) at (6,8) {scan a c.s.};
\node (endk) at (8,2.5) {} ;
\node (endm) at (4,2.5) {} ;
\node (ends) at (8,8.5) {} ;
\paragraph{Remark}
The following example shows the major difference from the behavior of \pTeX.
\begin{LTXexample}
-\fontspec[Ligatures=TeX]{TeX Gyre Termes}
+\fontspec[Ligatures=TeX]{Linux Libertine O}
\ltjsetparameter{autoxspacing=false}
\ltjsetparameter{jacharrange={-6}}xあ
y\ltjsetparameter{jacharrange={+6}}zい
\end{quote}
この仕様は,前節で述べた\pTeX の仕様にできるだけ近づけたものとなっている.条件1.は,
-\texttt{verbatim}系環境などの日本語対応マクロを書かなくてすませるためのものである.
+\texttt{lstlisting}系環境などの日本語対応マクロを書かなくてすませるためのものである.
しかしながら,\pTeX と完全に同じ挙動が実現できたわけではない.
-次のように,和文文字の範囲を変更したちょうどその行においては挙動が異なる:
+次のように,\textbf{JAchar}の範囲を変更したちょうどその行においては挙動が異なる:
\begin{LTXexample}
\fontspec[Ligatures=TeX]{TeX Gyre Termes}
\ltjsetparameter{autoxspacing=false}
y\ltjsetparameter{jacharrange={+6}}zい
u
\end{LTXexample}
-上ソース中の「あ」は欧文文字扱いであり.
+上ソース中の「あ」は\textbf{ALchar}(欧文扱い)であり.
ここで使用している欧文フォント\TeX\ Gyre Termesは「あ」を含まない.
よって,出力に「あ」は現れないことは不思議ではない.
それでも,\pTeX とまったく同じ挙動を示すならば,出力は
上のように異なる挙動となっているが,それは以下の理由による:
\begin{itemize}
\item 3行目を \texttt{process\_input\_buffer} で処理する時点では,
- 「あ」は和文文字扱いである.よって3行目は和文文字で終わることになり,
+ 「あ」は\textbf{JAchar}(和文扱い)である.よって3行目は\textbf{JAchar}で終わることになり,
コメント文字 \texttt{U+FFFFF} が追加される.
よって,直後の改行文字は無視されることになり,空白は入らない.
\item 4行目を \texttt{process\_input\_buffer} で処理する時点では,
- 「い」は欧文文字扱いである.よって4行目は欧文文字で終わることになり,
+ 「い」は\textbf{ALchar}である.よって4行目は\textbf{ALchar}で終わることになり,
直後の改行文字は空白に置き換わる.
\end{itemize}
-このため,トラブルを避けるために,和文文字の範囲を\cs{ltjsetparameter}で編集した場合,
+このため,トラブルを避けるために,\textbf{JAchar}の範囲を\cs{ltjsetparameter}で編集した場合,
その行はそこで改行するようにした方がいいだろう.
%</ja>
\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:
%</en>
%<*ja>
-\emph{クラスタ}は以下の形のうちのどれかひとつをとる連続的なノードのリストである:
+\emph{クラスタ}は以下の形のうちのどれかひとつをとるノードのリストである:
%</ja>
\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}.
%</en>
%<*ja>
\item その \verb+\ltj@icflag+ の値が$[3,15)$に入るノードのリスト.
これらのノードはある既にパッケージングされたhboxから \cs{unhbox} で
アンパックされたものである.
- ã\81\9dの\textit{id}は\textit{id\_pbox}である.
+ ã\81\93ã\81®å ´å\90\88ï¼\8cã\82¯ã\83©ã\82¹ã\82¿の\textit{id}は\textit{id\_pbox}である.
%</ja>
%<*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}.
%</en>
%<*ja>
\item インライン数式でその境界に2つの\textit{math\_node}を含むもの.
- ã\81\9dの\textit{id}は\textit{id\_math}である.
+ ã\81\93ã\81®å ´å\90\88ï¼\8cã\82¯ã\83©ã\82¹ã\82¿の\textit{id}は\textit{id\_math}である.
%</ja>
%<*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:
%</en>
%<*ja>
-\item \textit{glpyh\_node}~$p$とそれに関係するノード:
+\item \textbf{JAchar}を表す\textit{glyph\_node}~$p$とそれに関係するノード:
%</ja>
\begin{enumerate}
%<*en>
-\item A kern for the italic correction of~$p$.
+\item[(a)] A kern for the italic correction of~$p$.
%</en>
%<*ja>
-\item $p$のイタリック補正のためのカーン.
+\item[(a)] $p$のイタリック補正のためのカーン.
%</ja>
%<*en>
-\item An accent attached to $p$ by \cs{accent}.
+\item[(b)] An accent attached to $p$ by \cs{accent}.
%</en>
%<*ja>
-\item \cs{accent} による$p$に付随したアクセント.
+\item[(b)] \cs{accent} による$p$に付随したアクセント.
%</ja>
\end{enumerate}
\[
\]
%<*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}.
+%</en>
+%<*ja>
+この場合の\textit{id}は\textit{id\_jglyph}である.
+%</ja>
+
+%<*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}.
%</en>
%<*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}である.
%</ja>
%<*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.
%</en>
%<*ja>
-\item ボックス様のノード,つまり水平ボックス,垂直ボックス,罫線 (\cs{vrule}),
+\item 水平ボックス(hbox),垂直ボックス,罫線 (\cs{vrule}),
そして\textit{unset\_node}.
- ã\81\9dの\textit{id}は垂直に移動していないhboxならば\textit{id\_hlist},
+ ã\82¯ã\83©ã\82¹ã\82¿の\textit{id}は垂直に移動していないhboxならば\textit{id\_hlist},
そうでなければ\textit{id\_box\_like}となる.
%</ja>
%<*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.
%</en>
%<*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}である.
%</ja>
\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.
%</en>
%<*ja>
以下では\textit{Np}, \textit{Nq}, \textit{Nr}でクラスタを表す.
説明用に準備した概念であって,実際のLuaコード中にそのように書かれているわけではないことに注意.
\begin{description}
-\item[\textit{id\_jglyph}] 和文文字.\\
-$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は,その和文文字を表している
+\item[\textit{id\_jglyph}] \textbf{JAchar}(和文文字).\\
+$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は,その\textbf{JAchar}を表している
\textit{glyph\_node}そのものである.
-\item[\textit{id\_glyph}] 和文文字を表していない\textit{glyph\_node}~$p$.\\
-多くの場合,$p$は欧文文字を格納しているが,「ffi」などの合字によって作られた
+\item[\textit{id\_glyph}] \textbf{JAchar}(和文文字)以外のものを表す\textit{glyph\_node}~$p$.\\
+多くの場合,$p$は\textbf{ALchar}(欧文文字)を格納しているが,「ffi」などの合字によって作られた
\textit{glyph\_node}である可能性もある.
前者の場合,$\mathit{Np}.\mathit{head}$,~$\mathit{Np}.\mathit{tail} = p$である.
一方,後者の場合,
\item[\textit{id\_hlist}] 縦方向にシフトされていないhbox.\\
この場合,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$はそれぞれ$p$の内容を表すリストの,
先頭・末尾のノードである.
+\medskip
\begin{itemize}
\item 状況によっては,\TeX ソースで言うと
-\begin{verbatim}
+\begin{lstlisting}
\hbox{\hbox{abc}...\hbox{\lower1pt\hbox{xyz}}}
-\end{verbatim}
+\end{lstlisting}
のように,$p$の内容が別のhboxで開始・終了している可能性も十分あり得る.そのような場合,
$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は,
\emph{垂直方向にシフトされていない}hboxの
空白等の実際の挿入を行うことは前に書いたが,ここでの説明では,問題にしているクラスタ\textit{Np}は「後ろ側」のクラスタである
とする.「前側」のクラスタについては,以下の説明で\textit{head}が\textit{last}に置き換わることに注意すること.
\begin{description}
-\item[和文A] リスト中に直接出現している和文文字.
+\item[和文A] リスト中に直接出現している\textbf{JAchar}.
\textit{id}が\textit{id\_jglyph}であるか,\\
\textit{id}が\textit{id\_pbox}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき.
-\item[和文B] リスト中のhboxの中身の先頭として出現した和文文字.和文Aとの違いは,これの前に
+\item[和文B] リスト中のhboxの中身の先頭として出現した\textbf{JAchar}.和文Aとの違いは,これの前に
JFMグルーの挿入が行われない(\Param{xkanjiskip},~\Param{kanjiskip}は入り得る)ことである.\\
\textit{id}が\textit{id\_hlist}か\textit{id\_disc}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき.
-\item[欧文] リスト中に直接/hboxの中身として出現している欧文文字.次の3つの場合が該当:
+\item[欧文] リスト中に直接/hboxの中身として出現している「\textbf{JAchar}以外の文字」.次の3つの場合が該当:
\begin{itemize}
\item \textit{id}が\textit{id\_glyph}である.
\item \textit{id}が\textit{id\_math}である.
一方.前者(段落)の場合は,リストの末尾は常に \cs{penalty10000} と,
\cs{parfillskip} 由来のグルーが存在する.%よって,最後のクラスタ\textit{Np}は
%この \cs{parfillskip} 由来のグルーとなり,実質的な中身の最後はその1つ前のクラスタ\textit{Nq}となる.
-段落の最後の「通常の和文文字${}+{}$句点」が独立した行となるのを防ぐために,
+段落の最後の「通常の\textbf{JAchar}${}+{}$句点」が独立した行となるのを防ぐために,
\Param{jcharwidowpenalty}の値の分だけ適切な場所のペナルティを増やす.
ペナルティ量を増やす場所は,\textit{head}が\textbf{JAchar}であり,
この場合が全ての場合の基本となる.
\paragraph{「右空白」の算出}
-まず,「右空白」にあたる量を算出する.通常はこれが,隣り合った2つの和文文字間に入る空白量となる.
+まず,「右空白」にあたる量を算出する.通常はこれが,隣り合った2つの\textbf{JAchar}間に入る空白量となる.
\begin{description}
\item[JFM由来{[M]}] JFMの文字クラス指定によって入る空白を以下によって求める.この段階で空白量が未定義(未指定)だった場合,
デフォルト値\Param{kanjiskip}を採用することとなるので,次へ.
\end{enumerate}
例えば,
-\begin{verbatim}
+\begin{lstlisting}
\jfont\foo=psft:Ryumin-Light:jfm=ujis;-kern
\jfont\bar=psft:GothicBBB-Medium:jfm=ujis;-kern
\jfont\baz=psft:GothicBBB-Medium:jfm=ujis;jfmvar=piyo;-kern
-\end{verbatim}
+\end{lstlisting}
という3フォントを考え,
\[
\overbrace{\Node{glyph}{\cs{ foo}, `あ'}}^{p}
\item[\Param{kanjiskip}~{[K]}] 上の[M]において空白が定まらなかった場合,
以下で定めた量「右空白」として採用する.
この段階においては,\cs{inhibitglue} は効力を持たないため,
-結果として,2つの和文文字間には常に何らかのグルー/カーンが挿入されることとなる.
+結果として,2つの\textbf{JAchar}間には常に何らかのグルー/カーンが挿入されることとなる.
\begin{enumerate}
\item 両クラスタ(厳密には$\mathit{Nq}.\mathit{tail}$,$\mathit{Np}.\mathit{head}$)の中身の文字コードに対する
\Param{autospacing}パラメタが両方ともfalseだった場合は,長さ0のglueとする.
\item ユーザ側から見た\Param{kanjiskip}パラメタの自然長が$\cs{maxdimen}=(2^{30}-1)\,{\rm sp}$で
なければ,\Param{kanjiskip}パラメタの値を持つglueを採用する.
\item 2.でない場合は,\textit{Nq}, \textit{Np}で使われているJFMに指定されている\Param{kanjiskip}の値を用いる.
-どちらか片方のクラスタだけが和文文字(\textsf{和文A}・\textsf{和文B})のときは,そちらのクラスタで使われている
+どちらか片方のクラスタだけが\textbf{JAchar}(\textsf{和文A}・\textsf{和文B})のときは,そちらのクラスタで使われている
JFM由来の値だけを用いる.もし両者で使われているJFMが異なった場合は,上の[M]~3.と同様の方法を用いて調整する.
\end{enumerate}
\end{description}
\item 禁則用ペナルティも,以前述べた\textsf{P-normal~[PN]}と同じである.
\end{itemize}
\begin{description}
-\item[Boundary-B~{[\OB]}] 和文文字と「和文でないもの」との間に入る空白を以下によって求め,
+\item[Boundary-B~{[\OB]}] \textbf{JAchar}と「\textbf{JAchar}でないもの」との間に入る空白を以下によって求め,
未定義でなければそれを「右空白」として採用する.
\textsf{JFM-origin~[M]}の変種と考えて良い.
これによって定まる空白の典型例は,和文の閉じ括弧と欧文文字の間に入る半角アキである.
\item 禁則用ペナルティは,以前述べた\textsf{P-normal~[PN]}と同じである.
\end{itemize}
\begin{description}
-\item[Boundary-A~{[\OA]}] 「和文でないもの」と和文文字との間に入る空白を以下によって求め,
+\item[Boundary-A~{[\OA]}] 「\textbf{JAchar}でないもの」と\textbf{JAchar}との間に入る空白を以下によって求め,
未定義でなければそれを「右空白」として採用する.
\textsf{JFM-origin~[M]}の変種と考えて良い.
これによって定まる空白の典型例は,欧文文字と和文の開き括弧との間に入る半角アキである.
(a)部分にペナルティが存在していない場合,
\LuaTeX-ja は\textit{Nq}と\textit{Np}の間の行分割を可能にしようとする.
-そのために,以下の場合に$a$をもつ\textit{penalty\_node}を作って
+そのために,以下のいずれかの場合に$a$をもつ\textit{penalty\_node}を作って
「右空白」の(もし未定義なら\textit{Np}の)直前に挿入する:
\begin{itemize}
\item 「右空白」がグルーでない(カーンか未定義)であるとき.
-%\item 「左空白」がカーンとしてきっちり定義されている時.
+\item $a\neq 0$のときは,「右空白」がグルーであっても\textit{penalty\_node}を作る.
\end{itemize}
\item[P-suppress~{[PS]}]
そのため,「右空白」が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}の順序が逆になっている)場合と同じである.
\paragraph{和文Aと和文Bの違い}
先に述べたように,\textsf{和文B}はhboxの中身の先頭(or 末尾)として出現している
-和文文字である.リスト内に直接ノードとして現れている和文文字(\textsf{和文A})との違いは,
+\textbf{JAchar}である.リスト内に直接ノードとして現れている\textbf{JAchar}(\textsf{和文A})との違いは,
\begin{itemize}
\item \textsf{和文B}に対しては,JFMの文字クラス指定から定まる空白
\textsf{JFM-origin~[M]},\textsf{Boundary-A~[\OA]},\textsf{Boundary-B~[\OB]})の挿入は行われない.
\end{itemize}
%</ja>
+%<*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}によるカーニング・ハイフネーションが終わった段階では,……
+
+
+
+%</ja>
+
%<en>\section{Patch for the \Pkg{listings} Package}
%<ja>\section{\Pkg{listings} パッケージへの対応}
意識する必要はない.
%</ja>
-%<en>\subsection{Notes}
+%<en>\subsection{Notes and additional keys}
%<ja>\subsection{注意}
%<*en>
\paragraph{Escaping to \LaTeX}
「\cs{}\IVSA FFFFF」というcontrol symbolが実行されることになる.
%</ja>
+%<*en>
+\paragraph{Variation selectors}
+\Pkg{lltjp-listings} add two keys, namely \texttt{vsraw}~and~\texttt{vscmd},
+which specify how variation selectors are treated in
+\texttt{lstlisting} or other enviroments.
+Note that these additional keys are not usable in the preamble,
+since \Pkg{lltjp-listings} is loaded at \verb+\begin{document}+.
+
+\texttt{vsraw} is a key which takes a boolean value, and its default value is
+false.
+\begin{itemize}
+ \item If the \texttt{vsraw} key is true, then
+variation selectors are ``combined'' with the previous character.
+%</en>
%<*ja>
\paragraph{異体字セレクタの扱い}
\texttt{lstlisting} 環境などの内部にある異体字セレクタを扱うため,
\item trueの場合は,異体字セレクタは「直前の文字に続けて」出力される.
もしもIVSサポート(\ref{ssec-ltjotf}節)が有効になっていた場合は,
以下の例(左側は入力,右側はその出力)のようになる.
+%</ja>
\begin{LTXexample}
\begin{lstlisting}[vsraw=true]
葛󠄀城市,葛󠄁飾区,葛西
\end{lstlisting}
\end{LTXexample}
+%<*en>
+\item If the \texttt{vsraw} key is false, then
+variation selectors are typeset by an appropriate command, which is specified by
+ the \texttt{vscmd} key.
+The default setting of the \texttt{vscmd} key produces the following.
+%</en>
+%<*ja>
\item falseの場合は,異体字セレクタは適当な命令によって「見える形で」出力される.
どのような形で出力されるかを規定するのが \texttt{vscmd} キーであり,
\Pkg{lltjp-listings} の標準設定では以下の例の右側のように出力される.
+%</ja>
\begin{LTXexample}
\begin{lstlisting}[vsraw=false,
vscmd=\ltjlistingsvsstdcmd]
葛󠄀城市,葛󠄁飾区,葛西
\end{lstlisting}
\end{LTXexample}
-ちなみに,本ドキュメントでは次のようにしている:
+%<ja> ちなみに,本ドキュメントでは次のようにしている:
+%<en> For example, the following code is the setting of the \texttt{vscmd} key in this document.
\begin{lstlisting}[numbers=left]
\def\IVSA#1#2#3#4#5{%
\textcolor{blue}{\raisebox{3.5pt}{\tt%
\lstset{vscmd=\IVSB}
\end{lstlisting}
\end{itemize}
-既定の出力命令を復活させたい場合は\ \verb+vsraw=\ltjlistingsvsstdcmd+\
+%<*en>
+The default output command of variation selectors is stored in \verb+\ltjlistingsvsstdcmd+.
+%</en>
+%<*ja>
+既定の出力命令を復活させたい場合は\ \verb+vscmd=\ltjlistingsvsstdcmd+\
とすれば良い.
%</ja>
+%<*en>
+\paragraph{The \texttt{doubleletterspace} key}
+Even the column format is \texttt{[c]fixed}, sometimes characters are not vertically aligned.
+The following example is typeset with \texttt{basewidth=2em}, and
+you'll see the leftmost ``\texttt{H}'' are not vertically aligned.
+\begin{lstlisting}[basewidth=2em, basicstyle=\tt,numbers=left]
+:H:
+:HHHH:
+\end{lstlisting}
+
+\Pkg{lltjp-listing} adds the \texttt{doubleletterspace} key (not activated by default, for
+compatibility) to
+improve the situation, namely doubles inter-character space in each output unit.
+With this key, the above input now produces better output.
+\begin{lstlisting}[basewidth=2em, basicstyle=\tt,numbers=left, doubleletterspace]
+:H:
+:HHHH:
+\end{lstlisting}
+%</en>
+%<*ja>
+\paragraph{\texttt{doubleletterspace}キー}
+\Pkg{listings}パッケージで列揃えが \texttt{[c]fixed} となっている場合でも,
+場合によっては文字が縦に揃わない場合もある.
+例を以下に示そう.これは強調するために \texttt{basewidth=2em} を設定している.
+\begin{lstlisting}[basewidth=2em, basicstyle=\tt,numbers=left]
+:H:
+:HHHH:
+\end{lstlisting}
+1行目と2行目の「\texttt{H}」の位置が揃っていないが,
+これは出力単位ごとに,先頭・末尾・各文字間に同じ量の空白を挿入することによる.
+
+\Pkg{lltjp-listing}では,このような症状を改善させるために \texttt{doubleletterspace} キー
+を追加した(標準では互換性のために無効になっている).このキーを有効にすると,
+出力単位中の各文字間の空白を2倍にすることで文字を揃いやすくしている.
+上と同じものを \texttt{doubleletterspace} キーを有効にして組んだものが以下であり,
+きちんと「\texttt{H}」の位置が揃っていることが分かる.
+\begin{lstlisting}[basewidth=2em, basicstyle=\tt,numbers=left, doubleletterspace]
+:H:
+:HHHH:
+\end{lstlisting}
+%</ja>
+
%<en>\subsection{Class of Characters}
%<ja>\subsection{文字種}
\end{itemize}
%<*en>
-Characters above \texttt{U+0080} \emph{except Variation Selectors}
+Characters above or equal to~\texttt{U+0080} \emph{except Variation Selectors}
are classified into above 5~classes by the following rules:
%</en>
%<*ja>
Letter, Other, Kanji, Open, Closeのどれに属するかは次によって決まる:
%</ja>
\begin{itemize}
-%<en>\item \textbf{ALchar}s above \texttt{U+0080} are classified as Letter.
+%<en>\item \textbf{ALchar}s above or equal to~\texttt{U+0080} are classified as Letter.
%<ja>\item (\texttt{U+0080}以降の)\textbf{ALchar}は,すべてLetter扱いである.
%<en>\item \textbf{JAchar}s are classified in the order as follows:
全角単位の値として記述されている.
例えば,行末文字が句点「。」であり,そこで用いられているJFM中に
-\begin{verbatim}
+\begin{lstlisting}
[2] = {
chars = { '。', ... }, width = 0.5, ...,
end_stretch = 0.5, end_shrink = 0.5,
},
-\end{verbatim}
+\end{lstlisting}
という指定があった場合,この行末の句点は
\begin{itemize}
\item 通常の\TeX の行分割処理で「半角以上の詰め」が行われていた場合,
\item \Param{kanjiskip}
\end{enumerate}
\begin{enumerate}
- \item 行末の和文文字を移動したことで$\textit{total}=0$となれば,
+ \item 行末の\textbf{JAchar}を移動したことで$\textit{total}=0$となれば,
調整の必要はなく,行が格納されているhboxの
\texttt{glue\_set}, \texttt{glue\_sign}, \texttt{glue\_order}を再計算すればよい.
以降,$\textit{total}\neq 0$と仮定する.
\texttt{fontloader} の呼び出しでかなり時間を消費することから,
%%% to_table を使わなくしたことで,メモリ使用量は減った
IVS情報をキャッシュに保存することで2回目以降の実行時間を節約している.
+%</ja>
+%<*ja>
\section{複数フォントの「合成」(未完)}
-
\section{\LuaTeX-jaにおけるキャッシュ}
\Pkg{luaotfload}パッケージが,各TrueType・OpenTypeフォントの情報を
キャッシュとして保存しているのと同様の方法で,
非埋め込みの中国語・韓国語フォントを定義する場合,同様のキャッシュが生成される.
キャッシュの名称,必要となるCMapについては表\ref{tab:cid-cache}を参照して欲しい.
-\item[ivs\_***.lua]
-フォント``\texttt{***}''における異体字情報を格納している.構造は以下の通り:
+\item[extra\_***.lua]
+フォント``\texttt{***}''における異体字セレクタの情報,縦組用字形への変換テーブル,そして
+縦組時における幅を格納している.構造は以下の通り:
%</ja>
%<*en>
\subsection{Use of Cache}
\item[ltj-cid-auto-adobe-japan1.lua]
The font table of a CID-keyed non-embedded Japanese font.
This is loaded in every run.
-It is created from two CMaps, \texttt{UniJIS2004-UTF32-H} and
+It is created from three CMaps, \texttt{UniJIS2004-UTF32-\{H,V\}} and
\texttt{Adobe-Japan1-UCS2},
and this is why these two CMaps are needed in the first run of \LuaTeX-ja.
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.
%</en>
\begin{table}[!tb]
\bf \texttt{cid} key&\bf name of the cache &
\multicolumn{2}{c}{\bf used CMaps}\\
\midrule
-Adobe-Japan1-*<j-cid-auto-adobe-japan1.lua&UniJIS2004-UTF32-H&Adobe-Japan1-UCS2\\
-Adobe-Korea1-*<j-cid-auto-adobe-korea1.lua&UniKS-UTF32-H&Adobe-Korea1-UCS2\\
-Adobe-GB1-*<j-cid-auto-adobe-gb1.lua&UniGB-UTF32-H&Adobe-GB1-UCS2\\
-Adobe-CNS1-*<j-cid-auto-adobe-cns1.lua&UniCNS-UTF32-H&Adobe-CNS1-UCS2\\
+Adobe-Japan1-*<j-cid-auto-adobe-japan1.lua&UniJIS2004-UTF32-*&Adobe-Japan1-UCS2\\
+Adobe-Korea1-*<j-cid-auto-adobe-korea1.lua&UniKS-UTF32-*&Adobe-Korea1-UCS2\\
+Adobe-GB1-*<j-cid-auto-adobe-gb1.lua&UniGB-UTF32-*&Adobe-GB1-UCS2\\
+Adobe-CNS1-*<j-cid-auto-adobe-cns1.lua&UniCNS-UTF32-*&Adobe-CNS1-UCS2\\
\bottomrule
\end{tabular}
\end{table}
{
[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>
縦組を実装している.
\LuaTeX-jaにおける縦組の実装は
-\pTeX ã\81«ã\81\8aã\81\91ã\82\8bå®\9fè£\85(\cite{ptexdoc,ptextug})ã\82\92ã\83\99ã\83¼ã\82¹ã\81«ã\81\97ã\81¦ã\81\8aã\82\8aï¼\8câ\80¦â\80¦
+\pTeX ã\81«ã\81\8aã\81\91ã\82\8bå®\9fè£\85(\cite{ptexdoc,ptextug})ã\82\92ã\83\99ã\83¼ã\82¹ã\81«ã\81\97ã\81¦ã\81\84ã\82\8bï¼\8e
-\subsection{\textit{direction}~whatsit}
+\subsection{direction~whatsit}
\textit{direction}~whatsitとは,\textit{direction}という特定の \verb+user_id+ を持つ
-whatsitのことである.このwhatsitは,以下の3つの役割がある.
-\begin{enumerate}
-\def\labelenumi{(\roman{enumi})}
- \item 「現在作成中のリストの組方向が \cs{tate} 等により変更された」ことを表す.\\
-「現在の組方向」は \verb+\ltj@dir@count+ というカウンタに格納されているが,それだけでは
-\verb+hpack_filter+コールバックなどから正しく処理対象のリストの組方向を正しく取得すること
- はできない(\ref{ssec-stack}節参照)ため,このように別途whatsitを用いている.
- \item \cs{hbox},~\cs{vbox}によって作成されたボックスの組方向を表す.\\
-原則として,ボックスの組方向はattribute \verb+\ltj@dir+ に格納されることになっている.しか
- し,新規に作成されるボックスのattributeをコールバックの内部から制御するには,
-\verb+tex.setattribute+ による方法しかなく,これは不安定である.
-
-なお,この役割のdirection whatsitは,次の(iii)の役割も一緒に持っている.
- \item 「異方向における寸法」の記録用.\\
-例えば \cs{box0} に横組のボックスが格納されている時,縦組や \cs{dtou} 方向
-における寸法値は((ii)の役割として作成された)direction~whatsitが
-格納しているノードリストに格納される.
-\end{enumerate}
-このように複数の役割をもたせているので,
-\begin{verbatim}
-% yoko direction
-\setbox0=\hbox{\tate B}
-\noindent \unhbox0 A
-\end{verbatim}
-のような場合に,「(ii)の役割の\textit{direction}~whatsitが(i)の役割として認識され,
-このリストは縦組とみなされるのではないか?」と思うかもしれない.しかし,
-(i)の役割と(ii)の枠割の\textit{direction}~whatsitは \verb+\ltj@icflag+ の値により
-区別されているので,そのような混乱は起こらない.
-
-\medskip
-(ii)の役割のdirection whatsitは,各ボックスの内容を表すリストの先頭に挿入されるが,
-例外が以下の2つある:
+whatsitのことであり,以下のタイミングで作られる.
\begin{itemize}
- \item \verb+\hbox{}+, \verb+\vbox{}+ といった,
+ \item 組方向を \cs{tate} 等で変更したとき.
+ \item \cs{hbox}, \cs{vbox}, \cs{vtop} による明示的なボックスの開始時.\\
+\verb+\hbox{}+, \verb+\vbox{}+ といった,
\begin{itemize}
\item \cs{tate} 等によりボックス内部の組方向を変更していない
\item ボックスの中身のリストが空である
\end{itemize}
場合は,\LuaTeX の \verb+hpack_filter+, \verb+vpack_filter+ といった
-callbackに処理が回らないので,この場合にはdirection whatsitは挿入されない.
- \item \verb+\vtop{...}+ の場合は,先頭にdirection whatsitを置くと
-ボックスの高さが正しく設定されない.そのため,この場合に限っては
-direction whatsitはリストの2番目に挿入されることとなる.
+callbackに処理が回らない.そこで,\LuaTeX-ja では,\cs{everyhbox}, \cs{everyvbox} を利用す
+ ることで各ボックスの先頭に確実に追加するようにしている\footnote{%
+ 問題は \cs{hbox to 25pt\{\}} という状況である.実際のこのボックスの中身は空でない(少な
+ くともdirection whatsitがある)ため,何も対策をしなければhpack時にUnderfill警告が発
+ 生してしまうことになる.\LuaTeX-jaではそうならないように「\cs{hbadness},
+ \cs{vbadness} を一時的に10000に変更し,hpack, vpack後に元の値に戻す」処理を行ってい
+ る.
+}.
+ \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になるという問題が発生する.そのため,この場合に限っては
+vpack時にdirection whatsitをリストの2番目に移動させている.
+
+direction whatsitはあくまでも組方向処理のための補助的なノードであるので,
+\cs{unhbox}, \cs{unhcopy} によってボックスの中身が展開される時には展開直前に削除される.
+これは
+\begin{lstlisting}
+ % yoko direction
+\setbox0=\hbox{\tate B}
+\noindent % 水平モードに入る.この時点でのリストの中身は空
+\unhbox0 A
+\end{lstlisting}
+といった場合に,段落が縦組で組まれたり,あるいは
+\begin{lstlisting}
+\setbox0=\hbox{}
+\leavevmode \hbox{A}\unhbox0
+\setbox1=\lastbox % \box1 はどうなる?
+\end{lstlisting}
+で \cs{box1} が \cs{hbox\{A\}} でなく空になってしまうことを防ぐためである.
+
-\subsection{異方向のボックスの整合処理}
+\subsection{\textit{dir\_box}}
縦中横など異方向のボックスを配置する場合に,周囲の組方向と大きさを整合させるため,
\LuaTeX-jaでは \verb+\ltj@dir+ が128以降の\textit{hlist\_node}, \textit{vlist\_node}を
用いる.これらは\pTeX における\textit{dir\_node}の役割と同じ果たしており,
-この文章中でも\textit{dir\_node}と呼称する.
+この文章中では\textit{dir\_box}と呼称する.
+
+\subsubsection{異方向のボックスの整合}
+\textit{dir\_box}の第一の使用目的は,異方向のボックスの大きさを整合させることである.
+例えば,
+\begin{lstlisting}
+ % yoko direction
+平成\hbox{\tate 26}年
+\end{lstlisting}
+は段落中で
+\[
+ \xymatrix{
+ {}\Node{glyph}{`平'}\ar[r]&{}\Node{glyph}{`成'}\ar[r]&
+ {}\HNode{hbox}{10.00003}{3.02779}{0.0}\ar[r]\ar[d]^{\text{中身}}&{}\Node{glyph}{`年'}\\
+ &&{}\Node{whatsit}{\cs{tate}}\ar[r]&{}\Node{glyph}{`2'}\ar[r]&{}\Node{glyph}{`6'}
+ }
+\]
+というリストを作る.その後,この段落が終了したときに,
+\LuaTeX-jaの\textbf{JAglue}挿入処理が行われ
+\[
+ \xymatrix{
+ {}\Node{glyph}{`平'}\ar[r]
+ &{}\textcolor{blue}{\Node{glue}{\Param{xkanjiskip}}}\ar[r]
+ &{}\Node{glyph}{`成'}\ar[r]
+ &{}\textcolor{blue}{\Node{penalty}{0}}
+ \ar`r[d] `[l] `[ddll] `[dl] [dl]
+ \\
+ &&{}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{yoko})}{3.02779}{10.00003}{0.0}}\ar[r]\ar[d]^{\text{中身}}
+ &{}\textcolor{blue}{\Node{penalty}{0}}\ar[r]
+ &{}\Node{glyph}{`年'}\\
+ &&{}\HNode{hbox}{10.00003}{3.02779}{0.0}\ar[d]^{\text{中身}}\\
+ &&{}\Node{whatsit}{\cs{tate}}\ar[r]&{}\Node{glyph}{`2'}\ar[r]&{}\Node{glyph}{`6'}
+ }
+\]
+のようになる(青字は\textbf{JAglue},赤字が整合処理のための\textit{dir\_box}である).
+\TeX の \cs{showbox} 形式で書けば
+
+\medskip{\narrowbaselines\ttfamily\obeylines\parindent0pt
+\catcode`\@=0 @catcode`@\=12
+.\tenmin 平
+@textcolor{blue}{.\glue 0.0 plus 0.4 minus 0.4}
+.\tenmin 成
+@textcolor{blue}{.\penalty 0}
+@textcolor{red}{.\hbox(10.00003+0.0)x3.02779, direction TLT}
+..\hbox(3.02779+0.0)x10.00003, direction TLT
+...\whatsit4=[]
+...\tenrm 2
+...\tenrm 6
+@textcolor{blue}{.\penalty 0}
+.\tenmin 年
+}\medskip
+
+\noindent である.
+
+なお,\cs{raise},~\cs{lower}, \cs{moveleft},~\cs{moveright} といったボックス移動命令では.
+移動を正しく表現するために段落やボックスの途中でも異方向のボックスは\textit{dir\_box}にカ
+プセル化している.
+例えば
+\begin{lstlisting}
+ % yoko direction
+平成\raise1pt\hbox{\tate 26}年\showlists
+\end{lstlisting}
+は以下のような結果を得る.
+
+\medskip{\narrowbaselines\ttfamily\obeylines\parindent0pt
+\catcode`\@=0 @catcode`@\=12
+(前略)
+\tenrm 平
+\tenrm 成
+@textcolor{red}{\hbox(10.00003+0.0)x3.02779, shifted -1.0, direction TLT}
+.\hbox(3.02779+0.0)x10.00003, direction TLT
+..\whatsit4=[]
+..\tenrm 2
+..\tenrm 6
+\tenrm 年
+}\medskip
+
+また,メインの垂直リストに異方向のボックスが追加される場合にも同様に即座に
+\textit{dir\_box}にカプセル化している.ページ分割のタイミングを正
+しく\TeX が判断するためである.
+\cs{lastbox} によるボックスの取得では,\textit{dir\_box}は削除される.
+
+\subsubsection{異方向のボックス寸法の格納}
+第二の使用目的は,現在の組方向がボックス本来の組方向とは異なる状況で,
+\cs{ltjsetwd} によってボックス寸法を設定されたことを記録することである.
+
+例えば
+\begin{lstlisting}[numbers=left]
+\setbox0=\hbox{\vrule width 10pt height 5pt depth 2pt}
+\setbox1=\hbox{\tate\ltjsetwd0=20pt}
+\wd0=9pt
+\setbox1=\hbox{\dtou\ltjsetwd0=20pt}
+\setbox0=\hbox{\dtou a\box0}
+\end{lstlisting}
+というコードを考える.1行目で \cs{box0} には横組の
+幅10\,pt,高さ5\,pt,深さ2\,ptのボックスが代入される.
+よって,
+\begin{itemize}
+ \item 縦組下では \cs{box0} は幅7\,pt,高さ・深さ5\,ptのボックスとして扱われる.
+ \item \cs{dtou} 下では \cs{box0} は幅7\,pt,高さ10\,pt,深さ0\,ptのボックスとして扱われる.
+\end{itemize}
+このとき,\cs{box0} の\emph{中身}は
+\[
+ \xymatrix{
+ {}\Node{whatsit}{\cs{yoko}}\ar[r]&{}\Node{rule}{}
+ }
+\]
+である.
+
+さて,2行目で縦組時の \cs{box0} の幅が20\,ptに設定される.この情報が
+direction~whatsit内部のノードリストに,\textit{dir\_box}として格納される:
+\[
+ \xymatrix{
+ {}\Node{whatsit}{\cs{yoko}}\ar[r]\ar[d]_{\text{中身}}&{}\Node{rule}{}\\
+ {}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{tate})}{20.0}{5.0}{5.0}}
+ }
+\]
+
+次に,3行目では横組時の,つまり \cs{box0} 本来の組方向での深さが9\,ptに変更される.
+このとき,\cs{box0} は
+\begin{itemize}
+ \item 縦組下では寸法代入が既に行われているので,2行目で作成された\textit{dir\_box}の通り
+ に幅20\,pt,高さ・深さ5\,ptのボックスとして扱われる.
+ \item \cs{dtou} 下ではまだ寸法代入が行われていないので,
+\cs{box0} の寸法変更に追従し,幅7\,pt,高さ9\,pt,深さ0\,ptのボックスとして扱われる.
+\end{itemize}
+4行目では \cs{dtou} 下での\cs{box0} の幅が20\,ptに設定されるので,2行目と同じように
+\[
+ \xymatrix{
+ {}\Node{whatsit}{\cs{yoko}}\ar[r]\ar[d]_{\text{中身}}&{}\Node{rule}{}\\
+ {}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{dtou})}{20.0}{9.0}{0.0}}\ar[r]&
+ {}\HNode{\textit{dir\_box} (\cs{tate})}{20.0}{5.0}{5.0}
+ }
+\]
+と\textit{dir\_box}が作成される.
+
+このように寸法代入によってつくられた\textit{dir\_box}は,前節の整合過程のときに再利用され
+る.上記の例でいえば,5行目を実行した後の \cs{box0} の内容は
+\[
+ \xymatrix{
+ {}\Node{whatsit}{\cs{dtou}}\ar[r]&
+ {}\Node{glyph}{`a'}\ar[r]&
+ {}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{dtou})}{20.0}{9.0}{0.0}}\ar[d]_{\text{中身}}\\
+ &&{}\HNode{hbox}{9.0}{5.0}{2.0}\ar[d]_{\text{中身}}\\
+ &&{}\Node{whatsit}{\cs{yoko}}\ar[r]&{}\Node{rule}{}
+ }
+\]
+のようになる.
%</ja>
+\newpage
\begin{thebibliography}{99}
\addcontentsline{toc}{section}{\refname}
\bibitem{texbytopic}
\\\null\hfill\texttt{.../texmf-dist/doc/ptex/base/ptexdoc.pdf}
\bibitem{ptextug} Hisato Hamano. \newblock
\textit{Vertical Typesetting with \TeX}, TUGBoat~\textbf{11}(3), 346--352, 1990.
+\bibitem{pdfstd} International Organization for Standardization. \newblock
+ISO 32000-1:2008, \textit{Document management -- Portable document format -- Part 1: PDF
+ 1.7}, 2008. \newblock
+\\\null\hfill
+\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>
%<*showexpl>