OSDN Git Service

wip
[luatex-ja/luatexja.git] / doc / luatexja.dtx
index 420f35a..054470b 100644 (file)
 %%%%%%%% 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}
@@ -650,11 +651,11 @@ and \emph{Japanese fonts} for fonts used in \textbf{JAchar}.
 %<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}
@@ -813,28 +814,28 @@ For changes from \pTeX, see Subsection~\ref{ssec:chgptex}.
 %</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%
@@ -1141,7 +1142,7 @@ Okumura), namely, \Pkg{ltjclasses}\footnote{%
   \texttt{ltjsarticle.cls},~\texttt{ltjsbook.cls}, \texttt{ltjsreport.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,
+However, \LuaTeX\ does not support \cs{mag} in PDF~output,
 so \Pkg{ltjsclasses} uses the \texttt{nomag*} option\footnote{Same effect as 
   the \Pkg{BXjscls} classes (by Takayuki Yato) and \Pkg{jsclasses}.
   However, these classes uses only \TeX\ code, but \Pkg{ltjsclasses} uses Lua code.}
@@ -1163,7 +1164,7 @@ so \Pkg{ltjsclasses} uses the \texttt{nomag*} option\footnote{Same effect as
 がそれぞれ\LuaTeX-ja標準で用意されている.
 
 元々の\Pkg{jsclasses}では本文のフォントサイズを設定するのに\cs{mag}プリミティブが使われていたが,
-\LuaTeX~beta-0.87.0以降ではPDF出力時の\cs{mag}のサポートが廃止された.
+\LuaTeX ではPDF出力時の\cs{mag}のサポートが廃止された.
 そのため,\Pkg{ltjsclasses}では\texttt{nomag*}オプション
 \footnote{\Pkg{jsclasses}や,八登崇之氏による\Pkg{BXjscls}クラスにおける同名のオプションと
   同じ.上記クラスは\TeX コードのみで実装しているが,\Pkg{ltjsclasses}ではLuaコードも用いている.}が標準で
@@ -1771,7 +1772,7 @@ For example, the code below is just the default setting of \LuaTeX-ja, and
 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>
@@ -1780,11 +1781,11 @@ it sets
 例えば,以下は\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.
@@ -1818,7 +1819,7 @@ determined from the following data:
 これらは以下のデータに基づいて決定している.
 %</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}.
@@ -1844,52 +1845,57 @@ these eight ranges belongs to the character range~217.
 %</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.
@@ -1907,11 +1913,11 @@ This range consists of the following Unicode ranges, \emph{except characters in
 \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]
@@ -1921,7 +1927,6 @@ This range consists of the following Unicode ranges, \emph{except characters in
 \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\\
@@ -1942,23 +1947,77 @@ This range consists of the following Unicode ranges, \emph{except characters in
 \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 \sutoref{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.
@@ -1998,11 +2057,11 @@ This range consists of the following Unicode ranges, \emph{except characters in
 \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>
@@ -2410,7 +2469,7 @@ However, the penalty inserted after it is 10 which is the \Param{postbreakpenalt
 ``ア'', not 20.
 %</en>
 %<*ja>
-\subsection{禁則処理関連パラメータとOpenTypeのfont feature}
+\subsection{禁則処理関連パラメータとOpenType機能}
 禁則処理や \Param{kanjiskip}, \Param{xkanjiskip} の挿入に関連したパラメータのうち
 \begin{quote}
  \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty},
@@ -2419,8 +2478,8 @@ However, the penalty inserted after it is 10 which is the \Param{postbreakpenalt
 は,文字コードごとに設定する量である.
 
 \Pkg{fontspec}パッケージを使う(\ref{ssec:fontspec}節)場合など,
-各種のOpenType featureを適用することもあると思うが,前段落に述べたパラメータ類は,
-\emph{OpenType featureの適用前の文字コードによって適用される.}
+各種のOpenType機能を適用することもあると思うが,前段落に述べたパラメータ類は,
+\emph{OpenType機能の適用前の文字コードによって適用される.}
 例えば,以下の例において10行目の「ア」は,\verb+hwid+ featureの適用により半角カタカナの「ア」
 に置き換わる.しかし,その直後に挿入される \Param{postbreakpenalty}は,置換前の「ア」に対する値10である.
 %</ja>
@@ -3561,7 +3620,7 @@ NFSS2用の命令(\ref{ssec:chgfnt}節,\ref{ssec:nfsspat}節)における
 
 %<*ja>
 \paragraph{\texttt{extend}と\texttt{slant}}
-OpenType font featureと見かけ上同じような形式で指定できるものに,
+OpenType機能と見かけ上同じような形式で指定できるものに,
 \begin{description}
 \item[\texttt{extend=}<extend>] 横方向に<extend>倍拡大する.
 \item[\texttt{slant=}<slant>] <slant>に指定された割合だけ傾ける.
@@ -3646,7 +3705,7 @@ This functionality is disabled by \texttt{-ltjksp} specification.
 
 %<en>\subsection{\cs{tfont}}
 %<ja>\subsection{\cs{tfont} 命令}
-
+\label{ssec:tfont}
 
 \begin{comment}
   {\catcode`\<=12\catcode`\>=12
@@ -3729,6 +3788,23 @@ A font defined by~\cs{tfont} differs the following points from that by~\cs{jfont
 \item[\tt jfm-tmin.lua] A counterpart for \verb+tmin10.tfm+, which is one
   of the default Japanese font metric shipped with \pTeX.
 \end{description}
+\begin{figure}[!tb]
+\begin{LTXexample}[pos=b]
+\jfont\X=[KozMinPr6N-Regular.otf]:jfm=ujis
+\tfont\U=[KozMinPr6N-Regular.otf]:jfm=ujisv
+\tfont\V=[KozMinPr6N-Regular.otf]:jfm=ujisv;jpotf
+\def\TEST#1#2{\leavevmode\hbox{#1#2\string#2 “引用,と句読点.”}}
+\ttfamily\centering\TEST\yoko\X \quad \TEST\tate\U \quad \TEST\tate\V
+\end{LTXexample}
+\caption{\texttt{jpotf} ``feature''}
+\label{fig:jpotf}
+\end{figure}
+  
+ \item If \texttt{vert}~and/or~\texttt{vrt2} features are activated,
+  one can specify \texttt{jpotf} to additional substitutions.
+  By default, it substitutes ideographic comma/period for fullwidth comma/period,
+  and double prime quotation marks for double quotation marks
+  (See~\autoref{fig:jpotf}).
 \end{itemize}
 %</en>
 %<*ja>
@@ -3738,7 +3814,7 @@ A font defined by~\cs{tfont} differs the following points from that by~\cs{jfont
 以下の点が \cs{jfont} による横組用和文フォントとは異なる:
 \begin{itemize}
  \item 明示的に \texttt{vert}, \texttt{vrt2}(のいずれか)の
-  有効・無効を指定した場合を除き,自動的に OpenType feature~\texttt{vrt2} の有効化が
+  有効・無効を指定した場合を除き,自動的に OpenType機能 \texttt{vrt2} の有効化が
   指定されたものとみなされる
  \footnote{もしフォントが\texttt{vrt2}を定義していなかった場合,代わりに
  \texttt{vert}を用いる.}.
@@ -3774,6 +3850,43 @@ A font defined by~\cs{tfont} differs the following points from that by~\cs{jfont
   である \verb+tmin10.tfm+ に相当し,\texttt{min10.tfm} と同様に
   「っ」など一部の文字幅が狭められている.
 \end{description}
+
+\begin{figure}[!tb]
+\begin{LTXexample}[pos=b]
+\jfont\X=[KozMinPr6N-Regular.otf]:jfm=ujis
+\tfont\U=[KozMinPr6N-Regular.otf]:jfm=ujisv
+\tfont\V=[KozMinPr6N-Regular.otf]:jfm=ujisv;jpotf
+\def\TEST#1#2{\leavevmode\hbox{#1#2\string#2 “引用,と句読点.”}}
+\ttfamily\centering\TEST\yoko\X \quad \TEST\tate\U \quad \TEST\tate\V
+\end{LTXexample}
+\caption{\texttt{jpotf} ``feature''}
+\label{fig:jpotf}
+\end{figure}
+  
+ \item \texttt{vert}, \texttt{vrt2}の少なくとも片方が(明示的・自動的を問わず)
+  有効になっていた場合,さらに\texttt{jpotf}を指定することで
+  「通常では行わない縦組用字形への変換」を行うことができる.
+
+  標準では,この「変換」は全角のコンマ・ピリオドを句読点に,
+  また全角の二重引用符をダブルミニュートへ置き換える
+  \footnote{%
+       \texttt{jpotf}という名前にしたのは,
+       OTFパッケージの縦組用和文TFMでほぼ同じの処理(そちらではさらに一重引用符を
+       「シングルミニュート」に置換する機能もあった)を行っていたことに由来する.
+  }.\autoref{fig:jpotf}を参照.
+
+  ユーザ側で「変換」をカスタマイズしたい場合,
+  \verb+luatexja.jfont.register_vert_replace+ 関数に変更内容を記したテーブルを渡す.
+  例えば縦組中では「あ」を「い」に置換し,また「,」は(「、」に置換せず)「,」のままに
+  したい場合は次のようにすれば良い.
+\begin{lstlisting}
+\directlua{luatexja.jfont.register_vert_replace{
+  ['あ']='い', [',']=false,
+}}
+\end{lstlisting}
+  \verb+luatexja.jfont.register_vert_replace+ による変更はこの関数の\emph{実行後}に定義される
+  フォントについてのみ有効である.
+  
 \end{itemize}
 
 なお,\pTeX では,\cs{font},~\cs{jfont},~\cs{tfont}のどれでも欧文フォント・横組用和文フォン
@@ -3802,7 +3915,7 @@ default Japanese fonts and JFMs for them:
   \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}
@@ -3881,7 +3994,7 @@ Identity-Hとなり,PDFの標準規格ISO32000-1:2008~(\cite{pdfstd})に非準
 ので注意してほしい.
 
 \emph{\texttt{psft} プリフィックスの下では
-\texttt{+jp90} などのOpenType font featureの効力はない.
+\texttt{+jp90} などのOpenType機能の効力はない.
 非埋込フォントをPDFに使用すると,実際にどのようなフォントが
 表示に用いられるか予測できないからである.}\
 \texttt{extend} と \texttt{slant} 指定は単なる変形のため
@@ -3907,11 +4020,12 @@ for Chinese or Korean typesetting.
 \texttt{cid}キーに値を指定すると,そのCIDを持った非埋込フォントを定義することができる:
 %</ja>
 \begin{lstlisting}[numbers=left]
-\jfont\testJ={psft:Ryumin-Light:cid=Adobe-Japan1-7;jfm=jis}     % Japanese
-\jfont\testD={psft:Ryumin-Light:jfm=jis}                        % default value is Adobe-Japan1-7
-\jfont\testC={psft:AdobeMingStd-Light:cid=Adobe-CNS1-7;jfm=jis} % Traditional Chinese
-\jfont\testG={psft:SimSun:cid=Adobe-GB1-5;jfm=jis}              % Simplified Chinese
-\jfont\testK={psft:Batang:cid=Adobe-Korea1-2;jfm=jis}           % Korean
+\jfont\testJ={psft:Ryumin-Light:cid=Adobe-Japan1-7;jfm=jis}    % Japanese
+\jfont\testD={psft:Ryumin-Light:jfm=jis}                       % default: Adobe-Japan1-7
+\jfont\testC={psft:AdobeMingStd-Light:cid=Adobe-CNS1-7;jfm=jis}% Traditional Chinese
+\jfont\testG={psft:SimSun:cid=Adobe-GB1-5;jfm=jis}             % Simplified Chinese
+\jfont\testK={psft:Batang:cid=Adobe-Korea1-2;jfm=jis}          % Korean
+\jfont\testKR={psft:SourceHanSerifAKR9:cid=Adobe-KR-9;jfm=jis} % Korean
 \end{lstlisting}
 %<*en>
 Note that the code above specifies \texttt{jfm-jis.lua}, which is for Japanese fonts,
@@ -3923,11 +4037,11 @@ as JFM for Chinese and Korean fonts.
 %</ja>
 
 %<*en>
-At present, \LuaTeX-ja supports only 4 values written in the sample code above.
+At present, \LuaTeX-ja supports only 5 values written in the sample code above.
 Specifying other values, e.g.,
 %</en>
 %<*ja>
-今のところ,\LuaTeX-jaは上のサンプルコード中に書いた4つの値しかサポートしていない.
+今のところ,\LuaTeX-jaは上のサンプルコード中に書いた5つの値しかサポートしていない.
 %</ja>
 \begin{lstlisting}
 \jfont\test={psft:Ryumin-Light:cid=Adobe-Japan2;jfm=jis}
@@ -4595,7 +4709,7 @@ applying font features by \Pkg{luaotfload}}.
 \item JFMによれば,この「ヒ」のグリフの文字クラスは2000である.
 \item 以上により文字クラス2000とみなされるため,結果として「ヒ」の幅は半角だと認識される.
 \end{enumerate}
-この例は,\emph{文字クラスの決定はfont featureの適用によるグリフ置換の結果に基づく}ことを
+この例は,\emph{文字クラスの決定はOpenType機能の適用によるグリフ置換の結果に基づく}ことを
 示している.
 %</ja>
 
@@ -4626,7 +4740,7 @@ as follows:
 %<*ja>
 ここで,句点「。」(\texttt{U+3002})の文字クラスは,以下のようにして決まる.
 \begin{enumerate}
-\item \Pkg{luaotfload} によって縦組用句点のグリフに置き換わる.
+\item \Pkg{luaotfload}によって縦組用句点のグリフに置き換わる.
 \item 置換後のグリフは \texttt{U+FE12} であり,JFMに従えば文字クラスは\emph{0}と判定される.
 \item この場合,置換前の横組用句点のグリフによって文字クラスを判定する.
 \item 結果として,上の出力例中の句点の文字クラスは2000となる.
@@ -4637,7 +4751,7 @@ as follows:
 %<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.
@@ -4656,8 +4770,17 @@ The following is the list of imaginary characters:
 %%<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.
@@ -4952,10 +5075,10 @@ $i$,~$j\in \omega$に対して,\texttt{char\_type[$i$][$j$]} は
 \begin{itemize}
   \item 間に入るものがカーンであれば,この値は\
 \texttt{[$j$]=\{[1]=<kern\_node>, ratio=<ratio>\}} であり,
-<kern\_node>ã\81¯ã\82«ã\83¼ã\83³ã\82\92表ã\81\99ã\83\8eã\83¼ã\83\89ã\81\9dã\81®ã\82\82ã\81®ã\81§ã\81\82ã\82\8b\footnote{%
-バージョン20150420.0以降ではノードのアクセス手法にdirect access
-      modelを用いている.そのため,例えば\LuaTeX\ beta-0.78.2では,単なる自然数のようにし
-      か見えないことに注意
+<kern\_node>はカーンを表すノードである\footnote{%
+      バージョン20150420.0以降ではノードのアクセス手法にdirect access
+      modelを用いているため,ノードそのものを表すユーザーデータではなく,
+      内部で参照のために使われる添字(整数)である
 }.
   \item グルーであれば,この値は以下のキーを持つテーブルである.
   \begin{description}
@@ -4971,7 +5094,9 @@ $i$,~$j\in \omega$に対して,\texttt{char\_type[$i$][$j$]} は
   \end{description}
 \end{itemize}
 \item[ascent\textrm{, }descent]
-……
+  縦組時に個々のグリフを90度回転させる場合,そのグリフは(実際の高さ・深さにかかわらず)
+  便宜的に高さ\texttt{ascent},深さ\texttt{descent}を持つものだと想定して回転させる.
+  この仕様は\Pkg{luaotfload}がOpenTypeフォントのVORGテーブルを読まないための暫定的なものである.
 \item[chars\_cbcache]
 文字クラス決定の処理で.キャッシュとして使われる.
 \end{cslist}
@@ -6878,7 +7003,10 @@ CID番号が<number>の文字を出力する.
 もし現在の和文フォントが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>
@@ -6928,12 +7056,20 @@ ordinary characters in the following points:
 \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}
@@ -7106,7 +7242,8 @@ for making the difference obvious.}
          \item \cs{prevdepth}の値とその$h'$の深さの値が一致している
        \end{itemize}
        場合にのみ発動するようにしている.
-       \item 行の中身に水平ボックス$h''$が入ってくることもあるが,その場合は$h''$の中身までは参照しない.
+       \item 行の中身に水平ボックス$h''$が入ってくることもあるが,その場合は$h''$の中身の高さ・深さまでは
+       参照せず,あくまでも$h''$自身の高さ・深さのみを参照する.
        参照するようにしてしまうと,\cs{smash}など手動で行った高さ・深さ調整の意味がなくなってしまうからである.
   \end{itemize}
   
@@ -7191,7 +7328,7 @@ for making the difference obvious.}
 \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]}]
@@ -7746,7 +7883,7 @@ characters designed for ruby.
 %<*ja>
 横組・縦組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる\footnote{%
   \cs{rubyfamily}とはいいつつ,実際にはフォントファミリを切り替えるのではない(通常では
-  font featureの追加,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替え).
+  OpenType機能の有効化であり,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替える).
 }.
 %</ja>
 \item[bold]
@@ -10667,53 +10804,6 @@ $|\textit{total}|$の分だけが,行中のグルーの伸び量,あるい
 %</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フォントの情報を
@@ -11142,6 +11232,51 @@ direction~whatsit内部のノードリストに,\textit{dir\_box}として格
  }
 \]
 のようになる.
+
+\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