\catcode`\<=13
\def<#1>{{\normalfont\itshape$\langle$#1$\rangle$}}
+\parskip=\smallskipamount
\begin{document}
\maketitle
\newpage
\part{User's manual}
-\makeatletter\the\ltj@@stack,\the\ltj@@group@level,\the\currentgrouplevel.
-
\section{Introduction}
especially $\varepsilon$-\TeX\ and pdf\TeX, and from changes about
Japanese processing in computers (\textit{e.g.}, the UTF-8 encoding).
-Recently the extensions of p\TeX, namely up\TeX\ (Unicode-implementation
-of p\TeX) and $\varepsilon$-p\TeX\ (Merging of p\TeX and
-$\varepsilon$-\TeX\ extension), have developed to fill those gap to some
+Recently extensions of p\TeX, namely up\TeX\ (Unicode-implementation
+of p\TeX) and $\varepsilon$-p\TeX\ (merging of p\TeX and
+$\varepsilon$-\TeX\ extension), have developed to fill those gaps to some
extent, but gaps are still exist.
However, the appearance of Lua\TeX\ changed the whole situation. With
using Lua `callbacks', users can customize the internal processing of
-Lua\TeX. So there is no need to modify sources of the \TeX\ engine to
+Lua\TeX. So there is no need to modify sources of engines to
support Japanese typesetting: to do this, we only have to write Lua
-script for appropriate callbacks.
+scripts for appropriate callbacks.
\subsection{Major Changes from p\TeX}
-The Lua\TeX-ja package is much influenced by p\TeX\ engine. The initial
+The Lua\TeX-ja package is under much influence of p\TeX\ engine. The initial
target of development was to implement features of p\TeX. However,
-\emph{Lua\TeX-ja is not a just porting of p\TeX: Unnatural
+\emph{Lua\TeX-ja is not a just porting of p\TeX; unnatural
specifications/behaviors of p\TeX\ were not adopted}.
The followings are major changes from p\TeX:
\begin{itemize}
-\item Japanese fonts are a tuple of a `real' font, a Japanese font
+\item A Japanese font is a tuple of a `real' font, a Japanese font
metric (\textbf{JFM}, for short), and an optional string called
`variation'.
\item In p\TeX, a linebreak after Japanese character is ignored (and
- doesn't yield a space), since Japanese texts can linebreak almost
- everywhere. However, Lua\TeX-ja doesn't have this function
- completely, because of a specification of Lua\TeX.
+ doesn't yield a space), since linebreaks (in source files) are
+ permitted almost everywhere in Japanese texts. However, Lua\TeX-ja
+ doesn't have this function completely, because of a specification
+ of Lua\TeX.
\item The insertion process of glues/kerns between two Japanese
characters and between a Japanese character and other characters
(we refer these glues/kerns as \textbf{JAglue}) is rewritten from
\item In the process, two Japanese fonts which differ in their `real'
fonts only are identified.
\end{itemize}
-\item At the present, vertical typesetting (\textit{tategaki}), is not
+\item At the present, vertical typesetting (\emph{tategaki}), is not
supported in Lua\TeX-ja.
\end{itemize}
Japanese.'
\item \textbf{ALchar}: standing for all other characters like alphabets.
\end{itemize}
-\item A word in sans-serif font (like \textsf{prebreakpenalty})
+We say `alphabetic fonts' for fonts used in \textbf{ALchar}, and `Japanese fonts' for fonts used in \textbf{JAchar}.
+
+\item A word in a sans-serif font (like \textsf{prebreakpenalty})
represents an internal parameter for Japanese typesetting, and it
is used as a key in \verb+\ltjsetparameter+ command.
-\item The word ``primitive'' is used not only for primitives in Lua\TeX,
+\item The word `primitive' is used not only for primitives in Lua\TeX,
but also for control sequences that defined in the core module of
Lua\TeX-ja.
\end{itemize}
\subsection{Installation}
To install the Lua\TeX-ja\ package, you will need:
\begin{itemize}
-\item Lua\TeX, version 0.65.0-beta or later.\\
+\item Lua\TeX\ (version 0.65.0-beta or later) and its supporting packages.\\
If you are using \TeX~Live\ 2011 or W32\TeX, you don't have to worry.
\item The source archive of Lua\TeX-ja, of course{\tt:)}
\end{itemize}
\begin{verbatim}
$ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git
\end{verbatim}
-or download the archive of HEAD in the master branch from
+or download the archive of HEAD in \texttt{master} branch from
\begin{flushleft}
\url{http://git.sourceforge.jp/view?p=luatex-ja/luatexja.git;a=snapshot;h=HEAD;sf=tgz}.
\end{flushleft}
\subsection{Cautions}
\begin{itemize}
\item The encoding of your source file must be UTF-8.
-\item conflicts with unicode-math
+\item Not well-tested. In particular, the default setting of the range
+ of \textbf{JAchar} in the present version does not coexist with
+ other packages which use Unicode fonts.
\end{itemize}
\subsection{Using in plain \TeX}
\input luatexja.sty
\end{verbatim}
-This does the minimal setting (like {\tt ptex.tex}) for typesetting Japanese documents:
+This does minimal settings (like {\tt ptex.tex}) for typesetting Japanese documents:
\begin{itemize}
-\item The following 6 Japanese fonts are preloaded.
+\item The following 6~Japanese fonts are preloaded:
\begin{center}
\begin{tabular}{ccccc}
\toprule
\textbf{classification}&\textbf{font name}&\textbf{13.5\,Q}&\textbf{9.5\,Q}&\textbf{7\,Q}\\\midrule
-\textit{mincho}&Ryumin-Light &\verb+\tenmin+&\verb+\sevenmin+&\verb+\fivemin+\\
-\textit{gothic}&GothicBBB-Medium&\verb+\tengt+ &\verb+\sevengt+ &\verb+\fivegt+\\
+\emph{mincho}&Ryumin-Light &\verb+\tenmin+&\verb+\sevenmin+&\verb+\fivemin+\\
+\emph{gothic}&GothicBBB-Medium&\verb+\tengt+ &\verb+\sevengt+ &\verb+\fivegt+\\
\bottomrule
\end{tabular}
\end{center}
dimension \verb+\jQ+.
\item It is widely accepted that the font `Ryumin-Light' and
- `GothicBBB-Medium' aren't embedded into PDF files, and the PDF
- reader substitutes them by some external Japanese font. We adopt
- this custom to the default setting.
-\item size
+ `GothicBBB-Medium' aren't embedded into PDF files, and PDF reader
+ substitute them by some external Japanese fonts (\textit{e.g.},
+ Kozuka Mincho is used in Adobe Reader). We adopt this custom to
+ the default setting.
+\item You may notice that size of above fonts is slightly smaller than
+ their alphabetic counterparts: for example, the size
+ \verb+\texmin+ is $13.5\,\textrm{Q}\simeq 9.60444\,\textrm{pt}$. This is intensional: ...
\end{itemize}
\item A character in Unicode is treated as \textbf{JAchar} if and only
if its code-point has more than or equal to U+0100.
-\item The amount of glue that are inserted between \textbf{JAchar} and
- \textbf{ALchar} (the parameter \textsf{xkanjiskip}) is set to
+\item The amount of glue that are inserted between a \textbf{JAchar} and
+ an \textbf{ALchar} (the parameter \textsf{xkanjiskip}) is set to
\[
0.25\,\hbox{\verb+\zw+}^{+1\,\text{pt}}_{-1\,\text{pt}} = \frac{27}{32}\,\mathrm{mm}^{+1\,\text{pt}}_{-1\,\text{pt}}.
\]
-Here \verb+\zw+ is a counterpart of \texttt{em} for Japanese fonts, that is, the length of `full-width' in the current Japanese font.
+Here \verb+\zw+ is the counterpart of \texttt{em} for Japanese fonts, that is, the length of `full-width' in current Japanese font.
\end{itemize}
\subsection{Using in \LaTeX}
\begin{verbatim}
\usepackage{luatexja}
\end{verbatim}
-It also does the minimal setting (the counterpart in p\LaTeX\ is {\tt
+It also does minimal settings (counterparts in p\LaTeX\ are {\tt
plfonts.dtx} and {\tt pldefs.ltx}):
\begin{itemize}
-\item {\tt JY3} is used as the font encoding for Japanese fonts (in horizontal direction).\\
-If vertical typesetting is supported by Lua\TeX-ja, {\tt JT3} will be used for vertical fonts.
+\item {\tt JY3} is the font encoding for Japanese fonts (in horizontal direction).\\
+When vertical typesetting is supported by Lua\TeX-ja in the future, {\tt JT3} will be used for vertical fonts.
\item Two font families {\tt mc} and {\tt gt} are defined:
\begin{center}
\begin{tabular}{ccccc}
\toprule
\textbf{classification}&\textbf{family}&\verb+\mdseries+&\verb+\bfseries+&\textbf{scale}\\\midrule
-\textit{mincho}&\tt mc&Ryumin-Light &GothicBBB-Medium&0.960444\\
-\textit{gothic}&\tt gt&GothicBBB-Medium&GothicBBB-Medium&0.960444\\
+\emph{mincho}&\tt mc&Ryumin-Light &GothicBBB-Medium&0.960444\\
+\emph{gothic}&\tt gt&GothicBBB-Medium&GothicBBB-Medium&0.960444\\
\bottomrule
\end{tabular}
\end{center}
+\textbf{Note on fonts in bold series}
+
\item Japanese characters in math mode are typeset by the font family {\tt mc}.
\end{itemize}
-However, the above setting is not sufficient for Japanese-based documents. To do this,
-You are better to use class files other than {\tt article.cls}, {\tt book.cls}, ...
-The better alternatives are:
-\begin{itemize}
-\item BXjscls
-\item ltjarticle, ltjbook?
-\item ltjsarticle, ltjsbook?
-\end{itemize}
+However, above settings are not sufficient for Japanese-based
+documents. To typeset Japanese-based documents, You are better to use
+class files other than {\tt article.cls}, {\tt book.cls}, ... At the
+present, BXjscls (\texttt{bxjsarticle.cls} and \texttt{bxjsbook.cls}, by
+Takayuki Yato) are better alternative. It is not determined whether
+Lua\TeX-ja will develop and contain counterparts of major classes used
+in p\TeX\ (including jsclasses by Haruhiko Okumura).
\subsection{Changing Fonts}
\paragraph{Remark: Japanese Characters in Math Mode}
\end{LTXexample}
We (the project members of Lua\TeX-ja) think that using
-Japanese characters in math mode are allowed if these are used as identifiers.
+Japanese characters in math mode are allowed if and only if these are used as identifiers.
In this point of view,
\begin{itemize}
\item The lines 1~and~2 above are not correct, since `高温' in above is used as a textual label, and
`よって' is used as a conjunction.
\item However, the line~3 is correct, since `素' is used as an identifier.
\end{itemize}
-
Hence, in our opinion, the above input should be corrected as:
\begin{LTXexample}
$f_{\text{高温}}$~%
$5\in{}素:=\{\,p\in\mathbb N:\text{$p$ is a prime}\,\}$.
\end{LTXexample}
%BUG?: \{\}がなければ「素」がでない.上の段落の「よって」もでてない.
-
-
-どう繋ごうか?
-
-In this chapter, we don't describe how to change Japanese fonts in
-math mode. For the method, please see Part~\ref{part-ref}.
+We also believe that using Japanese characters as identifiers is rare,
+hence we don't describe how to change Japanese fonts in math mode in
+this chapter. For the method, please see Part~\ref{part-ref}.
\paragraph{plain \TeX}
\paragraph{NFSS2}
-For \LaTeXe, Lua\TeX-ja simply adopted font selection system from that
-of p\LaTeXe\ (in: {\tt plfont.dtx}).
+For \LaTeXe, Lua\TeX-ja simply adopted the font selection system from that
+of p\LaTeXe\ (in {\tt plfonts.dtx}).
\begin{itemize}
\item Two control sequences \verb+\mcdefault+ and \verb+\gtdefault+ are
- used to specify the default font family for \textit{mincho} and
- \textit{gothic}, respectively.
+ used to specify the default font families for \emph{mincho} and
+ \emph{gothic}, respectively. Default values: \texttt{mc} for
+ \verb+\mcdefault+ and \texttt{gt} for \verb+\gtdefault+.
\item Commands \verb+\fontfamily+, \verb+\fontseries+,
\verb+\fontshape+ and \verb+\selectfont+ can be used to change
attributes of Japanese fonts.
\end{itemize}
\paragraph{fontspec}
-To use with \texttt{fontspec} package, it is needed to load
+To coexist with \texttt{fontspec} package, it is needed to load
\texttt{luatexja-fontspec} package in the preamble. This additional
package automatically loads \texttt{luatexja} and \texttt{fontspec}
package, if needed.
-In \texttt{luatexja-fontspec} package, the following 4 commands are defined as
+In \texttt{luatexja-fontspec} package, the following 7~commands are defined as
counterparts of original commands in \texttt{fontspec}:
\begin{center}
\begin{tabular}{ccccc}
&\verb+\jfontspec+&\verb+\setmainjfont+&\verb+\setsansjfont+&\verb+\newjfontfamily+\\
alphabetic fonts
&\verb+\fontspec+&\verb+\setmainfont+&\verb+\setsansfont+&\verb+\newfontfamily+\\
+\midrule
+Japanese fonts
+&\verb+\newjfontface+&\verb+\defaultjfontfeatures+&\verb+\addjfontfeatures+\\
+alphabetic fonts
+&\verb+\newfontface+&\verb+\defaultfontfeatures+&\verb+\addfontfeatures+\\
\bottomrule
\end{tabular}
\end{center}
+使用例
+
Note that there is no command named \verb+\setmonojfont+, since it is
-popular for Japanese fonts that (nearly) all Japanese glyphs have the same width.
+popular for Japanese fonts that nearly all Japanese glyphs have same widths.
\section{Changing Parameters}
-There are many parameters in Lua\TeX-ja. And due to the implementation,
-most of them were not stored as internal register of \TeX, but as an
-original storage system in Lua\TeX-ja. Hence, to change or recall those
+There are many parameters in Lua\TeX-ja. And due to the behavior of Lua\TeX,
+most of them are not stored as internal register of \TeX, but as an
+original storage system in Lua\TeX-ja. Hence, to assign or acquire those
parameters, you have to use commands \verb+\ltjsetparameter+ and
\verb+\ltjgetparameter+.
\subsection{Editing the range of \textbf{JAchar}}
As noted before, the default setting is:
\begin{center}
-A character in Unicode is treated as \textbf{JAchar} if and only if its
+A character in Unicode is treated as \textbf{JAchar},\\
+ if and only if its
code-point has more than or equal to U+0100.
\end{center}
$\uparrow$ TODO: CHANGE THIS!
\subsection{\textsf{kanjiskip} and \textsf{xkanjiskip}}\label{subs-kskip}
\textbf{JAglue} is divided into the following three categories:
\begin{itemize}
-\item Glues/kerns specified in JFM. If \verb+\inhibitglue+ is issued,
- this glue will be not inserted.
+\item Glues/kerns specified in JFM. If \verb+\inhibitglue+ is issued around a Japanese character,
+ this glue will be not inserted at the place.
\item The default glue which inserted between two \textbf{JAchar}s ({\sf
kanjiskip}).
\item The default glue which inserted between a \textbf{JAchar} and an
\subsection{Insertion Setting of \textsf{xkanjiskip}}
It is not desirable that \textsf{xkanjiskip} is inserted between every
-boundary between \textbf{JAchar} and \textbf{ALchar}. For example,
+boundary between \textbf{JAchar}s and \textbf{ALchar}s. For example,
\textsf{xkanjiskip} should not be inserted after opening parenthesis
(\textit{e.g.}, compare `(あ' and `(\hskip\ltjgetparameter{xkanjiskip}あ').
Lua\TeX-ja can control whether \textsf{xkanjiskip} can be inserted
-before/after a character, by using \textsf{jaxspmode} and
-\textsf{alxspmode} parameters.
+before/after a character, by changing \textsf{jaxspmode} for \textbf{JAchar}s and
+\textsf{alxspmode} parameters \textbf{ALchar}s respectively.
\begin{LTXexample}
\ltjsetparameter{jaxspmode={`あ,preonly}, alxspmode={`\!,postonly}}
pあq い!う
The second argument {\tt preonly} means `the insertion of
\textsf{xkanjiskip} is allowed before this character, but not after'.
the other possible values are {\tt postonly}, {\tt allow} and {\tt
-inhibit}.
+inhibit}. For the compatibility with p\TeX, natural numbers between
+0~and~3 are also allowed as the second argument\footnote{But we don't
+recommend this: since numbers 1~and~2 have opposite meanings in
+\textsf{jaxspmode} and \textsf{alxspmode}.}.
-If you want to enable/disable all insertion of \textsf{kanjiskip} and
+If you want to enable/disable all insertions of \textsf{kanjiskip} and
\textsf{xkanjiskip}, set \textsf{autospacing} and \textsf{autoxspacing}
parameters to {\tt false}, respectively.
\subsection{Shifting Baseline}
To make a match between a Japanese font and an alphabetic font, sometimes
-the shifting of baseline of one of the pair. In p\TeX, this is achieved
+shifting of the baseline of one of the pair is needed. In p\TeX, this is achieved
by setting \verb+\ybaselineshift+ to a non-zero length (the
baseline of alphabetic fonts is shifted below). However, for documents
-whose main language is not Japanese,it is good to shift the baseline of
+whose main language is not Japanese, it is good to shift the baseline of
Japanese fonts, but not that of alphabetic fonts.
-Because of this, Lua\TeX-ja can be independently set the shifting amount
+Because of this, Lua\TeX-ja can independently set the shifting amount
of the baseline of alphabetic fonts (\textsf{yalbaselineshift}
parameter) and that of Japanese fonts (\textsf{yjabaselineshift}
parameter).
\ltjsetparameter{yjabaselineshift=0pt, yalbaselineshift=0pt}abcあいう
\ltjsetparameter{yjabaselineshift=5pt, yalbaselineshift=2pt}abcあいう
\end{LTXexample}
-
Here the horizontal line in above is the baseline of a line.
-There is an interesting side-effect from that the baseline of
-Japanese fonts can be shifted: characters in different size can be
+There is an interesting side-effect: characters in different size can be
vertically aligned center in a line, by setting two parameters appropriately.
-
+The following is an example (beware the value is not well tuned):
\begin{LTXexample}
xyz漢字
{\scriptsize
\tradgt{}当/体/医/区
\end{LTXexample}
-Note that the defined control sequence (\verb+\tradgt+ in the example above) using \verb+\jfont+ is not a \textit{font\_def} token.
+Note that the defined control sequence
+(\verb+\tradgt+ in the example above) using \verb+\jfont+ is not a
+\textit{font\_def} token, hence the input like
+\verb+\fontname\tradgt+ causes a error. We denote control sequences which are defined in \verb+\jfont+
+by <jfont\_cs>.
\paragraph{Prefix}
-Besides \texttt{file:} and \texttt{name:} prefixes, \texttt{psft:} can
-be used a prefix in \verb+\jfont+ (and~\verb+\font+) primitive.. Using
+Besides \texttt{file:}\ and \texttt{name:}\ prefixes, \texttt{psft:}\ can
+be used a prefix in \verb+\jfont+ (and~\verb+\font+) primitive. Using
this prefix, you can specify a font that has its name only and is not
related to any real font.
-The typical use of this \texttt{psft:} prefix is ...
+Mainly, use of this \texttt{psft:}\ prefix is for using non-embedding `standard' Japanese fonts (Ryumin-Light and GothicBBB-Medium).
+歴史
\paragraph{Features}
-
+jfm, jfmvar
luatexja.jfont.define_jfm { ... }
\end{verbatim}
Real data are stored in the table which indicated above by
-\verb+{ ... }+. So, the rest of subsection are devoted to describe the
+\verb+{ ... }+. So, the rest of this subsection are devoted to describe the
structure of this table. Note that all lengths in a JFM file are
floating-point numbers in design-size unit.
\item[zw=<length>] (required)
-The amount of the length of the `full-width.
+The amount of the length of the `full-width'.
\item[zh=<length>] (required)
\item[kanjiskip=\{<natural>, <stretch>, <shrink>\}] (optional)
This field specifies the `ideal' amount of \textsf{kanjiskip}. As noted
- in Subsection~\ref{subs-kskip}, if \textsf{kanjiskip} is
- \verb+\maxdimen+, the value specified in this field is used
- (if this field is not specified in JFM, 0\,pt is
- used). Note that <stretch> and <shrink> fields are in
- design-size unit too.
+ in Subsection~\ref{subs-kskip}, if the parameter
+ \textsf{kanjiskip} is \verb+\maxdimen+, the value specified
+ in this field is actually used (if this field is not specified in
+ JFM, it is regarded as 0\,pt). Note that <stretch> and <shrink>
+ fields are in design-size unit too.
\item[xkanjiskip=\{<natural>, <stretch>, <shrink>\}] (optional)
\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}}
\item[chars=\{<character>, ...\}] (required except character class~0)
-This field is a list of \textbf{JAchar}s which are in this character
+This field is a list of characters which are in this character
type~$i$. This field is not required if $i=0$, since all
\textbf{JAchar} which are not in any character class other
than 0 (hence, the character class~0 contains most of
- \textbf{JAchar}s). In the list, a \textbf{JAchar} can be
+ \textbf{JAchar}s). In the list, a character can be
specified by its code number, or by the character itself
- (as a string of length~1).
+ (as a string of length~1).
In addition to those `real' characters, the following `imaginary
characters' can be specified in the list:
-\item[width=<length>, height=<length>, depth=<length>, italic=<length>]\
+\item[width=<length>, height=<length>, depth=<length>, italic=<length>]\ (required)
Specify width of characters in character class~$i$, height, depth and
-the amount of italic correction. These fields are required.
-
+the amount of italic correction. All characters in character class~$i$ are regarded that its width, height and depth are
+as values of these fields.
+But there is one exception: if \texttt{'prop'} is specified in \texttt{width} field, width of a character becomes that of its `real' glyph
\item[left=<length>, down=<length>, align=<align>]\
-These are for adjusting the position of the `real' glyph. Legal
+These fields are for adjusting the position of the `real' glyph. Legal
values of \texttt{align} field are \texttt{'left'},
\texttt{'middle'} and \texttt{'right'}. If one of these
3~fields are omitted, \texttt{left} and \texttt{down} are
\end{figure}
-\item[kern=\{\}]
-\item[glue=\{\}]
+\item[kern={\{[$j$]=<kern>, ...\}}]
+
+\item[glue={\{[$j$]=\{<width>, <stretch>, <shrink>\}, ...\}}]
\end{list}
\subsection{Math Font Family}
+\begin{center}\def\{{\char`\{}\def\}{\char`\}}
+\begin{tabular}{lll}
+\toprule
+&Japanese fonts&alphabetic fonts\\
+font family&\verb+\jfam+&\verb+\fam+\\
+text size&\tt\textsf{jatextfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\textfont+<fam>=<font\_cs>\\
+script size&\tt\textsf{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\scriptfont+<fam>=<font\_cs>\\
+scriptscript size&\tt\textsf{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\scriptscriptfont+<fam>=<font\_cs>\\
+\bottomrule
+\end{tabular}
+\end{center}
+
+
\section{Parameters}
\subsection{{\tt\char92 ltjsetparameter} primitive}
+As noted before, \verb+\ltjsetparameter+ and \verb+\ltjgetparameter+ are
+primitives for accessing most parameters of Lua\TeX-ja. One of the main
+reason that Lua\TeX-ja didn't adopted the syntax similar to that of p\TeX\
+(\textit{e.g.},~\verb+\prebreakpenalty`)=10000+)
+is the position of \verb+hpack_filter+ callback in the source
+of Lua\TeX, see Section~\ref{sec-para}.
+
+\verb+\ltjsetparameter+ and \verb+\ltjglobalsetparameter+ are primitives
+for assigning parameters. These take one argument which is a
+\texttt{<key>=<value>} list. Allowed keys are described in the next
+subsection.
+The difference between
+\verb+\ltjsetparameter+ and \verb+\ltjglobalsetparameter+ is only the
+scope of assignment;
+\verb+\ltjsetparameter+ does a local assignment and
+\verb+\ltjglobalsetparameter+ does a global one.
+They also obey the value of \verb+\globaldefs+,
+like other assignment.
+
+\verb+\ltjgetparameter+ is the primitive for acquiring parameters. It
+always takes a parameter name as first argument, and also takes the
+additional argument---a character code, for example---in some cases.
+\begin{LTXexample}
+\ltjgetparameter{differentjfm},
+\ltjgetparameter{autospacing},
+\ltjgetparameter{prebreakpenalty}{`)}.
+\end{LTXexample}
+\emph{The return value of\/ {\normalfont\tt\char92ltjgetparameter} is
+always a string}. This is outputted by \texttt{tex.write()}, so any
+character other than space~` '~(U+0020) has the category code
+12~(other), while the space has 10~(space).
\subsection{List of Parameters}
In the following list of parameters,
\section{Other Primitives}
\section{Control Sequences for \LaTeXe}
\part{Implementations}\label{part-imp}
-\section{Storing Parameters}
+\section{Storing Parameters}\label{sec-para}
\subsection{Used Dimensions and Attributes}
Here the following is the list of dimension and attributes which are used in Lua\TeX-ja.
\begin{list}{}{%
\end{list}
\subsection{Stack System of Lua\TeX-ja}
-\paragraph{Overview}
+\paragraph{Background}
Lua\TeX-ja has its own stack system, and most parameters of Lua\TeX-ja
are stored in it. To clarify the reason, imagine the parameter
\textsf{kanjiskip} is stored by a skip, and consider the following
\texttt+unsave+, and hence it can't be accessed from \verb+hpack_filter+
callback.
+\paragraph{The method}
+The code of stack system is based on that in a post of Dev-luatex mailing list\footnote{%
+\texttt{[Dev-luatex] tex.currentgrouplevel}, a post at 2008/8/19 by Jonathan Sauer.}.
+
+These are two \TeX\ count registers for maintaining informations:
+\verb+\ltj@@stack+ for the stack level, and \verb+\ltj@@group@level+ for
+the \TeX's group level when the last assignment was done. Parameters
+are stored in one big table named \texttt{charprop\_stack\_table}, where
+\texttt{charprop\_stack\_table[$i$]} stores data of stack level~$i$. If
+a new stack level is created by \verb+\ltjsetparameter+, all data of the
+previous level is copied.
+
+To resolve the problem mentioned in `Background' above, Lua\TeX-ja uses
+another thing: When a new stack level is about to be created, a whatsit
+node whose type, subtype and value are 44~(\textit{user\_defined}),
+30112, and current group level respectively is appended to the current
+list (we refer this node by \textit{stack\_flag}). This enables us to
+know whether assignment is done just inside a hbox. Suppose that the
+stack level is~$s$ and the \TeX's group level is~$t$ just after the hbox
+group, then:
+\begin{itemize}
+\item If there is no \textit{stack\_flag} node in the list of hbox, then
+ no assignment was occurred inside the hbox. Hence values of
+ parameters at the end of the hbox are stored in the stack
+ level~$s$.
+\item If there is a \textit{stack\_flag} node whose value is~$t+1$, then
+ an assignment was occurred just inside the hbox group. Hence
+ values of parameters at the end of the hbox are stored in the
+ stack level~$s+1$.
+\item If there are \textit{stack\_flag} nodes but all of their values
+ are more than~$t+1$, then an assignment was occurred in the box,
+ but it is done is `more internal' group. Hence values of
+ parameters at the end of the hbox are stored in the stack
+ level~$s$.
+\end{itemize}
+
+Note that to work this trick correctly, assignments to \verb+\ltj@@stack+ and \verb+\ltj@@group@level+ have to be local always.
+...
\end{document}
\ No newline at end of file