From f1ea8a604c05ca59e85ea17a629b5283531b4325 Mon Sep 17 00:00:00 2001 From: Hironori Kitagawa Date: Mon, 13 Mar 2023 10:47:52 +0900 Subject: [PATCH] update manual --- doc/luatexja.dtx | 159 ++++++++++++++++++--------------------------------- src/ltj-inputbuf.lua | 8 ++- src/ltj-pretreat.lua | 10 ++-- src/ltj-rmlgbm.lua | 5 +- 4 files changed, 72 insertions(+), 110 deletions(-) diff --git a/doc/luatexja.dtx b/doc/luatexja.dtx index 864306f..7045ebc 100644 --- a/doc/luatexja.dtx +++ b/doc/luatexja.dtx @@ -3859,7 +3859,7 @@ JFM中における\texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ 「JFM由来のグルーの他に,\Param{kanjiskip}の自然長/伸び量/縮み量の一部が 同じ場所に挿入される」という状況が起こりうる. この機能を無効化し,バージョン20150922.0以前と同じような組版を得るためには, -他のOpenType機能と同じように\texttt{-ltjksp}指定を行えば良い(\autoref{fig:ltjksp}参照). +他のOpenType機能と同じように\>\mbox{\texttt{-ltjksp}}\>指定を行えば良い(\autoref{fig:ltjksp}参照). なお, \begin{lstlisting} \jfont\G=HaranoAjiMincho-Regular:jfm=ujis;-ltjksp;+ltjksp at \zw @@ -3875,7 +3875,7 @@ JFM中における\texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ \texttt{kanjiskip\_shrink} keys (Page~\pageref{pg:ksp_nat}) makes tha \LuaTeX-ja inserts not only a glue which is specified by a JFM, and also the natural width/stretch part/shrink part of \Param{kanjiskip}. -This functionality is disabled by \texttt{-ltjksp} specification, +This functionality is disabled by \mbox{\texttt{-ltjksp}} specification, as shown in~\autoref{fig:ltjksp}. % \begin{figure} @@ -3888,10 +3888,56 @@ as shown in~\autoref{fig:ltjksp}. \G\leavevmode% \vrule\hbox to 15\zw{あ「い」う,えお}\vrule \end{LTXexample} -\caption{\texttt{ltjksp} `feature''} +\caption{\texttt{ltjksp} ``feature''} \label{fig:ltjksp} \end{figure} +%<*ja> +\paragraph{\texttt{ltjpci}「機能」} +\label{pg:ltjpci} +\Pkg{luaotfload}~v3.19以降では,標準でUnicode(文字から作られるノードたち)がNFCに正規化される +ようになっている.これにより,ソース中でたとえば「か」と合成用濁点(\texttt{U+3099})を続けて入力した場合, +両者それぞれからノードが生成されるが,結果的には「が」を表す1ノードになるわけである. + +しかし,NFCに正規化することで, +たとえば「\UTF{FA19}」(\texttt{U+FA19})が「神」(\texttt{U+795E})にというふうに, +CJK互換漢字がCJK統合漢字に変換されてしまうという問題がある. +異体字セレクタを用いればこのようなことは起きないが,古くからあるフォントでは異体字セレクタをサポートしていない. + +以上の事情に対応するため,\LuaTeX-jaでは,標準で +\emph{CJK互換漢字・CJK互換漢字補助の文字には\Pkg{luaotfload}パッケージによる処理は働かない}ようにしている. +この機能を無効化するには,他のOpenType機能と同じように\texttt{-ltjpci}指定を行えば良い(\autoref{fig:ltjpci}参照). +\texttt{ltjksp}と同様に,\texttt{-ltjpci}, \texttt{+ltjpci}を複数回指定した場合は, +最後に指定したものが有効となる. +% +%<*en> +\paragraph{\texttt{ltjpci} ``feature''} +\label{pg:ltjpci} +By default, The \Pkg{luaotfload} package (since v3.19) normalizes Unicode sequences to NFC. +However, this normalization converts CJK compatibility ideographs to their canonical equivalents, +such as ``\UTF{FA19}''~(\texttt{U+FA19}) to ``神''. One can use variation selectors, +but old fonts does not support them. + +So, \emph{\LuaTeX-ja now protects CJK compatibility ideographs from processing + by the \Pkg{luaotfload} package by defualt}. +This functionality is disabled by \mbox{\texttt{-ltjpci}} specification, +as shown in~\autoref{fig:ltjpci}. +% +\begin{figure} +\begin{LTXexample}[width=12\zw] +\def\TEST{\leavevmode\char"FA10\char"FA12\char"FA15 + \char"FA19.か\char"3099.は\char"309A.\par} +\jfont\A=HaranoAjiMincho-Regular:jfm=ujis; at 15pt +\A\TEST % default +\jfont\G=HaranoAjiMincho-Regular:jfm=ujis;-ltjpci at 15pt +\G\TEST % ltjpci off +\jfont\H=HaranoAjiMincho-Regular:jfm=ujis;-normalize at 15pt +\H\TEST % normalization off +\end{LTXexample} +\caption{\texttt{ltjpci} ``feature''} +\label{fig:ltjpci} +\end{figure} + %\subsection{\cs{tfont}} %\subsection{\cs{tfont} 命令} \label{ssec:tfont} @@ -9978,101 +10024,10 @@ u その行はそこで改行するようにした方がいいだろう. % -\begin{table}[t] -% \caption{「基底文字+合成用濁点・半濁点」から合成済み文字への変換をサポートする組み合わせ} -% \caption{Normalization of Kana Character Sequences with Combining (Semi)-voiced Sound Mark}\medskip - \label{tab:kana_composite} - \def\D#1{% - {\fboxsep0pt\fcolorbox{cyan}{white}% - {\hbox to 1\zw{\hss#1}}}} %" - \def\DC#1{\D{\unitlength=1\zw - \begin{picture}(1,0) - \put(0.5,0.38){\arc[0,15]{0.25}}\put(0.5,0.38){\arc[30,45]{0.25}}\put(0.5,0.38){\arc[60,75]{0.25}} - \put(0.5,0.38){\arc[90,105]{0.25}}\put(0.5,0.38){\arc[120,135]{0.25}}\put(0.5,0.38){\arc[150,165]{0.25}} - \put(0.5,0.38){\arc[180,195]{0.25}}\put(0.5,0.38){\arc[210,225]{0.25}}\put(0.5,0.38){\arc[240,255]{0.25}} - \put(0.5,0.38){\arc[270,285]{0.25}}\put(0.5,0.38){\arc[300,315]{0.25}}\put(0.5,0.38){\arc[330,345]{0.25}} - \end{picture}\llap{#1\kern-.7\zw}}} - \def\CDJ#1#2{$\mbox{\D{\char"#1}}+\mbox{\DC{゛}}\rightarrow \mbox{\D{\char"#2}}$} - \def\CHJ#1#2{$\mbox{\D{\char"#1}}+\mbox{\DC{゜}}\rightarrow \mbox{\D{\char"#2}}$} - \small\centering - \begin{tabular}{@{}llllll@{}} - \CDJ{3046}{3094}& - \CDJ{304B}{304C}& - \CDJ{304D}{304E}& - \CDJ{304F}{3050}& - \CDJ{3051}{3052}& - \CDJ{3053}{3054}\\ - \CDJ{3055}{3056}& - \CDJ{3057}{3058}& - \CDJ{3059}{305A}& - \CDJ{305B}{305C}& - \CDJ{305D}{305E}& - \CDJ{305F}{3060}\\ - \CDJ{3061}{3062}& - \CDJ{3064}{3065}& - \CDJ{3066}{3067}& - \CDJ{3068}{3069}& - \CDJ{306F}{3070}& - \CDJ{3072}{3073}\\ - \CDJ{3075}{3076}& - \CDJ{3078}{3079}& - \CDJ{307B}{307C}& - \CDJ{309D}{309E}& - \CDJ{30A6}{30F4}& - \CDJ{30AB}{30AC}\\ - \CDJ{30AD}{30AE}& - \CDJ{30AF}{30B0}& - \CDJ{30B1}{30B2}& - \CDJ{30B3}{30B4}& - \CDJ{30B5}{30B6}& - \CDJ{30B7}{30B8}\\ - \CDJ{30B9}{30BA}& - \CDJ{30BB}{30BC}& - \CDJ{30BD}{30BE}& - \CDJ{30BF}{30C0}& - \CDJ{30C1}{30C2}& - \CDJ{30C4}{30C5}\\ - \CDJ{30C6}{30C7}& - \CDJ{30C8}{30C9}& - \CDJ{30CF}{30D0}& - \CDJ{30D2}{30D3}& - \CDJ{30D5}{30D6}& - \CDJ{30D8}{30D9}\\ - \CDJ{30DB}{30DC}& - \CDJ{30EF}{30F7}& - \CDJ{30F0}{30F8}& - \CDJ{30F1}{30F9}& - \CDJ{30F2}{30FA}& - \CDJ{30FD}{30FE}\\ - \CHJ{306F}{3071}& - \CHJ{3072}{3074}& - \CHJ{3075}{3077}& - \CHJ{3078}{307A}& - \CHJ{307B}{307D}& - \CHJ{30CF}{30D1}\\ - \CHJ{30D2}{30D4}& - \CHJ{30D5}{30D7}& - \CHJ{30D8}{30DA}& - \CHJ{30DB}{30DD} - \end{tabular} -\end{table} -%<*en> -\subsection{Composition of Kana from Combining Character Sequences} -In (u)\pTeX, Hiragana and Katakana in the NFD form% -\footnote{namely, character sequences which contains - ``COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK''~(\texttt{U+3099}) and - ``COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK''~(\texttt{U+309A}).} -are normalized to precomposed characters before (u)\pTeX\ looks into the input line. -Character sequences which are involved in this normalization are shown in \autoref{tab:kana_composite}. - -The above normalization process is also performed in \LuaTeX-ja version~20220103.0 or later, because -fonts might not have these transformation as an OpenType feature. -% - %<*ja> -\subsection{濁点・半濁点付き仮名文字の正規化} +\subsection{濁点・半濁点付き仮名の正規化→\Pkg{luaotfload}~v3.19以降ではそちらで} \TeX~Live~2016以降の(u)\pTeX では,合成用濁点(\texttt{U+3099})・合成用半濁点(\texttt{U+309A})を用いて -表現された平仮名・片仮名を合成済み文字に変換する(具体的には\autoref{tab:kana_composite}の組み合わせ)という処理を行っている. +表現された平仮名・片仮名を合成済み文字に変換するという処理を行っている. この処理を行っている要因としては, \begin{itemize} \item 無用なトラブルを避けるため. @@ -10082,14 +10037,14 @@ fonts might not have these transformation as an OpenType feature. 合成用濁点・半濁点は利用できない.そのため上記の変換処理はさらに前から行われていた. \end{itemize} -一方,\LuaTeX(-ja)では入力の変換は基本的に行わず,文字の合成は使用しているフォントのOpenType機能に委ねるという立場である. -しかし,\autoref{tab:kana_composite}に挙げた変換はUnicode正規化の範疇であり,この内容を持っているフォントは多くない. -よって,前段落で述べた2つの理由(と\upTeX との互換性という意味も込めて)も考慮して, -バージョン20220103.0以降では,\LuaTeX-jaは入力行に対して\autoref{tab:kana_composite}の変換を行う. +\LuaTeX(-ja)では入力の変換は基本的に行わず, +文字の合成は使用しているフォントのOpenType機能に委ねるという立場であったが, +\Pkg{luaotfload}~v3.19以降では,標準でNFCへのUnicode正規化を行っている. +そのため,バージョン2023****.0以降では,\LuaTeX-jaによる自前の変換\footnote{バージョン20220103.0で実装した.}は +行わないようにしている. % - -%<*ja> +%<*ja> %\section{Insertion of JFM glues, \Param{kanjiskip} and \Param{xkanjiskip}} %\section{JFMグルーの挿入,\Param{kanjiskip}と\Param{xkanjiskip}} \label{sec-jfmglue} diff --git a/src/ltj-inputbuf.lua b/src/ltj-inputbuf.lua index dc6ec46..66a466e 100644 --- a/src/ltj-inputbuf.lua +++ b/src/ltj-inputbuf.lua @@ -14,6 +14,10 @@ local ltjc_is_japanese_char_curlist = ltjc.is_japanese_char_curlist local cnt_lineend = luatexbase.registernumber 'ltjlineendcomment' local substituter do +if tonumber(luaotfload.version) < 3.19 then + ltjb.package_info_no_line('luatexja', + 'We are using luaotfload