texlive[60158] Master/texmf-dist/doc/ptex/ptex-manual: ptex-manual

commits+karl at tug.org commits+karl at tug.org
Wed Aug 4 23:13:13 CEST 2021


Revision: 60158
          http://tug.org/svn/texlive?view=revision&revision=60158
Author:   karl
Date:     2021-08-04 23:13:13 +0200 (Wed, 04 Aug 2021)
Log Message:
-----------
ptex-manual (4aug21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/LICENSE
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/README.md
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.pdf
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.tex
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/jfm.pdf
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.pdf
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.pdf
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.sty
    trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/LICENSE
===================================================================
--- trunk/Master/texmf-dist/doc/ptex/ptex-manual/LICENSE	2021-08-04 01:42:52 UTC (rev 60157)
+++ trunk/Master/texmf-dist/doc/ptex/ptex-manual/LICENSE	2021-08-04 21:13:13 UTC (rev 60158)
@@ -1,4 +1,4 @@
-Copyright (C) 2017-2020 Japanese TeX Development Community
+Copyright (C) 2017-2021 Japanese TeX Development Community
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/ptex/ptex-manual/README.md	2021-08-04 01:42:52 UTC (rev 60157)
+++ trunk/Master/texmf-dist/doc/ptex/ptex-manual/README.md	2021-08-04 21:13:13 UTC (rev 60158)
@@ -36,6 +36,6 @@
 
 ## Release Date
 
-2020-12-13
+2021-08-04
 
 Japanese TeX Development Community

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.tex	2021-08-04 01:42:52 UTC (rev 60157)
+++ trunk/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.tex	2021-08-04 21:13:13 UTC (rev 60158)
@@ -316,7 +316,7 @@
 
 \section{\OMEGA 由来の機能(旧名称:\texttt{FAM256}パッチ)}
 \epTeX には,掲示板\TeX\ Q\ \&\ Aの山本氏の書き込み
-\cite{yamamoto}に刺激されて作った,本節でに説明する\OMEGA の一部
+\cite{yamamoto}に刺激されて作った,本節で説明する\OMEGA の一部
 機能を使えるようにするパッチが存在する.
 これは\texttt{FAM256}パッチと呼ばれ,今までは
 「\epTeX 本体とは一応別扱いで,\epTeX の配布,及び
@@ -483,7 +483,7 @@
 日本の\TeX ユーザ,および\LaTeX3~team%
 \footnote{%
   現在ではさらに状況が動き,
-  2021年以降は,\LaTeXe 自体が本節で述べた(\.{readpapersizespecial}以外の)プリミティブを
+  2021年以降は,\LaTeXe 自体が本節で述べたプリミティブを
   要求する予定である(\cite{l2e31}).
 }などからあり,
 ほとんど\hologo{pdfTeX}における実装をそのまま真似する形で実装している.
@@ -519,37 +519,10 @@
   後で述べる\.{pdflastxpos}, \.{pdflastypos}による出力位置の取得
   の際の原点位置を設定するためだけに使われ,初期値は0\,ptである
   (\hologo{pdfTeX}のdviモードと同じ挙動).
+  ただし,\epTeX では特定書式のpapersize specialを読み取って原点位置を設定する
+  機能を追加している(第\ref{readpss}節を参照).
 
- \csitem[\.{readpapersizespecial}(integer,\emph{\epTeX 独自拡張で,\hologo{pdfTeX}にはない})]
-  \pTeX 系列では,
-  用紙サイズの指定には伝統的にpapersize specialが利用されてきた.それを考慮して,
-  本内部整数\.{readpapersizespecial}(既定値は1)が正の場合は
-  papersize specialがdvi中に書き出される時,\epTeX にはその内容を解釈して
-  自動的に\.{pdfpagewidth}, \.{pdfpageheight}の値を設定する
-  \footnote{%
-  papersize specialで指定した長さは常に\texttt{true}付きで解釈するのが慣習と
-  なっているが,\epTeX~180901より前では\texttt{true}なしの寸法として解釈するという
-  バグが存在した.}%
-  \footnote{%
-  dviwareによって正確な書式は異なるようだが,\epTeX~180901が解釈するpapersize specialは
-  以下の文法に沿ったものになっている:
-\def\<#1>{\langle\mbox{#1}\rangle}
-\begin{align*}
-  \<special> &\longrightarrow \texttt{papersize=}\<length>\texttt{,}\<length>\\
-  \<length>  &\longrightarrow \<decimal>
-    \<optional~\texttt{true}>\<physical unit>\\
-  \<decimal> &\longrightarrow \texttt{.} \mid \<digit>\<decimal> \mid
-    \<decimal>\<digit>
-\end{align*}
-  負の符号や小数点としての「\texttt{,}」,そして一切の空白を許容しないところに
-  注目してほしい.また,\texttt{zw},~\texttt{zh},~\texttt{em},~\texttt{ex}という
-  現在のフォントに依存する単位も使用不可能である.
-  }.
-
-  このプリミティブは\epTeX~180901で追加された.それより前のバージョンでは
-  前段落で述べた機能は常に有効であった.
-
- \csitem[\.{pdflastxpos}, \.{pdflastypos} (read-only integer)]
+ \csitem[\.{pdflastxpos}, \.{pdflastypos} (read-only integer)]\label{pdfsavepos}
   \.{pdfsavepos}\indcs{pdfsavepos}が置かれた場所の,dviにおける出力位置を返す内部整数.
   原点はページの(物理的な意味の)左下隅であり,$y$軸は(物理的な)上方向に向かって増加する.
  \begin{itemize}
@@ -629,8 +602,8 @@
   真,そうでなければ偽となる条件判断文である.
 
   これらのプリミティブは2015/07/15版の\Pkg{expl3}パッケージで使われた
-  (\cite{15715})ことを受けて実装されたものだが,
-  現在では\Pkg{expl3}パッケージではこれらのプリミティブは要求していない.
+  (\cite{15715})ことを受けて実装されたものである.
+% この直後に\Pkg{expl3}パッケージでは使われなくなったが,2021年以降は要求プリミティブとされた.
 
  \csitem[\.{pdfuniformdeviate} <number>, \.{pdfnormaldeviate}]
   \.{pdfuniformdeviate}は,0以上<number>未満の一様分布に従う乱数
@@ -669,10 +642,27 @@
   \texttt{\.{csname}~...~\.{endcsname}}内で評価されたちょうどその時に真となる.
   \LaTeX~2019-10-01で行われる変更(\cite{latex95,tjb83})で必要になったために
   \epTeX~190709で導入された.
+
+%%%
+\ifnum\epTeXversion>210629
+ \csitem[\.{vadjust} \texttt{pre} <vertical mode material>]
+  \.{vadjust}自体は\TeX82に存在し,それが現れた行の
+  \emph{直後}に<vertical mode material>を配置するものである.
+  \hologo{pdfTeX}では,\.{vadjust}にキーワード|pre|を付けると,それが現れた行の
+  \emph{直前}に<vertical mode material>を配置できるように拡張されており,
+  同じ機能が\hologo{LuaTeX}と\hologo{XeTeX}にも存在するので,
+  \epTeX~210701でこれをサポートした.
+
+  発端は,2021年2月にPandocで「ハイパーリンクのターゲットを行の下端ではなく
+  上端にする」という目的で|\vadjust pre|が使われたことである\cite{tjb115}.
+\fi
+%%%
 \end{cslist}
 
 
-\section{バージョン番号}
+\section{\epTeX の追加プリミティブ}
+
+\subsection{バージョン番号}
 \pTeX~p3.8.0に\.{ptexversion}が実装されたのと同時に,\epTeX でもバージョン番号を
 取得する\.{epTeXversion}プリミティブが\epTeX~180121から追加された.
 
@@ -688,7 +678,7 @@
 \end{cslist}
 
 
-\section{\.{lastnodechar}プリミティブ}
+\subsection{\.{lastnodechar}プリミティブ}
 本プリミティブは
 \TeX ユーザの集い2014でリクエストを受けて
 実装された(\cite{pdfse})プリミティブで,\epTeX~141119以降のextended modeで利用可能である.
@@ -794,7 +784,7 @@
 \end{quote}
 と「,」の内部コードが取得される.
 
-\section{\.{lastnodesubtype}プリミティブ}
+\subsection{\.{lastnodesubtype}プリミティブ}
 \cite{tjb28,plt63}などの議論で,「最後のグルーがJFMグルーだけ\.{unskip}する」処理の必要性が
 唱えられてきた.\epTeX にはもともと最後のノードの種別を返す\.{lastnodetype}プリミティブが
 あったが,これでは最後のノードがグルーであるかしかわからない.
@@ -807,6 +797,12 @@
   \begin{itemize}
     \item 「最後のノード」が文字ノードのときは0が返る.
     \item 現在構築中のリストが空のときは$-1$が返る.
+%%%
+\ifnum\epTeXversion>210629
+    \item \epTeX~210701以降では,数式内のノードについてはsubtype値そのままではほとんど意味がないので,
+    次ページの表の値を返す.
+\fi
+%%%
   \end{itemize}
 \end{cslist}
 
@@ -864,8 +860,11 @@
 \epTeX 内部で使用しているsubtypeの値をそのまま返すだけであるので,
 具体的な数値は将来変わる恐れがある.そのため,
 \begin{verbatim}
-\ifdefined\ucs\jfont\tenmin=upjisr-h at 9.62216pt
-\else\jfont\tenmin=min10\fi
+\ifnum\jis"2121="3000 %% upTeX check
+  \jfont\tenmin=upjisr-h at 9.62216pt
+\else
+  \jfont\tenmin=min10
+\fi
 \tenmin\char\jis"214B\null\setbox0\lastbox%"
 \global\chardef\pltx at gluetype\lastnodetype
 \global\chardef\pltx at jfmgluesubtype\lastnodesubtype
@@ -884,7 +883,45 @@
 \end{verbatim}
 として定義している.
 
-\section{\.{epTeXinputencoding}プリミティブ}
+%%%
+\ifnum\epTeXversion>210629
+\paragraph{\epTeX~210701以降の注意}
+上でも述べたように,数式内のノードについてはsubtype値はほとんど意味を持たないので,
+これらに対する\.{lastnodesubtype}ではsubtype値でなく以下の値を返すようにした:
+\begin{description}
+  \item[最後のノードが数式内のノード($\.{lastnodetype}=15$)]
+  \begin{multilist}{3}{\hfil\hskip1.5em#:&\quad#\hfil}
+    \item 0&明示的なスタイル指定\footnotemark\cr
+    \item 1&\.{mathchoice}\cr
+    \item 2&\.{mathord}\cr
+    \item 3&\.{mathop}${}+{}$\.{displaylimits}\cr
+    \item 4&\.{mathop}${}+{}$\.{limits}\cr
+    \item 5&\.{mathop}${}+{}$\.{nolimits}\cr
+    \item 6&\.{mathbin}\cr
+    \item 7&\.{mathrel}\cr
+    \item 8&\.{mathopen}\cr
+    \item 9&\.{mathclose}\cr
+    \item 10&\.{mathpunct}\cr
+    \item 11&\.{mathinner}\cr
+    \item 12&\.{radical}\cr
+    %\item 13&分数(\.{over}など)\cr
+    \item 14&\.{underline}\cr
+    \item 15&\.{overline}\cr
+    \item 16&\.{mathaccent}\cr
+    \item 17&\.{vcenter}\cr
+    \item 18&\.{left}\cr
+    \item 19&\.{middle}\cr
+  \end{multilist}
+  \footnotetext{\.{displaystyle}, \.{textstyle}, \.{scriptstyle}, \.{scriptscriptstyle}.}
+  なお,\verb+\left...[\middle]...\right+の直後で\.{lastnodesubtype}を使用しても,
+  \verb+\left...[\middle]...\right+全体が一つの内部数式(\.{mathinner})となるので,
+  \.{right}に「対応する」\.{lastnodesubtype}の値は取得できない.\.{over}プリミティブなどによる分数についても類似の事情がある.
+\end{description}
+\fi
+%%%
+
+
+\subsection{\.{epTeXinputencoding}プリミティブ}
 現在読み込んでいるファイルの文字コードを切り替えるプリミティブであり,
 2016/02/01に阿部紀行さんによって実装された.詳細は実装者の解説記事
 \cite{eptexinputenc}を参照してほしいが,おおまかに述べると以下のようになるだろう.
@@ -902,7 +939,7 @@
 \begin{verbatim}
 \epTeXinputencoding sjis
 \end{verbatim}
-  のように,<encoding>は|{}|で囲まないこと\footnote{\TeX\ Live 2020以降,
+  のように,<encoding>は|{}|で囲まないこと\footnote{\TeX~Live 2020以降,
   \.{input}プリミティブでブレースで囲まれたファイル名指定が可能に
   なった(r53729)ことに付随して,\.{epTeXinputencoding}でもブレースで
   囲んだ<encoding>の指定が可能となった.}.
@@ -918,7 +955,47 @@
   % (\uccode, \lccode は参照しない)
 \end{cslist}
 
-\section{\.{current[x]spacingmode}プリミティブ}
+
+\subsection{用紙の原点位置の設定,\.{readpapersizespecial}プリミティブ}\label{readpss}
+\pTeX 系列では,用紙サイズの指定には伝統的にpapersize specialが利用されてきた.
+それを考慮して,\epTeX では「特定書式のpapersize specialを読み取って
+\.{pdflastxpos}, \.{pdflastypos}(第\ref{pdfsavepos}節を参照)の原点位置を設定する」と
+いう機能を付加している.
+\begin{dangerous}
+  dviwareによって正確な書式は異なるようだが,\epTeX~180901が解釈するpapersize specialは
+  以下の文法に沿ったものになっている\footnote{%
+  papersize specialで指定した長さは常に\texttt{true}付きで解釈するのが慣習と
+  なっているが,\epTeX~180901より前では\texttt{true}なしの寸法として解釈するという
+  バグが存在した.}.
+  なお,\Pkg{jsclasses}の|papersize|オプションや2016年以降の
+  \Pkg{graphics}/\Pkg{color}パッケージのドライバオプションが発行する書式は,これに合致する.
+\def\<#1>{\langle\mbox{#1}\rangle}
+\begin{align*}
+  \<special> &\longrightarrow \texttt{papersize=}\<length>\texttt{,}\<length>\\
+  \<length>  &\longrightarrow \<decimal>
+    \<optional~\texttt{true}>\<physical unit>\\
+  \<decimal> &\longrightarrow \texttt{.} \mid \<digit>\<decimal> \mid
+    \<decimal>\<digit>
+\end{align*}
+  負の符号や小数点としての「\texttt{,}」,そして一切の空白を許容しないところに
+  注目してほしい.また,\texttt{zw},~\texttt{zh},~\texttt{em},~\texttt{ex}という
+  現在のフォントに依存する単位も使用不可能である.
+\end{dangerous}
+
+また,\epTeX~180901以降では\.{readpapersizespecial}プリミティブによって
+本機能の有効・無効を制御できる.
+それより前のバージョンでは,本機能は常に有効であった.
+
+\begin{cslist}
+ \csitem[\.{readpapersizespecial} (integer)]
+  この内部整数の値が正の場合,\epTeX は
+  papersize specialがdvi中に書き出される時にその内容を解釈し,
+  自動的に\.{pdfpagewidth}, \.{pdfpageheight}の値を設定する.
+  \epTeX~180901で追加され,既定値は1である.
+\end{cslist}
+
+
+\subsection{\.{current[x]spacingmode}プリミティブ}
 もともと\pTeX 系列では,\.{kanjiskip},~\.{xkanjiskip}の挿入が有効になっているか
 直接的に知る方法が\.{showmode}プリミティブしかなかった.
 これでは使い勝手が悪いので,
@@ -946,13 +1023,13 @@
 \end{cslist}
 
 
-\section{\.{Uchar}, \.{Ucharcat}プリミティブ}
-\hologo{XeTeX}, \hologo{LuaTeX}には,引数<character code>を文字コードとする
+\section{Unicode \TeX 由来の機能}
+\hologo{XeTeX}, \hologo{LuaTeX}には,文字コード<character code>を引数にとり
 \emph{文字トークン}に展開される「\.{Uchar} <character code>」というプリミティブが存在する
-\footnote{\.{char}は展開不能プリミティブであることに注意.}.
-また,\hologo{XeTeX}には「\.{Ucharcat}~<character code>~<category code>」という,
+\footnote{\.{char}は展開不能プリミティブであることに注意.}.また\hologo{XeTeX}には,
 文字コード・カテゴリーコードがそれぞれ<character code>, <category code>である
-文字トークンを作るプリミティブが存在する\footnote{\hologo{LuaTeX}ではLuaによる代替物がある.}.
+文字トークンを作る「\.{Ucharcat}~<character code>~<category code>」というプリミティブも
+存在する\footnote{\hologo{LuaTeX}ではLuaによる代替物がある.}.
 
 % pTeX の「抜け道」の具体的なコード?
 \pTeX で「和文版\.{Uchar}」に相当することは\TeX~Live 2019以前の\pTeX ではマクロで実現することが可能だが,
@@ -1031,9 +1108,123 @@
 \end{dangerous}
 
 
+\section{\TeX~Liveによる拡張}
+2021年以降の\epTeX/\eupTeX には,\TeX~Liveチームによって
+\hologo{pdfTeX}及び\hologo{XeTeX}と共通の
+クロスエンジンな拡張機能がいくつか追加されている.
+% 実は
+%   * tracingstacklevels.ch (add |\tracingstacklevels| since TL2021)
+%   * partokenname.ch (add |\tracingstacklevels| since TL2022)
+% の change file は e-(u)pTeX のみならず,素の\pTeX にも適用されている.
 
+\subsection{デバッグ機能(\.{tracing...})}
+\begin{cslist}
+ \csitem[\.{tracinglostchars} (integer)]
+  現在のフォント(TFM)に存在しない文字にアクセスしたときのトレース情報を
+  どのように表示するかを決定する内部整数である.
+  \TeX82は,値が正(1以上)の場合に
+\begin{verbatim}
+  Missing character: There is no 文字 in font フォント名!
+\end{verbatim}
+  のメッセージをログファイルに出力する.
+  また\eTeX は,値が2以上の場合に同じメッセージを\.{tracingonline}の値に
+  かかわらずターミナルにも出力する.
+
+  \TeX~Live 2021以降ではさらに,値が3以上の場合にエラーを発生させ,
+  当該文字コードを16進数で表示するように拡張されている.例えば以下のとおり:
+\begin{verbatim}
+  ! Missing character: There is no 文字 ("XX) in font フォント名.
+\end{verbatim}
+
+  なお,\pTeX 系列では「全ての和文フォントには,和文文字コードとして有効な
+  全ての文字が存在する」という扱いであるため,和文文字コードについて
+  このトレース情報が出力されることはない.
+
+ \csitem[\.{tracingstacklevels} (integer)]
+  \.{tracingstacklevels}の値が正,かつ\.{tracingmacros}の値も正の場合,
+  マクロ展開の深さを示すprefixを出力する.例えば,深さ2のときは |~..| が表示される.
+  なお,指定された数値以上の深さについてはマクロ展開のトレースを切り捨てる.
+  \TeX~Live 2021で追加された.
+\end{cslist}
+
+%%%
+\ifdefined\partokenname %% 2021-07-25
+\subsection{parトークンの制御}
+\TeX82では\.{par}という名称の制御綴は特別な役割を持っている.
+\begin{itemize}
+  \item 以下の場合には自動的に\.{par}が挿入される:
+    \begin{itemize}
+      \item 入力中の空行(2行連続で空行があった場合は2回\.{par}が発行される)
+      \item 水平モード中で\TeX が垂直モード用の命令(\.{vskip}, \.{hrule},
+        \.{unvbox}, \.{unvcopy}, \.{halign}, \.{end}, \.{dump})に
+        出くわしたとき,その直前\footnote{オリジナルの状態では\.{par}は
+        段落終了(垂直モードへ移行)の意味を持つが,\.{par}が再定義されて
+        垂直モードへの移行に失敗すると無限ループが発生する.}
+        % https://www.ma.ns.tcu.ac.jp/Pages/TeX/vglue.par.html
+        % https://hak7a3.hatenablog.com/entry/2015/03/26/224533
+    \end{itemize}
+ \item \.{long}なしで定義されたマクロ中の引数には\.{par}は使用できない.
+\begin{verbatim}
+  ! Paragraph ended before \... was complete.
+\end{verbatim}
+  というエラーが発生する.
+  なお,禁止されるのは\.{par}という\emph{名称}の制御綴であって,
+  \verb+\let\endgraf\par+などのように別の名称の制御綴に
+  \.{par}の意味をコピーして用いるのは問題ない.
+\end{itemize}
+
+\LaTeXe~2021-06-01などでは「段落終了時のフック」を実現させるために
+\.{par}の自動挿入という挙動を利用しており,\.{par}を再定義している.
+
+しかし,\TeX82には「\.{par}という名称の制御綴」ではなく「暗黙のpar」を挿入する
+箇所が存在する.その代表が「\.{vbox}の中身が水平モードで終わった場合」であり,
+この場合は\.{par}という名称の制御綴を再定義しても使われない.
+すなわち,\LaTeXe などの「段落終了時のフック」が抜けてしまうことになる.
+
+2021-07-25のコミットr60054(\TeX~Liveでは2022年以降)では,
+\.{partokenname}と\.{partokencontext}というプリミティブが追加された.
+
+\begin{cslist}
+ \csitem[\.{partokenname} <control sequence>]
+  上で述べた\.{par}という名称の制御綴の特別な役割を,他の制御綴に移す効果を持つ.
+  \begin{quote}
+	\verb+\partokenname \hoge+
+  \end{quote}
+  を実行した際に起こる状況で説明すると,
+  \begin{itemize}
+    \item 上記で述べた「自動挿入される命令」が\.{par}から\.{hoge}に変わる.
+    \item \.{long}なしで定義された制御綴の引数において,\.{par}は許容されるようになるが
+    逆に\.{hoge}が許容されなくなる.
+  \end{itemize}
+  なお,\.{partokenname}の効果は常にグローバルである.
+
+ \csitem[\.{partokencontext} (integer)]
+  \TeX が\.{par}\footnote{あるいは\.{partokenname}により
+  代わりに別の制御綴になっているかもしれない.}を
+  自動挿入する箇所を制御する内部整数であり,既定値は0である.
+
+  自動挿入箇所は次の通り:
+  \begin{description}
+    \item[いつでも挿入] \TeX82での自動挿入箇所(上述)
+    \item[$\.{partokencontext}>0$のときのみ挿入]
+      \.{vbox}, \.{vtop}, \.{vcenter}それぞれの末尾
+    \item[$\.{partokencontext}>1$のときのみ挿入]
+      \.{insert}, \.{vadjust}, \.{valign}での各セル,\.{noalign}のそれぞれの末尾と,
+      output routineの末尾
+  \end{description}
+  なお,実際の挿入はそれぞれの箇所が水平モードであった場合にのみ行われる.
+\end{cslist}
+
+\.{partokencontext}の既定値は0であり,この場合の挙動は\TeX82と互換である.
+値を1にすれば,「\.{vbox}の中身が水平モードで終わった場合」にも
+「暗黙のpar」ではなく「\.{par}という名称の制御綴」が挿入されるので,
+\.{par}の再定義が効く.
+\fi
+%%%
+
+
 \begin{comment}
-  \section{互換性}
+\section{互換性}
 \eTeX, \pTeX との互換性をはかるのに有効な手段としては,まず\texttt{TRIP}
 testがある.\cite{h7k}にも書いたが,これは\TeX のソースの全行を実行する
 ようなテストソースであり,\texttt{TRIP} testの実行結果が違えば,どこかの
@@ -1182,6 +1373,8 @@
   The \LaTeX3 Project Team, \textit{\LaTeX\ News Issue 31}, 2020.\\
   |$TEXMFDIST/source/latex/base/ltnews31.tex|, \\
   \url{https://www.latex-project.org/news/latex2e-news/ltnews31.pdf}.
+ \bibitem{tjb115} aminophen,「e(u)ptex: Add |\vadjust pre|」,2021/05/22.\\
+  \url{https://github.com/texjporg/tex-jp-build/pull/115}
 \end{thebibliography}
 
 \newpage

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/jfm.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex
===================================================================
--- trunk/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex	2021-08-04 01:42:52 UTC (rev 60157)
+++ trunk/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex	2021-08-04 21:13:13 UTC (rev 60158)
@@ -13,6 +13,7 @@
 
 \def\size#1{\mathit{#1}}
 \def\code#1{\texttt{#1}}
+\def\codechar#1{\ensuremath{\langle\mbox{\null\code{#1}\null}\rangle}}
 
 % logos
 \def\pTeX{p\kern-.10em\TeX}\def\upTeX{u\pTeX}
@@ -95,7 +96,7 @@
 この\node{char\_type}テーブルを使って行う.
 
 このテーブルの各エントリーは1ワード(=4バイト)で構成され,
-上位3バイトに文字コード(符合位置),下位1バイトに文字タイプを持つ
+上位3バイトに文字コード(符号位置),下位1バイトに文字タイプを持つ
 \footnote{日本語\TeX{}開発コミュニティによる新仕様;
 詳細は第\ref{jfm-new}節を参照.}.
 文字コードは,それが16進数24bit(3バイト)で\code{0xABcdef}と表されるとき,
@@ -239,7 +240,7 @@
 \node{char\_type}テーブルの各エントリーは1ワード(=4バイト)で
 構成されるが,オリジナルの仕様では
 \begin{itemize}
-  \item 上位半ワードに文字コード(符合位置),下位半ワードに文字タイプを持つ
+  \item 上位半ワードに文字コード(符号位置),下位半ワードに文字タイプを持つ
 \end{itemize}
 であった.
 \pTeX{}では内部処理にJISが用いられ,JFMで扱う文字コードは2バイトが
@@ -250,7 +251,7 @@
 
 そこで,日本語\TeX{}開発コミュニティの新仕様(2018年1月)では
 \begin{itemize}
-  \item 上位3バイトに文字コード(符合位置),下位1バイトに文字タイプを持つ
+  \item 上位3バイトに文字コード(符号位置),下位1バイトに文字タイプを持つ
   \item 文字コードは,それが16進数24bit(3バイト)で\code{0xABcdef}と
     表されるとき,テーブルには\code{cd ef AB}として格納される
 \end{itemize}
@@ -465,7 +466,7 @@
     design size     = 10485760 2^{-20} points = 10 points
 \end{verbatim}
 
-\subsection{makejvf}
+\subsection{makejvf}\label{makejvf}
 
 JFMファイルを基にして,VF (virtual font)を生成するプログラムである.
 \code{makejvf}が生成する和文VFの目的は以下のとおりである:
@@ -501,4 +502,151 @@
 \end{itemize}
 詳細は公式ドキュメントを参照してほしい.
 
+
+\section{付録:利用可能なJFMについて}\label{jfm-dist}
+
+\pTeX/\upTeX と一緒に標準で配布しているJFMについて,簡単に説明する.
+
+\subsection{ptex-fonts}
+
+コミュニティによる配布場所は |https://github.com/texjporg/ptex-fonts| であり,
+内容物は以下のとおり.なお,\pTeX および\pLaTeX のフォーマットでは,既定で
+横組用に |min*.tfm| と |goth*.tfm| を,
+縦組用に |tmin*.tfm| と |tgoth*.tfm| を使用している.
+\begin{itemize}
+  \item 株式会社アスキーによるもの
+    \begin{itemize}
+      \item |min*.tfm|,|goth*.tfm|,|nmin*.tfm|,|ngoth*.tfm|(以上,横組用)
+      \item |tmin*.tfm|,|tgoth*.tfm|(以上,縦組用)
+    \end{itemize}
+  \item 東京書籍印刷,現リーブルテックの小林肇氏によるもの
+    \begin{itemize}
+      \item |jis*.tfm|(JISフォントメトリック)
+    \end{itemize}
+\end{itemize}
+
+\paragraph{株式会社アスキーによるJFM}
+
+しばしば「|min10|系」と呼ばれる.
+歴史が非常に古く,開発当時のドキュメントは残念ながらほとんど残っていない.
+以下は,株式会社アスキーによる「日本語\TeX version j1.7」\cite{jtex1.7}に
+付属していたドキュメント|README.KANJI|からの抜粋である.
+
+\begin{quotation}
+\paragraph{漢字フォント}
+
+ディレクトリ |jfms| 内の漢字フォント用 JFM(TFM)ファイルは、以下に
+示すサイズ(ドット数)のフォントを想定して作成されています(日本
+語 version j0.3 の配布時のものと若干異なります。注意して下さい)。
+尚、(株)アスキーより販売されている「日本語 Micro TeX」において
+も、これと全く同じものを使用しています。
+
+\begin{verbatim}
+    TeX での呼び名  実寸(pt) 300dpi  480dpi  240dpi 118dpi
+    5pt             4.58222      19     30      15     7
+    6pt             5.49866      23     36      18     9
+    7pt             6.4151       27     42      21     10
+    8pt             7.33154      30     49      24     12
+    9pt             8.24799      34     55      27     13
+    10pt            9.16443      38     61      30     15
+    10pt * 1.2^1/2  10.0391      42     67      33     16
+    10pt * 1.2^1    10.9973      46     73      36     18
+    10pt * 1.2^2    13.1968      55     88      44     22
+    10pt * 1.2^3    15.8361      66     105     52     26
+    10pt * 1.2^4    19.0034      79     126     63     31
+    10pt * 1.3^5    22.804       95     151     75     37
+\end{verbatim}
+
+このサイズ以外のフォントを使用する場合は、プリンタドライバで疑似的に
+これらのサイズに合わせるか、そのフォントに合わせたJFM(TFM)ファイル
+を作成するかのどちらかになります。互換性を考慮する場合は、前者の方法
+を取るべきです。しかし、それではどうしても気にくわないというのであれ
+ば、|jtex/TeXware| に JFM 用の |tftopl| および |pltotf| がありますから、これ
+を使用して新しい JFMファイルを作成して下さい。これらのユーティリティ
+のドキュメントは、株式会社アスキー発行の「日本語 TeX テクニカルブック
+I」を参照して下さい。(中略)
+
+|jfms| 内には、|min*.tfm|、|goth*.tfm| の他に |nmin*.tfm| と |ngoth*.tfm| が含
+まれています。前者は、句読点、ピリオド、カンマといくつかの仮名文字と
+の間でカーニング処理を行うようになっていますが、後者ではこの処理を行っ
+ていません。両者間では、これ以外の違いはありません。ただしマクロ中で
+は、前者のみが定義されており、後者を使用する場合は自分で定義する必要
+があります。
+\end{quotation}
+
+通常の和文フォントは正方形の仮想ボディに収まるようにデザインされるが,
+例えば公称10ポイントの|min10|は「幅9.62216pt,高さ7.77588pt,深さ1.38855pt」の
+扁平な矩形でデザインされている($\mathrm{zw}=9.62216\,\mathrm{pt}$と
+$\mathrm{zh}=9.16443\,\mathrm{pt}$が一致しない).
+また,例えば|ちょっと|が「ちょっと」ではなく
+「{\jfont\minten=min10 \minten ちょっと}」と詰まるなどの
+不自然な挙動も知られている\cite{min10otobe}.
+ただし,\emph{互換性維持のため,コミュニティが修正を行う予定はない}.
+
+\paragraph{JISフォントメトリック}
+
+|jis*.tfm|は,JIS~X~4051-1995「日本語文書の行組版方法」になるべく即した
+メトリックとして開発された\cite{jistfm}.
+|min10|系を「そのまま置き換えて使ってもらう」ことを
+意図しており,そのため,|min10|系の字詰まりの不具合等は直しつつ,
+zw,zhの値を仮定した既存スタイルに影響を与えないように
+|min10|のzw・zhの寸法は温存した設計になっている.
+なお,|jsclasses|は横組用の|jis.tfm|と|jisg.tfm|を標準で使用している.
+
+% JIS メトリックの説明(英語版)
+% https://okumuralab.org/~okumura/texfaq/japanese/ptex.html
+% http://ajt.ktug.org/2008/0201okumura.pdf
+
+なお,|jis.tfm|(n無し)と|jisn.tfm|(n有り)の違いは
+\begin{quote}
+中黒\codechar{・},コロン\codechar{:},セミコロン\codechar{;}の組み方を
+「半角幅+前後グルー」とするか「全角幅」とするか
+\end{quote}
+だけである.
+
+\paragraph{対応するVFと実フォント}
+
+第\ref{makejvf}節で述べたとおり,\pTeX で使用するJFMと実際のフォントでは
+一部の字幅が異なり,その位置ずれを補正するためにVFを用いている.
+対応は以下のとおり(左が\pTeX 用JFM,右がDVIドライバ用JFMである
+\footnote{DVIドライバ用JFMは全ての文字を全角扱いとしており,グルー挿入などは
+一切定義していない.当然,\pTeX の組版時には使用すべきでない.}.
+実際のOpenType/TrueTypeフォントの割り当ては,mapファイルに依存する).
+% [TODO] この割り当てを定義するのが ptex-fontmaps である,まで言及したい.
+% kanji-config-updmap のドキュメントまで導線を張るつもりだが,別の節にまとめる.
+\begin{itemize}
+  \item |min*.tfm| → |min*.vf| → |rml.tfm|(→明朝体フォント,横組)
+  \item |goth*.tfm| → |goth*.vf| → |gbm.tfm|(→ゴシック体フォント,横組)
+  \item |tmin*.tfm| → |tmin*.vf| → |rmlv.tfm|(→明朝体フォント,縦組)
+  \item |tgoth*.tfm| → |tgoth*.vf| → |gbmv.tfm|(→ゴシック体フォント,縦組)
+  \item |jis*.tfm| → |jis*.vf| → |rml.tfm|(→明朝体フォント,横組)
+  \item |jisg*.tfm| → |jisg*.vf| → |gbm.tfm|(→ゴシック体フォント,横組)
+  \item |jis*-v.tfm| → |jis*-v.vf| → |rmlv.tfm|(→明朝体フォント,縦組)
+  \item |jisg*-v.tfm| → |jisg*-v.vf| → |gbmv.tfm|(→ゴシック体フォント,縦組)
+\end{itemize}
+
+また,|tmin*.vf|及び|tgoth*.vf|では「縦書き時にソース中に
+クオート\codechar{’}\codechar{”}を入力すると,
+ミニュート\codechar{′}\codechar{″}を加工した文字に置き換える」と
+いう処置も加えてある(\code{makejvf}の |-m| オプションの機能による).
+一方,|jis*-v.vf|及び|jisg*-v.vf|ではそのような処置を行わない.
+
+\subsection{uptex-fonts}
+
+[TODO] 執筆予定.
+
+% クオート記号
+% https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=3153
+
+\begin{thebibliography}{99}
+ \bibitem{jtex1.7}
+   株式会社アスキー,「アスキー日本語\TeX 配布テープ 1992.02.24 (release~1.12)」
+ \bibitem{min10otobe}
+   乙部厳己,「min10フォントについて」,2000/12/12,\\
+   |http://argent.shinshu-u.ac.jp/~otobe/tex/files/min10.pdf|
+ \bibitem{jistfm}
+   奥村晴彦,「pLaTeX2e 新ドキュメントクラス」,2016/07/07,\\
+   |https://oku.edu.mie-u.ac.jp/~okumura/jsclasses/|
+\end{thebibliography}
+
 \end{document}

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex
===================================================================
--- trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex	2021-08-04 01:42:52 UTC (rev 60157)
+++ trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex	2021-08-04 21:13:13 UTC (rev 60158)
@@ -444,15 +444,16 @@
 
 %%% 拡張プリミティブ
 \subsection{Additional primitives and keywords}
+% -- as of r60088
 % tex -ini: 322 multiletter control sequences
-% ptex -ini: 366 multiletter control sequences
-% uptex -ini: 374 multiletter control sequences
-% eptex -ini: 379 multiletter control sequences
-% eptex -ini -etex: 469 multiletter control sequences
-% euptex -ini: 387 multiletter control sequences
-% euptex -ini -etex: 477 multiletter control sequences
-% etex (pdftex) -ini: 470 multiletter control sequences
-% etex (pdftex) -ini -etex: 539 multiletter control sequences
+% ptex -ini: 373 multiletter control sequences (= 322 + p:47 + TL:3 + SyncTeX: 1)
+% uptex -ini: 380 multiletter control sequences (= 373 + up:7)
+% eptex -ini: 386 multiletter control sequences
+% eptex -ini -etex: 480 multiletter control sequences (= 373 + e:66 + ep:41)
+% euptex -ini: 393 multiletter control sequences
+% euptex -ini -etex: 488 multiletter control sequences (= 380 + e:66 + ep:41 + eup:1)
+% etex (pdftex) -ini: 476 multiletter control sequences
+% etex (pdftex) -ini -etex: 545 multiletter control sequences
 
 Here we provide only complete lists of additional primitives
 of \pTeX\ family in alphabetical order.
@@ -463,14 +464,8 @@
 % [TODO] 追加されたバージョン情報は正しいか?
 
 \def\New#1{--- New primitive since #1}
+\def\NewMoved#1#2{--- Imported from #1, since #2}
 
-\subsubsection{Sync\TeX\ additions (available in \pTeX, \upTeX, \epTeX, \eupTeX)}
-In the standard build of \TL, Sync\TeX\ extension is unavailable in
-Knuthian \TeX; however, it is enabled in \pTeX\ family.
-\begin{simplelist}
- \csitem[\.{synctex}]
-\end{simplelist}
-
 %%% pTeX のやつ
 \subsubsection{\pTeX\ additions (available in \pTeX, \upTeX, \epTeX, \eupTeX)}
 \begin{simplelist}
@@ -515,6 +510,8 @@
  \csitem[\.{tbaselineshift}]
  \csitem[\.{textbaselineshiftfactor} \New{p3.7 (\TL2016)}]
  \csitem[\.{tfont}]
+ \csitem[\.{toucs} \New{p3.10.0 (\TL2022)}]
+ \csitem[\.{ucs} \NewMoved{\upTeX}{p3.10.0 (\TL2022)}\footnotemark]
  \csitem[\.{xkanjiskip}]
  \csitem[\.{xspcode}]
  \csitem[\.{ybaselineshift}]
@@ -524,6 +521,7 @@
  \csitem[\texttt{zh}\index{zh=\texttt{zh}}]
  \csitem[\texttt{zw}\index{zw=\texttt{zw}}]
 \end{simplelist}
+\footnotetext{The primitive \.{ucs} was part of ``\upTeX\ additions'' until \TL2021.}
 
 %%% upTeX のやつ
 \subsubsection{\upTeX\ additions (available in \upTeX, \eupTeX)}
@@ -533,7 +531,7 @@
  \csitem[\.{forcecjktoken}]
  \csitem[\.{kchar}]
  \csitem[\.{kchardef}]
- \csitem[\.{ucs}]
+ %\csitem[\.{ucs}] % moved to pTeX 3.10.0
  \csitem[\.{uptexrevision} \New{u1.23 (\TL2018)}]
  \csitem[\.{uptexversion} \New{u1.23 (\TL2018)}]
 \end{simplelist}
@@ -583,6 +581,7 @@
  \csitem[\.{readpapersizespecial} \New{180901 (\TL2019)}]
  \csitem[\.{Uchar} \New{191112 (\TL2020)}]
  \csitem[\.{Ucharcat} \New{191112 (\TL2020)}]
+ \csitem[\.{vadjust} \texttt{pre} \New{210701 (\TL2022)}]
  \csitem[\.{vfi}]
  \csitem[\texttt{fi}\index{fi=\texttt{fi}}]
 \end{simplelist}
@@ -593,16 +592,39 @@
  \csitem[\.{currentcjktoken} \New{191112 (\TL2020)}]
 \end{simplelist}
 
+%%% ほか
+\subsubsection{Other cross-engine additions}
+% In the standard build of \TL, Sync\TeX\ extension is unavailable in
+% Knuthian \TeX; however, it is enabled in \pTeX\ family.
+Sync\TeX\ extension (available in \pTeX, \upTeX, \epTeX, \eupTeX):
+\begin{simplelist}
+ \csitem[\.{synctex}]
+\end{simplelist}
+
+\noindent
+\TL additions (available in \pTeX, \upTeX, \epTeX, \eupTeX):
+\begin{simplelist}
+ \csitem[\.{partokencontext} \New{\TL2022}]
+ \csitem[\.{partokenname} \New{\TL2022}]
+ \csitem[\.{tracingstacklevels} \New{\TL2021}]
+\end{simplelist}
+
 % [TODO] 引数は何で返り値は何か,expandable?
 
 %%% (e-)TeX にあるが (e-)upTeX にないもの
+%%% encTeX 拡張など
 \subsection{Omitted primitives and unsupported features}
 
-Compared to Knuthian \TeX\ and \eTeX,
-some primitives are omitted due to conflict with Japanese handling.
-%%% encTeX 拡張など
-One is enc\TeX\ extension, such as |\mubyte|.
-The ML\TeX\ extension, such as |\charsubdef|, is included but not well-tested.
+Compared to Knuthian \TeX\ and \eTeX, some primitives and extensions are
+omitted due to conflict with Japanese handling.
+\begin{itemize}
+ \item The enc\TeX\ extension, including the primitives |\mubyte| etc.,
+  is unavailable.
+ \item The ML\TeX\ extension, such as |\charsubdef|, is not enabled
+  by default. It becomes available with the command-line option |-mltex|,
+  but not well-tested.
+\end{itemize}
+
 %%% コマンドラインオプションの話
 
 % [TODO] Please also refer to ptex.man1.pdf

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.sty
===================================================================
--- trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.sty	2021-08-04 01:42:52 UTC (rev 60157)
+++ trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.sty	2021-08-04 21:13:13 UTC (rev 60158)
@@ -25,14 +25,18 @@
 
 \def\Pkg#1{\textsf{#1}}
 \let\@lessthan <
+\begingroup
 \catcode`\<=13
+\gdef<{\ifmmode\@lessthan\else\expandafter\@@meta\fi}
+\gdef\@@meta#1>{\ensuremath{\langle\hbox{\normalfont\textit{#1}}\rangle}}
+\gdef\hex#1{\ifmmode\mbox\fi{\texttt{"#1}}}%"
+\endgroup
+\AtBeginDocument{\catcode`\<=13\relax}
+
 \xspcode`\\=3
 \xspcode`\*=3
 \xspcode`\-=3
 \xspcode23=3 % \textcompwordmark
-\def<{\ifmmode\@lessthan\else\expandafter\@@meta\fi}
-\def\@@meta#1>{\ensuremath{\langle\hbox{\normalfont\textit{#1}}\rangle}}
-\def\hex#1{\ifmmode\mbox\fi{\texttt{"#1}}}%"
 
 \normalsize
 \bigskipamount=\baselineskip

Modified: trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex	2021-08-04 01:42:52 UTC (rev 60157)
+++ trunk/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex	2021-08-04 21:13:13 UTC (rev 60158)
@@ -334,7 +334,18 @@
 
   \pTeX においては,|\kcatcode|を上記の初期状態から変更することは想定されていない.
   また,変更したとしても,(先に述べた通り)和文文字トークンにカテゴリーコードの情報は
-  保存されず,和文文字が処理対象となるたびにその度に値が取得される.
+  保存されず,和文文字が処理対象となるたびにカテゴリーコードの値が再取得される.
+  ただし,|\let\CS=あ| などとして和文文字トークンを|\let|すると,|\CS|には
+  その時のカテゴリーコード(|\kcatcode|)が保存される\footnote{コミュニティ版\pTeX では,
+  一時的に「和文文字トークンを|\let|した|\CS|においても,それが処理対象となるたびに
+  カテゴリーコードの値を再取得する」という挙動に変更しようとした(r51021).
+  しかし,この変更が不完全で「|\ifcat|では再取得するが,|\ifx|では再取得しない」という
+  不統一な状態となってしまったため,r59699で従来の挙動に戻した(アスキー版と同じ).
+  結果的に,\TeX~Live 2019--2021では「ただし,…」が当てはまらない(\cite{man4}).}.
+  % 不統一な挙動になっているのは以下のバージョン.
+  %   * TeX Live 2019 rebuild 2019-05-30 (p3.8.2)
+  %   * TeX Live 2020 (p3.8.3)
+  %   * TeX Live 2021 (p3.9.0)
 
   なお,\upTeX においては,|\kcatcode|は大きく仕様変更されている.
 \end{cslist}
@@ -439,7 +450,7 @@
   \item 当該の欧文文字の直前が和文文字(後方に禁則ペナルティを伴っても構わない)の
     場合に限り,その欧文文字に設定された|\prebreakpenalty|を挿入する.
 \end{itemize}
-\iffalse %%%%% TL2019-hack
+\iffalse %%%%% [TODO]
 \begin{dangerous}
 上記の「欧文文字に設定された禁則ペナルティが挿入される状況」は
 欧文文字と和文文字の境界であり,
@@ -452,7 +463,7 @@
   \item 和文→欧文文字間: |penalty_node| (\.{prebreakpenalty}) → |disp_node| の順
 \end{itemize}
 \end{dangerous}
-\fi %%%%% TL2019-hack
+\fi %%%%%
 
 \begin{dangerous}
 禁則ペナルティはリスト構築中に自動的に挿入されるので,\.{showlists}で
@@ -542,7 +553,7 @@
  \item 禁則ペナルティ(\.{prebreakpenalty}や\.{postbreakpenalty})と
   が同じ箇所に発行される場合は
   「禁則ペナルティ→JFM由来空白」の順に発行される.
-\iffalse %%%%% TL2019-hack
+\iffalse %%%%% [TODO]
  \item より一般に,禁則ペナルティ,JFM由来空白,ベースライン補正,
   欧文TFM由来カーンが同じ箇所に発行される場合は
   次の順になる(\ref{sec:kinsoku}節の注意の一般化).% tex-jp-build/f6f500d or 9e7e21aa
@@ -553,7 +564,7 @@
    \footnote{[TODO] \TeX~Live~2019の\pTeX~3.8.2では,欧文TFM由来カーンは欧文→和文の
    切替時には挿入されない.}% tex-jp-build/78c8605 で解決
   \end{itemize}
-\fi %%%%% TL2019-hack
+\fi %%%%%
  \item もし水平ボックス(\.{hbox})や\.{noindent}で開始された段落がJFM由来グルーで始まった
    場合は,そのグルーは取り除かれる(カーンは除かれない).
    また水平ボックスがJFM由来グルーで終了した場合は,そのグルーは自然長・伸び量・縮み量の
@@ -1139,13 +1150,65 @@
   それぞれJISコード,EUCコード,Shift-JISコードから内部コードへの変換を行う.
   たとえば,|\char\jis"346E|,|\char\euc"B0A5|,|\char\sjis"8A79|は,
   それぞれ「\char\jis"346E」,「\char\euc"B0A5」,「\char\sjis"8A79」である.
+
+%%% [TODO] \ucs, \toucs => pTeX version p3.10.0
+\ifx\toucs\undefined\else
+%
+\csitem[\.{ucs} <number>]
+  Unicodeから内部コードへの変換を行う.
+  もともと\upTeX で実装されていたが,\pTeX~3.10.0で取り入れた.
+
+\csitem[\.{toucs} <number>]
+  内部コードからUnicodeへの変換を行う.\pTeX~3.10.0で追加した.
+%
+\fi
+%%%
 \end{cslist}
 
 \begin{dangerous}
- \ref{sec:ptexchar}節でも述べたように,
- \emph{\pTeX はJIS~X~0213には対応せず,JIS~X~0208の範囲のみ扱える}.
-
- [TODO] \.{kuten}, \.{jis}, \.{sjis}, \.{euc}が$-1$とならない範囲はどこ?
+  \ref{sec:ptexchar}節でも述べたように,
+  \emph{\pTeX はJIS~X~0213には対応せず,JIS~X~0208の範囲のみ扱える}.
+  なお,\pTeX~3.9.1以前では,不正な文字コードを与えたときの挙動が
+  不統一で,特に以下の値を返すケースもあった:
+  \begin{itemize}
+    \item 区点コード表のJIS~X~0208における最初の未定義位置
+          (JIS 0x222F, EUC 0xA2AF, SJIS 0x81AD)…
+          和文文字コードとして有効で,JIS~X~0213では定義されている.
+          % 発生状況:従来のUCS2toJIS(0)
+    \item 区点コード表の1区0点
+          (JIS 0x2120, EUC 0xA1A0, SJIS 0x813F)…
+          文字コードとして無効.
+          % 発生状況: JIStoSJIS(不正)
+    \item $-1$…文字コードとして無効.
+          % 発生状況:KUTENtoJIS(不正)→JIStoEUC(-1)
+  \end{itemize}
+  \pTeX~3.10.0では\.{ucs}と\.{toucs}を追加し,さらに不正な文字コードを
+  容易に判別できるように以下の仕様にした:
+  \begin{itemize}
+    \item 文字コード変換が\emph{不要}なケース\footnote{内部eucにおける\.{euc},
+        内部sjisにおける\.{sjis},および\upTeX で内部uptexにおける\.{ucs}と
+        \.{toucs}がこれに該当する.}…恒等変換となる.
+        不正な文字コードを与えてもそのまま通る.(これは従来どおりの挙動)
+    \item 文字コード変換が\emph{必要}なケース…
+        不正な文字コードを与えると$-1$を返す.(返り値を統一)
+  \end{itemize}
+%%%
+%
+% pTeX-3.10.0 での実装メモ (2021-06-29 @aminophen)
+% https://github.com/texjporg/tex-jp-build/pull/121
+%
+%  * ptexenc (ptexenc.c, kanjicnv.c, unicode.c) の関数
+%    => 文字コード変換が不要な場合は恒等変換.
+%                       必要な場合で不正な文字コードなら 0 を返す.
+%  * ptex-base.ch の実装
+%    => ptexenc に従う.ただし \jis, \sjis, \euc, \kuten, \ucs, \toucs の
+%       返り値が 0 の場合は -1 を表示.
+%  * uptex-m.ch の実装
+%    => ptexenc 及び ptex-base.ch に従う.ただし,内部コード uptex の時の
+%       \ucs0 と \toucs0 は(ptex-base.ch が無条件に -1 を表示しようとするが,
+%       ここは無変換とすべきなので)0 を表示.
+%
+%%%
 \end{dangerous}
 
 \begin{cslist}
@@ -1233,7 +1296,8 @@
   「整数値をその符号値をもつ和文文字トークンに変換する」という目的に
   用いることもでき\footnote{ただし,\upTeX で
   0--127の文字コードを|\kansujichar|で指定した場合のみ,
-  |\kansuji|で生成されるトークンは欧文文字トークンになる\cite{build36}.},
+  |\kansuji|で生成されるトークンはカテゴリーコード12の
+  欧文文字トークンになる\cite{build36}.},
   これは時に“|\kansuji|トリック”と呼ばれる.例えば
 \begin{verbatim}
   \kansujichar1=\jis"2422 \edef\X{\kansuji1}
@@ -1493,6 +1557,9 @@
  \bibitem{build68} aminophen, 「upTeX の |\if| と |\ifcat|」,
   2019/01/17,\\
   \url{https://github.com/texjporg/tex-jp-build/issues/68}
+ \bibitem{man4} aminophen, 「pTeX の和文文字トークンのカテゴリーコード」,
+  2019/04/22,\\
+  \url{https://github.com/texjporg/ptex-manual/issues/4}
  \bibitem{dvistd0} TUG DVI Standards Working Group,
   \textit{The DVI Driver Standard, Level 0}.\\
   \url{https://ctan.org/pkg/dvistd}



More information about the tex-live-commits mailing list.