X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=doc%2Fluatexja.dtx;h=6ee3177963724dd0abf7f123944629c35b4576e1;hb=87b89782a97fd43447fca40383ba1b967d1c611e;hp=e325ee7f6d1741618b862b98b233a8dc7f78db0d;hpb=0e8b59d4e986bb2c1e1af9746d649389325db9a1;p=luatex-ja%2Fluatexja.git diff --git a/doc/luatexja.dtx b/doc/luatexja.dtx index e325ee7..6ee3177 100644 --- a/doc/luatexja.dtx +++ b/doc/luatexja.dtx @@ -16,6 +16,7 @@ %%%%%%%% \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} @@ -2696,7 +2697,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重にシフトされることになる. @@ -2704,6 +2705,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 @@ -2720,12 +2725,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$, @@ -4164,6 +4173,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) %(必須) @@ -4669,12 +4689,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} @@ -5818,7 +5863,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}. @@ -6796,11 +6841,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 by the \Pkg{luatexja-otf} package is experimental. -If you want to enable IVS support, 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サポート} @@ -6809,67 +6857,14 @@ If you want to enable IVS support, load (漢字用異体字セレクタ)を後置することによって 字形を指定する仕組み(IVS)が含まれている. 執筆時点の2013年12月では,\Pkg{luaotfload}や\Pkg{fontspec}パッケージ類は -IVSに対応してはいないようである.これらのパッケージで対応してくれるのが理想的だが, -それまでのつなぎとして,\Pkg{luatexja-otf}パッケージ内にIVS対応を仕込んでおいた. - -\medskip - -\emph{\Pkg{luatexja-otf}による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による字形指定は,OpenType機能によるそれに優先されることとした. -下の例において,\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} @@ -6936,7 +6931,7 @@ for making the difference obvious. \end{itemize} -\Pkg{luatexja-adjust} は,以下の命令を提供する.これらはすべてグローバルに効力を発揮する. +\Pkg{luatexja-adjust}は,以下の命令を提供する.これらはすべてグローバルに効力を発揮する. \begin{cslist} \item[\cs{ltjdisableadjust}] @@ -9269,7 +9264,7 @@ the \texttt{lstlisting} environment or other environments/commands. %<*ja> \section{和文の行長補正方法} \label{sec-adjspec} -\Pkg{luatexja-adjust} で提供される優先順位付きの行長調整の詳細を述 +\Pkg{luatexja-adjust}で提供される優先順位付きの行長調整の詳細を述 べる.大まかに述べると,次のようになる. \begin{itemize} \item 通常の\TeX の行分割方法に従って,段落を行分割する.この段階では,行 @@ -9290,13 +9285,9 @@ the \texttt{lstlisting} environment or other environments/commands. \paragraph{準備:合計伸縮量の計算} グルーの伸縮度(\texttt{plus} や \texttt{minus} で指定されている値)には, 有限値の他に,\texttt{fi},\texttt{fil},\texttt{fill},\texttt{filll}と -いう4つの無限大レベル(後ろの方ほど大きい)があり,行の調整に -\texttt{fi} などの\emph{無限大レベルの伸縮度が用いられている場合は,そ -の行に対しての処理を中止}する. - -よって,以降,問題にしている行の行長調整は伸縮度が有限長のグルーを用いて -行われているとして良い.さらに,簡単のため,この行はグルーが広げられている -(自然長で組むと望ましい行長よりの短い)場合しか扱わない. +いう4つの無限大レベル(後ろの方ほど大きい)がある.行の調整に +\texttt{fi} などの\emph{無限大レベルの伸縮度が用いられている行では, +「行末文字の位置調整」のみ行い,「グルーの調整」は行わない.} まず,段落中の行中のグルーを \begin{itemize} @@ -9308,42 +9299,53 @@ the \texttt{lstlisting} environment or other environments/commands. \item 和欧文間空白(\Param{xkanjiskip}) \item 和文間空白(\Param{kanjiskip}) \end{itemize} -の$1+1+5+1=8$つに類別し,それぞれの種別ごとに -許容されている伸び量(\texttt{stretch}の値)の合計を計算する. -また,行長と自然長との差を\textit{total}とおく. - +の$1+1+5+1=8$つに類別する. +そして許容されている伸び量(\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{行末文字の位置調整} 行末が文字クラス$n$の\textbf{JAchar}であった場合, -それを動かすことによって,\textit{total}のうち -\textbf{JAglue}が負担する分を少なくしようとする. -この行末文字の左右の移動可能量は, -JFM中にある文字クラス$n$の定義の -\texttt{end\_stretch},~\texttt{end\_shrink}フィールドに -全角単位の値として記述されている. - -例えば,行末文字が句点「。」であり,そこで用いられている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} -となる. +\texttt{end\_adjust} の値のいずれかだけこの文字の位置を移動させる. -行末文字を移動した場合,その分だけ\textit{total}の値を引いておく. +\begin{quote} + \texttt{end\_adjust = \{$a_{1}$, $a_{2}$, ..., $a_{n}$\}} +\end{quote} +であったとする.各$1\leq i\leq n$に対して, +「行末に$a_{i}$全角だけのカーンを追加した時の,\textit{glue\_set}の値」を +$b_{i}$とおく.式で書くと, +\[ +\catcode`\<=12 +b_{i} = \begin{cases} + |\textit{total}-a_{i}\cdot \text{\cs{zw}}|/T^{+} + &(\textit{total}-a_{i}\text{\cs{zw}}\geq 0)\\ + |\textit{total}-a_{i}\cdot \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}$全角の大きさだけ引いておく. \subsection{グルーの調整} -\textit{total}の分だけが,行中のグルーの伸び量に応じて負担されることになる. +$|\textit{total}|$の分だけが,行中のグルーの伸び量に応じて負担されることになる. +以下,$\textit{total}\geq 0$であると仮定して話を進めるが,負のときも同様である. 負担するグルーの優先度は以下の順であり, できるだけ\Param{kanjiskip}を自然長のままにすることを 試みている. @@ -9567,12 +9569,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>