%%%%%%%% fonts
\usepackage{luatexja-otf}
\usepackage[no-math]{fontspec}
-\setmainfont[Ligatures=TeX]{Linux Libertine O}
+\setmainfont[Ligatures=TeX,RawFeature=-notdef]{Linux Libertine O}
\setmonofont[Scale=MatchLowercase, ItalicFont=lmmono10-italic.otf,
- BoldFont=lmmonolt10-bold.otf, BoldItalicFont=lmmonolt10-boldoblique.otf
+ BoldFont=lmmonolt10-bold.otf, BoldItalicFont=lmmonolt10-boldoblique.otf,
+ RawFeature=-notdef
]{lmmono10-regular.otf}
-\setsansfont[Scale=MatchLowercase,Ligatures=TeX]{Linux Biolinum O}
+\setsansfont[Scale=MatchLowercase,Ligatures=TeX,RawFeature=-notdef]{Linux Biolinum O}
\usepackage[match]{luatexja-fontspec}
\usepackage[kozuka-pr6n]{luatexja-preset}
\usepackage{unicode-math}
%<ja>\LuaTeX-jaパッケージの動作には次のパッケージ類が必要である.
\begin{itemize}
\item \LuaTeX\ 1.0.0 (or later)
-\item \Pkg{luaotfload} v2.6 (or later)
+\item recent \Pkg{luaotfload} (v2.98 or later recommended)
\item \Pkg{adobemapping} (Adobe cmap and pdfmapping files)
\item \Pkg{etoolbox}, \Pkg{everysel} (if you want to use \LuaTeX-ja with \LaTeXe)
\item \Pkg{ltxcmds}, \Pkg{pdftexcmds}, \Pkg{filehook}, \Pkg{atbegshi}
-\item \Pkg{fontspec} v2.5c (or later)
+\item \Pkg{fontspec} v2.7c (or later)
%<en>\item \emph{IPAex fonts} (\url{http://ipafont.ipa.go.jp/})
%<ja>\item \emph{IPAexフォント(\url{http://ipafont.ipa.go.jp/})}
\end{itemize}
%</ja>
%<*en>
\item \LuaTeX-ja is very slower than \pTeX.
- Generally speaking, LuaJIT\TeX\ processes \LuaTeX-ja
- about 30\% faster than \LuaTeX, but not always%
- \footnote{%
- LuaJIT has several limitations such as 1\,GB~(or~2\,GB) memory limitation.
- So typesetting a large source by LuaJIT\TeX may cause an ``out of memory'' error,
- or failure of loading/saving font cache of \Pkg{luaotfload}.
- }.
+ % Generally speaking, LuaJIT\TeX\ processes \LuaTeX-ja
+ % about 30\% faster than \LuaTeX, but not always%
+ % \footnote{%
+ % LuaJIT has several limitations such as 1\,GB~(or~2\,GB) memory limitation.
+ % So typesetting a large source by LuaJIT\TeX may cause an ``out of memory'' error,
+ % or failure of loading/saving font cache of \Pkg{luaotfload}.
+ % }.
%</en>
%<*ja>
\item \LuaTeX-jaは動作が\pTeX に比べて非常に遅い.
コードを調整して徐々に速くしているが,まだ満足できる速度ではない.
-LuaJIT\TeX を用いると\LuaTeX のだいたい1.3倍の速度で動くようであるが,
-IPA mj明朝などの大きいフォントを用いた場合には\LuaTeX よりも遅くなることもある
- \footnote{%
- LuaJITは1\,GB(あるいは2\,GB)のメモリ制限など,いくつかの制限事項があることが知られている.そのため,
- 大きいソースファイルをLuaJIT\TeX でタイプセットするとLuaの側で``out of memory''エラーが発生してしまう.
- 本ドキュメントのように,「各ページごとにLuaで使っているメモリ容量をチェックし,
- 必要なら\texttt{collectgarbage("collect")}でガベージコレクタを実行」すると
- 状況が多少改善されるかもしれない.
- また,LuaJIT\TeX でIPA mj明朝などの「大きい」フォントを利用した場合はフォントキャッシュの保存に失敗し,
- 毎回フォントを読み込まなければならず結果的に時間がかかることがある.
- }.
+% LuaJIT\TeX を用いると\LuaTeX のだいたい1.3倍の速度で動くようであるが,
+% IPA mj明朝などの大きいフォントを用いた場合には\LuaTeX よりも遅くなることもある
+% \footnote{%
+% LuaJITは1\,GB(あるいは2\,GB)のメモリ制限など,いくつかの制限事項があることが知られている.そのため,
+% 大きいソースファイルをLuaJIT\TeX でタイプセットするとLuaの側で``out of memory''エラーが発生してしまう.
+% 本ドキュメントのように,「各ページごとにLuaで使っているメモリ容量をチェックし,
+% 必要なら\texttt{collectgarbage("collect")}でガベージコレクタを実行」すると
+% 状況が多少改善されるかもしれない.
+% また,LuaJIT\TeX でIPA mj明朝などの「大きい」フォントを利用した場合はフォントキャッシュの保存に失敗し,
+% 毎回フォントを読み込まなければならず結果的に時間がかかることがある.
+% }.
%</ja>
\item%
it sets
\begin{itemize}
\item a character which belongs character ranges 1,~4, 5, and~8 is \textbf{ALchar},
- \item a character which belongs character ranges 2,~3, 6, and~7 is \textbf{JAchar}.
+ \item a character which belongs character ranges 2,~3, 6, 7,~and~9 is \textbf{JAchar}.
\end{itemize}
%</en>
%<*ja>
例えば,以下は\LuaTeX-jaの初期設定であり,次の内容を設定している:
\begin{itemize}
\item 1番,4番,5番,8番の文字範囲に属する文字は\textbf{ALchar}.
- \item 2番,3番,6番,7番の文字範囲に属する文字は\textbf{JAchar}.
+ \item 2番,3番,6番,7番,9番の文字範囲に属する文字は\textbf{JAchar}.
\end{itemize}
%</ja>
\begin{lstlisting}
-\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, -8}}
+\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, -8, +9}}
\end{lstlisting}
%<*en>
The argument to \textsf{jacharrange} parameter is a list of non-zero integer.
これらは以下のデータに基づいて決定している.
%</ja>
\begin{itemize}
-%<en>\item Blocks in Unicode~11.0.
+%<en>\item Blocks in Unicode~12.0.0.
%<ja>\item Unicode~11.0のブロック.
%<en>\item The \texttt{Adobe-Japan1-UCS2} mapping between a CID Adobe-Japan1-6 and Unicode.
%<ja>\item Adobe-Japan1-6のCIDとUnicodeの間の対応表\texttt{Adobe-Japan1-UCS2}.
%</ja>
\begin{description}
%<*en>
-
\item[Range~8${}^{\text{A}}$] The intersection of the upper half of ISO~8859-1
- (Latin-1 Supplement) and JIS~X~0208 (a basic character set for Japanese). This character range
- consists of the following characters:
+ (Latin-1 Supplement) and JIS~X~0208 (a basic character set for Japanese).
+ The character list is indicated in \autoref{tab:rng8}.
%</en>
%<*ja>
\item[範囲8${}^{\text{A}}$] ISO~8859-1の上位領域(ラテン1補助)と
- JIS~X~0208の共通部分.この文字範囲は
- 以下の文字で構成される:
+ JIS~X~0208の共通部分.文字のリストは\autoref{tab:rng8}を参照.
%</ja>
-\begin{multicols}{2}
-\begin{itemize}
-\def\ch#1#2{\item \char"#1\ (\texttt{U+00#1}, #2)}%"
-\ch{A7}{Section Sign}
-\ch{A8}{Diaeresis}
-\ch{B0}{Degree sign}
-\ch{B1}{Plus-minus sign}
-\ch{B4}{Spacing acute}
-\ch{B6}{Paragraph sign}
-\ch{D7}{Multiplication sign}
-\ch{F7}{Division Sign}
-\end{itemize}
-\end{multicols}
+\begin{table}[!tb]
+%<en>\caption{Characters in predefined character range~8.}\medskip
+%<ja>\caption{文字範囲8に指定されている文字.}
+\label{tab:rng8}
+\centering\footnotesize
+\def\ch#1{\char"#1~(\texttt{U+00#1})}%"
+\begin{tabular}{llll}
+\ch{A7}&{Section Sign}&
+\ch{A8}&{Diaeresis}\\
+\ch{B0}&{Degree sign}&
+\ch{B1}&{Plus-minus sign}\\
+\ch{B4}&{Spacing acute}&
+\ch{B6}&{Paragraph sign}\\
+\ch{D7}&{Multiplication sign}&
+\ch{F7}&{Division Sign}
+\end{tabular}
+\end{table}
%<*en>
-\item[Range~1${}^{\text{A}}$] Latin characters that some of them are included in Adobe-Japan1-6.
-This range consists of the following Unicode ranges, \emph{except characters in the range~8 above}:
+\item[Range~1${}^{\text{A}}$] Latin characters that some of them are included in Adobe-Japan1-7.
+ This range consists of the Unicode ranges indicated in \autoref{tab:rng1},
+ \emph{except characters in the range~8 above}.
%</en>
%<*ja>
-\item[範囲1${}^{\text{A}}$] ラテン文字のうち,Adobe-Japan1-6との共通部分があるもの.
- この範囲は以下のUnicodeのブロックのうち
- \emph{ç¯\84å\9b²8ã\82\92é\99¤ã\81\84ã\81\9f}é\83¨å\88\86ã\81§æ§\8bæ\88\90ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bï¼\9a
+\item[範囲1${}^{\text{A}}$] ラテン文字のうち,Adobe-Japan1-7との共通部分があるもの.
+ この範囲は\autoref{tab:rng1}で示したUnicodeのブロックのうち
+ \emph{ç¯\84å\9b²8ã\82\92é\99¤ã\81\84ã\81\9f}é\83¨å\88\86ã\81§æ§\8bæ\88\90ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bï¼\8e
%</ja>
-\begin{multicols}{2}
-\begin{itemize}
-\item \texttt{U+0080}--\texttt{U+00FF}: Latin-1 Supplement
-\item \texttt{U+0100}--\texttt{U+017F}: Latin Extended-A
-\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
-%<en>\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
-%<ja>\par\
-\end{itemize}
-\end{multicols}
+\begin{table}[!tb]
+%<en>\caption{Unicode blocks in predefined character range~1.}\medskip
+%<ja>\caption{文字範囲1に指定されているUnicodeブロック.}
+\label{tab:rng1}
+\centering\footnotesize
+\begin{tabular}{llll}
+ \texttt{U+0080}--\texttt{U+00FF}&Latin-1 Supplement&
+ \texttt{U+0100}--\texttt{U+017F}&Latin Extended-A\\
+ \texttt{U+0180}--\texttt{U+024F}& Latin Extended-B&
+ \texttt{U+0250}--\texttt{U+02AF}& IPA Extensions\\
+ \texttt{U+02B0}--\texttt{U+02FF}& Spacing Modifier Letters&
+ \texttt{U+0300}--\texttt{U+036F}& Combining Diacritical Marks\\
+ \texttt{U+1E00}--\texttt{U+1EFF}&Latin Extended Additional
+\end{tabular}
+\end{table}
%<*en>
\item[Range~2${}^{\text{\kern.1emJ}}$] Greek and Cyrillic letters. JIS~X~0208 (hence most of Japanese
fonts) has some of these characters.
\end{itemize}
\end{multicols}
%<*en>
-\item[Range~3${}^{\text{\kern.1emJ}}$] Punctuations and Miscellaneous symbols. The block list is
+\item[Range~3${}^{\text{\kern.1emJ}}$] Miscellaneous symbols. The block list is
indicated in \autoref{tab:rng3}.
%</en>
%<*ja>
-\item[範囲3${}^{\text{\kern.1emJ}}$] 句読点と記号類.ブロックのリストは\autoref{tab:rng3}%
+\item[範囲3${}^{\text{\kern.1emJ}}$] 記号類.ブロックのリストは\autoref{tab:rng3}%
に示してある.
%</ja>
\begin{table}[!tb]
\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%"
\centering\footnotesize
\begin{tabular}{llll}
-"2000--"206F&General Punctuation&
"2070--"209F&Superscripts and Subscripts\\
"20A0--"20CF&Currency Symbols&
"20D0--"20FF&Comb.\ Diacritical Marks for Symbols\\
\end{tabular}
\end{table}
%<*en>
+\item[Range~9${}^{\text{J}}$] The intersection of the ``General Punctuation'' block
+ (\texttt{U+2000}--\texttt{U+206F})
+ and Adobe-Japan1-7 character collection.
+ This character range characters in \autoref{tab:rng9}.
+%</en>
+%<*ja>
+\item[範囲9${}^{\text{J}}$] Unicodeの「一般句読点」ブロック(\texttt{U+2000}--\texttt{U+206F})と
+ Adobe-Japan1-7の共通部分.
+ この文字範囲は\autoref{tab:rng9}に示した文字で構成される.
+%</ja>
+\begin{table}[!tb]
+%<en>\caption{Characters in predefined character range~9.}\medskip
+%<ja>\caption{文字範囲9に指定されている文字.}
+\label{tab:rng9}
+\centering\footnotesize
+\def\ch#1{\char"20#1~(\texttt{U+20#1})}%"
+% 13: JIS X0213, AJ, Adobe-Japan-1 only
+\begin{tabular}{llllll}
+ \ch{02}&{En space}&AJ&
+ \ch{10}&{Hyphen}&\\
+ \ch{11}&{Non-breaking hyphen}&AJ&
+ \ch{13}&{En dash}&13\\
+ \ch{14}&{Em dash}&&
+ \ch{15}&{Horizontal bar}&\\
+ \ch{16}&{Double vertical line}&&
+ \ch{18}&{Left single quotation mark}&\\
+ \ch{19}&{Right single quotation mark}&&
+ \ch{1A}&{Single low-9 quotation mark}&AJ\\
+ \ch{1C}&{Left double quotation mark}&&
+ \ch{1D}&{Right double quotation mark}&\\
+ \ch{1E}&{Double low-9 quotation mark}&AJ&
+ \ch{20}&{Dagger}&\\
+ \ch{21}&{Double dagger}&&
+ \ch{22}&{Bullet}&13\\
+ \ch{25}&{Two dot leader}&&
+ \ch{26}&{Horizontal ellipsis}&\\
+ \ch{30}&{Per mille sign}&&
+ \ch{32}&{Prime}&\\
+ \ch{33}&{Double prime}&&
+ \ch{39}&{Single left-pointing angle quot.}&AJ\\
+ \ch{3A}&{Single right-pointing angle quot.}&AJ&
+ \ch{3B}&{Reference mark}&\\
+ \ch{3C}&{Double exclamation mark}&13&
+ \ch{3E}&{Overline}&\\
+ \ch{3F}&{Undertie}&13&
+ \ch{42}&{Asterism}&13\\
+ \ch{44}&{Fraction slash}&AJ&
+ \ch{47}&{Double question mark}&13\\
+ \ch{48}&{Question exclamation mark}&13&
+ \ch{49}&{Exclamation question mark}&13\\
+ \ch{51}&{Two asterisks aligned vertically}&13
+\end{tabular}
+\end{table}
+%<*en>
\item[Range~4${}^{\text{A}}$] Characters usually not in Japanese fonts. This range consists
of almost all Unicode blocks which are not in other
predefined ranges. Hence, instead of showing the block list,
- we put the definition of this range itself:
+ we put the definition of this range itself.
%</en>
%<*ja>
\item[範囲4${}^{\text{A}}$] 通常和文フォントには含まれていない文字.
この範囲は他の範囲にないほとんど全てのUnicodeブロック
で構成されている.したがって,ブロックのリストを示す
- 代ã\82\8fã\82\8aã\81«ï¼\8cç¯\84å\9b²ã\81®å®\9a義ã\81\9dã\81®ã\82\82ã\81®ã\82\92示ã\81\99ï¼\9a
+ 代ã\82\8fã\82\8aã\81«ï¼\8cç¯\84å\9b²ã\81®å®\9a義ã\81\9dã\81®ã\82\82ã\81®ã\82\92示ã\81\99ï¼\8e
%</ja>
\begin{lstlisting}
\ltjdefcharrange{4}{%
"500-"10FF, "1200-"1DFF, "2440-"245F, "27C0-"28FF, "2A00-"2AFF,
"2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A95F, "A980-"ABFF, "E000-"F8FF,
"FB00-"FE0F, "FE20-"FE2F, "FE70-"FEFF, "10000-"1AFFF, "1B170-"1F0FF,
- "1F300-"1FFFF
+ "1F300-"1FFFF, ... (characters in "2000-"206F which are not in range 9)
} % non-Japanese
\end{lstlisting}
%<en>\item[Range~5${}^{\text{A}}$] Surrogates and Supplementary Private Use Areas.
\end{tabular}
\end{table}
%<*en>
-\item[Range~7${}^{\text{\kern.1emJ}}$] Characters used in CJK languages, but not included in Adobe-Japan1-6.
+\item[Range~7${}^{\text{\kern.1emJ}}$] Characters used in CJK languages, but not included in Adobe-Japan1-7.
The block list is indicated in \autoref{tab:rng7}.
%</en>
%<*ja>
-\item[範囲7${}^{\text{\kern.1emJ}}$] CJK言語で用いられる文字のうち,Adobe-Japan1-6に
+\item[範囲7${}^{\text{\kern.1emJ}}$] CJK言語で用いられる文字のうち,Adobe-Japan1-7に
含まれていないもの.
ブロックのリストは\autoref{tab:rng7}に示す.
%</ja>
``ア'', not 20.
%</en>
%<*ja>
-\subsection{禁則処理関連パラメータとOpenTypeのfont feature}
+\subsection{禁則処理関連パラメータとOpenType機能}
禁則処理や \Param{kanjiskip}, \Param{xkanjiskip} の挿入に関連したパラメータのうち
\begin{quote}
\Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty},
は,文字コードごとに設定する量である.
\Pkg{fontspec}パッケージを使う(\ref{ssec:fontspec}節)場合など,
-各種のOpenType featureを適用することもあると思うが,前段落に述べたパラメータ類は,
-\emph{OpenType featureの適用前の文字コードによって適用される.}
+各種のOpenType機能を適用することもあると思うが,前段落に述べたパラメータ類は,
+\emph{OpenType機能の適用前の文字コードによって適用される.}
例えば,以下の例において10行目の「ア」は,\verb+hwid+ featureの適用により半角カタカナの「ア」
に置き換わる.しかし,その直後に挿入される \Param{postbreakpenalty}は,置換前の「ア」に対する値10である.
%</ja>
ボックスレジスタ \cs{box}<num> にセットされているボックスの幅・高さ・深さの取得や
変更にはそれぞれ \cs{wd},~\cs{ht},~\cs{dp} プリミティブを用いるのであった.
\pTeX ではこれらのプリミティブは,「現在の組方向におけるボックスの寸法」を指すもので,
-同じボックスに対しても現在の組方向によって返る値は異なるもであった.
+å\90\8cã\81\98ã\83\9cã\83\83ã\82¯ã\82¹ã\81«å¯¾ã\81\97ã\81¦ã\82\82ç\8f¾å\9c¨ã\81®çµ\84æ\96¹å\90\91ã\81«ã\82\88ã\81£ã\81¦è¿\94ã\82\8bå\80¤ã\81¯ç\95°ã\81ªã\82\8bã\82\82ã\81®ã\81§ã\81\82ã\81£ã\81\9fï¼\8e
\LuaTeX-jaにおいては状況が異なり,\cs{wd},~\cs{ht},~\cs{dp} が返す値は
現在の組方向には依存しない.下の例のように,横組のボックスが格納されていれば
%<*ja>
\paragraph{\texttt{extend}と\texttt{slant}}
-OpenType font featureと見かけ上同じような形式で指定できるものに,
+OpenType機能と見かけ上同じような形式で指定できるものに,
\begin{description}
\item[\texttt{extend=}<extend>] 横方向に<extend>倍拡大する.
\item[\texttt{slant=}<slant>] <slant>に指定された割合だけ傾ける.
%<en>\subsection{\cs{tfont}}
%<ja>\subsection{\cs{tfont} 命令}
-
+\label{ssec:tfont}
\begin{comment}
{\catcode`\<=12\catcode`\>=12
以下の点が \cs{jfont} による横組用和文フォントとは異なる:
\begin{itemize}
\item 明示的に \texttt{vert}, \texttt{vrt2}(のいずれか)の
- 有効・無効を指定した場合を除き,自動的に OpenType feature~\texttt{vrt2} の有効化が
+ 有効・無効を指定した場合を除き,自動的に OpenType機能 \texttt{vrt2} の有効化が
指定されたものとみなされる
\footnote{もしフォントが\texttt{vrt2}を定義していなかった場合,代わりに
\texttt{vert}を用いる.}.
\item[\cs{ltj@stdyokojfm}]
%<en>The default JFM for horizontal direction.
%<ja>標準で用いる横組用JFM.
- \item[\cs{ltj@stdyokojfm}]
+ \item[\cs{ltj@stdtatejfm}]
%<en>The default JFM for vertical direction.
%<ja>標準で用いる縦組用JFM.
\end{cslist}
ので注意してほしい.
\emph{\texttt{psft} プリフィックスの下では
-\texttt{+jp90} などのOpenType font featureの効力はない.
+\texttt{+jp90} などのOpenType機能の効力はない.
非埋込フォントをPDFに使用すると,実際にどのようなフォントが
表示に用いられるか予測できないからである.}\
\texttt{extend} と \texttt{slant} 指定は単なる変形のため
\item JFMによれば,この「ヒ」のグリフの文字クラスは2000である.
\item 以上により文字クラス2000とみなされるため,結果として「ヒ」の幅は半角だと認識される.
\end{enumerate}
-この例は,\emph{文字クラスの決定はfont featureの適用によるグリフ置換の結果に基づく}ことを
+この例は,\emph{文字クラスの決定はOpenType機能の適用によるグリフ置換の結果に基づく}ことを
示している.
%</ja>
%<ja>\paragraph{仮想的な文字}
%<en>\paragraph{Imaginary characters}
%<*en>
-As described before, you can specify several \emph{imaginary characters} in
+As described before, you can specify several ``imaginary characters'' in
\texttt{chars} field. The most of these characters are regarded as the
characters of class 0 in \pTeX.
As a result, \LuaTeX-ja can control typesetting finer than \pTeX.
%%<ja>JFMやサイズが異なる2つの\textbf{JAchar}の間の境界として用いられる.
\item['boxbdd']
-%<en>The beginning/ending of a hbox, and the beginning of a noindented (i.e., began by \cs{noindent}) paragraph.
-%<ja>hboxの先頭と末尾,及びインデントされていない(\cs{noindent} で開始された)段落の先頭を表す.
+%<*en>
+The beginning/ending of a hbox, and the beginning of a noindented (i.e., began by \cs{noindent}) paragraph.
+If a hbox~$b$ begins (resp.~ends) a glue or kern between this ``charater'' and a \textbf{JAchar},
+\textbf{JAglue} won't be inserted before(resp.~after) the hbox~$b$.
+\Param{kanjiskip}~and~\Param{xkanjiskip} around a hbox.
+%</en>
+%<*ja>
+hboxの先頭と末尾,及びインデントされていない(\cs{noindent} で開始された)段落の先頭を表す.
+この「文字」との間に設定したグルー・カーンがボックス$b$の先頭(もしくは末尾)に来た場合,
+ そのボックス$b$の直前(もしくは直後)には和文処理グルーは入らない.
+%</ja>
\item['parbdd']
%<en>The beginning of an (indented) paragraph.
JFM中の同名のフィールドの値がそのまま使われている.
\end{description}
\end{itemize}
-\item[ascent\textrm{, }descent]
- 縦組時に個々のグリフを90度回転させる場合,そのグリフは(実際の高さ・深さにかかわらず)
- 便宜的に高さ\texttt{ascent},深さ\texttt{descent}を持つものだと想定して回転させる.
- この仕様は\Pkg{luaotfload}がOpenTypeフォントのVORGテーブルを読まないための暫定的なものである.
\item[chars\_cbcache]
文字クラス決定の処理で.キャッシュとして使われる.
\end{cslist}
もし現在の和文フォントがAdobe-Japan1,~Adobe-GB1, Adobe-CNS1, Adobe-Korea1,~Adobe-KRの
いずれのCID-keyed fontでもない場合,<number>はAdobe-Japan1のCID番号であると解釈し
「適切なグリフ」\footnote{%
- 例えばフォントにIVDコレクションAdobe-Japan1が含まれていれば,その情報を用いて
+ 特に縦組用グリフのCID番号を指定した場合は(LuaTeX-ja 20190504.0以降では若干改良されているが)
+ 意図しない結果になる可能性が高い.
+ なお,バージョン20190708.0以降では,CIDからグリフへの選択にグリフ名の情報を使用していない.
+ また,フォントにIVDコレクションAdobe-Japan1が含まれていれば,その情報を用いて
グリフを選択する.
}を出力する.
%</ja>
\item 常に\textbf{JAchar}として扱われる.
%</ja>
%<*en>
-\item Processing codes for supporting OpenType features (\textit{e.g.},
+\item In vertical direction, \texttt{vert}/\texttt{vrt2} feature are automatically applied to
+ characters by \cs{UTF}, regardless these feature are not activated in current Japanese font.
+%</en>
+%<*ja>
+\item 縦組時には,現在の縦組用和文フォントで \texttt{vert}/\texttt{vrt2} 機能が
+ 有効か無効かを問わず,\cs{UTF} で出力される文字にはこれらのOpenType機能が働いた字形になる.
+%</ja>
+%<*en>
+\item Processing codes for supporting other OpenType features (for example,
glyph replacement and kerning) by the \Pkg{luaotfload} package
is not performed to these characters.
%</en>
%<*ja>
-\item OpenType機能(例えばグリフ置換やカーニング)をサポートするための
+\item その他のOpenType機能(例えばグリフ置換やカーニング)をサポートするための
\Pkg{luaotfload}パッケージのコードはこれらの文字には働かない.
%</ja>
\end{itemize}
\item \cs{prevdepth}の値とその$h'$の深さの値が一致している
\end{itemize}
場合にのみ発動するようにしている.
- \item 行の中身に水平ボックス$h''$が入ってくることもあるが,その場合は$h''$の中身までは参照しない.
+ \item 行の中身に水平ボックス$h''$が入ってくることもあるが,その場合は$h''$の中身の高さ・深さまでは
+ 参照せず,あくまでも$h''$自身の高さ・深さのみを参照する.
参照するようにしてしまうと,\cs{smash}など手動で行った高さ・深さ調整の意味がなくなってしまうからである.
\end{itemize}
\begin{description}
\item[\texttt{lineend=[false,true,extended]}]
行末文字の位置調整の機能を無効化(\texttt{false}),「行分割後に調整」の形で有効化(\texttt{true}),
- 「行分割の仮定で考慮」の形で有効化(\texttt{extended})する.
+ 「行分割の過程で考慮」の形で有効化(\texttt{extended})する.
\item[\texttt{priority=[false,true]}]
優先順位付きの行長調整を無効化(\texttt{false}),または有効化(\texttt{true}).
\item[\texttt{profile=[false,true]}]
%<*ja>
横組・縦組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる\footnote{%
\cs{rubyfamily}とはいいつつ,実際にはフォントファミリを切り替えるのではない(通常では
- font featureの追加,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替え).
+ OpenType機能の有効化であり,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替える).
}.
%</ja>
\item[bold]
%</ja>
%<*ja>
-\section{IVS対応}
-\verb+luatexja.otf.enable_ivs()+ を実行し,IVS対応を有効にした状態では,
-\verb+pre_linebreak_filter+ や \verb+hpack_filter+ コールバックには
-次の4つが順に実行される状態となっている:
-\begin{description}
-\item[\tt ltj.do\_ivs] \textit{glyph\_node}~$p$の直後に,異体字セレクタ(を表す\textit{glyph\_node})
-が連続した場合に,$p$のフォントに対応したが持つ「異体字情報」に従って出力するグリフを変える.
-
-しかし,単に$p.\textit{char}$を変更するだけでは,後から
-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による置換が,
-OpenType機能の適用で上書きされてしまうのを防止するためである.
-\item[\tt ltj.main\_process] \textbf{JAglue}の挿入処理(\ref{sec-jfmglue}章)と,
-JFMの指定に従って各\textbf{JAchar}の「寸法を補正」することを行う.
-\end{description}
-
-問題は各フォントの持っているIVS情報をどのように取得するか,である.
-\Pkg{luaotfload} はフォント番号<font\_number>の情報を\
-\texttt{fonts.hashes.identifiers[<font\_number>]} 以下に格納している.
-しかし,OpenTypeフォントのIVS情報は格納されていないようである%
-\footnote{TrueTypeフォントに関しては,
-\begin{center}
-\texttt{fonts.hashes.idenfiers[<font\_number>]%
- .resources.variants[<selector>][<base\_char>]}
-\end{center}
-に,<base\_char>番の文字の後に異体字セレクタ<selector>が続いた場合に
-出力すべきグリフが書かれてある.}.
-%例えば,小塚明朝Pr6N~Rでは,
-
-一方,\LuaTeX 内部の \texttt{fontloader} の返すテーブルには
-OpenTypeフォントでもTrueTypeフォントでもIVS情報が格納されている.
-具体的には……
-
-そのため,\LuaTeX-jaのIVS対応においては,\LuaTeX 内部の\
-\texttt{fontloader} を直接用いることで,フォントのIVS情報を取得している.
-20140114.0以降でキャッシュを用いるようにした要因はここにあり,
-\texttt{fontloader} の呼び出しでかなり時間を消費することから,
-%%% to_table を使わなくしたことで,メモリ使用量は減った
-IVS情報をキャッシュに保存することで2回目以降の実行時間を節約している.
-%</ja>
-
-
-%<*ja>
\section{複数フォントの「合成」(未完)}
\section{\LuaTeX-jaにおけるキャッシュ}
\Pkg{luaotfload}パッケージが,各TrueType・OpenTypeフォントの情報を
\pageref{para-cid}ページで述べたように,\texttt{cid}キーを使って
非埋め込みの中国語・韓国語フォントを定義する場合,同様のキャッシュが生成される.
キャッシュの名称,必要となるCMapについては\autoref{tab:cid-cache}を参照して欲しい.
-
-\item[extra\_***.lua]
-フォント``\texttt{***}''における異体字セレクタの情報,縦組用字形への変換テーブル,そして
-縦組時における幅を格納している.構造は以下の通り:
%</ja>
%<*en>
\subsection{Use of cache}
if you specified \texttt{cid} key in \cs{jfont}
to use other CID-keyed non-embedded fonts for Chinese or Korean,
as in Page~\pageref{para-cid}.
-
-\item[extra\_***.lua]
-This file stores the table which stores the following.
-\begin{itemize}
- \item unicode variants in a font ``\texttt{***}''
- \item vertical width of glyphs, if it is not equal to the sum of
-the height of ascender and the depth of descender
- \item vertical variants
-\end{itemize}
-The following is the structure of the that table.
%</en>
\begin{table}[!tb]
\end{tabular}
\end{table}
-\begin{lstlisting}
-return {
- {
- [10955]={ -- U+2ACB "Subset Of Above Not Equal To"
- [65024]=983879, -- <2ACB FE00>
- ["vwidth"]=0.98, -- vertical width
- },
- [37001]={ -- U+9089 "邉"
- [0]=37001, -- <9089 E0100>
- 991049, -- <9089 E0101>
- ...
- ["vform"]=995025, -- vertical variant
- },
- ...
- ["unicodes"]={
- ["aj102.pe.vert"]=984163, -- glyph name to unicode
- ...
- }
- },
- ["chksum"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", -- checksum of the fontfile
- ["version"]=11, -- version of the cache
-}
-\end{lstlisting}
%<*ja>
\item[ltj-jisx0208.\{luc|lub\}]
\LuaTeX-ja配布中の\texttt{ltj-jisx0208.lua}をバイナリ化したものである.
}
\]
のようになる.
+
+\subsection{縦組用字形の取得}
+縦組時には,「\hbox to \zw{、}」(\texttt{U+3001})から「\ltjjachar"FE11」(\texttt{U+FE11})%"
+のように縦組用字形への置き換えに関係する処理は,以下のようになっている.
+ \begin{itemize}
+ \item 各縦組用和文フォントは読み込み時に以下の属性が設定される:
+ \begin{description}
+ \item[\textit{vert\_activated}] 真となるのは,
+ 明示的に \texttt{-vert} も \texttt{-vrt2} のいずれも指定されていないちょうどその時.
+ \item[\textit{auto\_enable\_vrt2}] 真となるのは,
+ \texttt{vert}, \texttt{vrt2}のいずれについても有効・無効が指定されていないちょうどその時.
+ \end{description}
+ \textit{vert\_activated}については\texttt{luatexja.define\_jfont}コールバックで渡される引数
+ \texttt{jfont\_info}から取得可能である.
+
+ \item \textit{auto\_enable\_vrt2}が真の場合は,現在のscript tagとlanguage system identifierの値で
+ \texttt{vrt2}機能が利用可能か調べる.利用可能ならば\texttt{vrt2}を,そうでなければ
+ \texttt{vert}を有効化する.
+ \item また,各和文フォント読み込み時には,
+ 「OpenType機能による置換以前に行う縦組形への置換」を格納したテーブル\textit{vform}も作成する.
+ \begin{enumerate}
+ \item \LuaTeX-jaには,「\hbox to \zw{、}」(\texttt{U+3001})→「\ltjjachar"FE11」(\texttt{U+FE11})といった
+ いくつかの置換がハードコードされている.そのような各置換$i\longmapsto v$に対して,
+ \begin{quote}
+ 置換元$i$が(あるscript, languageにおける)\texttt{vert}では置換対象でなく,
+ かつ置換先$v$がフォント内に存在する文字コードである
+ \end{quote}
+ ならば,$i\longmapsto v$を\textit{vform}に登録する.
+ \item \ref{ssec:tfont}節にある\texttt{jpotf}が指定された場合,
+ ……
+ \item もし\texttt{vert}も\texttt{vrt2}も現在のscript, languageでは有効にできない場合,
+ どこかのscript, languageにおける\texttt{vert}で定義されている
+ 置換$i\longmapsto v$をすべて\textit{vform}に登録する.
+ \end{enumerate}
+
+ あとで説明するように,\textit{vform}は\textit{vert\_activated}が真であるような縦組用和文フォントでしか
+ 利用されない.
+
+ \item 「現在の水平リスト」内の\textbf{JAchar}を(欧文フォントから)和文フォントへ置き換える処理において,
+ その時点での組方向が縦組であり,かつ処理対象の各ノードの縦組用フォントで
+ \textit{vert\_activated}が真である場合,\textit{vform}に従いグリフが置き換えられる.
+
+ \Pkg{luaotfload}が行う,OpenType機能に沿ったグリフ置換はこの後の処理となる.G
+ \end{itemize}
+
%</ja>
\newpage