X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=doc%2Fluatexja.dtx;h=c57030fb43077e62f142629a92c2f5b2e166a7a9;hb=ea2d7f2a654627db2bd9ec31edeb4e447118e1ca;hp=16abb20ed31d79dcdc226ca962242e689a131505;hpb=6d37298f0b6f694b18cd2f7fcd67f74f52b7b96c;p=luatex-ja%2Fluatexja.git diff --git a/doc/luatexja.dtx b/doc/luatexja.dtx index 16abb20..c57030f 100644 --- a/doc/luatexja.dtx +++ b/doc/luatexja.dtx @@ -1,9 +1,9 @@ %<*!showexpl> %#! lualatex -shell-escape -% \documentclass[a4paper,titlepage]{article} -% \documentclass[a4paper,titlepage]{ltjsarticle} -% \documentclass[a4paper,titlepage]{ltjsarticle} +%\documentclass[a4paper,titlepage]{article} +%\documentclass[a4paper,titlepage]{ltjsarticle} +%\documentclass[a4paper,titlepage]{ltjsarticle} %%%%%%%% \makeatletter @@ -26,14 +26,17 @@ %<*en> \usepackage[margin=25mm,footskip=6mm]{geometry} +\usepackage{luatexja-adjust}\ltjdisableadjust \parskip=\smallskipamount % %<*ja> \usepackage[textwidth=45\zw, lines=45, footskip=6mm]{geometry} +\usepackage{luatexja-adjust}%\ltjdisableadjust \advance\leftmargini-1\zw\advance\leftmarginii-1\zw % %<*zh> \usepackage[textwidth=45\zw, lines=45, footskip=6mm]{geometry} +\usepackage{luatexja-adjust}\ltjdisableadjust \advance\leftmargini-1\zw\advance\leftmarginii-1\zw \def\postpartname{编} \DeclareYokoKanjiEncoding{ZH}{}{} @@ -145,8 +148,8 @@ \DeclareRobustCommand\eTeX{\ensuremath{\varepsilon}-\kern-.125em\TeX} \DeclareRobustCommand\LuaTeX{Lua\TeX} \DeclareRobustCommand\pdfTeX{pdf\TeX} -\DeclareRobustCommand\pTeX{p\kern-.05em\TeX} -\DeclareRobustCommand\upTeX{up\kern-.05em\TeX} +\DeclareRobustCommand\pTeX{p\kern-.15em\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} @@ -369,12 +372,12 @@ The followings are major changes from \pTeX: %<*en> \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 + (we refer glues/kerns of both kinds as \textbf{JAglue}) is rewritten from scratch. % %<*ja> -\item 2つの和文文字の間,和文文字と欧文文字の間に入るグルー/カーン - (\textbf{JAglue}と呼ぶ)の挿入処理が0から書き直されている. +\item 2つの和文文字の間や,和文文字と欧文文字の間に入るグルー/カーン + (両者をあわせて\textbf{JAglue}と呼ぶ)の挿入処理が0から書き直されている. % %<*zh> \item 插在日文字符和其他字符言之间的胶/出格(我们将此称为\textbf{JAglue})是重新实现的。 @@ -544,17 +547,17 @@ We say `alphabetic fonts' for fonts used in \textbf{ALchar}, and `Japanese fonts % %<*en> -\item A word in a sans-serif font (like \Param{prebreakpenalty}) +\item A word in a sans-serif font (like \Param{\hyperlink{fld:prebp}{prebreakpenalty}}) means an internal parameter for Japanese typesetting, and it is used as a key in \verb+\ltjsetparameter+ command. % %<*ja> -\item サンセリフ体で書かれた語(例:\Param{prebreakpenalty})は日本語組版用の +\item サンセリフ体で書かれた語(例:\Param{\hyperlink{fld:prebp}{prebreakpenalty}})は日本語組版用の パラメータを表し,これらは \verb+\ltjsetparameter+ コマンドのキーとして 用いられる. % %<*zh> -\item 用无衬线字体表示的词(如:\Param{prebreakpenalty})表示 +\item 用无衬线字体表示的词(如:\Param{\hyperlink{fld:prebp}{prebreakpenalty}})表示 日文排版中的内部便利iang,并用做\verb!\ltjsetparameter!命令一个键。 % @@ -982,10 +985,10 @@ Kozuka Mincho字体替代Ryumin-Light)。我们使用默认设定。 %<*en> \item The amount of glue that are inserted between a \textbf{JAchar} and - an \textbf{ALchar} (the parameter \Param{xkanjiskip}) is set to + an \textbf{ALchar} (the parameter \Param{\hyperlink{fld:xks}{xkanjiskip}}) is set to % %<*ja> -\item \textbf{JAchar}と\textbf{ALchar}の間に入るグルー(\Param{xkanjiskip})の +\item \textbf{JAchar}と\textbf{ALchar}の間に入るグルー(\Param{\hyperlink{fld:xks}{xkanjiskip}})の 量は次のように設定されている: % %<*zh> @@ -1532,25 +1535,25 @@ Use bold gothic as bold mincho. % \item[90jis] %<*en> -Use 90JIS glyphs if possible. +Use fonts with 90JIS glyphs if possible. % %<*ja> -出来る限り90JISの字形を使う. +出来る限り90JISの字形を採用しているフォントを使う. % \item[jis2004] %<*en> -Use JIS2004 glyphs if possible. +Use fonts with JIS2004 glyphs if possible. % %<*ja> -出来る限りJIS2004の字形を使う. +出来る限りJIS2004の字形を採用しているフォントを使う. % \item[jis] %<*en> -Use the JFM \texttt{jfm-jis.lua}, instead of the default JFM of -\LuaTeX-ja, \texttt{jfm-ujis.lua}. +Use the JFM \texttt{jfm-jis.lua}, instead of \texttt{jfm-ujis.lua}, which is the default JFM of +\LuaTeX-ja. % %<*ja> -用いるJFMを\texttt{jfm-jis.lua}とする.このオプションがない時は +用いるJFMを(JISフォントメトリック類似の)\texttt{jfm-jis.lua}にする.このオプションがない時は \LuaTeX-ja標準の\texttt{jfm-ujis.lua}が用いられる. % \end{list} @@ -1618,7 +1621,6 @@ as a substitute for \textit{rounded gothic}. Settings for Hiragino fonts: % %<*ja> -モリサワ・ヒラギノ用の設定はそのようなことは行っていない. まずヒラギノフォントから: % % これらは持っているわけではないので,フォント名が @@ -2120,7 +2122,7 @@ This range consist of the following Unicode ranges, \emph{except characters in t \item \texttt{U+0180}--\texttt{U+024F}: ラテン文字拡張B \item \texttt{U+0250}--\texttt{U+02AF}: IPA拡張(国際音声記号) \item \texttt{U+02B0}--\texttt{U+02FF}: 前進を伴う修飾文字 -\item \texttt{U+0300}--\texttt{U+036F}: ダイアクリティカルマーク(合成可能) +\item \texttt{U+0300}--\texttt{U+036F}: 合成可能な識別記号 \item \texttt{U+1E00}--\texttt{U+1EFF}: ラテン文字拡張追加 % %<*zh> @@ -2140,7 +2142,7 @@ This range consist of the following Unicode ranges, \emph{except characters in t fonts) has some of these characters. % %<*ja> -\item[範囲2${}^{\text{J}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがって多くの +\item[範囲2${}^{\text{J}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがってほとんどの 和文フォント)はこれらの文字を持つ. % %<*zh> @@ -2154,7 +2156,7 @@ This range consist of the following Unicode ranges, \emph{except characters in t \item \texttt{U+1F00}--\texttt{U+1FFF}: Greek Extended % %<*ja> -\item \texttt{U+0370}--\texttt{U+03FF}: ギリシア文字及びコプト文字 +\item \texttt{U+0370}--\texttt{U+03FF}: ギリシア文字・コプト文字 \item \texttt{U+0400}--\texttt{U+04FF}: キリル文字 \item \texttt{U+1F00}--\texttt{U+1FFF}: キリル文字補助 % @@ -2475,31 +2477,31 @@ The block list is indicated in Table~\ref{table-rng7}. kanjiskip}). % %<*ja> -\item デフォルトで2つの\textbf{JAchar}の間に挿入されるグルー(\Param{kanjiskip}). +\item デフォルトで2つの\textbf{JAchar}の間に挿入されるグルー(\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}). % %<*zh> -\item 两个\textbf{JAchar}之间默认插入的胶(\Param{kanjiskip})。 +\item 两个\textbf{JAchar}之间默认插入的胶(\Param{\hyperlink{fld:kanjiskip}{kanjiskip}})。 % %<*en> \item The default glue which inserted between a \textbf{JAchar} and an - \textbf{ALchar} (\Param{xkanjiskip}). + \textbf{ALchar} (\Param{\hyperlink{fld:xks}{xkanjiskip}}). % %<*ja> -\item デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルー(\Param{xkanjiskip}). +\item デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルー(\Param{\hyperlink{fld:xks}{xkanjiskip}}). % %<*zh> -\item \textbf{JAchar}和\textbf{ALchar}之间默认插入的胶(\Param{xkanjiskip})。 +\item \textbf{JAchar}和\textbf{ALchar}之间默认插入的胶(\Param{\hyperlink{fld:xks}{xkanjiskip}})。 % \end{itemize} %<*en> -The value (a skip) of \Param{kanjiskip} or \Param{xkanjiskip} can be +The value (a skip) of \Param{\hyperlink{fld:kanjiskip}{kanjiskip}} or \Param{\hyperlink{fld:xks}{xkanjiskip}} can be changed as the following. % %<*ja> -\Param{kanjiskip}や\Param{xkanjiskip}の値は以下のようにして変更可能である. +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}や\Param{\hyperlink{fld:xks}{xkanjiskip}}の値は以下のようにして変更可能である. % %<*zh> -\Param{kanjiskip}和\Param{xkanjiskip}的设定如下所示: +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}和\Param{\hyperlink{fld:xks}{xkanjiskip}}的设定如下所示: % \begin{lstlisting} \ltjsetparameter{kanjiskip={0pt plus 0.4pt minus 0.4pt}, @@ -2507,20 +2509,20 @@ changed as the following. \end{lstlisting} %<*en> -It may occur that JFM contains the data of `ideal width of \Param{kanjiskip}' -and/or `ideal width of \Param{xkanjiskip}'. -To use these data from JFM, set the value of \Param{kanjiskip} or -\Param{xkanjiskip} to \verb+\maxdimen+. +It may occur that JFM contains the data of `ideal width of \Param{\hyperlink{fld:kanjiskip}{kanjiskip}}' +and/or `ideal width of \Param{\hyperlink{fld:xks}{xkanjiskip}}'. +To use these data from JFM, set the value of \Param{\hyperlink{fld:kanjiskip}{kanjiskip}} or +\Param{\hyperlink{fld:xks}{xkanjiskip}} to \verb+\maxdimen+. % %<*ja> -JFMは「望ましい\Param{kanjiskip}の値」や「望ましい\Param{xkanjiskip}の値」を +JFMは「望ましい\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}の値」や「望ましい\Param{\hyperlink{fld:xks}{xkanjiskip}}の値」を 持っていることがある. -これらのデータを使うためには,\Param{kanjiskip}や\Param{xkanjiskip}の +これらのデータを使うためには,\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}や\Param{\hyperlink{fld:xks}{xkanjiskip}}の 値を \verb+\maxdimen+ の値に設定すればよい. % %<*zh> -当JFM包含“\Param{kanjiskip}理想宽度”和/或“\Param{xkanjiskip}理想宽度”数据时, -上述设定产生作用。如果想用JFM中的数据,请设定\Param{kanjiskip}或\textsf{xkanjiskip}为\verb!\maxdimen!。 +当JFM包含“\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}理想宽度”和/或“\Param{\hyperlink{fld:xks}{xkanjiskip}}理想宽度”数据时, +上述设定产生作用。如果想用JFM中的数据,请设定\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}或\textsf{xkanjiskip}为\verb!\maxdimen!。 % %\subsection{Insertion Setting of \Param{xkanjiskip}} @@ -2528,28 +2530,28 @@ JFMは「望ましい\Param{kanjiskip}の値」や「望ましい\Param{xkanjisk %\subsection{\Param{xkanjiskip}插入设定} %<*en> -It is not desirable that \Param{xkanjiskip} is inserted into every +It is not desirable that \Param{\hyperlink{fld:xks}{xkanjiskip}} is inserted into every boundary between \textbf{JAchar}s and \textbf{ALchar}s. For example, -\Param{xkanjiskip} should not be inserted after opening parenthesis +\Param{\hyperlink{fld:xks}{xkanjiskip}} should not be inserted after opening parenthesis (\textit{e.g.}, compare `(あ' and `(\hskip\ltjgetparameter{xkanjiskip}あ'). -\LuaTeX-ja can control whether \Param{xkanjiskip} can be inserted +\LuaTeX-ja can control whether \Param{\hyperlink{fld:xks}{xkanjiskip}} can be inserted before/after a character, by changing \Param{jaxspmode} for \textbf{JAchar}s and \Param{alxspmode} parameters \textbf{ALchar}s respectively. % %<*ja> -\Param{xkanjiskip}がすべての\textbf{JAchar}と\textbf{ALchar}の境界に -挿入されるのは望ましいことではない.例えば,\Param{xkanjiskip}は開き括弧の +\Param{\hyperlink{fld:xks}{xkanjiskip}}がすべての\textbf{JAchar}と\textbf{ALchar}の境界に +挿入されるのは望ましいことではない.例えば,\Param{\hyperlink{fld:xks}{xkanjiskip}}は開き括弧の 後には挿入されるべきではない(`(あ'と`(\hskip\ltjgetparameter{xkanjiskip}あ'を 比べてみよ). -\LuaTeX-jaでは\Param{xkanjiskip}をある文字の前/後に挿入するかどうかを, +\LuaTeX-jaでは\Param{\hyperlink{fld:xks}{xkanjiskip}}をある文字の前/後に挿入するかどうかを, \textbf{JAchar}に対しては\Param{jaxspmode}を,\textbf{ALchar}に対しては \Param{alxspmode}をそれぞれ変えることで制御することができる. % %<*zh> 并不是在所有的\textbf{JAchar}和\textbf{ALchar}周围插入\textsf{xkanjiskip}都是合适的。 -比如,在开标点之后插入\Param{xkanjiskip}并不合适[如,比较“(あ”和“(\hskip\ltjgetparameter{xkanjiskip}あ”]。 +比如,在开标点之后插入\Param{\hyperlink{fld:xks}{xkanjiskip}}并不合适[如,比较“(あ”和“(\hskip\ltjgetparameter{xkanjiskip}あ”]。 \LuaTeX-ja可以通过设定\textbf{JAchar}的\Param{jaxspmode}以及\textbf{ALchar}的\Param{alxspmode}来控制 -\Param{xkanjiskip}在字符前后的插入。 +\Param{\hyperlink{fld:xks}{xkanjiskip}}在字符前后的插入。 % \begin{LTXexample} \ltjsetparameter{jaxspmode={`あ,preonly}, alxspmode={`\!,postonly}} @@ -2558,12 +2560,12 @@ pあq い!う %<*en> The second argument \texttt{preonly} means `the insertion of -\Param{xkanjiskip} is allowed before this character, but not after'. +\Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed before this character, but not after'. the other possible values are \texttt{postonly}, \texttt{allow} and \texttt{ inhibit}. % %<*ja> -2つ目の引数の \texttt{preonly}は「\Param{xkanjiskip}の挿入はこの文字の +2つ目の引数の \texttt{preonly}は「\Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入はこの文字の 前でのみ許され,後では許さない」ことを意味する.他に指定可能な値は \texttt{postonly}, \texttt{allow}, \texttt{inhibit}である. % @@ -2600,17 +2602,17 @@ One can use also numbers to specify these two parameters (see Subsection~\ref{ss % %<*en> -If you want to enable/disable all insertions of \Param{kanjiskip} and -\Param{xkanjiskip}, set \Param{autospacing} and \Param{autoxspacing} +If you want to enable/disable all insertions of \Param{\hyperlink{fld:kanjiskip}{kanjiskip}} and +\Param{\hyperlink{fld:xks}{xkanjiskip}}, set \Param{autospacing} and \Param{autoxspacing} parameters to \texttt{true}/\texttt{false}, respectively. % %<*ja> -もし全ての\Param{kanjiskip}と\Param{xkanjiskip}の挿入を有効化/無効化 +もし全ての\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}と\Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入を有効化/無効化 したければ,それぞれ\Param{autospacing}と\Param{autoxspacing}を \texttt{true}/\texttt{false}に設定すればよい. % %<*zh> -如果你想要启用/屏蔽所有的\Param{kanjiskip}和\Param{xkanjiskip}插入,设定 +如果你想要启用/屏蔽所有的\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}和\Param{\hyperlink{fld:xks}{xkanjiskip}}插入,设定 \Param{autospacing}和\Param{autoxspcing}为\texttt{ture}/\texttt{false}即可。 % @@ -2857,9 +2859,9 @@ JFMの名前を指定する.もし以前に指定されたJFMが読み込ま \toprule &\tt jfm-ujis.lua&\tt jfm-jis.lua&\tt jfm-min.lua\\ \midrule -%Example~1\footnotemark -%例1\footnotemark -%例1\footnotemark +%Example~1\cite{min10} +%例1\cite{min10} +%例1\cite{min10} &\r{ujis}&\r{jis}&\r{min}\\ %Example~2 %例2 @@ -2871,8 +2873,6 @@ Bounding Box&\t{ujis}&\t{jis}&\t{min}\\ \end{center} \ltjsetparameter{jacharrange={-3}} \end{table} -\footnotetext{from: 乙部厳己, min10フォントについて. -\texttt{http://argent.shinshu-u.ac.jp/\~{\ }otobe/tex/files/min10.pdf}.} %\paragraph{Note: kern feature} %\paragraph{注意:kern feature} @@ -3095,22 +3095,22 @@ floating-point numbers in design-size unit. %(可选) %<*en> -This field specifies the `ideal' amount of \Param{kanjiskip}. As noted +This field specifies the `ideal' amount of \Param{\hyperlink{fld:kanjiskip}{kanjiskip}}. As noted in Subsection~\ref{subs-kskip}, if the parameter - \Param{kanjiskip} is \verb+\maxdimen+, the value specified + \Param{\hyperlink{fld:kanjiskip}{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 and fields are in design-size unit too. % %<*ja> -「理想的な」\Param{kanjiskip}の量を指定する.\ref{subs-kskip}節で述べたように, -もし\Param{kanjiskip}が \verb+\maxdimen+ の値ならば,このフィールドで指定された +「理想的な」\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}の量を指定する.\ref{subs-kskip}節で述べたように, +もし\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}が \verb+\maxdimen+ の値ならば,このフィールドで指定された 値が実際には用いられる(もしこのフィールドがJFMで指定されていなければ, 0\,ptであるものとして扱われる).とのフィールドもdesign-size が単位であることに注意せよ. % %<*zh> -这部分为“理想长度”\Param{kanjiskip}。\ref{subs-kskip}节有详述,如果参数\Param{kanjiskip} +这部分为“理想长度”\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}。\ref{subs-kskip}节有详述,如果参数\Param{\hyperlink{fld:kanjiskip}{kanjiskip}} 为\verb!\maxdimen!,则值设定将会被使用(若再JFM中未设定,则被视为0\,pt)。 请注意,和的长度均为design-size单位。 % @@ -3121,15 +3121,15 @@ This field specifies the `ideal' amount of \Param{kanjiskip}. As noted %(可选) %<*en> -Like the \Param{kanjiskip} field, this field specifies the `ideal' - amount of \Param{xkanjiskip}. +Like the \texttt{kanjiskip} field, this field specifies the `ideal' + amount of \Param{\hyperlink{fld:xks}{xkanjiskip}}. % %<*ja> -\Param{kanjiskip}フィールドと同様に,\Param{xkanjiskip}の「理想的な」量を +\texttt{kanjiskip}フィールドと同様に,\Param{\hyperlink{fld:xks}{xkanjiskip}}の「理想的な」量を 指定する. % %<*zh> -和\Param{kanjiskip}类似,此部分设定\Param{xkanjiskip}的“理想长度”。 +和\texttt{kanjiskip}类似,此部分设定\Param{\hyperlink{fld:xks}{xkanjiskip}}的“理想长度”。 % \end{list} @@ -3378,9 +3378,48 @@ Furthermore, the glyph is shifted according to values of fields \label{fig-pos} \end{figure} -\item[kern={\{[$j$]=, ...\}}] +\item[kern={\{[$j$]=, [$j'$]=\{, []\}...\}}] + +\item[glue={\{[$j$]=\{, , , [], []\}, ...\}}] +%<*ja> +文字クラス$i$の文字と$j$の文字の間に挿入されるkernやglueの量を指定する. + + は\texttt{luatexja-adjust.sty} による優先順位付き + 行長調整(\ref{ssec-adj}節)が有効なときのみ意味を持つ. +このフィールドは省略可能であり,行調整処理におけるこのglueの優先 + 度を$-2$から$+2$の間の整数で指定する.の省略時の値 + は0であり,範囲外の値が指定されたときの動作は未定義である). + +も省略可能フィールドであり,$-1$から$+1$の実数値をとる.省略時の値は0である. +\begin{itemize} +\item $-1$はこのグルーが「前の文字」由来であることを示す. +\item $+1$はこのグルーが「後の文字」由来であることを示す. +\item それ以外の値は,「前の文字」由来のグルーと「後の文字」由来の +グルーが混合されていることを示す. +\end{itemize} +なお,このフィールドの値は\Param{\hyperlink{fld:diffjfm}{differentjfm}}の値が\texttt{pleft},~\texttt{pright},~\texttt{paverage}の値のときのみ実際に用いられる. + +例えば,\cite{x4051}では,句点と中点の間には, +句点由来の二分空きと中点由来の四分空きが挿入されるが,この場合には +\begin{itemize} +\item には$0.5+0.25=0.75$を指定する. +\item には次の値を指定する. +\[ + -1\cdot \frac{0.5}{0.5+0.25} + 1 \cdot \frac{0.25}{0.5+0.25} = -\frac13 +\] +\end{itemize} + +% + +\item[end\_stretch=] +\item[end\_shrink=] +%<*ja> +これらのフィールドは省略可能である. +優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が行 + 末に来た時に,行長を詰める調整・伸ばす調整のた + めにこの文字と行末の間に挿入可能なカーンの大きさを指定する. +% -\item[glue={\{[$j$]=\{, , \}, ...\}}] \end{list} %<*ja> @@ -3467,10 +3506,10 @@ The following is the list of `imaginary characters': %%%行の終端を表す. %%%行尾结束字符。 -\item['diffmet'] -%Used at a boundary between two \textbf{JAchar}s whose JFM or size is different. -%JFMやサイズが異なる2つの\textbf{JAchar}の間の境界として用いられる. -%用于两个不同大小或不同JFM的两个\textbf{JAchar}间边界。 +%%\item['diffmet'] +%%Used at a boundary between two \textbf{JAchar}s whose JFM or size is different. +%%JFMやサイズが異なる2つの\textbf{JAchar}の間の境界として用いられる. +%%用于两个不同大小或不同JFM的两个\textbf{JAchar}间边界。 \item['boxbdd'] %The beginning/ending of a horizontal box, and the beginning of a noindented paragraph. @@ -3993,25 +4032,21 @@ At the present version, the lowermost bit of indicates みなされるかどうかを表している(上の\Param{jcharwidowpenalty}の記述を参照). % -\item[\Param{prebreakpenalty}\,=\{,\}] [\verb+\prebreakpenalty+]\ +\item[\Param{\hypertarget{fld:prebp}{prebreakpenalty}}\,=\{,\}] [\verb+\prebreakpenalty+]\ %<*ja> 文字コードの\textbf{JAchar}が行頭にくることを抑止するために, この文字の前に挿入/追加されるペナルティの量を指定する. -例えば閉じ括弧「〗」は絶対に行頭にきてはならないので,標準で読み込まれる - \texttt{luatexja-kinsoku.tex}において +例えば閉じ括弧「〗」は絶対に行頭にきてはならないので, \begin{verbatim} \ltjsetparameter{prebreakpenalty={`〙,10000}} \end{verbatim} -と,最大値の10000が指定されている.他にも,小書きのカナなど,絶対禁止とい +と,最大値の10000が標準で指定されている.他にも,小書きのカナなど,絶対禁止とい うわけではないができれば行頭にはきて欲しくない場合に,0と 10000の間の値を指定するのも有用であろう. -\begin{verbatim} -\ltjsetparameter{prebreakpenalty={`ゕ,150}} -\end{verbatim} % -\item[\Param{postbreakpenalty}\,=\{,\}] [\verb+\postbreakpenalty+] +\item[\Param{\hypertarget{fld:postbp}{postbreakpenalty}}\,=\{,\}] [\verb+\postbreakpenalty+] %<*ja> 文字コードの\textbf{JAchar}が行末にくることを抑止するために, この文字の後に挿入/追加されるペナルティの量を指定する. @@ -4043,27 +4078,27 @@ At the present version, the lowermost bit of indicates \item[\Param{jaxspmode}\,=\{,\}] %<*en> -Setting whether inserting \Param{xkanjiskip} is allowed before/after a \textbf{JAchar} whose character code is . +Setting whether inserting \Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed before/after a \textbf{JAchar} whose character code is . The followings are allowed for : % %<*ja> -文字コードがの\textbf{JAchar}の前/後ろに\Param{xkanjiskip}の +文字コードがの\textbf{JAchar}の前/後ろに\Param{\hyperlink{fld:xks}{xkanjiskip}}の 挿入を許すかどうかの設定. 以下のが許される: % \begin{description} -%\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character. -%\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される. -%\item[0, \texttt{inhibit}] 插入文字前/后的\Param{xkanjiskip}均被禁止。 -%\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after. -%\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない. -%\item[1, \texttt{preonly}] 文字前允许插入\Param{xkanjiskip},但其后不允许插入。 -%\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before. -%\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない. -%\item[2, \texttt{postonly}] 文字后允许插入\Param{xkanjiskip},但之前不允许插入。 -%\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed both before the character and after the character. This is the default value. -%\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である. -%\item[3, \texttt{allow}] 文字前后均可插入\Param{xkanjiskip}。此为默认值。 +%\item[0, \texttt{inhibit}] Insertion of \Param{\hyperlink{fld:xks}{xkanjiskip}} is inhibited before the character, nor after the character. +%\item[0, \texttt{inhibit}] \Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は文字の前/後ろのいずれでも禁止される. +%\item[0, \texttt{inhibit}] 插入文字前/后的\Param{\hyperlink{fld:xks}{xkanjiskip}}均被禁止。 +%\item[1, \texttt{preonly}] Insertion of \Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed before the character, but not after. +%\item[1, \texttt{preonly}] \Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は文字の前では許されるが,後ろでは許されない. +%\item[1, \texttt{preonly}] 文字前允许插入\Param{\hyperlink{fld:xks}{xkanjiskip}},但其后不允许插入。 +%\item[2, \texttt{postonly}] Insertion of \Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed after the character, but not before. +%\item[2, \texttt{postonly}] \Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は文字の後ろでは許されるが,前では許されない. +%\item[2, \texttt{postonly}] 文字后允许插入\Param{\hyperlink{fld:xks}{xkanjiskip}},但之前不允许插入。 +%\item[3, \texttt{allow}] Insertion of \Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed both before the character and after the character. This is the default value. +%\item[3, \texttt{allow}] \Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である. +%\item[3, \texttt{allow}] 文字前后均可插入\Param{\hyperlink{fld:xks}{xkanjiskip}}。此为默认值。 \end{description} %<*en> This parameter is similar to the \verb+\inhibitxspcode+ primitive of \pTeX, but not compatible with \verb+\inhibitxspcode+. @@ -4078,28 +4113,28 @@ This parameter is similar to the \verb+\inhibitxspcode+ primitive of \pTeX, but \item[\Param{alxspmode}\,=\{,\}] [\verb+\xspcode+] %<*en> -Setting whether inserting \Param{xkanjiskip} is allowed before/after a +Setting whether inserting \Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed before/after a \textbf{ALchar} whose character code is . The followings are allowed for : % %<*ja> -文字コードがの\textbf{ALchar}の前/後ろに\Param{xkanjiskip}の +文字コードがの\textbf{ALchar}の前/後ろに\Param{\hyperlink{fld:xks}{xkanjiskip}}の 挿入を許すかどうかの設定. 以下のが許される: % \begin{description} -%\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character. -%\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される. -%\item[0, \texttt{inhibit}] 插入文字前/后的\Param{xkanjiskip}均被禁止。 -%\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after. -%\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない. -%\item[1, \texttt{preonly}] 文字前允许插入\Param{xkanjiskip},但其后不允许插入。 -%\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before. -%\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない. -%\item[2, \texttt{postonly}] 文字后允许插入\Param{xkanjiskip},但之前不允许插入。 -%\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed before the character and after the character. This is the default value. -%\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である. -%\item[3, \texttt{allow}] 文字前后均可插入\Param{xkanjiskip}。此为默认值。 +%\item[0, \texttt{inhibit}] Insertion of \Param{\hyperlink{fld:xks}{xkanjiskip}} is inhibited before the character, nor after the character. +%\item[0, \texttt{inhibit}] \Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は文字の前/後ろのいずれでも禁止される. +%\item[0, \texttt{inhibit}] 插入文字前/后的\Param{\hyperlink{fld:xks}{xkanjiskip}}均被禁止。 +%\item[1, \texttt{preonly}] Insertion of \Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed before the character, but not after. +%\item[1, \texttt{preonly}] \Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は文字の前では許されるが,後ろでは許されない. +%\item[1, \texttt{preonly}] 文字前允许插入\Param{\hyperlink{fld:xks}{xkanjiskip}},但其后不允许插入。 +%\item[2, \texttt{postonly}] Insertion of \Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed after the character, but not before. +%\item[2, \texttt{postonly}] \Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は文字の後ろでは許されるが,前では許されない. +%\item[2, \texttt{postonly}] 文字后允许插入\Param{\hyperlink{fld:xks}{xkanjiskip}},但之前不允许插入。 +%\item[3, \texttt{allow}] Insertion of \Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed before the character and after the character. This is the default value. +%\item[3, \texttt{allow}] \Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である. +%\item[3, \texttt{allow}] 文字前后均可插入\Param{\hyperlink{fld:xks}{xkanjiskip}}。此为默认值。 \end{description} %<*en> Note that parameters \Param{jaxspmode} and \Param{alxspmode} use a common table, hence these two parameters are synonyms of each other. @@ -4114,10 +4149,23 @@ Note that parameters \Param{jaxspmode} and \Param{alxspmode} use a common table, \item[\Param{autospacing}\,=$^\ast$] [\verb+\autospacing+] \item[\Param{autoxspacing}\,=$^\ast$] [\verb+\autoxspacing+] -\item[\Param{kanjiskip}\,=] [\verb+\kanjiskip+] -\item[\Param{xkanjiskip}\,=] [\verb+\xkanjiskip+] +\item[\Param{\hypertarget{fld:kanjiskip}{kanjiskip}}\,=] [\verb+\kanjiskip+] +%<*ja> +デフォルトで2つの\textbf{JAchar}の間に挿入されるグルーである. +通常では,\pTeX と同じようにフォントサイズに比例して変わることはない. +しかし,自然長が \verb+\maxdimen+ の場合は,例外的に和文フォントのJFM側で指定されている +値を採用(こちらはフォントサイズに比例)することになっている. +% + +\item[\Param{\hypertarget{fld:xks}{xkanjiskip}}\,=] [\verb+\xkanjiskip+] +%<*ja> +デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルーである. +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}と同じように,通常ではフォントサイズに比例して変わることはないが, +自然長が \verb+\maxdimen+ の場合が例外である. +% -\item[\Param{differentjfm}\,=$^\dagger$] + +\item[\Param{\hypertarget{fld:diffjfm}{differentjfm}}\,=$^\dagger$] %<*en> Specify how glues/kerns between two \textbf{JAchar}s whose JFM (or size) are different. @@ -4125,7 +4173,7 @@ The allowed arguments are the followings: % %<*ja> JFM(もしくはサイズ)が異なる2つの\textbf{JAchar}の間にグルー/カーンをどのように -入れるかを指定うる. +入れるかを指定する. 許される値は以下の通り: % %<*zh> @@ -4137,6 +4185,9 @@ JFM(もしくはサイズ)が異なる2つの\textbf{JAchar}の間にグル \item[\texttt{both}] \item[\texttt{large}] \item[\texttt{small}] +\item[\texttt{pleft}] +\item[\texttt{pright}] +\item[\texttt{paverage}] \end{description} \item[\Param{jacharrange}\,=$^\ast$] @@ -4480,7 +4531,9 @@ See Subsections~\ref{ssec-jfont} and \ref{ssec-psft} for details. これら3つのキーはそれぞれ \verb+\jfont+ プリミティブに対する \texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーとそれぞれ対応する. \texttt{CID} は下の \texttt{NoEmbed} と合わせて用いられたときのみ有効である. -詳細は\ref{ssec-jfont}節と\ref{ssec-psft}節を参照. +\verb+\jfont+ プリミティブに対する +\texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーの詳細は\ref{ssec-jfont}節 + と\ref{ssec-psft}節を参照. % \item[NoEmbed] @@ -4573,6 +4626,83 @@ JFMの\texttt{chars}テーブルのエントリとして \verb+'AJ1-xxx'+ の形 使えるようになる.これはAdobe-Japan1におけるCID番号が \verb+xxx+ の文字を表す. % +\subsection{\texttt{luatexja-adjust.sty}} +\label{ssec-adj} +\begin{figure}[t] +\def\sq{% + \hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{% +  \hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw% + \hskip\dimexpr.5\zw-.2pt\relax}\hss}} +\def\sb{\hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{% + ■\hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw% + \hskip\dimexpr.5\zw-.2pt\relax}\hss}} +\newbox\gridbox +\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% + \vbox{\hsize=20\zw\noindent\leftskip0pt\rightskip0pt\parfillskip0pt#1}\vrule}% +}} + +{\centering +\begin{tabular}{lc} +\toprule +no adjustment&\outbox{以上の原理は,「包除原理」とよく呼ばれるが\hskip-.5\zw\null}\\ +without priority&% +\ltjdisableadjust +\outbox{以上の原理は,「包除原理」とよく呼ばれるが}% +\ltjenableadjust\\ +with priority&% +\outbox{以上の原理は,「包除原理」とよく呼ばれるが} +%\ltjdisableadjust +\\ +\bottomrule +\end{tabular}\par} +\smallskip + +Note: the value of +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}} is 0\,pt${}^{+1/5\,\mathrm{em}}_{-1/5\,\mathrm{em}}$ in this figure, +for making the difference obvious. +%\caption{行長調整}\label{fig-adj} +%\caption{Line adjustment}\label{fig-adj} +\end{figure} + + +%<*en> +... +% +%<*ja> +\pTeX では,行長調整において優先度の概念が存在しなかったため,図 +\ref{fig-adj}上段における半角分の半端は,図\ref{fig-adj}中段のように,鍵 +括弧周辺の空白と和文間空白(\Param{\hyperlink{fld:kanjiskip}{kanjiskip}})の両方によって負担される.し +かし,「日本語組版処理の要件」\cite{jlreq}やJIS~X~4051~\cite{x4051}におい +ては,このような状況では半端は鍵括弧周辺の空白のみで負担し,その他の和文 +文字はベタ組で組まれる(図\ref{fig-adj}下段)ことになっている.この追加 +パッケージは\cite{jlreq}や\cite{x4051}における規定のような,優先順位付き +の行長調整を提供する.詳細な仕様については\ref{sec-adjspec}を参照. + + +\texttt{luatexja-adjust.sty}は,以下の命令を提供する.これらはすべてグローバルに効力を発揮する. + +\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}\advance\leftmargin1\zw} +\item[\char92ltjdisableadjust] +優先順位付きの行長調整を無効化する. + +\item[\char92ltjenableadjust] +優先順位付きの行長調整を有効化する. + +\item[優先度設定……] + +\end{list} + + + + + +% + + + %\part{Implementations} %\part{実装} \label{part-imp} @@ -4676,18 +4806,18 @@ The amount of shifting the baseline of Japanese fonts in scaled point ($2^{-16}\ \attr{ltj@autospc} %<*en> -Whether the auto insertion of \Param{kanjiskip} is allowed at the node. +Whether the auto insertion of \Param{\hyperlink{fld:kanjiskip}{kanjiskip}} is allowed at the node. % %<*ja> -そのノードで\Param{kanjiskip}の自動挿入が許されるかどうか. +そのノードで\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}の自動挿入が許されるかどうか. % \attr{ltj@autoxspc} %<*en> -Whether the auto insertion of \Param{xkanjiskip} is allowed at the node. +Whether the auto insertion of \Param{\hyperlink{fld:xks}{xkanjiskip}} is allowed at the node. % %<*ja> -そのノードで\Param{xkanjiskip}の自動挿入が許されるかどうか. +そのノードで\Param{\hyperlink{fld:xks}{xkanjiskip}}の自動挿入が許されるかどうか. % \attr{ltj@icflag} @@ -4704,11 +4834,11 @@ assigned to this attribute: Glues from an italic correction (\verb+\/+). This distinction of origins of glues (from explicit \verb+\kern+, or from \verb+\/+) - is needed in the insertion process of \Param{xkanjiskip}. + is needed in the insertion process of \Param{\hyperlink{fld:xks}{xkanjiskip}}. % %<*ja> イタリック補正(\verb+\/+)によるグルー.このグルーの由来の区別(\verb+\kern+ か -\verb+\/+ か)は\Param{xkanjiskip}の挿入過程において必要になる. +\verb+\/+ か)は\Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入過程において必要になる. % \item[\textit{packed} (2)] @@ -4740,18 +4870,18 @@ JFM由来のグルー/カーン. \item[\textit{kanji\_skip} (9)] %<*en> -Glues for \Param{kanjiskip}. +Glues for \Param{\hyperlink{fld:kanjiskip}{kanjiskip}}. % %<*ja> -\Param{kanjiskip}のグルー. +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}のグルー. % \item[\textit{xkanji\_skip} (10)] %<*en> -Glues for \Param{xkanjiskip}. +Glues for \Param{\hyperlink{fld:xks}{xkanjiskip}}. % %<*ja> -\Param{xkanjiskip}のグルー. +\Param{\hyperlink{fld:xks}{xkanjiskip}}のグルー. % \item[\textit{processed} (11)] @@ -4861,13 +4991,13 @@ These whatsits will be removed during the process of inserting \textbf{JAglue}s. %<*en> \LuaTeX-ja has its own stack system, and most parameters of \LuaTeX-ja are stored in it. To clarify the reason, imagine the parameter -\Param{kanjiskip} is stored by a skip, and consider the following +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}} is stored by a skip, and consider the following source: % %<*ja> \LuaTeX-jaは独自のスタックシステムを持ち,\LuaTeX-jaのほとんどのパラメータは これを用いて保持されている.その理由を明らかにするために, -\Param{kanjiskip}パラメータがスキップレジスタで保持されているとし, +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}パラメータがスキップレジスタで保持されているとし, 以下のコードを考えてみよう: % \begin{LTXexample} @@ -4878,16 +5008,16 @@ source: %<*en> As described in Subsection~\ref{ssec-param}, the only effective value of -\Param{kanjiskip} in an hbox is the latest value, so the value of -\Param{kanjiskip} which applied in the entire hbox should be 5\,pt. +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}} in an hbox is the latest value, so the value of +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}} which applied in the entire hbox should be 5\,pt. However, by the implementation method of \LuaTeX, this `5\,pt' cannot be known from any callbacks. In the \texttt{tex/packaging.w} (which is a file in the source of \LuaTeX), there are the following codes: % %<*ja> \ref{ssec-param}節で述べたように,ある水平ボックスの中で効力を持つ -\Param{kanjiskip}の値は最後に現れた値のみであり,したがってボックス全体に適用される -\Param{kanjiskip}は5\,ptであるべきである.しかし,\LuaTeX の実装のために, +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}の値は最後に現れた値のみであり,したがってボックス全体に適用される +\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}は5\,ptであるべきである.しかし,\LuaTeX の実装のために, この`5\,pt'はどのコールバックからも知ることはできない. \texttt{tex/packaging.w}(これは\LuaTeX のソースファイルである)の中に, 以下のコードがある: @@ -5278,17 +5408,17 @@ u %\subsection{概要} %\subsection{概要} -\LuaTeX-jaにおける和文処理グルーの挿入方法は,\pTeX のそれとは全く異なる. +\LuaTeX-jaにおける \textbf{JAglue} の挿入方法は,\pTeX のそれとは全く異なる. \pTeX では次のような仕様であった: \begin{itemize} \item JFMグルーの挿入は,和文文字を表すトークンを元に水平リストに(文字を表す)を 追加する過程で行われる. -\item \Param{xkanjiskip}の挿入は,水平ボックスへのパッケージングや行分割前に行われる. -\item \Param{kanjiskip}はノードとしては挿入されない.パッケージングや行分割の計算時に -「和文文字を表す2つのの間には\Param{kanjiskip}がある」ものとみなされる. +\item \Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は,水平ボックスへのパッケージングや行分割前に行われる. +\item \Param{\hyperlink{fld:kanjiskip}{kanjiskip}}はノードとしては挿入されない.パッケージングや行分割の計算時に +「和文文字を表す2つのの間には\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}がある」ものとみなされる. \end{itemize} しかし,\LuaTeX-jaでは,水平ボックスへのパッケージングや行分割前に全ての -\textbf{JAglue},即ちJFMグルー・\Param{xkanjiskip}・\Param{kanjiskip}の +\textbf{JAglue},即ちJFMグルー・\Param{\hyperlink{fld:xks}{xkanjiskip}}・\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}の 3種類を一度に挿入することになっている.これは,\LuaTeX において欧文の合字・ カーニング処理がノードベースになったことに対応する変更である. @@ -5480,7 +5610,7 @@ $\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は,\textbf{ \textit{id}が\textit{id\_pbox}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき. \item[和文B] リスト中の水平ボックスの中身の先頭として出現した和文文字.和文Aとの違いは,これの前に -JFMグルーの挿入が行われない(\Param{xkanjiskip},~\Param{kanjiskip}は入り得る)ことである.\\ +JFMグルーの挿入が行われない(\Param{\hyperlink{fld:xks}{xkanjiskip}},~\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}は入り得る)ことである.\\ \textit{id}が\textit{id\_hlist}か\textit{id\_disc}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき. \item[欧文] リスト中に直接/水平ボックスの中身として出現している欧文文字.次の3つの場合が該当: @@ -5565,24 +5695,59 @@ $g$は「文字コード\texttt{'boxbdd'}の文字」と\textit{Np}の間に入 まず,「右空白」にあたる量を算出する.通常はこれが,隣り合った2つの和文文字間に入る空白量となる. \begin{description} \item[JFM由来{[M]}] JFMの文字クラス指定によって入る空白を以下によって求める.この段階で空白量が未定義(未指定)だった場合, - デフォルト値\Param{kanjiskip}を採用することとなるので,次へ. + デフォルト値\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}を採用することとなるので,次へ. \begin{enumerate} \item もし両クラスタの間で\verb+\inhibitglue+が実行されていた場合(証としてwhatsitノードが自動挿入される), - 代わりに\Param{kanjiskip}が挿入されることとなる.次へ. + 代わりに\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}が挿入されることとなる.次へ. \item \textit{Nq}と\textit{Np}が同じJFM・同じ\texttt{jfmvar}キー・同じサイズの和文フォントであったならば, - 共通に使っているJFM内で挿入される空白(グルーかカーン)が決まっているか調べる. + 共通に使っているJFM内で挿入される空白(グルーかカーン)が決まっているか調べ,決まっていればそれを採用. \item 1.でも2.でもない場合は,\textit{Nq}と\textit{Np}が違うJFM/\texttt{jfmvar}/サイズである. この場合,まず \[ -\vcenter{\halign{\hfil$#:={}$&(\inhibitglue#\inhibitglue)\cr -gb&\textit{Nq}と「文字コードが{\tt'diffmet'}の文字」との間に入るグルー/カーン\cr -ga&「文字コードが{\tt'diffmet'}の文字」と\textit{Np}との間に入るグルー/カーン\cr +\vcenter{\halign{\hfil$#:={}$&\inhibitglue#\inhibitglue\cr +gb&(\textit{Nq}と「使用フォントが\textit{Nq}のそれと同じで,\hfil\cr +\omit&\quad 文字コードが\textit{Np}のそれの文字」との間に入るグルー/カーン)\hfil\cr +ga&(\inhibitglue 「使用フォントが\textit{Np}のそれと同じで,\hfil\cr +\omit&\quad 文字コードが\textit{Nq}のそれの文字」と\textit{Np}との間に入るグルー/カーン)\hfil\cr }} \] -として,左側由来・右側由来の空白(グルー/カーン)を(それぞれのJFMから)求める. -$\mathit{ga}$と$\mathit{gb}$のどちらか片方が未定義であるならば,定義されている側の値をそのまま採用する. -もし$\mathit{ga}$と$\mathit{gb}$が両方決まっているならば,両者の値を平均\footnote{\Param{differentjfm}パラメタの -値によって,「大きい方」「小さい方」「合計」に変えることができる.}した値を採用する. +として,前側の文字のJFMを使った時の空白(グルー/カーン)と,後側の文字のJFMを使った時のそれを求める. + +$\mathit{gb}$,~$\mathit{ga}$それぞれに対するの値を$d_b$,~$d_a$とする. +\begin{itemize} +\item +$\mathit{ga}$と$\mathit{gb}$の両方が未定義であるならば,JFM由来のグルーは挿入されず,\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}を採用することとなる.どちらか片方のみが未定義であるならば,次のステップでその未定義の方は長さ0のkernで,の値は0であるかのように扱われる. +\item +\Param{\hyperlink{fld:diffjfm}{diffrentjfm}}の値が\texttt{pleft}, \texttt{pright}, \texttt{paverage}のとき, +の指定に従って比例配分を行う. +JFM由来のグルー/カーンは以下の値となる: +\[ + f\left(\frac{1-d_b}2\textit{gb} + \frac{1+d_b}2\textit{ga}, +\frac{1-d_a}2\textit{gb} + \frac{1+d_a}2\textit{ga}\right) +\] +ここで.$f(x,y)$は +\[ + f(x,y)=\begin{cases} +x&\text{if\ }\Param{\hyperlink{fld:diffjfm}{diffrentjfm}}=\texttt{pleft};\\ +y&\text{if\ }\Param{\hyperlink{fld:diffjfm}{diffrentjfm}}=\texttt{pright};\\ +(x+y)/2&\text{if\ }\Param{\hyperlink{fld:diffjfm}{diffrentjfm}}=\texttt{paverage}; +\end{cases}. +\] +\item +\Param{differentmet}がそれ以外の値の時は,の値は無視され,JFM由来のグルー/カーンは以下の値となる: +\[ + f(\textit{gb},\textit{ga}) +\] +ここで.$f(x,y)$は +\[ + f(x,y)=\begin{cases} +\min(x,y)&\text{if\ }\Param{\hyperlink{fld:diffjfm}{diffrentjfm}}=\texttt{small};\\ +\max(x,y)&\text{if\ }\Param{\hyperlink{fld:diffjfm}{diffrentjfm}}=\texttt{large};\\ +(x+y)/2&\text{if\ }\Param{\hyperlink{fld:diffjfm}{diffrentjfm}}=\texttt{average};\\ +x+y&\text{if\ }\Param{\hyperlink{fld:diffjfm}{diffrentjfm}}=\texttt{both}; +\end{cases}. +\] +\end{itemize} \end{enumerate} 例えば, @@ -5601,15 +5766,15 @@ $\mathit{ga}$と$\mathit{gb}$のどちらか片方が未定義であるならば この場合,$p$と$q$の間は,実フォントが異なるにもかかわらず(2)の状況となる一方で, $q$と$r$の間は(実フォントが同じなのに)\texttt{jfmvar}キーの内容が異なるので(3)の状況となる. \item[\Param{kanjiskip}~{[K]}] 上の[M]において空白が定まらなかった場合, -\Param{kanjiskip}の値を以下で定め,それを「右空白」として採用する. +以下で定めた量「右空白」として採用する. この段階においては,\verb+\inhibitglue+は効力を持たないため, 結果として,2つの和文文字間には常に何らかのグルー/カーンが挿入されることとなる. \begin{enumerate} \item 両クラスタ(厳密には$\mathit{Nq}.\mathit{tail}$,$\mathit{Np}.\mathit{head}$)の中身の文字コードに対する \Param{autospacing}パラメタが両方ともfalseだった場合は,長さ0のglueとする. -\item ユーザ側から見た\Param{kanjiskip}パラメタの自然長が${\tt \char92 maxdimen}=(2^{30}-1)\,{\rm sp}$で -なければ,\Param{kanjiskip}パラメタの値を持つglueを採用する. -\item 2.でない場合は,\textit{Nq}, \textit{Np}で使われているJFMに指定されている\Param{kanjiskip}の値を用いる. +\item ユーザ側から見た\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}パラメタの自然長が${\tt \char92 maxdimen}=(2^{30}-1)\,{\rm sp}$で +なければ,\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}パラメタの値を持つglueを採用する. +\item 2.でない場合は,\textit{Nq}, \textit{Np}で使われているJFMに指定されている\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}の値を用いる. どちらか片方のクラスタだけが和文文字(\textsf{和文A}・\textsf{和文B})のときは,そちらのクラスタで使われている JFM由来の値だけを用いる.もし両者で使われているJFMが異なった場合は,上の[M]~3.と同様の方法を用いて調整する. \end{enumerate} @@ -5631,8 +5796,8 @@ JFM由来の値だけを用いる.もし両者で使われているJFMが異 \paragraph{禁則用ペナルティの挿入} まず, \[ - a:=(\text{\textit{Nq}{\footnotemark}の文字に対する\Param{postbreakpenalty}の値}) -+(\text{\textit{Np}{\footnotemark}の文字に対する\Param{prebreakpenalty}の値}) + a:=(\text{\textit{Nq}{\footnotemark}の文字に対する\Param{\hyperlink{fld:postbp}{postbreakpenalty}}の値}) ++(\text{\textit{Np}{\footnotemark}の文字に対する\Param{\hyperlink{fld:prebp}{prebreakpenalty}}の値}) \] とおく\footnotetext{厳密にはそれぞれ$\mathit{Nq}.\mathit{tail}$,$\mathit{Np}.\mathit{head}$.}. ペナルティは通常$[-10000,10000]$の整数値をとり,また$\pm 10000$は正負の無限大を意味することになっているが,この$a$の @@ -5734,7 +5899,7 @@ If this attempt fails, \LuaTeX-ja use the method `\textsf{\Param{kanjiskip}~[K]} \textit{Nq}が\textsf{和文A}で,\textit{Np}が\textsf{欧文}の場合,JFMグルー挿入処理は次のようにして行われる. \begin{itemize} \item 「右空白」については,まず以下に述べる\textsf{Boundary-B~[\OB]}により空白を決定しようと試みる. -それが失敗した場合は,\textsf{\Param{xkanjiskip}~[X]}によって定める. +それが失敗した場合は,\textsf{\Param{\hyperlink{fld:xks}{xkanjiskip}}~[X]}によって定める. \item 「左空白」については,既に述べた\textsf{line-end~[E]}をそのまま採用する.それに伴う「右空白」の補正も同じ. \item 禁則用ペナルティも,以前述べた\textsf{P-normal~[PN]}と同じである. \end{itemize} @@ -5748,23 +5913,23 @@ If this attempt fails, \LuaTeX-ja use the method `\textsf{\Param{kanjiskip}~[K]} \item そうでなければ, \textit{Nq}と「文字コードが{\tt'jcharbdd'}の文字」との間に入るグルー/カーンとして定まる. \end{enumerate} -\item[\Param{xkanjiskip}~{[X]}] +\item[\Param{\hyperlink{fld:xks}{xkanjiskip}}~{[X]}] この段階では,\textsf{\Param{kanjiskip}~[K]}のときと同じように, -\Param{xkanjiskip}の値を以下で定め,それを「右空白」として採用する. +以下で定めた量を「右空白」として採用する. この段階で\verb+\inhibitglue+は効力を持たないのも同じである. \begin{enumerate} -\item 以下のいずれかの場合は,\Param{xkanjiskip}の挿入は抑止される.しかし,実際には行分割を許容するために,長さ0のglueを採用する: +\item 以下のいずれかの場合は,\Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入は抑止される.しかし,実際には行分割を許容するために,長さ0のglueを採用する: \begin{itemize} \item 両クラスタにおいて,それらの中身の文字コードに対する\Param{autoxspacing}パラメタが共にfalseである. -\item \textit{Nq}の中身の文字コードについて,「直後への\Param{xkanjiskip}の挿入」が禁止されている +\item \textit{Nq}の中身の文字コードについて,「直後への\Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入」が禁止されている (つまり,\Param{jaxspmode}~(or \Param{alxspmode})パラメタが2以上). -\item \textit{Np}の中身の文字コードについて,「直前への\Param{xkanjiskip}の挿入」が禁止されている +\item \textit{Np}の中身の文字コードについて,「直前への\Param{\hyperlink{fld:xks}{xkanjiskip}}の挿入」が禁止されている (つまり,\Param{jaxspmode}~(or \Param{alxspmode})パラメタが偶数). \end{itemize} -\item ユーザ側から見た\Param{xkanjiskip}パラメタの自然長が${\tt \char92 maxdimen}=(2^{30}-1)\,{\rm sp}$で -なければ,\Param{xkanjiskip}パラメタの値を持つglueを採用する. +\item ユーザ側から見た\Param{\hyperlink{fld:xks}{xkanjiskip}}パラメタの自然長が${\tt \char92 maxdimen}=(2^{30}-1)\,{\rm sp}$で +なければ,\Param{\hyperlink{fld:xks}{xkanjiskip}}パラメタの値を持つglueを採用する. \item 2.でない場合は,\textit{Nq}, \textit{Np}(\textsf{和文A}/\textsf{和文B}なのは片方だけ) -で使われているJFMに指定されている\Param{xkanjiskip}の値を用いる. +で使われているJFMに指定されている\Param{\hyperlink{fld:xks}{xkanjiskip}}の値を用いる. \end{enumerate} \end{description} @@ -5773,7 +5938,7 @@ If this attempt fails, \LuaTeX-ja use the method `\textsf{\Param{kanjiskip}~[K]} \textsf{和文A}のクラスタが逆になるので,\textsf{Boundary-A~[\OA]}の部分が変わるだけ. \begin{itemize} \item 「右空白」については,まず以下に述べる\textsf{Boundary-A~[\OA]}により空白を決定しようと試みる. -それが失敗した場合は,\textsf{\Param{xkanjiskip}~[X]}によって定める. +それが失敗した場合は,\textsf{\Param{\hyperlink{fld:xks}{xkanjiskip}}~[X]}によって定める. \item \textit{Nq}が和文でないので,「左空白」は算出されない. \item 禁則用ペナルティは,以前述べた\textsf{P-normal~[PN]}と同じである. \end{itemize} @@ -5800,9 +5965,9 @@ If this attempt fails, \LuaTeX-ja use the method `\textsf{\Param{kanjiskip}~[K]} \item 「左空白」については,既に述べた\textsf{line-end~[E]}の算出方法をそのまま採用する.それに伴う「右空白」の補正も同じ. \item 禁則用ペナルティの処理は,後ろのクラスタ\textit{Np}の種類によって異なる. なお,$\mathit{Np}.\mathit{head}$は無意味であるから, -「$\mathit{Np}.\mathit{head}$に対する\Param{prebreakpenalty}の値」は0とみなされる.言い換えれば, +「$\mathit{Np}.\mathit{head}$に対する\Param{\hyperlink{fld:prebp}{prebreakpenalty}}の値」は0とみなされる.言い換えれば, \[ - a:=(\text{\textit{Nq}{\footnotemark}の文字に対する\Param{postbreakpenalty}の値}). + a:=(\text{\textit{Nq}{\footnotemark}の文字に対する\Param{\hyperlink{fld:postbp}{postbreakpenalty}}の値}). \] \begin{description} \item[箱] \textit{Np}が\textsf{箱}であった場合は,両クラスタの間での行分割は @@ -5846,7 +6011,7 @@ If this attempt fails, \LuaTeX-ja use the method `\textsf{\Param{kanjiskip}~[K]} \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}} \] のような状況を考える. -このとき,$a$,即ち「あ」の\Param{postbreakpenalty}がいかなる値であっても, +このとき,$a$,即ち「あ」の\Param{\hyperlink{fld:postbp}{postbreakpenalty}}がいかなる値であっても, この2クラスタ間は最終的に \begin{equation} \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow @@ -5854,7 +6019,7 @@ If this attempt fails, \LuaTeX-ja use the method `\textsf{\Param{kanjiskip}~[K]} \label{eq-gref} \end{equation} となり,$a$分のペナルティは挿入されないことに注意して欲しい. -\Param{postbreakpenalty}は($a$は)殆どの場合が非負の値と考えられ,そのような場合では +\Param{\hyperlink{fld:postbp}{postbreakpenalty}}は($a$は)殆どの場合が非負の値と考えられ,そのような場合では \eqref{eq-gref}と \[ \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow @@ -5875,7 +6040,7 @@ If this attempt fails, \LuaTeX-ja use the method `\textsf{\Param{kanjiskip}~[K]} \item 禁則用ペナルティの処理は,\textit{Nq}の種類によって異なる. $\mathit{Nq}.\mathit{tail}$は無意味なので, \[ - a:=(\text{\textit{Np}{\footnotemark}の文字に対する\Param{prebreakpenalty}の値}). + a:=(\text{\textit{Np}{\footnotemark}の文字に対する\Param{\hyperlink{fld:prebp}{prebreakpenalty}}の値}). \] \begin{description} \item[箱] \textit{Nq}が\textsf{箱}の場合は,\textsf{P-allow~[PA]}を用いる. @@ -5900,7 +6065,7 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので, \item \textsf{和文B}と箱・グルー・カーンが隣接したとき(どちらが前かは関係ない),間にJFMグルー・ペナルティの挿入は一切しない. \item \textsf{和文B}と\textsf{和文B},また\textsf{和文B}と\textsf{欧文}とが隣接した時は,禁則用ペナルティ挿入処理は \textsf{P-suppress~[PS]}が用いられる. -\item \textsf{和文B}の文字に対する\Param{prebreakpenalty},~\Param{postbreakpenalty}の値は使われず,0として計算される. +\item \textsf{和文B}の文字に対する\Param{\hyperlink{fld:prebp}{prebreakpenalty}},~\Param{\hyperlink{fld:postbp}{postbreakpenalty}}の値は使われず,0として計算される. \end{itemize} @@ -5912,52 +6077,130 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので, \end{LTXexample} \begin{itemize} \item 1行目の\verb+\inhibitglue+は\textsf{Boundary-B~[\OB]}の処理のみを抑止するので,ピリオドと「A」の間には -\Param{xkanjiskip}(四分アキ)が入ることに注意. +\Param{\hyperlink{fld:xks}{xkanjiskip}}(四分アキ)が入ることに注意. \item 2行目のピリオドと「A」の間においては,前者が\textsf{和文B}となる(水平ボックスの中身の末尾として登場しているから)ので, -そもそも\textsf{Boundary-B~[\OB]}の処理は行われない.よって,\Param{xkanjiskip}が入ることとなる. +そもそも\textsf{Boundary-B~[\OB]}の処理は行われない.よって,\Param{\hyperlink{fld:xks}{xkanjiskip}}が入ることとなる. \item 3行目では,ピリオドの属するクラスタは\textsf{和文A}である.これによって, ピリオドと「A」の間には\textsf{Boundary-B~[\OB]}由来の半角アキが入ることになる. \end{itemize} \section{psft} +... +%\section{Patch for the \Pkg{listings} package} +%\section{Patch for the \Pkg{listings} package} +%\section{\Pkg{listings} パッケージへの対応} + +%<*en> +It is well-known that the \Pkg{listings} package outputs weird results +for Japanese input. +The \Pkg{listings} package makes most of letters active and assigns +output command for each letter \cite{listings}. +But Japanese characters are not included in these activated letters. +For \pTeX{} series, there is no method to make Japanese characters active; +a patch \Pkg{jlisting.sty} \cite{jlisting} resolves the problem forcibly. +% %<*ja> -\section{\Pkg{listings} パッケージへの対応} \Pkg{listings} パッケージが,そのままでは日本語をまともに出力できないこと -はよく知られている,きちんと整形して出力するために,\Pkg{listings}パッケー +はよく知られている.きちんと整形して出力するために,\Pkg{listings}パッケー ジは内部で「ほとんどの文字」をアクティブにし,各文字に対してその文字の出 -力命令を割り当てている (\cite{listings}). +力命令を割り当てている \cite{listings}. しかし,そこでアクティブにする文字の中に,和文文 -字がないためである.p\TeX 系列では,和文文字をアクティブにする手法がなく, +字がないためである.\pTeX 系列では,和文文字をアクティブにする手法がなく, \Pkg{jlisting.sty} というパッチ\cite{jlisting}を用いることで無理やり解決していた. +% +%<*en> +In \LuaTeX-ja, the problem is resolved by using \verb+process_input_buffer+ callback. +The callback function inserts the output command before each letter above U+0080. +This method can omits the process to make all Japanese characters active +(most of the activated characters are not used in many cases). +% +%<*ja> \LuaTeX-jaでは,\verb+process_input_buffer+ コールバックを利用することで, 「各行に出現するU+0080以降の文字に対して,それらの出力命令を前置する」という方法をとっている. これにより,(入力には使用されていないかもしれない)和文文字をもすべてアクティブ化する手間もなく, 見通しが良い実装になっている. +% +%<*en> +If \Pkg{listings.sty} and \LuaTeX-ja were loaded, +then the patch \Pkg{lltjp-listings.sty} is loaded automatically at \verb+\begin{document}+. +% +%<*ja> \LuaTeX-ja で利用される \Pkg{listings} パッケージへのパッチ \Pkg{lltjp-listings.sty} は, \Pkg{listings.sty} と\LuaTeX-jaを読み込んでおけば, \verb+\begin{document}+ の箇所において自動的に読み込まれるので,通常はあまり 意識する必要はない. +% + +%\paragraph{Class of characters} +%\paragraph{文字種} -\paragraph{文字種} +%<*en> +Roughly speaking, the \Pkg{listings} package processes input as follows: +% +%<*ja> \Pkg{listings} パッケージの内部では,大雑把に言うと +% \begin{enumerate} +%\item ... +%<*en> +\item Collects \textit{letters} and \textit{digits}, which can be used for the name of identifiers. +% +%<*ja> \item 識別子として使える文字 (``letter'',~``digit'') たちを 集める. +% +%<*en> +\item When reading an \textit{other}, outputs the collected character string (with modification, if needed). +% +%<*ja> \item letterでもdigitでもない文字が現れた時に,収集した文字列を(必要なら修飾して)出力する. +% +%<*en> +\item Collects \textit{others}. +% +%<*ja> \item 今度は逆に,letterでない文字たちをletterが現れるまで集める. +% +%<*en> +\item When reading a \textit{letter} or a \textit{digit}, outputs the collected character string. +% +%<*ja> \item letterが出現したら集めた文字列を出力する. +% +%<*en> +\item Turns back to 1. +% +%<*ja> \item 1.に戻る. +% \end{enumerate} +%<*en> +By the above process, line breaks inside of an identifier are blocked. +A flag \verb+\lst@ifletter+ indicates whether the previous character can be used +for the name of identifiers or not. +% +%<*ja> という処理が行われている.これにより,識別子の途中では行分割が行われないようになっている. 直前の文字が識別子として使えるか否かは \verb+\lst@ifletter+ というフラグに格納されている. +% +%<*en> +For Japanese characters, line breaks are permitted on both sides +except for parentheses, dashes, etc. +To process Japanese characters, +The pacth \Pkg{lltjp-listings.sty} introduces a new flag \verb+\lst@ifkanji+, which indicates +whether the previous character is Japanese character or not. +For illustration, we introduce the following classes of character: +% +%<*ja> さて,日本語の処理である.殆どの和文文字の前後では行分割が可能であるが,その一方で 括弧類や音引きなどでは禁則処理が必要なことから,\Pkg{lltjp-listings.sty} では, -直前が和文文字であるかを示すフラグ \verb+\lst@kanji+ を新たに導入した. +直前が和文文字であるかを示すフラグ \verb+\lst@ifkanji+ を新たに導入した. 以降,説明のために以下のように文字を分類する: +% \begin{center} \small \begin{tabular}{lccccc} @@ -5965,23 +6208,55 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので, &Letter&Other&Kanji&Open&Close\\\midrule \verb+\lst@ifletter+&T&F&T&F&T\\ \verb+\lst@ifkanji+&F&F&T&T&F\\ -意図&識別子中の文字&その他欧文文字&殆どの和文文字&開き括弧類&閉じ括弧類\\ +%Meaning&identifier char&other alphabet&most of Japanese char&open paren&close paren\\ +%意図&識別子中の文字&その他欧文文字&殆どの和文文字&開き括弧類&閉じ括弧類\\ \bottomrule \end{tabular} \end{center} +%<*en> +Note that \textit{digits} in the \Pkg{listings} package can be Letter or +Other according to circumstances. +% +%<*ja> なお,本来の\Pkg{listings} パッケージでの分類``digit''は, 出現状況によって,上の表のLetterとOtherのどちらにもなりうる. また,KanjiとCloseは \verb+\lst@ifletter+ と \verb+\lst@ifkanji+ の値が一致しているが, これは間違いではない. +% +%<*en> +For example, let us consider the case an Open comes after a Letter. +Since an Open represents Japanese open parenthesis, +it is preferred to be permitted to insert line break after the Letter. +Therefore, the collected character string is output in this case. +% +%<*ja> 例えば,Letterの直後にOpenが来た場合を考える. 文字種Openは和文開き括弧類を想定しているので,Letterの直後では行分割が可能であることが望ましい. そのため,この場合では,すでに収集されている文字列を出力することで行分割を許容するようにした. +% + +%<*en> +The following table summarizes $5\times 5=25$ cases: +% +%<*ja> 同じように,$5\times 5=25$通り全てについて書くと,次のようになる: +% \begin{center} \small \begin{tabular}{llccccc} \toprule +%<*en> +&&\multicolumn{4}{c}{Next}\\\cmidrule(lr){3-7} +&&\hbox to 4em{\hss Letter\hss}&\hbox to 4em{\hss Other\hss} +&\hbox to 4em{\hss Kanji\hss}&\hbox to 4em{\hss Open\hss}&Close\\\midrule +&Letter&collects&\multicolumn{3}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\ +&Other&outputs&collects&\multicolumn{2}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\ +Prev&Kanji&\multicolumn{4}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\ +&Open&\multicolumn{5}{c}{\hrulefill \ collects\ \hrulefill}\\ +&Close&\multicolumn{4}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\ +% +%<*ja> &&\multicolumn{4}{c}{後ろ側の文字}\\\cmidrule(lr){3-7} &&\hbox to 4em{\hss Letter\hss}&\hbox to 4em{\hss Other\hss} &\hbox to 4em{\hss Kanji\hss}&\hbox to 4em{\hss Open\hss}&Close\\\midrule @@ -5990,74 +6265,243 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので, 文&Kanji&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ 字&Open&\multicolumn{5}{c}{\hrulefill \ 収集\ \hrulefill}\\ 種&Close&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ +% \bottomrule \end{tabular} \end{center} -上の表において, +%In the above table, +%上の表において, \begin{itemize} -\item 「出力」は,それまでに集めた文字列を出力(≒ここで行分割可能)を意味する. -\item 「収集」は,後側の文字を,現在収集された文字列に追加(行分割不可)を意味する. +%\item ... +%\item ``outputs'' means to output the collected character string (i.e., line breaking is permitted there). +%\item 「出力」は,それまでに集めた文字列を出力(≒ここで行分割可能)を意味する. + +%\item ``collects'' means to append the next character to the collected character string (i.e., line breaking is prohibited there). +%\item 「収集」は,後側の文字を,現在収集された文字列に追加(行分割不可)を意味する. \end{itemize} -\paragraph{和文文字扱いとなる文字} +%\paragraph{Classification of characters} +%\paragraph{和文文字扱いとなる文字} + +%<*en> +Characters are classified according to \Param{jacharrange} parameter (see Section \ref{ssec-setrange}): +% +%<*ja> \Pkg{listings} パッケージにおいて和文文字と扱われる (前に述べたKanji, Open,あるいは「閉じ括弧類」分類)か否かは, -通常の\textbf{JAchar}/\textbf{Alchar}の範囲の設定(\ref{ssec-setrange}節)に従って行われる: +通常の\textbf{JAchar}/\textbf{Alchar}の範囲の設定(\Param{jacharrange} パラメータ,\ref{ssec-setrange}節を参照)に従って行われる: +% \begin{itemize} -\item (U+0080以降の)\textbf{ALchar}は,すべてLetter扱いである. -\item (U+0080以降の)\textbf{JAchar}については,以下の順序に従って文字種を決める: +%\item ... + +%\item \textbf{ALchars} above U+0080 are Letter. +%\item (U+0080以降の)\textbf{ALchar}は,すべてLetter扱いである. + +%\item \textbf{JAchars} are classified in the order as follows: +%\item (U+0080以降の)\textbf{JAchar}については,以下の順序に従って文字種を決める: \begin{enumerate} -\item \Param{prebreakpenalty} が0以上の文字はOpen扱いである. -\item \Param{postbreakpenalty} が0以上の文字はClose扱いである. -\item 上の2条件のどちらにも当てはまらなかった文字は,Kanji扱いである. +%\item ... +%\item Characters whose \Param{\hyperlink{fld:prebp}{prebreakpenalty}} is greater than or equal to 0 are Open. +%\item \Param{\hyperlink{fld:prebp}{prebreakpenalty}}が0以上の文字はOpen扱いである. + +%\item Characters whose \Param{\hyperlink{fld:postbp}{postbreakpenalty}} is greater than or equal to 0 are Close. +%\item \Param{\hyperlink{fld:postbp}{postbreakpenalty}}が0以上の文字はClose扱いである. + +%\item Characters that don't satisfy the above two conditions are Kanji. +%\item 上の2条件のどちらにも当てはまらなかった文字は,Kanji扱いである. \end{enumerate} +\end{itemize} + +%<*en> +The width of halfwidth kana (U+FF61--U+FF9F) is same as the width of \textbf{ALchar}; +the width of the other \textbf{JAchars} is double the width of \textbf{ALchar}. +% +%<*ja> なお,半角カナ(U+FF61--U+FF9F)以外の\textbf{JAchar}は欧文文字2文字分の幅をとるものとみなされる. 半角カナは欧文文字1文字分の幅となる. -\end{itemize} +% +%<*en> +The classification process is executed every time a character appears in +listing environments. +% +%<*ja> これらの文字種決定は,実際に \texttt{lstlisting} 環境などの内部で文字が出てくるたびに行われる. +% + +%<*ja> +\section{和文の行長補正方法} +\label{sec-adjspec} +\texttt{luatexja-adjust.sty} で提供される優先順位付きの行長調整の詳細を述 +べる.大まかに述べると,次のようになる. +\begin{itemize} +\item 通常の\TeX の行分割方法に従って,段落を行分割する.この段階では,行 + 長に半端が出た場合,その半端分は\Param{\hyperlink{fld:xks}{xkanjiskip}}, + \Param{\hyperlink{fld:kanjiskip}{kanjiskip}},JFMグルーの全てで(優先順位なく)負担される. +\item その後,\texttt{post\_linebreak\_filter} callbackを使い,\textbf{段 + 落中の各行ごとに},行末文字の位置を調整したり,優先度付きの行長調整 + を実現するためにグルーの伸縮度を調整する. +\texttt{luatexja-adjust.sty} の作用は,このcallbackを追加するだけであり, + この章の残りではcallbackでの処理について解説する. +\end{itemize} + +\paragraph{準備:合計伸縮量の計算} +グルーの伸縮度(\texttt{plus} や \texttt{minus} で指定されている値)には, +有限値の他に,\texttt{fi},\texttt{fil},\texttt{fill},\texttt{filll}と +いう4つの無限大レベル(後ろの方ほど大きい)があり,行の調整に +\texttt{fi} などの\textbf{無限大レベルの伸縮度が用いられている場合は,そ +の行に対しての処理を中止}する. + +よって,以降,問題にしている行の行長調整は伸縮度が有限長のグルーを用いて +行われているとして良い.まず,段落中の行中のグルーを +\begin{itemize} +\item 下のどれにも該当しないグルー +\item JFMグルー(優先度別にまとめられる) +\item 和欧文間空白(\Param{\hyperlink{fld:xks}{xkanjiskip}}) +\item 和文間空白(\Param{\hyperlink{fld:kanjiskip}{kanjiskip}}) +\end{itemize} +の$1+1+5+1=8$つに類別し,それぞれの種別ごとに許容されている伸縮度の合計を計算する. +また,行長と自然長との差の絶対値を計算し,それを\textit{total}とおく. + +\subsection{行末文字の位置調整} +まず,行末が文字クラス$n$の\textbf{Jachar}であった場合, +それを動かすことによって,\textbf{JAglue} が負担する調整量を少なくしようとする. +この行末文字の左右の移動可能量は,JFM中にある文字クラス$n$の定義の +\texttt{end\_stretch},~\texttt{end\_shrink}フィールドに全角単位の値として記述されている. + +例えば,行末文字が句点「。」であり,そこで用いられているJFM中に +\begin{verbatim} + [2] = { + chars = { '。', ... }, width = 0.5, ..., + end_stretch = 0.5, end_shrink = 0.5, + }, +\end{verbatim} +という指定があった場合,この行末の句点は +\begin{itemize} +\item 通常の\TeX の行分割処理で「半角以上の詰め」が行われていた場合, +この分の行中の\textbf{JAglue}の負担を軽減するため, +行末の句点を半角だけ右に移動する(ぶら下げ組を行う). +\item 通常の\TeX の行分割処理で「半角以上の空き」が行われていた場合, +逆に行末句点を半角左に移動させる(見た目的に全角取りとなる). +\item 以上のどちらでもない場合,行末句点の位置調整は行わない. +\end{itemize} +となる. + +行末文字を移動した場合,その分だけ\textit{total}の値を引いておく. + +\subsection{グルーの調整} +\textit{total}の分だけが,行中のグルーの伸縮度に応じて負担されることになる. +…… % + %<*en> -\section{Patch for the \Pkg{listings} package} +\section{Advanced line-adjustment for Japanese characters} \dots % + + + \begin{thebibliography}{99} \addcontentsline{toc}{section}{\refname} \bibitem{texbytopic} Victor Eijkhout, \emph{\TeX\ by Topic, A \TeX nician's Reference}, Addison-Wesley, 1992. \bibitem{listings} C.\ Heinz, B.\ Moses. The \textsf{Listings} Package. -\bibitem{jlisting} Thor Watanabe. Listings\ -\ MyTeXpert.\newblock +\bibitem{jlisting} Thor Watanabe. Listings\ -\ MyTeXpert. \newblock \url{http://mytexpert.sourceforge.jp/index.php?Listings} +\bibitem{min10} 乙部厳己,min10フォントについて. +\url{http://argent.shinshu-u.ac.jp/~otobe/tex/files/min10.pdf} +\bibitem{jlreq} W3C Japanese Layout Task Force~(ed), Requirements for Japanese Text Layout (W3C Working Group Note), 2011, 2012. \newblock +\url{http://www.w3.org/TR/jlreq/}% +% \\日本語訳の書籍版:W3C日本語組版タスクフォース(編),『W3C技術ノート 日本語組版処理の要件』,東京電機大学出版局,2012. +\bibitem{x4051} 日本工業規格(Japanese Industrial Standard) JIS~X~4051, +日本語文書の組版方法(Formatting rules for Japanese documents), 1993, 1995, 2004. \end{thebibliography} \newpage \appendix +\batchmode +%<*!zh> +%\section{The category code of non-kanji characters defined in JIS~X~0213} +%\section{\LuaTeX-jaにおけるJIS~X~0213非漢字のcatcode} +%<*en> +In these tables, the default catcode (\LuaTeX-ja) and kcatcode ((u)\pTeX) of non-kanji +characters defined in JIS~X~0213 from row 1 to row 13 is summarized. +Each character is printed as follows: +% %<*ja> -\section{\LuaTeX-jaにおけるJIS~X~0213非漢字のcatcode} - ここでは,JIS~X~0213の非漢字部分(第1区〜第13区)のうち, どの文字が(u)\pTeX や\LuaTeX-jaで制御綴内に使用可能かを表にしてまとめる. 各文字は +% \begin{center} \tt\fboxsep=1pt\fbox{\hbox to \zw{\gt あ\hss}}\,\scriptsize LUP \end{center} +%<*ja> のように表示しており,各文字は次の意味を持っている. -この表の生成は,JIS X 0208の範囲内の文字については\verb+\jis+命令を使って行なっている. +この表の生成は,JIS~X~0208の範囲内の文字については\verb+\jis+命令を使って行なっている. +% +%<*en> +The tables are generated by using \verb+\jis+ command for characters included in +JIS~X~0208. +Each character in the tables means: +% \begin{itemize} +%<*en> +\item The background of a character regarded as \textbf{ALchar} in \LuaTeX-ja + is colored light blue. +% +%<*ja> \item 背景が薄く青く塗られている文字は, \LuaTeX-ja の標準で\textbf{ALchar}として認識されている文字である. +% + +%<*en> +\item The first letter {\tt L} means that the character is available for + the name of a control sequence in \XeTeX{} and \LuaTeX-ja (its catcode is 11). +% +%<*ja> \item 1文字目の {\tt L} は,\XeTeX や\LuaTeX-jaにおいてこの文字が制御綴内に 使用可能(catcodeが11)であることを表している. +% + +%<*en> +\item The second letter {\tt U} means that the character is available for + the name of a control sequence in \upTeX{} (its kcatcode is 16 or 17). + \upTeX{} regards these characters as Japanese character. +% +%<*ja> \item 2文字目の{\tt U} は,\upTeX においてこの文字が制御綴内に使用可能(kcatcodeは16,~17)であることを 表している.この範囲内では,\upTeX は標準で全文字を和文文字として扱うようである. +% + +%<*en> +\item The third letter {\tt P} means that the character is available for + the name of a control sequence in \pTeX{} (its kcatcode is 16 or 17). +% +%<*ja> \item 3文字目の {\tt P} は,\pTeX においてこの文字が制御綴内に使用可能(kcatcodeは16,~17)であることを 表している. +% + +%<*en> +\item If the third letter is {\tt -} (or the character is printed in red), + the character is not included in JIS~X~0208. + Therefore, you can consider the character is not available in \pTeX. +% +%<*ja> \item 3文字目が{\tt -}となっているもの(本体の文字も赤身がかっている)は, -JIS~X~0208にないため使用不能と考えて良いものである. +JIS~X~0208にないため\pTeX では使用不能と考えて良いものである. +% + +%<*en> +\item The kana for bidakuon in row 4 and 5 are omitted. +% +%<*ja> \item 第4区と第5区にある,鼻濁音の仮名については省略した. +% \end{itemize} @@ -6383,7 +6827,9 @@ JIS~X~0208にないため使用不能と考えて良いものである. } \def\test#1{{% -\subsection*{第#1区}\tt\small\fboxsep=1pt\centering\tabcolsep=0.25\zw +%\subsection*{Row #1} +%\subsection*{第#1区} +\tt\small\fboxsep=1pt\centering\tabcolsep=0.25\zw \begin{tabular}{ccccccccccccccccc}\toprule&"0&"1&"2&"3&"4&"5&"6&"7&"8&"9&"A&"B&"C&"D&"E&"F\\ \out{#1}{2}\out{#1}{3}\out{#1}{4}\out{#1}{5}\out{#1}{6}\out{#1}{7}\bottomrule \end{tabular}\par}\medskip} @@ -6391,9 +6837,9 @@ JIS~X~0208にないため使用不能と考えて良いものである. \test{1}\test{2}\test{3}\test{4}\test{5}\test{6}\test{7}\test{8} \test{9}\test{10}\test{11}\test{12}\test{13} -% - +\errorstopmode +% \section{Package versions used in this document} This document was typeset using the following packages: