X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=doc%2Fluatexja.dtx;h=ebea7a5c0fe49697e31055fc2174f67eb6b2de53;hb=26649839d59f6fb2d9517806a2850200a16895bc;hp=0c159e452717e52a6dccf53e2a3669ff02381832;hpb=d452ba546ab15163fe51317453bef5a01552dd00;p=luatex-ja%2Fluatexja.git diff --git a/doc/luatexja.dtx b/doc/luatexja.dtx index 0c159e4..ebea7a5 100644 --- a/doc/luatexja.dtx +++ b/doc/luatexja.dtx @@ -8,6 +8,7 @@ %%%%% section ==> 章 %%%%% subsection => 節 +\IfFileExists{luatex85.sty}{\RequirePackage{luatex85}}{} %\documentclass[a4paper,titlepage]{article} %\documentclass[a4paper,titlepage]{ltjsarticle} @@ -15,8 +16,8 @@ %%%%%%%% \makeatletter %%%%%%%% +\def\pgfsysdriver{pgfsys-pdftex.def} \directlua{if jit then jit.on() end} - \usepackage{metalogo,amsmath,array,tikz,pict2e,multienum,float} \usepackage{booktabs,multicol,luatexja-ruby} \usepackage[all]{xy} @@ -25,16 +26,17 @@ %%%%%%%% fonts \usepackage{luatexja-otf} \directlua{luatexja.otf.enable_ivs()} -\usepackage[match]{luatexja-fontspec} -\usepackage[kozuka-pr6n]{luatexja-preset} -\usepackage{unicode-math} +\usepackage[no-math]{fontspec} \setmainfont[Ligatures=TeX]{Linux Libertine O} \setmonofont[Scale=MatchLowercase, ItalicFont=lmmono10-italic.otf, BoldFont=lmmonolt10-bold.otf, BoldItalicFont=lmmonolt10-boldoblique.otf ]{lmmono10-regular.otf} +\setsansfont[Scale=MatchLowercase,Ligatures=TeX]{Linux Biolinum O} +\usepackage[match]{luatexja-fontspec} +\usepackage[kozuka-pr6n]{luatexja-preset} +\usepackage{unicode-math} \setmonojfont{KozGoPr6N-Regular.otf} \setmathfont[Scale=MatchLowercase]{xits-math.otf} -\setsansfont[Scale=MatchLowercase,Ligatures=TeX]{Linux Biolinum O} \setLaTeXa{\scshape a} %<*ja> @@ -163,7 +165,7 @@ \def\_{\leavevmode \kern .06em\vbox {\hrule \@width .333em}} \def\cs#1{\texttt{\upshape \texorpdfstring{\textbackslash\ltjsetparameter{autoxspacing=false}#1}{\textbackslash#1}}} - +\ltjsetparameter{alxspmode={`\\,allow}} %%%%%%%% \makeatother %%%%%%%% @@ -175,10 +177,11 @@ width:\hfill\ #2\cr height:\hfill\ #3\cr depth:\hfill\ #4\cr }}}}}\,} -\protected\def\Param#1{\hyperlink{fld:#1}{\underline{\smash{\textsf{#1}}}}} % parameter name -\protected\def\DParam#1{\hypertarget{fld:#1}{\underline{\smash{\textsf{#1}}}}} % parameter name (definition) +\def\myghost{\ifmmode\else\ltjalchar"200C \fi} +\protected\def\Param#1{\myghost\hyperlink{fld:#1}{\underline{\smash{\textsf{#1}}}}\myghost} % parameter name +\protected\def\DParam#1{\myghost\hypertarget{fld:#1}{\underline{\smash{\textsf{#1}}}}\myghost} % parameter name (definition) \protected\def\Pkg#1{\textsf{#1}} % packages/classes - +\ltjsetparameter{alxspmode={"200C,allow}} \begin{document} \lstset{ @@ -452,7 +455,7 @@ Japanese characters in discretionary break (\cs{discretionary}) is not supported %<*en> \paragraph{Greek and Cyrillic letters, and ISO~8859-1 symbols} By default, \LuaTeX-ja uses Japanese fonts to typeset Greek and Cyrillic letters, - To change this behavior, + To change this behavior, put \verb!\ltjsetparameter{jacharrange={-2,-3}}! in the preamble. For the detailed description, see Subsection~\ref{ssec-setrange}. @@ -601,17 +604,17 @@ and \emph{Japanese fonts} for fonts used in \textbf{JAchar}. %The following packages are needed for the \LuaTeX-ja\ package. %\LuaTeX-jaパッケージの動作には次のパッケージ類が必要である. \begin{itemize} -\item \LuaTeX\ beta-0.80.0 (or later) -\item \Pkg{luaotfload} v2.5 (or later) +\item \LuaTeX\ beta-0.85.0 (or later) +\item \Pkg{luaotfload} v2.6 (or later) \item \Pkg{adobemapping} (Adobe cmap and pdfmapping files) \item \Pkg{everysel} (if you want to use \LuaTeX-ja with \LaTeXe) \item \Pkg{fontspec} v2.4 %\item \emph{IPAex fonts} (\url{http://ipafont.ipa.go.jp/}) %\item \emph{IPAexフォント(\url{http://ipafont.ipa.go.jp/})} \end{itemize} -%In summary, this version of \LuaTeX-ja no longer supports \TeX~Live~2014 (or older version). +%In summary, this version of \LuaTeX-ja no longer supports \TeX~Live~2015 (or older version). %<*ja> -要約すると,本バージョンの\LuaTeX-jaは\TeX~Live~2014以前では動作しない\footnote{% +要約すると,本バージョンの\LuaTeX-jaは\TeX~Live~2015以前では動作しない\footnote{% もっとも,自分で\LuaTeX のバイナリをSubversionリポジトリからビルドしていれば話は別である. }. % @@ -815,7 +818,7 @@ bad argument #1 to 'open' (string expected, got nil) If so, please execute a batch file which is written on \href{https://osdn.jp/projects/luatex-ja/wiki/FrontPage%28en%29}{ the Project Wiki (English)}. This batch file creates a temporary directory, copy CMaps in it, -run a test file which loads \LuaTeX-ja in this directory, +run a test file which loads \LuaTeX-ja in this directory, and finally delete the temporary directory. % %<*ja> @@ -1004,6 +1007,28 @@ Note that the bold series in both family are same as the medium series of \emph{ %\item Japanese characters in math mode are typeset by the font family \texttt{mc}. %\item 数式モード中の和文文字は明朝体(\texttt{mc})で出力される. +%<*en> + \item \cs{jttdefault}% + \footnote{% + When \Pkg{ltjsclasses} classes are used, or + \Pkg{luatexja-fontspec} (or \Pkg{luatexja-preset}) is loaded with \texttt{match} option, + \cs{ttfamily} changes the current Japanese font amily to \cs{jttdefault}. + These classes and packages also redefine \cs{jttdefault} to + \cs{gtdefault} (\emph{gothic}~family). + } specifies the Japanese font family in \cs{verb}~or~\texttt{verbatim} environment. + The default value of \cs{jttdefault} is \cs{mcdefault}, so \emph{mincho} family is used. +% +%<*ja> + \item \cs{verb} や \texttt{verbatim} 環境中の和文文字に使われる和文フォントファミリは + \ \cs{jttdefault} で指定する% + \footnote{% + \Pkg{ltjsclasses}を使用したり,あるいは \texttt{match} オプションを指定して\Pkg{luatexja-fontspec}% + や\Pkg{luatexja-preset}パッケージを読み込んだときは,単なる \cs{ttfamily} によっても和文フォントが + \ \cs{jttdefault}\ に変更される.また,これらのクラスファイルやパッケージは + \ \cs{jttdefault}\ を \cs{gtdefault}(ゴシック体)に再定義する. + }.標準値は \cs{mcdefault},つまり明朝体として用いるのと + 同じフォントファミリである. +% %<*en> \item If you use the \Pkg{beamer} class with the default font theme (which uses sans serif @@ -1035,6 +1060,12 @@ Okumura), namely, \Pkg{ltjclasses}\footnote{% The latter \texttt{ltjt*.cls} are for vertically writtened Japanese documents. } and \Pkg{ltjsclasses}\footnote{% \texttt{ltjsarticle.cls},~\texttt{ltjsbook.cls},~\texttt{ltjskiyou.cls}.}. + +Original \Pkg{jsclasses} use \cs{mag}~primitive to set the main document font size. +However, \LuaTeX\ beta-0.87.0~or~later does not support \cs{mag} in PDF~output, +so \Pkg{ltjsclasses} use different method% +\footnote{Similar to \texttt{magstyle=xreal} in the \Pkg{BXjscls} classes (by Takayuki Yato).} +to set the main document font size. % %<*ja> しかしながら,上記の設定は日本語の文書にとって十分とは言えない. @@ -1049,6 +1080,12 @@ Okumura), namely, \Pkg{ltjclasses}\footnote{% \Pkg{ltjsclasses}\footnote{% \texttt{ltjsarticle.cls},~\texttt{ltjsbook.cls},~\texttt{ltjskiyou.cls}.}% がそれぞれ用意されている. + +元々の\Pkg{ltjsclasses}ではフォントサイズを指定するのに\cs{mag}プリミティブが使われていたが, +\LuaTeX~beta-0.87.0以降ではPDF出力時の\cs{mag}のサポートが廃止された. +そのため,\Pkg{ltjsclasses}では別の方法 +\footnote{八登崇之氏による\Pkg{BXjscls}クラスにおける\texttt{magstyle=xreal}指定時と類似している.}で +フォントサイズを指定することにしている. % %<*ja> @@ -1190,7 +1227,7 @@ auto select&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\ %<*en> \item For defining a Japanese font family, use \cs{DeclareKanjiFamily} instead of - \cs{DeclareFontFamily}. (In previous version of \LuaTeX-ja, + \cs{DeclareFontFamily}. (In previous version of \LuaTeX-ja, using \cs{DeclareFontFamily} didn't cause any problem. But this no longer applies the current version.) \item Defining a Japanese font shape can be done by usual \cs{DeclareFontShape}: @@ -1277,7 +1314,7 @@ this chapter. For the method, please see Subsection~\ref{ssec-math}. %\subsection{\Pkg{luatexja-fontspec}パッケージ} \label{ssec-fontspec} %<*en> -To use the functionality of the \Pkg{fontspec} package to Japanese fonts, +To use the functionality of the \Pkg{fontspec} package to Japanese fonts, it is needed to load the \Pkg{luatexja-fontspec} package in the preamble, as follows: \begin{quote} \ttfamily \textbackslash usepackage[]\{luatexja-fontspec\} @@ -1436,7 +1473,7 @@ JIS~X~0208:1990→辻 %<*en> One can load the \Pkg{luatexja-preset} -package to use several ``presets'' of Japanese fonts. +package to use several ``presets'' of Japanese fonts. This package provides functions in a part of \Pkg{japanese-otf} package and a part of \Pkg{PXchfon} package by Takayuki Yato. @@ -1467,13 +1504,14 @@ For example, the line~5 in below example is eqivalent to lines 1--3. %\paragraph{General options} %\paragraph{一般的なオプション} \begin{cslist}[before*=] - -\item[fontspec] +\item[fontspec% +%\textrm{~(enabled by default)} +%\emph{\gtfamily (既定)} +] %<*en> With this option, Japanese fonts are selected using functionality of the \Pkg{luatexja-fontspec} package. This means that the \Pkg{fontspec} package is automatically loaded by this package. -\emph{This option is enabled by default.} If you need to pass some options to \Pkg{fontspec}, you can load \Pkg{fontspec} manually before \Pkg{luatexja-preset}: @@ -1481,7 +1519,6 @@ before \Pkg{luatexja-preset}: %<*ja> \Pkg{luatexja-fontspec}パッケージの機能を用いて和文フォントを選択する. これは,\Pkg{fontspec}パッケージが自動で読み込まれることを意味する. -\emph{このオプションは標準で有効になっている.} もし\Pkg{fontspec}パッケージに何らかのオプションを渡す必要がある \footnote{例えば,数式フォントまで置換されてしまい,\cs{mathit}によってギリシャ文字の @@ -1501,7 +1538,7 @@ With this option, selecting Japanese fonts won't be performed using the function This option is ignored when \Pkg{luatexja-fontspec} package is loaded. When this option is specified, \Pkg{fontspec}~and~\Pkg{luatexja-fontspec} are -\emph{not} loaded by default. Nevertheless, +\emph{not} loaded by default. Nevertheless, the package\Pkg{fontspec} can coexist with the option, as the following: \begin{lstlisting} \usepackage{fontspec} @@ -1528,19 +1565,39 @@ In this case, one can use \cs{setmainfont} etc.\ to select \emph{alphabetic} fon いる場合は \texttt{nfssonly} オプションは無視される. % -\item[nodeluxe] +\item[match] %<*en> +If this option is specified, usual family-changing commands such as +\cs{rmfamily},~\cs{textrm}, \cs{sffamily},~\dots\ also change Japanese font family. +This option is passed to \Pkg{luatexja-fontspec}, if \texttt{fontspec} +option is specifed. +% + +%<*ja> +このオプションが指定されると,「\pLaTeXe 新ドキュメントクラス」のように\ +\cs{rmfamily}, \verb+\textrm{...}+, \cs{sffamily} 等が +欧文フォントだけでなく和文フォントも変更するようになる. +\ \texttt{fontspec}\ +オプションが有効になっている場合は,このオプションは \Pkg{luatexja-fontspec} パッケージへと渡される. +% + + +\item[nodeluxe% +%\textrm{~(enabled by default)} +%\emph{\gtfamily (既定)} +] +%<*en> +The nagation of \texttt{deluxe} option. Use one-weighted \textit{mincho} and \textit{gothic} font families. This means that \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+ and \verb+\gtfamily\mdseries+ use the same font. -\emph{This option is enabled by default.} % %<*ja> +\texttt{deluxe}オプションの否定. \LaTeXe 環境下の標準設定のように,明朝体・ゴシック体を各1ウェイトで使用する. より具体的に言うと,この設定の下では \ \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+, \verb+\gtfamily\mdseries+はみな同じフォントとなる. -\emph{このオプションは標準で有効になっている.} % \item[deluxe] %<*en> @@ -1577,8 +1634,17 @@ characters designed for ruby. }. % \item[bold] -%Substitute bold series of \textit{gothic} for bold series of \textit{mincho}. -%「明朝の太字」をゴシック体の太字によって代替する. +%<*en> +Substitute bold series of \textit{gothic} for bold series of \textit{mincho}. +If \texttt{nodeluxe} option is enabled, medium series of \textit{gothic} is also changed, +since we use same font for both series of \textit{gothic}. +% +%<*ja> +「明朝の太字」をゴシック体の太字によって代替する. +もし\texttt{nodeluxe}オプションが指定されている場合は,ゴシック体は1ウェイトしか使用されな + いため, +「ゴシック体の中字」も同時に変更されることになる. +% \item[90jis] %Use 90JIS glyph variants if possible. %出来る限り90JISの字形を使う. @@ -1594,6 +1660,7 @@ Use the JFM \texttt{jfm-jis.lua}, instead of \texttt{jfm-ujis.lua}, which is the 用いるJFMを(JISフォントメトリック類似の)\texttt{jfm-jis.lua}にする.このオプションがない時は \LuaTeX-ja標準の\texttt{jfm-ujis.lua}が用いられる. % + \end{cslist} %<*en> Note that \texttt{90jis} and \texttt{jis2004} only affect with \textit{mincho}, @@ -1602,8 +1669,8 @@ We didn't taken account of when both \texttt{90jis} and \texttt{jis2004} are sp % %<*ja> \texttt{90jis}と\texttt{jis2004}については本パッケージで定義された -明朝体・ゴシック体(・丸ゴシック体)にのみ有効である.両オプションが -同時に指定された場合の動作については全く考慮していない. +明朝体・ゴシック体(・丸ゴシック体)にのみ有効である. +両オプションが同時に指定された場合の動作については全く考慮していない. % %\paragraph{Presets for multi weight} @@ -1702,7 +1769,7 @@ Std/StdNフォントであり,その他はAdobe-Japan1-5対応である. \end{tabular} \end{center} -%\medskip +%\newpage \item[morisawa-pro] Morisawa Pro (Adobe-Japan1-4) fonts. % \\*[-\dimexpr\medskipamount+\baselineskip\relax] @@ -1762,7 +1829,8 @@ Std/StdNフォントであり,その他はAdobe-Japan1-5対応である. \end{tabular} \end{center} - \item[moga-mobo] MogaMincho, MogaGothic, and MoboGothic. +%\newpage +\item[moga-mobo] MogaMincho, MogaGothic, and MoboGothic. %These fonts can be downloaded from\\\hfill \url{http://yozvox.web.fc2.com/}. %これらのフォントは \url{http://yozvox.web.fc2.com/} からダウンロードできる. @@ -1776,9 +1844,9 @@ Std/StdNフォントであり,その他はAdobe-Japan1-5対応である. %\smash{\raisebox{1.5ex}{\gt 明朝}}% &bold&Moga90Mincho Bold&MogaMincho Bold\\ \midrule - &&Moga90Gothic&MogaGothic\\ + &&Moga90Gothic*&MogaGothic*\\ &\smash{\raisebox{1.5ex}{medium}} - &Moga90Gothic&MogaGothic\\ + &Moga90Gothic Bold&MogaGothic Bold\\ \cmidrule(l){2-4} %\textit{gothic}% %\gt ゴシック @@ -2173,7 +2241,7 @@ This range consists of the following Unicode ranges, \emph{except characters in \item \texttt{U+0180}--\texttt{U+024F}: Latin Extended-B \item \texttt{U+0250}--\texttt{U+02AF}: IPA Extensions \item \texttt{U+02B0}--\texttt{U+02FF}: Spacing Modifier Letters -%\par\ +%\par\ \item \texttt{U+0300}--\texttt{U+036F}: \\*\null\hfill Combining Diacritical Marks \item \texttt{U+1E00}--\texttt{U+1EFF}: \\*\null\hfill Latin Extended Additional %\par\ @@ -2312,7 +2380,7 @@ The block list is indicated in Table~\ref{table-rng7}. %<*en> \paragraph{Notes on \texttt{U+0080}--\texttt{U+00FF}} -You should treat characters in \\texttt{U+0080}--\texttt{U+00FF} as \textbf{ALchar}, +You should treat characters in \\texttt{U+0080}--\texttt{U+00FF} as \textbf{ALchar}, when you use traditional 8-bit fonts, such as the \Pkg{textcomp} package or the \Pkg{marvosym} package. @@ -2321,7 +2389,7 @@ package is 182. This codepoint corresponds \P\ (\text{U+00B6}) in Unicode. Similarly, \cs{Frowny} which is provided by the \Pkg{marvosym} package has the same codepoint as \S\ (\text{U+00A7}). Hence, as previous versions of \LuaTeX-ja, if these characters are treated as -\text{JAchar}s, then \cs{textparagraph} produces ``ltjjachar`¶'' (in a Japanese font), +\text{JAchar}s, then \cs{textparagraph} produces ``ltjjachar`¶'' (in a Japanese font), and \cs{Frowny} produces ``\ltjjachar`§'' (in a Japanese font). To avoid such situations, the default setting of \LuaTeX-ja is changed in this release @@ -2630,7 +2698,7 @@ becuse a \emph{JAchar} is encapsulated by a horizontal box if needed. 数式中の挙動は異なっているので注意が必要である. 例えば,表\ref{tab:math_bsa}のように,数式中に明示的に現れた \cs{hbox} は, \begin{itemize} - \item \pTeX では,ボックス全体が \cs{ybaselineshift} だとシフトされるので, + \item 2015年以前の\pTeX では,ボックス全体が \cs{ybaselineshift} だとシフトされるので, 表\ref{tab:math_bsa}中の``い''のように,ボックス中の和文文字は \ \cs{ybaselineshift} だけシフトされ,一方,``for all''のように, ボックス内の欧文文字は2重にシフトされることになる. @@ -2638,6 +2706,10 @@ becuse a \emph{JAchar} is encapsulated by a horizontal box if needed. 数式中に明示的に現れた \cs{hbox} はシフトしない.そのため, 表\ref{tab:math_bsa}中の``い''も``for all''も,それぞれ本文中に 書かれたときと同じ上下位置に組まれる. + + なお,\TeX~Live~2016以降の\pTeX では改修がなされ,\LuaTeX-jaと + 近い挙動になるようにしているが,数式中に直に書かれた``あ''のベースラインについては + まだ違いが見られる. \end{itemize} \begin{table} \small\centering @@ -2654,12 +2726,16 @@ $\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ \end{lstlisting}\\ \noalign{\vskip-\origbaselineskip} \midrule -\emph{\pTeX}& +\emph{\pTeX~(--2015)}& {\ltjsetparameter{yalbaselineshift=10pt}% -数式abc: $あa\lower10pt\hbox{い}$, $\int_0^x t\,dt=x^2/2$, +数式abc: $\lower10pt\hbox{あ}a\lower10pt\hbox{い}$, $\int_0^x t\,dt=x^2/2$, $\Phi\vdash F(x)\ \lower10pt\hbox{for all}\ x\in A$ -\par}\\ -\midrule +\par}\\\noalign{\vskip-\origbaselineskip}\midrule +\emph{\pTeX~(2016--)}& +{\ltjsetparameter{yalbaselineshift=10pt}% +数式abc: $\lower10pt\hbox{あ}a\hbox{い}$, $\int_0^x t\,dt=x^2/2$, +$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ +\par}\\\noalign{\vskip-\origbaselineskip}\midrule \emph{\LuaTeX-ja}& {\ltjsetparameter{yalbaselineshift=10pt}% 数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2/2$, @@ -2750,13 +2826,13 @@ For the detail, see Table~\ref{table-kcat}. %<*en> \bfseries meaning& \bfseries control word& -\bfseries widow penalty\hbox{}$^*$& +\bfseries widow penalty& \bfseries linebreak\\ % %<*ja> \bfseries 意図& \bfseries 制御綴中に使用& -\bfseries 文字ウィドウ処理\hbox{}$^*$& +\bfseries 文字ウィドウ処理& \bfseries 直後での改行\\ % \midrule @@ -2771,7 +2847,7 @@ For the detail, see Table~\ref{table-kcat}. \medskip %<*ja> -文字ウィドウ処理\hbox{}$^*$: 「漢字が一文字だけ次の行に行くのを防ぐ」\ +文字ウィドウ処理:「漢字が一文字だけ次の行に行くのを防ぐ」 \cs{jcharwidowpenalty} が, その文字の直前に挿入されうるか否か,を示す. % @@ -2843,17 +2919,22 @@ between \XeTeX\ and \LuaTeX, by the following reasons: \begin{itemize} \item (plain format) \texttt{luatex-unicode-letters.tex} is based on old \texttt{unicode-letters.tex}. \item The latter half of \texttt{unicode-letters.tex}~and~\texttt{unicode-letters.def} -sets\cs{catcode} of Kanji and kana characters to 11, via setting \cs{XeTeXcharclass}. - -However, this latter half does not exist (plain case), or not executed (\LaTeX~case) in \LuaTeX, hence -\cs{catcode} of Kanji and kana characters remains 12 in \LuaTeX. +sets\cs{catcode} of several characters to 11, via setting \cs{XeTeXcharclass}. +However, this latter half does not exist (plain case), or not executed (\LaTeX~case) in \LuaTeX. \end{itemize} -In other words, Kanji nor kana characters cannot be used in -a control word, in the default setting of \LuaTeX. +In other words, +\begin{description} +\item[plain \LuaTeX] +Kanji nor kana characters cannot be used in +a control word, in the default setting of plain \LuaTeX. +\item[\LuaLaTeX] +In recent (2015-10-01 or later) \LuaLaTeX, Kanji and kana characters in a control word is supported (these catcode are 11), +but not fullwidth alphanumerics and several other characters. +\end{description} This would be inconvenient for \pTeX~users to shifting to \LuaTeX-ja, -since several control words containing Kanji, such as \verb+\西暦+, -are used in \pTeX. +since several control words containing Kanji or other fullwidth characters, such as +\verb+\西暦+~or~\verb+\1年目西暦+ are used in \pTeX. Hence, \LuaTeX-ja have a counterpart of \texttt{unicode-letters.tex} for \LuaTeX, \emph{to match the \cs{catcode} setting with that of \XeTeX.} % @@ -2866,7 +2947,6 @@ for \LuaTeX, \emph{to match the \cs{catcode} setting with that of \XeTeX.} \LaTeX では \cs{catcode} の設定はカーネルに \texttt{unicode-letters.def} として統合され. このファイルを\XeLaTeX, \LuaLaTeX の両方が用いている. - だが,\XeTeX における \cs{catcode} の初期設定と \LuaTeX におけるそれは一致していない: \begin{itemize} @@ -2874,16 +2954,20 @@ for \LuaTeX, \emph{to match the \cs{catcode} setting with that of \XeTeX.} \texttt{unicode-letters.tex} が古い \item \texttt{unicode-letters.tex} 後半部や \texttt{unicode-letters.def} 後半部では \cs{XeTeXcharclass} の設定を行なっており, -それによって漢字や仮名の \cs{catcode} が11に設定されている. - +それによって漢字や仮名,および全角英数字の \cs{catcode} が11に設定されている. しかし,\texttt{luatex-unicode-letters.tex} ではこの「後半部」が まるごと省略されており,また\LuaLaTeX でも \texttt{unicode-letters.def} 後半部は実行されな - い.従って漢字や仮名の \cs{catcode} は12のままになっている. + い. \end{itemize} -言い換えると,\LuaTeX の初期状態では漢字や仮名を制御綴内に +言い換えると, +\begin{description} + \item[plain \LuaTeX] 漢字や仮名を制御綴内に 使用することはできない. - -これでは \pTeX で使用できた \verb+\西暦+ などが使えないこととなり, + \item[\LuaLaTeX] 最近の(2015-10-01以降の) +\LuaLaTeX では漢字や仮名を制御綴内に +使用することが可能になったが,全角英数字は相変わらず使用できない, +\end{description} +これでは \pTeX で使用できた \verb+\1年目西暦+\footnote{科研費\LaTeX で使用されているそうです.}などが使えないこととなり, \LuaTeX-jaへの移行で手間が生じる.そのため,\LuaTeX-jaでは \texttt{unicode-letters.tex} の後半部にあたる内容を自前でパッチし, 結果として\textbf{\XeTeX における初期設定と同じになるようにしている.} @@ -3837,8 +3921,8 @@ OpenType font featureと見かけ上同じような形式で指定できるも \paragraph{\texttt{extend} and \texttt{slant}} The following setting can be specified as OpenType font features: \begin{cslist}[style=standard] -\item[\cs{extend=}] expand the font horizontally by . -\item[\cs{slant=}] slant the font. +\item[\texttt{extend=}] expand the font horizontally by . +\item[\texttt{slant=}] slant the font. \end{cslist} Note that \LuaTeX-ja doesn't adjust JFMs by these \texttt{extend} and \texttt{slant} settings; you have to write new JFMs on purpose. @@ -3853,6 +3937,36 @@ letter-spacing and the width of italic correction are not correct: \S あいう\/ABC \end{LTXexample} +%<*ja> +\paragraph{\texttt{ltjksp} 指定} +\label{pg:ltjksp} +\LuaTeX-ja標準では, +JFM中における \texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ +\texttt{kanjiskip\_shrink}キー(\pageref{pg:ksp_nat}ページ)の使用によって, +「JFM由来のグルーの他に,\Param{kanjiskip}の自然長/伸び量/縮み量の一部が +同じ場所に挿入される」という状況が起こりうる. +この機能を無効化し,20150922.0版以前と同じような組版を得るためには +他のOpenType機能と同じように\ \texttt{-ltjksp}\ 指定を行えば良い. +\begin{LTXexample}[width=16\zw] +\leavevmode +\ltjsetparameter{kanjiskip=0pt plus 3\zw} +\vrule\hbox to 15\zw{あ「い」う,えお}\vrule + +\jfont\G=file:KozMinPr6N-Regular.otf% + :jfm=ujis;-ltjksp at 9.2487pt +\G\leavevmode% +\vrule\hbox to 15\zw{あ「い」う,えお}\vrule +\end{LTXexample} +なお, +\begin{lstlisting} + \jfont\G=file:KozMinPr6N-Regular.otf:jfm=ujis;-ltjksp;+ltjksp at 9.2487pt +\end{lstlisting} +のように \texttt{+ltjksp} 指定を行った場合は,\texttt{kanjiskip\_natural} など +3キーは再び有効化される.\texttt{-ltjksp}, \texttt{+ltjksp} を複数回指定した場合は, +最後に指定したものが有効となる. +% + + %\subsection{\cs{tfont}} %\subsection{\cs{tfont} 命令} @@ -3865,13 +3979,12 @@ letter-spacing and the width of italic correction are not correct: \catcode`\<=12\catcode`\>=12 \ltjsetparameter{jacharrange={+3}} \small - \def\r#1#2{% \hbox{\tate\Large\vrule \parbox{7\zw}{% \addjfontfeatures{TateFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent ◆◆◆◆◆◆◆ - ある日モモちゃんがお使いで迷子になって泣きました. + ある日モモちゃんが「お使い」で迷子になって泣きました。 }\vrule}} \def\s#1#2{% \hbox{\tate\Large @@ -4061,6 +4174,17 @@ floating-point numbers in design-size unit. \begin{cslist}[style=standard] +\item[version=$1\mathrel{\textrm{or}}2$] +%(optional, default value is~1) +%(任意,既定値は1) + +%<*en> +The version JFM. Currently 1~and~2 are supported +% +%<*ja> +JFMのバージョン.1または2がサポートされる. +% + \item[dir=] %(required) %(必須) @@ -4182,20 +4306,48 @@ This field is a list of characters which are in this character %(必須) %<*en> +\begin{table}[t] + \centering +\begin{tabular}{llr} +\toprule +Direction of JFM&\textbf{\texttt{'yoko'} (horizontal)}&\multicolumn{1}{l}{\textbf{\texttt{'tate'} (vertical)}}\\ +\midrule +\texttt{width} field&the width of the ``real'' glyph&1.0~(full-width)\\ +\texttt{height} field&the height of the ``real'' glyph&0.5~(half-width)\\ +\texttt{depth} field&the depth of the ``real'' glyph&0.5~(half-width)\\ +\midrule +\texttt{italic} field&\multicolumn{2}{c}{0.0}\\ +\bottomrule +\end{tabular} +\caption{Default values of \texttt{width} field and other fields} +\label{tab-wid} +\end{table} Specify the width of characters in character class~$i$, the height, the depth and 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: \texttt{width} field can be \texttt{'prop'}. -This means that width of a character becomes that of its ``real'' glyph. +as values of these fields. The default values are shown in Table~\ref{tab-wid}. % %<*ja> +\begin{table}[t] + \centering +\begin{tabular}{llr} +\toprule +JFM書字方向&\emph{\texttt{'yoko'}(横組)}&\multicolumn{1}{l}{\emph{\texttt{'tate'}(縦組)}}\\ +\midrule +\texttt{width}&「実際のグリフ」の幅&1.0(全角)\\ +\texttt{height}&「実際のグリフ」の高さ&0.5(二分)\\ +\texttt{depth}&「実際のグリフ」の深さ&0.5(二分)\\ +\midrule +\texttt{italic}&\multicolumn{2}{c}{0.0}\\ +\bottomrule +\end{tabular} +\caption{\texttt{width} フィールド等の標準値} +\label{tab-wid} +\end{table} 文字クラス$i$に属する文字の幅,高さ,深さ,イタリック補正の量を指定する. 文字クラス$i$に属する全ての文字は,その幅,高さ,深さがこのフィールドで指定した -値であるものとして扱われる. - -例外として,\emph{\texttt{width} フィールドには数値以外に \texttt{'prop'} が指定可能である}. -この場合,文字の幅はその「実際の」グリフの幅となる.OpenTypeの \texttt{prop} featureと併用 +値であるものとして扱われる.省略時や,数でない値を指定した時には表\nobreak\ref{tab-wid}に + 示されている値を用いる.例えば,横組用JFMで \texttt{width} フィールドには数値以外の値を指 + 定した場合,文字の幅はその「実際の」グリフの幅となる.OpenTypeの \texttt{prop} featureと併用 すれば,これによってプロポーショナル組を行うことができる. % @@ -4458,29 +4610,34 @@ we specify to $0.25/(0.5+0.25)=1/3$. 次のキーを指定できる, \begin{cslist}[style=standard] \item[priority=] - \Pkg{luatexja-adjust} による優先順位付き - 行長調整(\ref{ssec-adj}節)の際に使われる値であり, -行調整処理におけるこのglueの優先 - 度を$-2$から$+2$の間の整数で指定する.大きい値ほど「伸びやすく,縮みやすい」 - ことを意味する.省略時の値 - は0であり,範囲外の値が指定されたときの動作は未定義である. -\item[ksp\_natural=\textrm{, }% - ksp\_stretch=\textrm{, }ksp\_shrink=]\leavevmode + \Pkg{luatexja-adjust}による優先順位付き + 行長調整(\ref{ssec-adj}節)において,このグルーの優先度を指定する.許される値は以下の通り: + \begin{description} + \item[バージョン1のとき] $-4$から$+3$の間の整数 + \item[バージョン2のとき] $-4$から$+3$の間の整数の2つ組\texttt{\{, \}}か, + または$-4$から$+3$の間の整数., はそれぞれこのグルーが伸びるときの優先度,縮むときの + 優先度であり,単に整数$i$が指定された場合は\texttt{\{$i$, $i$\}}であると解釈される. + \end{description} + ここで指定する値は,大きい値ほど「先に伸ばされる」「先に縮ませる」ことを意味しており,省略時の値 + は0である.範囲外の値が指定されたときの動作は未定義である. +\item[kanjiskip\_natural=\textrm{, }% + kanjiskip\_stretch=\textrm{, }kanjiskip\_shrink=]\leavevmode + \label{pg:ksp_nat} JFMによって本来挿入されるグルーの他に -\Param{kanjiskip}分の空白を自然長(\texttt{ksp\_natural}),伸び量(\texttt{ksp\_stretch}), -縮み量(\texttt{ksp\_shrink})ごとに挿入する\footnote{本来\Param{xkanjiskip}が挿入される場所においては +\Param{kanjiskip}分の空白を自然長(\texttt{kanjiskip\_natural}),伸び量(\texttt{kanjiskip\_stretch}), +縮み量(\texttt{kanjiskip\_shrink})ごとに挿入する\footnote{本来\Param{xkanjiskip}が挿入される場所においては \Param{xkanjiskip}分の空白を自然長・伸び量・縮み量ごとに.追加できる.}% ための指定である.いずれも省略された場合のデフォルト値は0(追加しない)である. 例えば,\LuaTeX-jaの横組標準JFMの \texttt{jfm-ujis.lua} では, \begin{itemize} \item 通常の文字「あ」と開き括弧類の間に入るグルーは,自然長・縮み量半角,伸び量0のグルー -となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{ksp\_stretch}(ここでは1)を掛け +となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{kanjiskip\_stretch}(ここでは1)を掛け た分だけ伸びることが許される. \item 同様に,閉じ括弧類(全角コンマ「,」も含む)と通常の文字「う」「え」の間にも 自然長・縮み量半角,伸び量0のグルー -となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{ksp\_stretch}(ここでは1)を掛け +となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{kanjiskip\_stretch}(ここでは1)を掛け た分だけ伸びることが許される. \end{itemize} となっている.従って,以下のような組版結果を得る. @@ -4499,16 +4656,18 @@ In case of glue, one can specify following additional keys in each \texttt{[$j$] subtable: \begin{cslist}[style=standard] \item[priority=] -An integer in $[-2,2]$ (treated as 0 if omitted), and this is +An integer in $[-4,3]$ (treated as 0 if omitted), or +a pair of these integers \texttt{\{, \}} (version~2 only). +This is used only in line adjustment with priority by \Pkg{luatexja-adjust} (see Subsection~\ref{ssec-adj}). Higher value means the glue is easy to stretch, -and is also easy to shrink. -\item[ksp\_natural=\textrm{, }% - ksp\_stretch=\textrm{, }ksp\_shrink=]\leavevmode +and is also easy to shrink. +\item[kanjiskip\_natural=\textrm{, }% + kanjiskip\_stretch=\textrm{, }kanjiskip\_shrink=]\leavevmode -These keys specifies whether the natural width of \Param{kanjiskip} -(the stretch/shrink part, respectively) will be inserted in addition to the original -JFM glue. Default values of them are all 0. +These keys specifies the amount of the natural width of \Param{kanjiskip} +(the stretch/shrink part, respectively) which will be inserted +in addition to the original JFM glue. Default values of them are all 0. As an example, in \texttt{jfm-ujis.lua}, the standard JFM in horizontal writing, we have \begin{itemize} @@ -4516,12 +4675,12 @@ As an example, in \texttt{jfm-ujis.lua}, the standard JFM in horizontal writing, a glue whose natural part and shrink part are both half-width, while its stretch part is zero. However, this glue also can be stretched as much as the stretch part of \Param{kanjiskip} times the value of - \texttt{ksp\_stretch} key (1 in this case). + \texttt{kanjiskip\_stretch} key (1 in this case). \item Between an ideographic closeing brackets (the ideographic comma ``,'' - is included) and an ordinal letter, we have the same glue. + is included) and an ordinal letter, we have the same glue. Again, this glue also can be stretched as much as the stretch part of \Param{kanjiskip} times the value of - \texttt{ksp\_stretch} key (1 in this case). + \texttt{kanjiskip\_stretch} key (1 in this case). \end{itemize} Hence we have the following result: @@ -4537,12 +4696,37 @@ Hence we have the following result: \item[end\_stretch=, end\_shrink=] %<*ja> -(任意) +(任意,バージョン1のみ) 優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が行 末に来た時に,行長を詰める調整・伸ばす調整のた めにこの文字と行末の間に挿入可能なカーンの大きさを指定する. % +%<*en> +(optional, version~1 only) +% + + \item[end\_adjust=\{, , ...\}] +%<*ja> +(任意,バージョン2のみ) + +優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が + 行末に来た時に,この文字と行末の間には指定された値のいずれかの大きさのカーンが + 挿入される(\autoref{ssec-adj}参照). + +バージョン1における +\begin{lstlisting}[escapechar=\$] + end_stretch = $a$, end_shrink = $b$ +\end{lstlisting} +という指定は,バージョン2では次の指定と同じになる. +\begin{lstlisting}[escapechar=\$] + end_adjust = {$-b$, 0.0, $a$} +\end{lstlisting} +もし真ん中の \texttt{0.0} がない場合は,$a$か$-b$かいずれかのカーンが常に行末に追加される. +% +%<*en> +(optional, version~2 only) +% \end{cslist} @@ -5021,7 +5205,7 @@ This callback is called when \LuaTeX-ja is trying to encapsule a その\textit{glyph\_node}をカプセル化しようとする際に呼び出される. % \begin{lstlisting}[numbers=left] -function ( shift_info,
jfont_info, char_class) +function (
shift_info,
jfont_info,
char_type) return
new_shift_info end \end{lstlisting} @@ -5060,7 +5244,7 @@ Then, the position of glyphs is shifted up by (和文OpenTypeフォントの標準値) \item 実フォント側の数値:$(\hbox{高さ})=28y$, $(\hbox{深さ})=5y$(和文TrueTypeフォントの標準値) \end{itemize} -となっていたとする.すると,実際の文字の出力位置は,以下の量だけ上にぜらされることとなる: +となっていたとする.すると,実際の文字の出力位置は,以下の量だけ上にずらされることとなる: % \[ \frac{88x}{88x+12x} (28y+5y) - 28y = \frac{26}{25}y= 1.04y. @@ -5121,11 +5305,11 @@ in \pTeX, and symbols beside each parameter has the following meaning: % \begin{itemize} %<*en> -\item ``\ast'' : values at the end of a paragraph or a hbox are +\item ``$\ast$'' : values at the end of a paragraph or a hbox are adopted in the whole paragraph or the whole hbox. % %<*ja> -\item ``\ast'':段落やhboxの終端での値がその段落/hbox全体で用いられる. +\item ``$\ast$'':段落やhboxの終端での値がその段落/hbox全体で用いられる. % %<*en> \item ``\dagger'': assignments are always global. @@ -5686,7 +5870,7 @@ The last \cs{kansuji} converts an integer into its Chinese numerals. \pTeX と同じようにJIS~X~0208の範囲しかサポートしていない. % \begin{center} -\cs{kuten}, \cs{jis}, \cs{euc}, \cs{sjis}, \cs{jis}, \cs{kansuji} +\cs{kuten}, \cs{jis}, \cs{euc}, \cs{sjis}, \cs{ucs}, \cs{kansuji} \end{center} %<*en> These six commands takes an internal integer, and returns a \emph{string}. @@ -6040,8 +6224,10 @@ to match the vertical center of ``M'' and that of ``あ'' in vertical typesetti + d_{\text{あ}} - d_{\text{M}}, \] where $h_{a}$~and~$d_{a}$ denote the height of ``$a$'' and the depth, respectively. -In \LuaTeX-ja, this \cs{adjustbaseline} does same task, namely setting the +In \LuaTeX-ja, this \cs{adjustbaseline} does similar task, namely setting the \Param{talbaselineshift} parameter. +If the \LaTeX\ is 2015/10/01 release or later, \LuaTeX-ja use a Japanese +character whose character class is zero, instead of `あ'. % %<*ja> \pLaTeXe では,\cs{adjustbaseline} は縦組時に「M」と「あ」の中心線を一致させるために, @@ -6055,8 +6241,12 @@ In \LuaTeX-ja, this \cs{adjustbaseline} does same task, namely setting the \LuaTeX-jaにおいても\cs{adjustbaseline} は同様に\Param{talbaselineshift}パラメータの調整処 理を行っている. -同時に,これも\pLaTeXe の \cs{adjustbaseline} で行われていたが, -「漢」の寸法を元に,(本節の最初に述べた,小文字で始まる)\cs{cht}, \cs{cwd} といった長さ変数を設定する. +同時に,これも\pLaTeXe の \cs{adjustbaseline} で同様の処理が行われていたが, +「漢」の寸法を元に(本節の最初に述べた,小文字で始まる)\cs{cht}, \cs{cwd} +といった長さ変数を設定する. + +なお,\LaTeX が2015/10/01 版以降の場合は,「あ」「漢」の代わりに +「文字クラス0の和文文字」を用いる. % \item[\cs{fontfamily}\{\}] @@ -6194,11 +6384,11 @@ We use an auxiliary list~$N_{\mathrm{J}}$. \item If the \Pkg{luatexja-fontspec} package is loaded, we stop here, and is not recognized as a Japanese font family. - If the \Pkg{luatexja-fontspec} package is \emph{not} loaded, + If the \Pkg{luatexja-fontspec} package is \emph{not} loaded, now \LuaTeX-ja looks whether there exists a Japanese font encoding~ such that a font definition named \texttt{.fd} (the file name is - all lowercase) exists. If so, is recognized as a Japanese font family (the font definition file won't be loaded here). - If not, is not a Japanese font family, and + all lowercase) exists. If so, is recognized as a Japanese font family (the font definition file won't be loaded here). + If not, is not a Japanese font family, and is appended to the list~$N_{\mathrm{J}}$. % %<*ja> @@ -6218,7 +6408,7 @@ now \LuaTeX-ja looks whether there exists a Japanese font encoding~ such th %<*en> \paragraph{Recognition as alphabetic font family} Next, whether alphabetic font family will be changed is determined in following order. -We use auxiliary lists $F_{\mathrm{A}}$~and~$N_{\mathrm{A}}$, +We use auxiliary lists $F_{\mathrm{A}}$~and~$N_{\mathrm{A}}$, % %<*ja> \paragraph{欧文フォントファミリとしての認識} @@ -6229,7 +6419,7 @@ We use auxiliary lists $F_{\mathrm{A}}$~and~$N_{\mathrm{A}}$, \begin{enumerate} %<*en> -\item If the family~ has been listed in a list~$F_{\mathrm{A}}$, +\item If the family~ has been listed in a list~$F_{\mathrm{A}}$, is recognized as an alphabetic font family. % %<*ja> @@ -6257,7 +6447,7 @@ We use auxiliary lists $F_{\mathrm{A}}$~and~$N_{\mathrm{A}}$, \item Now \LuaTeX-ja looks whether there exists an alphabetic font encoding~ such that a font definition named \texttt{.fd} (the file name is all lowercase) exists. If so, current alphabetic font family will be changed to - ~(the font definition file won't be loaded here). + ~(the font definition file won't be loaded here). If not, current alphabetic font family won't be changed, and is appended to the list~$N_{\mathrm{A}}$. % @@ -6282,7 +6472,7 @@ the second argument (family) is appended to the list~$F_{\mathrm{A}}$. %<*en> The above order is very similar to \cs{fontfamily} in \pLaTeXe, but more complicated (clause~3.). -This is because \pLaTeXe\ is a \emph{format} however \LuaTeX-ja is not, +This is because \pLaTeXe\ is a \emph{format} however \LuaTeX-ja is not, hence \LuaTeX-ja does not know calls of \cs{DeclareFontFamily} \emph{before} itself is loaded. % @@ -6338,8 +6528,8 @@ the commands of Japanese version: \ref{ssec-fontspec}節で述べたように,この追加パッケージは\Pkg{fontspec}% パッケージで定義されているコマンドに対応する和文フォント用のコマンドを提供する. -\Pkg{fontspec}パッケージで指定可能な各種font featureに加えて,和文版のコマンドには -以下の``font feature''を指定することができる: +\Pkg{fontspec}パッケージで指定可能な各種OpenType機能に加えて,和文版のコマンドには +以下の「フォント機能」を指定することができる: % @@ -6395,6 +6585,14 @@ will not be embedded in the output PDF file. See Subsection~\ref{ssec-psft}. \label{fig:yokotate-fontspec} \end{figure} +\item[Kanjiskip=] +%<*ja> +\pageref{pg:ltjksp}ページで説明した \verb+\jfont+ 中での \texttt{ltjksp} 指定と +同一の効力を持ち, +JFM中における \texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ +\texttt{kanjiskip\_shrink}キー(\pageref{pg:ksp_nat}ページ)の有効/無効を切り替える. +標準値は \texttt{true} である. +% \item[TateFeatures=\{\}\textrm{, }TateFont=] %<*en> @@ -6405,7 +6603,7 @@ Similarly, the \texttt{TateFont} key specifies the Japanese font which will be u A demonstrarion is shown in Figure~\ref{fig:yokotate-fontspec}. % %<*ja> -縦組において使用されるフォントや,縦組においてのみ適用されるfeature達を +縦組において使用されるフォントや,縦組においてのみ適用されるフォント機能達を 指定する.使用例は図\ref{fig:yokotate-fontspec}参照. % @@ -6416,7 +6614,7 @@ horizontal writing,. A demonstrarion is shown in Figure~\ref{fig:yokotate-fontspec}. % %<*ja> -同様に,横組においてのみ適用されるfeature達を +同様に,横組においてのみ適用されるフォント機能達を 指定する.使用例は図\ref{fig:yokotate-fontspec}参照. % @@ -6451,7 +6649,7 @@ as the following: %<*ja> \ref{ssec-altfont}節の \cs{ltjdeclarealtfont} や, \ref{ssec-nfsspat}節の \cs{DeclareAlternateKanjiFont} と同様に, -このキーを用いると一部の文字を異なったフォントやfont featureを使って組むことができる. +このキーを用いると一部の文字を異なったフォントや機能たちを使って組むことができる. \texttt{AltFont} キーに指定する値は,次のように二重のコンマ区切りリストである: % \begin{lstlisting}[escapechar=\#] @@ -6541,8 +6739,9 @@ BoldFeatures = { また,図\ref{fig:yokotate-fontspec}後半部では6行目の色の指定が効かず, 2行目で指定した\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ による色の指定が有効になっ -たままである.これは\emph{\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ によるfeature指定は -組方向に依存しないfeature指定より後に解釈される}からである. +たままである.これは\emph{\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ による +OpenType機能指定は +組方向に依存しないOpenType機能の指定より後に解釈される}からである. % @@ -6620,7 +6819,7 @@ ordinary characters in the following points: is not performed to these characters. % %<*ja> -\item OpenType feature(例えばグリフ置換やカーニング)をサポートするための +\item OpenType機能(例えばグリフ置換やカーニング)をサポートするための \Pkg{luaotfload}パッケージのコードはこれらの文字には働かない. % \end{itemize} @@ -6649,10 +6848,14 @@ JFMの\texttt{chars}テーブルのエントリとして \verb+'AJ1-xxx'+ の形 %<*en> \paragraph{IVS support} Recent fonts support Ideographic Variation Selector (IVS). -It seems that \Pkg{luaotfload} and \Pkg{fontspec} packages do not support -IVS, so we implemented IVS support in \Pkg{luatexja-otf}. -\emph{IVS support is experimental; if you want to enable this, load -\Pkg{luatexja-otf} and execute the following:} +\Pkg{luaotfload} and \Pkg{fontspec} packages used to be not supported IVS, +so we implemented experimental IVS support in \Pkg{luatexja-otf}, +which is activated by +\begin{lstlisting} +\directlua{luatexja.otf.enable_ivs()} +\end{lstlisting} +However, recent \Pkg{luaotfload} and \Pkg{fontspec} packages seem to support IVS, +so we don't execute above command anymore. % %<*ja> \paragraph{IVSサポート} @@ -6661,66 +6864,14 @@ IVS, so we implemented IVS support in \Pkg{luatexja-otf}. (漢字用異体字セレクタ)を後置することによって 字形を指定する仕組み(IVS)が含まれている. 執筆時点の2013年12月では,\Pkg{luaotfload}や\Pkg{fontspec}パッケージ類は -IVSに対応してはいないようである.これらのパッケージで対応してくれるのが理想的だが, -それまでのつなぎとして,\Pkg{luatexja-otf}パッケージ内にIVS対応を仕込んでおいた. - -\medskip - -\emph{IVS対応は試験的なものである. -有効にするには,\Pkg{luatexja-otf}パッケージを読み込んだ上で以下の命令を実行する% -\footnote{この命令を2回以上実行しても意味がない.}:} -% +IVSに対応してはいないようであったため, +\Pkg{luatexja-otf}パッケージ内に試験的なIVS対応を実装した.これは以下の命令の実行で有効になる: \begin{lstlisting} \directlua{luatexja.otf.enable_ivs()} \end{lstlisting} -% すると,上の命令を実行した箇所以降では,以下のようにIVSによる字形指定が有効となる. -% After executing the command above, you can use IVS like the following: -\begin{LTXexample} -\Large -\jfontspec{KozMinPr6N-Regular} -奈良県葛󠄀城市と,東京都葛󠄁飾区.\\ -こんにちは,渡 -邉󠄀邉󠄁邉󠄂邉󠄃邉󠄄 -邉󠄅邉󠄆邉󠄇邉󠄈邉󠄉 -邉󠄊邉󠄋邉󠄌邉󠄍邉󠄎 -さん. -\end{LTXexample} -%<*ja> -左上側の入力においては,漢字用異体字セレクタを明示するため, -例えばVariation~Selector~18 (\texttt{U+E0101})を\IVSB{18}のように表記している. +しかし,現在の\Pkg{luaotfload}や\Pkg{fontspec}パッケージは +IVSに対応しているようであるので,もはや上の命令を実行する必要はない. % -\medskip - -%<*en> -Specifying glyph variants by IVS precedes glyph replacement by font features. -For example, only ``葛'' in ``葛西'' is changed by font features -\texttt{jp78}~or~\texttt{jp90}, which does not followed by any variation selector. -% -%<*ja> -また,IVSによる字形指定は,font featureによるそれに優先されることとした. -下の例において,\texttt{jp78}, \texttt{jp90} 指定で字形が変化した文字は -異体字セレクタが続いていない「葛西」中の「葛」のみである. -% -\begin{LTXexample} - \def\TEST#1{% - {\jfontspec[#1]{KozMinPr6N-Regular}% - 葛󠄀城市,葛󠄁飾区,葛西}\\} - 指定なし:\TEST{} - \texttt{jp78}:\TEST{CJKShape=JIS1978} - \texttt{jp90}:\TEST{CJKShape=JIS1990} -\end{LTXexample} - -%<*ja> -現状では,\TeX 側のインターフェースとなる \Pkg{luatexja-otf.sty} は一切変更していない -ので,ZRさんによる\Pkg{PXipamjm}パッケージ% -\footnote{\url{https://github.com/zr-tex8r/PXipamjm}. 説明は彼のブログ記事 -「pxipamjm パッケージの説明書のような何か(\url{http://d.hatena.ne.jp/zrbabbler/20131221})」 -にある.} -にあるような気の利いた命令はまだない. -異体字の一覧表示を行いたい場合は,gitリポジトリ内の \texttt{test/test19-ivs.tex} 中にある -Lua・\TeX コードが参考になるだろう. -% - \subsection{\Pkg{luatexja-adjust}} \label{ssec-adj} @@ -6768,38 +6919,106 @@ for making the difference obvious. (see Japanese version of this manual) % %<*ja> +この追加パッケージは以下の機能を提供する.詳細な仕様については\ref{sec-adjspec}章を参照してほしい. +\begin{description} +\item[行末文字の位置調整] + \pTeX では,(是非はともかく)「行末の読点はぶら下げか二分取りか全角取りのいずれかに」のように + 行末文字と実際の行末の位置関係を2通り以上にすることは面倒であった. + 和文フォントメトリックだけでは「常に行末の読点はぶら下げ」といったことしかできず, + 前の文に書いたことを実現するには +\begin{lstlisting} +\def\。{% + \penalty10000 % 禁則ペナルティ + \hbox to0pt{。\hss}\penalty0 % ぶら下げの場合 + \kern.5\zw\penalty0 % 二分取りの場合 + \kern.5\zw\penalty0 % 全角取りの場合 +} +\end{lstlisting} + のような命令を定義し,文中の全ての句点を \lstinline+\。+ で書くことが必要だった. + +\Pkg{luatexja-adjust}パッケージは,上で述べた行末文字と実際の行末との位置関係を +2通り以上から自動的に選択する機能を提供する. +\pdfTeX と同じように,「\TeX による行分割の後で行末文字の位置を補正する」方法と + 「行分割の過程で行末文字の位置を考慮に入れる」方法を選べるようにした( +\Pkg{luatexja-adjust}パッケージの既定では前者). + +\item[優先順位付きの行長調整] \pTeX では,行長調整において優先度の概念が存在しなかったため,図 \ref{fig-adj}上段における半角分の半端は,図\ref{fig-adj}中段のように,鍵 括弧周辺の空白と和文間空白(\Param{kanjiskip})の両方によって負担される.し かし,「日本語組版処理の要件」\cite{jlreq}やJIS~X~4051~\cite{x4051}におい ては,このような状況では半端は鍵括弧周辺の空白のみで負担し,その他の和文 -文字はベタ組で組まれる(図\ref{fig-adj}下段)ことになっている.この追加 -パッケージは\cite{jlreq}や\cite{x4051}における規定のような,優先順位付き -の行長調整を提供する.詳細な仕様については\ref{sec-adjspec}章を参照してほしい. +文字はベタ組で組まれる(図\ref{fig-adj}下段)ことになっている. +\Pkg{luatexja-adjust}パッケージの提供する第2の機能は, +\cite{jlreq}や\cite{x4051}における規定のような,優先順位付き +の行長調整である. \begin{itemize} \item 優先度付き行長調整は,段落を行分割した後に個々の行について行われるものである. そのため,行分割の位置は変化することはない. -また,\verb+\hbox to ... {...}+ のような「幅が指定されたhbox」では無効である. +\verb+\hbox{...}+ といった「途中で改行できない水平ボックス」では(たとえ幅が指定されていても)無効である. \item 優先度付き行長調整を行うと,和文処理グルーの自然長は変化しないが,伸び量や縮み量は 一般に変化する.そのため,既に組まれた段落を \cs{unhbox} などを利用して組み直す処理を 行う場合には注意が必要である. \end{itemize} +\end{description} - -\Pkg{luatexja-adjust} は,以下の命令を提供する.これらはすべてグローバルに効力を発揮する. +\Pkg{luatexja-adjust}パッケージは,上記で述べた2機能を有効化/無効化するための +以下の命令を提供する.これらはすべてグローバルに効力を発揮する. \begin{cslist} +\item[\cs{ltjenableadjust[...]}] +\verb+...+ に指定したkey-valueリストに従い,「行末文字の位置調整」「優先順位付きの行長調整」を有効化/無効化する. +指定できるキーは以下の通り. +\begin{description} + \item[\texttt{lineend=[false,true,extended]}] + 行末文字の位置調整の機能を無効化(\texttt{false}),「行分割後に調整」の形で有効化(\texttt{true}), + 「行分割の仮定で考慮」(\texttt{extended})する. + \item[\texttt{priority=[false,true]}] + 優先順位付きの行長調整を無効化(\texttt{false}),または有効化(\texttt{true})する. +\end{description} +両キーともキー名のみを指定した場合は値として\texttt{true}が指定されたものと扱われる. + +互換性の為,オプション無しでただ\cs{ltjenableadjust}が呼び出された場合は, +\begin{lstlisting} +\ltjenableadjust[lineend=true,priority=true] +\end{lstlisting} +と扱われる. + \item[\cs{ltjdisableadjust}] -優先順位付きの行長調整を無効化する. +\Pkg{luatexja-adjust}パッケージの機能を無効化する. +\begin{lstlisting} +\ltjenableadjust[lineend=false,priority=false] +\end{lstlisting} +と同義. +\end{cslist} -\item[\cs{ltjenableadjust}] -優先順位付きの行長調整を有効化する. +また,優先順位付きの行長調整のために,次の2パラメータが\cs{ltjsetparameter}内で +追加される.両パラメータともグローバルに効力を発揮する. +\begin{cslist}[style=standard] +\item[\DParam{stretch\_priority}\,=\{\}] +\Param{kanjiskip}, \Param{xkanjiskip},および「\textbf{JAglue}以外のグルー」を, +「行を自然長より伸ばす」場合の調整に用いる優先度を指定する. -\item[\textsf{adjust}\,=] \cs{ltjsetparameter} で指定可能な追加パラメータであり, -が\textit{true}なら \cs{ltjenableadjust} を, -そうでなければ \cs{ltjdisableadjust} を実行する. +指定方法は,の中にkey-value listの形で +\begin{lstlisting} +stretch_priority={kanjiskip=-40,xkanjiskip=-30,others=50} +\end{lstlisting} +のようにして行う.キー名\texttt{kanjiskip},~\texttt{xkanjiskip}については +そのままの意味であり, +\texttt{others}キーが「\textbf{JAglue}以外のグルー」を表す. +各キーの値は,JFMグルーにおける「優先度$i$」を$10i$に対応させた整数値であり, + 大きい方が先に伸ばされることを意味している. + +\item[\DParam{shrink\_priority}\,=\{\}] +同様に,「行を自然長より縮める」場合の調整に用いる優先度を指定する. +それ以外は\Param{stretch\_priority}と指定の形式は変わらない. \end{cslist} +初期値は\Param{stretch\_priority}, \Param{shrink\_priority}とも +\begin{lstlisting} +{kanjiskip=-40,xkanjiskip=-30,others=50} +\end{lstlisting} +である. % \subsection{\Pkg{luatexja-ruby}} @@ -7266,6 +7485,18 @@ $i$は7より小さい自然数. \end{description} % \TeX 側から見える値,つまり \verb+\the\ltj@dir+ の値は常に0である. +\cnt{ltjlineendcomment} +%<*ja> + \LuaTeX-jaは\textbf{JAchar}で入力行が終了した場合,その直後にコメント文字を + おくことで余計な空白が挿入されることを防いでいる. + \cs{ltjlineendcomment}はその際のコメント文字のUnicodeにおける符号位置を指定する + (詳細は\ref{ssec:lineend}節を参照). + + \LuaTeX-jaにおける既定値は$\texttt{"FFFFF}=1048575$であり, + ユーザは内部動作を熟知していない限りこのカウンタの値を変更してはならない. + \cs{ltjlineendcomment}の値がUnicodeの範囲外(負や,$\texttt{"10FFFF}=1114111$を超えた場合) + にくることは想定されていない. +% \end{list} %<*en> @@ -7872,6 +8103,7 @@ to State~$M$ (middle of line) sometimes. %\subsection{Behavior in \LuaTeX-ja} %\subsection{\LuaTeX-jaの動作} + \label{ssec:lineend} %<*en> States in the input processor of \LuaTeX\ is the same as that of \TeX, and they can't be customized by any callbacks. Hence, we can only use @@ -7886,14 +8118,16 @@ space must be done \emph{just before} an input line is read. Considering these situations, handling of an end-of-line in \LuaTeX-ja are as follows: \begin{quote} -A character \texttt{U+FFFFF} (its category code is set to 14~(\textit{comment}) by -\LuaTeX-ja) is appended to an input line, \emph{before \LuaTeX\ actually +A character whose character code is \cs{ltjlineendcomment}% +\footnote{Its default value is \texttt{"FFFFF}, so \texttt{U+FFFFF} is used. +The category code of \texttt{U+FFFFF} is set to 14~(\textit{comment}) by +\LuaTeX-ja.} is appended to an input line, \emph{before \LuaTeX\ actually process it}, if and only if the following three conditions are satisfied: \begin{enumerate} \item The category code of \cs{endlinechar}% \footnote{Usually, it is $\langle$\textit{return}$\rangle$ (whose character code is 13).} is 5~(\textit{end-of-line}). -\item The category code of \texttt{U+FFFFF} itself is 14~(\textit{comment}). +\item The category code of \cs{ltjlineendcomment} itself is 14~(\textit{comment}). \item The input line matches the following ``regular expression'': \[ (\text{any char})^*(\textbf{JAchar}) @@ -7921,7 +8155,7 @@ there is a space before ``u''. This follows from following reasons: \item When line~3 is processed by \texttt{process\_input\_buffer} callback, ``あ'' is considered as an \textbf{JAchar}. Since line~3 ends with an \textbf{JAchar}, -the comment character \texttt{U+FFFFF} is appended to this line, +the comment character (whose character code is \cs{ltjlineendcomment}) is appended to this line, and hence the linebreak immediately after this line is ignored. \item When line~4 is processed by \texttt{process\_input\_buffer} callback, ``い'' is considered as an \textbf{ALchar}. @@ -7946,13 +8180,15 @@ emits a space. \begin{quote} 各入力行に対し,\emph{その入力行が読まれる前の内部状態で} -以下の3条件が満たされている場合,\LuaTeX-jaは\texttt{U+FFFFF}の文字 -\footnote{この文字はコメント文字として扱われるように\LuaTeX-ja内部で設定をしている.} +以下の3条件が満たされている場合,\LuaTeX-jaは\cs{ltjlineendcomment}番の文字 +\footnote{\cs{ltjlineendcomment}の既定値は\texttt{"FFFFF}であるので, + 既定では\texttt{U+FFFFF}が使われることになる.この文字はコメント文字として扱われるように + \LuaTeX-ja内部で設定をしている.}% を末尾に追加する.よって,その場合に改行は空白とは見做されないこととなる. \begin{enumerate} \item \cs{endlinechar}の文字\footnote{普通は,改行文字(文字コード13番)である.} のカテゴリーコードが5~(\textit{end-of-line})である. -\item \texttt{U+FFFFF}のカテゴリーコードが14~(\textit{comment})である. +\item \cs{ltjlineendcomment}のカテゴリーコードが14~(\textit{comment})である. \item 入力行は次の「正規表現」にマッチしている: \[ (\text{any char})^*(\textbf{JAchar}) @@ -7982,7 +8218,7 @@ u \begin{itemize} \item 3行目を \texttt{process\_input\_buffer} で処理する時点では, 「あ」は\textbf{JAchar}(和文扱い)である.よって3行目は\textbf{JAchar}で終わることになり, - コメント文字 \texttt{U+FFFFF} が追加される. + \cs{ltjlineendcomment}番のコメント文字が追加される. よって,直後の改行文字は無視されることになり,空白は入らない. \item 4行目を \texttt{process\_input\_buffer} で処理する時点では, 「い」は\textbf{ALchar}である.よって4行目は\textbf{ALchar}で終わることになり, @@ -8085,11 +8321,11 @@ with the \textit{id} of it: \Node{glyph}{accent}\\\noalign{\medskip} \Node{hbox}{accent (shifted vert.)} \end{array}\right\}\longrightarrow -\Node{kern}{$\mathit{subtype}=2$}}^{\text{(a)}} +\Node{kern}{$\mathit{subtype}=2$}}^{\text{(b)}} \longrightarrow \Node{glyph}{$p$}\longrightarrow \overbrace{% -\Node{kern}{italic corr.}}^{\text{(b)}} +\Node{kern}{italic corr.}}^{\text{(a)}} \] %<*en> @@ -8755,7 +8991,7 @@ a patch \Pkg{jlisting.sty}~(\cite{jlisting}) resolves the problem forcibly. %<*en> In \LuaTeX-ja, the problem is resolved by using the \verb+process_input_buffer+ callback. -The callback function inserts the output command (active character \texttt{U+FFFFF}) +The callback function inserts the output command (active character \cs{ltjlineendcomment}) before each letter above \texttt{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). @@ -8763,7 +8999,7 @@ This method can omits the process to make all Japanese characters active %<*ja> \LuaTeX-jaでは,\verb+process_input_buffer+ コールバックを利用することで, 「各行に出現する\texttt{U+0080}以降の文字に対して,それらの出力命令を前置する」 -という方法をとっている.出力命令としては,アクティブ文字化した \texttt{U+FFFFF} を用いている. +という方法をとっている.出力命令としては,アクティブ文字化した\cs{ltjlineendcomment}を用いている. これにより,(入力には使用されていないかもしれない)和文文字をもすべてアクティブ化する手間もなく, 見通しが良い実装になっている. % @@ -8782,45 +9018,45 @@ then the patch \Pkg{lltjp-listings} is loaded automatically at \verb+\begin{docu %\subsection{Notes and additional keys} %\subsection{注意} -%<*en> -\paragraph{Escaping to \LaTeX} -We used the \verb+process_input_buffer+ callback to output \textbf{JAchar}s. -But it has a drawback; any commands whose name contains a \textbf{JAchar} -cannot be used in any ``escape to \LaTeX''. +% %<*en> +% \paragraph{Escaping to \LaTeX} +% We used the \verb+process_input_buffer+ callback to output \textbf{JAchar}s. +% But it has a drawback; any commands whose name contains a \textbf{JAchar} +% cannot be used in any ``escape to \LaTeX''. -Consider the following input: -% -%<*ja> -\paragraph{\LaTeX へのエスケープ} -日本語対応を行うために \verb+process_input_buffer+ を使用したことで, -\texttt{texcl},~\texttt{escapeinside}といった\emph{「\LaTeX へのエスケープ」中では, -\textbf{JAchar}を名称の一部に含む制御綴は使用不可能}である. -例えば次のような入力を考えよう: -% -\begin{verbatim*} -\begin{lstlisting}[escapechar=\#] -#\ほげ xぴよ# -\end{lstlisting} -\end{verbatim*} -%The line~2 is transformed by the callback to -%ここで,2行目は \verb+process_input_buffer+ の作用により, -\begin{lstlisting}[showspaces, escapechar=\!] -#\!\IVSA FFFFF!ほ!\IVSA FFFFF!げ x!\IVSA FFFFF!ぴ!\IVSA FFFFF!よ# -\end{lstlisting} -%<*en> -before the line is actually processed. -In the escape (between the character ``\verb+#+''), -the category code of \texttt{U+FFFFF} is set to 9~(\emph{ignored}). -Hence the control symbol ``\cs{}\IVSA FFFFF'' will be executed, -instead of ``\verb+\ほげ+''. -% -%<*ja> -と変換されてから,実際の処理に回される. -「\verb+#+」で挟まれた「\LaTeX へのエスケープ」中では\ -\texttt{U+FFFFF} のカテゴリーコードは9~(\textit{ignored})となるので, -結局「\verb+\ほげ+」の代わりに -「\cs{}\IVSA FFFFF」というcontrol symbolが実行されることになる. -% +% Consider the following input: +% % +% %<*ja> +% \paragraph{\LaTeX へのエスケープ} +% 日本語対応を行うために \verb+process_input_buffer+ を使用したことで, +% \texttt{texcl},~\texttt{escapeinside}といった\emph{「\LaTeX へのエスケープ」中では, +% \textbf{JAchar}を名称の一部に含む制御綴は使用不可能}である. +% 例えば次のような入力を考えよう: +% % +% \begin{verbatim*} +% \begin{lstlisting}[escapechar=\#] +% #\ほげ xぴよ# +% \end{lstlisting} +% \end{verbatim*} +% %The line~2 is transformed by the callback to +% %ここで,2行目は \verb+process_input_buffer+ の作用により, +% \begin{lstlisting}[showspaces, escapechar=\!] +% #\!\IVSA FFFFF!ほ!\IVSA FFFFF!げ x!\IVSA FFFFF!ぴ!\IVSA FFFFF!よ# +% \end{lstlisting} +% %<*en> +% before the line is actually processed. +% In the escape (between the character ``\verb+#+''), +% the category code of \texttt{U+FFFFF} is set to 9~(\emph{ignored}). +% Hence the control symbol ``\cs{}\IVSA FFFFF'' will be executed, +% instead of ``\verb+\ほげ+''. +% % +% %<*ja> +% と変換されてから,実際の処理に回される. +% 「\verb+#+」で挟まれた「\LaTeX へのエスケープ」中では\ +% \texttt{U+FFFFF} のカテゴリーコードは9~(\textit{ignored})となるので, +% 結局「\verb+\ほげ+」の代わりに +% 「\cs{}\IVSA FFFFF」というcontrol symbolが実行されることになる. +% % %<*en> \paragraph{Variation selectors} @@ -9066,7 +9302,7 @@ Letter, Other, Kanji, Open, Closeのどれに属するかは次によって決 % \begin{itemize} %\item \textbf{ALchar}s above or equal to~\texttt{U+0080} are classified as Letter. -%\item (\texttt{U+0080}以降の)\textbf{ALchar}は,すべてLetter扱いである. +%\item \<(\texttt{U+0080}以降の)\textbf{ALchar}は,すべてLetter扱いである. %\item \textbf{JAchar}s are classified in the order as follows: %\item \textbf{JAchar}については,以下の順序に従って文字種を決める: @@ -9103,93 +9339,148 @@ the \texttt{lstlisting} environment or other environments/commands. %<*ja> \section{和文の行長補正方法} \label{sec-adjspec} -\Pkg{luatexja-adjust} で提供される優先順位付きの行長調整の詳細を述 -べる.大まかに述べると,次のようになる. +\Pkg{luatexja-adjust}で提供される優先順位付きの行長調整の詳細を大まかに述べると,次のようになる. \begin{itemize} +\item (\texttt{lineend=extended}の場合)\textbf{JAglue}の挿入処理のところで, + …… \item 通常の\TeX の行分割方法に従って,段落を行分割する.この段階では,行 長に半端が出た場合,その半端分は\textbf{JAglue}(\Param{xkanjiskip}, \Param{kanjiskip},JFMグルー)と それ以外のグルーの全てで(優先順位なく)負担される. \item その後,\texttt{post\_linebreak\_filter} callbackを使い,\emph{段 - 落中の各行ごとに},行末文字の位置を調整したり,優先度付きの行長調整 + 落中の各行ごとに},行末文字の位置を調整(\texttt{lineend=true}の場合)したり,優先度付きの行長調整 を実現するためにグルーの伸縮度を調整する. その処理においては,グルーの自然長と\textbf{JAglue}以外の グルーの伸び量・縮み量は変更せず,必要に応じて\textbf{JAglue}の伸び量・縮み量のみを 変更する設計とした. - -\Pkg{luatexja-adjust} の作用は,この処理を行うcallbackを追加するだけであり, - この章の残りではcallbackでの処理について解説する. \end{itemize} +この章の残りでは各処理について解説する. \paragraph{準備:合計伸縮量の計算} グルーの伸縮度(\texttt{plus} や \texttt{minus} で指定されている値)には, 有限値の他に,\texttt{fi},\texttt{fil},\texttt{fill},\texttt{filll}と -いう4つの無限大レベル(後ろの方ほど大きい)があり,行の調整に -\texttt{fi} などの\emph{無限大レベルの伸縮度が用いられている場合は,そ -の行に対しての処理を中止}する. - -よって,以降,問題にしている行の行長調整は伸縮度が有限長のグルーを用いて -行われているとして良い.さらに,簡単のため,この行はグルーが広げられている -(自然長で組むと望ましい行長よりの短い)場合しか扱わない. +いう4つの無限大レベル(後ろの方ほど大きい)がある.行の調整に +\texttt{fi} などの\emph{無限大レベルの伸縮度が用いられている行では, +「行末文字の位置調整」のみ行い,「グルーの調整」は行わない.} まず,段落中の行中のグルーを \begin{itemize} \item \textbf{JAglue}ではないグルー \item JFMグルー(優先度\footnote{% \ref{ssec-jfm-str}節にあるように, - 各JFMグルーには$-2$から2までの優先度がついている.}% + 各JFMグルーには$-4$から3までの優先度がついている.場合によっては + 伸びと縮みで異なる優先度が付いているかもしれない.}% 別にまとめられる) \item 和欧文間空白(\Param{xkanjiskip}) \item 和文間空白(\Param{kanjiskip}) \end{itemize} -の$1+1+5+1=8$つに類別し,それぞれの種別ごとに -許容されている伸び量(\texttt{stretch}の値)の合計を計算する. -また,行長と自然長との差を\textit{total}とおく. - +の$1+1+8+1=10$つに類別する. +そして許容されている伸び量(\texttt{stretch}の値)の合計を +無限のレベルごとに +\begin{align*} + T^{+}_{l}&:= \sum_{\text{$\texttt{stretch\_order}(p) = l$}} \texttt{stretch}(p),& + l\in \{\text{(finite)}, \texttt{fi}, \texttt{fil}, \texttt{fill}, \texttt{filll}\} +\end{align*} +と計算する.さらに, +\begin{align*} +T^{+}&:=T^{+}_{L^+},&L^{+} = \max \{l\in + \{\text{(finite)}, \texttt{fi}, \texttt{fil}, \texttt{fill}, \texttt{filll}\}: + T^{+}_l\neq 0\} +\end{align*} +とおく.有限の伸び量については,上記の8種類の類別ごとにも合計を計算する. +さらに縮み量(\texttt{shrink}の値)についても同様の処理を行い,$T^{-}$を計算する. + +また,行長から自然長を引いた値を\textit{total}とおく. + +\subsection{行末文字の位置調整(行分割後の場合)} +行末が\textbf{JAchar}であり,この文字の属する文字クラスでは +\begin{quote} + \texttt{end\_adjust = \{$a_{1}$, $a_{2}$, ..., $a_{n}$\}} +\end{quote} +であったとする. +このとき,以下の条件を満たした場合, +この文字クラスに対する\texttt{end\_adjust}の値のいずれかだけこの文字の位置を移動させる. +\begin{description} + \item[最終行以外] 行長調整に無限大の伸縮度が用いられていない. + すなわち,$\textit{total}>0$ならば$L^{+}=(\text{finite})$であり, + $\textit{total}>0$ならば$L^{-}=(\text{finite})$である. + \item[最終行] 行長調整に無限大に伸び縮みするグルーが用いられたなら,それは\cs{parfillskip}のみであり, + かつ,次の不等式が成立する: + \[ + \min\{0,a_{1}\}\text{\cs{zw}}\leq (\text{\cs{parfillskip}の実際の長さ}) \leq \max\{0,a_{n}\}\text{\cs{zw}} + \] +\end{description} -\subsection{行末文字の位置調整} -行末が文字クラス$n$の\textbf{JAchar}であった場合, -それを動かすことによって,\textit{total}のうち -\textbf{JAglue}が負担する分を少なくしようとする. -この行末文字の左右の移動可能量は, -JFM中にある文字クラス$n$の定義の -\texttt{end\_stretch},~\texttt{end\_shrink}フィールドに -全角単位の値として記述されている. +各$1\leq i\leq n$に対して, +「行末に$a_{i}$全角だけのカーンを追加した時の,\textit{glue\_set}の値」を +$b_{i}$とおく.式で書くと, +\[ +\catcode`\<=12 +b_{i} = \begin{cases} + |\textit{total}-a_{i}\text{\cs{zw}}|/T^{+} + &(\textit{total}-a_{i}\text{\cs{zw}}\geq 0)\\ + |\textit{total}-a_{i}\text{\cs{zw}}|/T^{-} + &(\textit{total}-a_{i}\text{\cs{zw}}<0) +\end{cases}. +\] +$b_{i}$達の最小値を与えるような$i$を$j$としたとき\footnote{% + そのような$i$が2つ以上あるときは,$|\textit{total}-a_{i}\cdot \text{\cs{zw}}|$, + $|a_{i}|$, $a_i$の順で比較して一番小さくなるものが選ばれる. +}, +行末に大きさ$a_{j}$のカーンを追加する. +\textit{total}から$a_{j}$全角の大きさだけ引いておく. -例えば,行末文字が句点「。」であり,そこで用いられているJFM中に -\begin{lstlisting} - [2] = { - chars = { '。', ... }, width = 0.5, ..., - end_stretch = 0.5, end_shrink = 0.5, - }, -\end{lstlisting} -という指定があった場合,この行末の句点は -\begin{itemize} -\item 通常の\TeX の行分割処理で「半角以上の詰め」が行われていた場合, -この行中の\textbf{JAglue}の負担を軽減するため, -行末の句点を半角だけ右に移動する(ぶら下げ組を行う). -\item 通常の\TeX の行分割処理で「半角以上の空き」が行われていた場合, -逆に行末句点を半角左に移動させる(見た目的に全角取りとなる). -\item 以上のどちらでもない場合,行末句点の位置調整は行わない. -\end{itemize} -となる. +\subsection{行末文字の位置調整(行分割での考慮)} +\texttt{lineend=extended}が指定されている場合,\TeX による行分割が行われる前に +各\textbf{JAchar}の直後に,その文字が行末に来たときの位置補正用のノードを挿入していく. -行末文字を移動した場合,その分だけ\textit{total}の値を引いておく. +\ref{sec-jfmglue}章の用語を使って述べる. +前側のクラスタ\textit{Nq}が「和文A」「和文B」であり, +JFMによって\texttt{end\_adjust}の値が +\begin{quote} + \texttt{end\_adjust = \{$a_{1}$, $a_{2}$, ..., $a_{n}$\}} +\end{quote} +であったとする.このとき,次のクラスタ\textit{Np}の直前に以下のノード列を挿入する. +\textbf{JAglue}の挿入過程で禁則処理のために「\textit{Nq}と\textit{Np}の間のペナルティ値を増やす」ことが +行われることがあるが,以下で述べられている$(n+1)$個のペナルティはみなその処理対象になっている. +\begin{align*} + \Node{kern}{$a_{1}\text{\cs{zw}}$} + &\longrightarrow \Node{penalty}{$0$} \longrightarrow\Node{kern}{$(a_{2}-a_{1})\text{\cs{zw}}$} + \longrightarrow \Node{penalty}{$0$} \longrightarrow\Node{kern}{$(a_{3}-a_{2})\text{\cs{zw}}$}\\ + &\longrightarrow + \cdots \longrightarrow\Node{penalty}{$0$} \longrightarrow + \Node{kern}{$(a_{n}-a_{n-1})\text{\cs{zw}}$} + \longrightarrow \Node{penalty}{$0$} \longrightarrow + \Node{kern}{$-a_{n}\text{\cs{zw}}$} \longrightarrow \Node{penalty}{$10000$} +\end{align*} +$n$個あるペナルティの箇所が改行可能箇所である.いずれかで改行された場合は, +その前にあるカーン($n$箇所のうちどこで改行しても,合計の長さは$a_{i}$の形)は行末に残るが, +後ろのペナルティ・カーンは除去される.なお,$a_1=0$のときは最初の幅が$a_{1}\text{\cs{zw}}$のカーンは不要なので挿入されず, +さらにかつ$n=1$であった場合は後ろのペナルティも挿入されない. + +なお,段落の末尾には\cs{penalty10000}と\cs{parfillskip}由来のグルーが自動的に入るが, +これらとの兼ね合いのため\emph{最後のクラスタについては上記のノード挿入処理は行われない}. +段落最終行の行末文字の位置調整は,すでに述べた「行分割後の場合」における最終行の処理をそのまま用いている. \subsection{グルーの調整} -\textit{total}の分だけが,行中のグルーの伸び量に応じて負担されることになる. -負担するグルーの優先度は以下の順であり, -できるだけ\Param{kanjiskip}を自然長のままにすることを -試みている. +$|\textit{total}|$の分だけが,行中のグルーの伸び量,あるいは縮み量に応じて負担されることになる. +以下,$\textit{total}\geq 0$であると仮定して話を進めるが,負のときも同様である. +\Pkg{luatexja-adjust}の初期値では以下の順に伸び量を負担するようになっており, +(優先度$-4$のJFMグルーは例外として)できるだけ\Param{kanjiskip}を自然長のままにすることを +試みている.この順番は\Param{stretch\_priority}(縮み量については\Param{shrink\_priority}) +パラメータで変更可能である. \begin{enumerate}\def\labelenumi{(\Alph{enumi})} \item \textbf{JAglue}以外のグルー + \item 優先度3のJFMグルー \item 優先度2のJFMグルー \item 優先度1のJFMグルー \item 優先度0のJFMグルー \item 優先度$-1$のJFMグルー \item 優先度$-2$のJFMグルー \item \Param{xkanjiskip} + \item 優先度$-3$のJFMグルー \item \Param{kanjiskip} + \item 優先度$-4$のJFMグルー \end{enumerate} \begin{enumerate} \item 行末の\textbf{JAchar}を移動したことで$\textit{total}=0$となれば, @@ -9206,7 +9497,7 @@ JFM中にある文字クラス$n$の定義の \texttt{glue\_set}, \texttt{glue\_sign}, \texttt{glue\_order}を再計算する. これによって,\textit{total}は\textbf{JAglue}以外のグルーによって負担される. \end{enumerate} -\item \textit{total}が「(A)の伸び量の合計」以上ならば,(A)--(H)のどこまで負担すれば +\item \textit{total}が「(A)の伸び量の合計」以上ならば,(A)--(K)のどこまで負担すれば \textit{total}以上になるかを計算する. 例えば, \[\catcode`\<=12 @@ -9217,17 +9508,17 @@ JFM中にある文字クラス$n$の定義の \begin{itemize} \item (A),~(B)に属するグルーは各グルーで許された伸び量まで伸ばす. \item (C)に属するグルーはそれぞれ$p\times (\text{伸び量})$だけ伸びる. - \item (D)--(H)に属するグルーは自然長のまま. + \item (D)--(K)に属するグルーは自然長のまま. \end{itemize} 実際には,前に述べた「設計」に従い,次のように処理している: \begin{enumerate} \item (C)に属するグルーの伸び量を$p$倍する. -\item (D)--(H)に属するグルーの伸び量を0とする. +\item (D)--(K)に属するグルーの伸び量を0とする. \item 行が格納されているhboxの \texttt{glue\_set}, \texttt{glue\_sign}, \texttt{glue\_order}を再計算する. これによって,\textit{total}は\textbf{JAglue}以外のグルーによって負担される. \end{enumerate} -\item \textit{total}が(A)--(H)の伸び量の合計よりも大きい場合,どうしようもないので +\item \textit{total}が(A)--(K)の伸び量の合計よりも大きい場合,どうしようもないので \verb+^^;+何もしない. \end{enumerate} @@ -9243,13 +9534,13 @@ JFM中にある文字クラス$n$の定義の が連続した場合に,$p$のフォントに対応したが持つ「異体字情報」に従って出力するグリフを変える. しかし,単に$p.\textit{char}$を変更するだけでは,後から -font featureの適用(すぐ下)により置換される可能性がある.そのため, +OpenType機能の適用(すぐ下)により置換される可能性がある.そのため, \cs{CID} や \cs{UTF} と同じように,\textit{glyph\_node}~$p$の代わりに \texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを用いている. \item[(\Pkg{luaotfload} によるfont featureの適用)] \item[\tt ltj.otf] \texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを きちんと\textit{glyph\_node}に変換する.この処理は,\cs{CID}, \cs{UTF}やIVSによる置換が, -font featureの適用で上書きされてしまうのを防止するためである. +OpenType機能の適用で上書きされてしまうのを防止するためである. \item[\tt ltj.main\_process] \textbf{JAglue}の挿入処理(\ref{sec-jfmglue}章)と, JFMの指定に従って各\textbf{JAchar}の「寸法を補正」することを行う. \end{description} @@ -9401,12 +9692,16 @@ return { [0]=37001, -- <9089 E0100> 991049, -- <9089 E0101> ... - ["vert"]=995025, -- vertical variant + ["vform"]=995025, -- vertical variant }, ... + ["unicodes"]={ + ["aj102.pe.vert"]=984163, -- glyph name to unicode + ... + } }, ["chksum"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", -- checksum of the fontfile - ["version"]=2, -- version of the cache + ["version"]=11, -- version of the cache } \end{lstlisting} %<*ja>