%<*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 \emph{\LuaTeX-ja does all process only with Lua and \TeX\ macros},
-while \pTeX\ is an engine extension of \TeX82.
-This means that several features of \pTeX\ are not completely implemented
-in \LuaTeX-ja.
-%</en>
-%<*ja>
-\item \pTeX はエンジン拡張であったのに対し,
-\emph{\LuaTeX-jaはLuaコードと\TeX マクロを用いて全てを実装している}.
-そのため,\pTeX のいくつかの機能は\LuaTeX-ja に(そのままの形では)実装していない.
-%</ja>
-\begin{itemize}
-%<*en>
- \item \pTeX\ addes several primitives, such as \cs{kanjiskip},
+\paragraph{Command names} \pTeX\ addes several primitives, such as \cs{kanjiskip},
\cs{prebreakpenalty},~and,~\cs{ifydir}. They can be used as follows:
%</en>
%<*ja>
- \item 例えば\pTeX で追加された次のようなプリミティブ
+\paragraph{命令の名称} 例えば\pTeX で追加された次のようなプリミティブ
%</ja>
\begin{verbatim}
\kanjiskip=10pt \dimen0=kanjiskip
+\tbaselineshift=0.1zw
+\dimen0=\tbaselineshift
\prebreakpenalty`ぁ=100
\ifydir ... \fi
\end{verbatim}
%<en> Instead of them, we have to write as the following.
%<ja> は\LuaTeX-jaには存在しない.\LuaTeX-jaでは以下のように記述することになる.
\begin{verbatim}
-\ltjsetparameter{kanjiskip} \dimen0=\ltjgetparameter{kanjiskip}
+\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>
+特に注意してほしいのは,\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 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>
-\end{itemize}
-
-
-
%<*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>
ちょ\hbox{}っと
\end{lstlisting}
-
%<*en>
\item In the process, two Japanese fonts which only differ in their ``real''
fonts are identified.
%</ja>
\end{itemize}
-%<*ja>
-\item ****版からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている.
-\LuaTeX のコールバックの制限などにより,特に異なった組方向のボックスを扱う場合には
-仕様が異なるので注意.
-%</ja>
-
%<*en>
-\item Japanese characters in discretionary break (\cs{discretionary}) is not supported.
+\paragraph{Directions}
+From 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 \cs{discretionary} 内に直接和文文字を記述することはサポートされない.和文文字をどう
- しても使いたい場合は \cs{hbox} で括ること.
+\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>
\item \Pkg{luaotfload} v2.5 (or later)
\item \Pkg{adobemapping} (Adobe cmap and pdfmapping files)
\item \Pkg{everysel} (if you want to use \LuaTeX-ja with \LaTeXe)
-%<en>\item \emph{IPAex fonts(\url{http://ipafont.ipa.go.jp/})}
+%<en>\item \emph{IPAex fonts}(\url{http://ipafont.ipa.go.jp/})
%<ja>\item \emph{IPAexフォント(\url{http://ipafont.ipa.go.jp/})}
\end{itemize}
%</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
脚注とボトムフロートの順序は\LaTeX 通りとした.もし\pLaTeX の出力順序が好みならば,
\Pkg{stfloats}パッケージを利用して
\begin{lstlisting}
- \usepackage{stfloats} \fnbelowfloat
+ \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{フォントの変更}
\emph{if and only if \texttt{deluxe} option is specified}.
%</en>
%<*ja>
-上の表において,*つきのフォント(KozGo\dots-Regular)は,\emph{\texttt{deluxe}オプション非指定時に}
+上の表において,*つきのフォント(KozGo\dots-Regular)は,\emph{\texttt{deluxe}オプション指定時に}
ゴシック体細字として用いられる.
%</ja>
%</en>
%<*ja>
和文フォントと欧文フォントを合わせるためには,時々どちらかのベースラインの移動が
-必要になる.\pTeX ではこれは \cs{ybaselineshift} を設定することで
+必要になる.\pTeX ではこれは \cs{ybaselineshift}(または\cs{tbaselineshift})を設定することで
なされていた(\textbf{ALchar}のベースラインがその分だけ下がる).しかし,日本語が主ではない
文書に対しては,欧文フォントではなく和文フォントのベースラインを移動した方がよい.
このため,\LuaTeX-jaでは欧文フォントのベースラインのシフト量
\end{table}
%</ja>
+
\clearpage
%<en>\part{Reference}
%<ja>\part{リファレンス}
%</en>
%<*ja>
先に述べたように,\LuaTeX-jaのほとんどの内部パラメータにアクセスするには
-\cs{ltjsetparameter} と \cs{ltjgetparameter} を用いる.
+\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
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>}のリストを
-引数としてとる.許されるキーの一覧は次の節にある.
+指定するための命令で,\texttt{<key>=<value>}のリストを
+引数としてとる.
\cs{ltjsetparameter} と \cs{ltjglobalsetparameter} の違いはスコープの
違いのみで,
-\cs{ltjsetparameter} はローカルな指定,\cs{ltjglobalsetparameter} は
-グローバルな指定を行う.
-ã\81\93ã\82\8cã\82\89ã\81¯ä»\96ã\81®ã\83\91ã\83©ã\83¡ã\83¼ã\82¿æ\8c\87å®\9aã\81¨å\90\8cæ§\98ã\81« \cs{globaldefs} ã\81®å\80¤ã\81«従う.
+\cs{ltjsetparameter} はローカルな設定を行うのに対し,
+\cs{ltjglobalsetparameter} はグローバルな設定を行う.
+ã\81¾ã\81\9fï¼\8cä»\96ã\81®ã\83\91ã\83©ã\83¡ã\83¼ã\82¿æ\8c\87å®\9aã\81¨å\90\8cæ§\98ã\81« \cs{globaldefs} ã\81®å\80¤ã\81«ã\82\82従う.
%</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>
(see the description of \Param{jcharwidowpenalty} above).
%</en>
%<*ja>
-文字コードが<chr\_code>の文字が持つ付加的な属性値(attribute).
+文字コードが<chr\_code>の文字が持つ付加的な属性値.
現在のバージョンでは,<natural number>の最下位ビットが,その文字が句読点と
みなされるかどうかを表している(上の\Param{jcharwidowpenalty}の記述を参照).
%</ja>
\pTeX では,\cs{prebreakpenalty}, \cs{postbreakpenalty}において,
\begin{itemize}
-\item ä¸\80ã\81¤ã\81®æ\96\87å\97ã\81«å¯¾ã\81\97ã\81¦ï¼\8cpre, postã\81©ã\81¡ã\82\89ã\81\8bä¸\80ã\81¤ã\81\97ã\81\8bæ\8c\87å®\9aã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81ªã\81\8bã\81£
- た(後から指定した方で上書きされる).
-\item pre, postå\90\88ã\82\8fã\81\9bã\81¦256æ\96\87å\97å\88\86ã\81®æ\83\85å ±ã\82\92æ ¼ç´\8dã\81\99ã\82\8bã\81\93ã\81¨ã\81\97ã\81\8bã\81§ã\81\8dã\81ªã\81\8bã\81£ã\81\9fï¼\8e
+\item ä¸\80ã\81¤ã\81®æ\96\87å\97ã\81«å¯¾ã\81\97ã\81¦ï¼\8cpre, postã\81©ã\81¡ã\82\89ã\81\8bä¸\80ã\81¤ã\81\97ã\81\8bæ\8c\87å®\9aã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81ªã\81\84%
+ \footnote{後から指定した方で上書きされる.}
+\item pre, postå\90\88ã\82\8fã\81\9bã\81¦256æ\96\87å\97å\88\86ã\81®æ\83\85å ±ã\82\92æ ¼ç´\8dã\81\99ã\82\8bã\81\93ã\81¨ã\81\97ã\81\8bã\81§ã\81\8dã\81ªã\81\84
\end{itemize}
という制限があったが,\LuaTeX-jaではこれらの制限は解消されている.
%</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.
+ \item We can set \cs{prebreakpenalty} and \cs{postbreakpenalty} up to 256~characters.
\end{itemize}
%</en>
\end{cslist}
+
\subsection{\cs{ltjgetparameter}}
\label{ssec-getpar}
%<*en>
%<*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{0.1em}
+ \else
+ \ltjsetxkanjiskip{0.25em plus 0.15em minus 0.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}
%<ja>\section{plainでも\LaTeX でも利用可能なその他の命令}
%<en>\subsection{Commands for Compatibility with \pTeX}
意識する必要はない.
%</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:
\texttt{fontloader} の呼び出しでかなり時間を消費することから,
%%% to_table を使わなくしたことで,メモリ使用量は減った
IVS情報をキャッシュに保存することで2回目以降の実行時間を節約している.
+%</ja>
+%<*ja>
\section{複数フォントの「合成」(未完)}
-
\section{\LuaTeX-jaにおけるキャッシュ}
\Pkg{luaotfload}パッケージが,各TrueType・OpenTypeフォントの情報を
キャッシュとして保存しているのと同様の方法で,