summaryrefslogtreecommitdiff
path: root/info/ptex-manual
diff options
context:
space:
mode:
Diffstat (limited to 'info/ptex-manual')
-rw-r--r--info/ptex-manual/LICENSE2
-rw-r--r--info/ptex-manual/README.md2
-rw-r--r--info/ptex-manual/eptex_resume.pdfbin694464 -> 1012994 bytes
-rw-r--r--info/ptex-manual/eptexdoc.pdfbin356743 -> 378172 bytes
-rw-r--r--info/ptex-manual/eptexdoc.tex134
-rw-r--r--info/ptex-manual/jfm.pdfbin197862 -> 215779 bytes
-rw-r--r--info/ptex-manual/jfm.tex155
-rw-r--r--info/ptex-manual/ptex-guide-en.pdfbin105110 -> 106870 bytes
-rw-r--r--info/ptex-manual/ptex-guide-en.tex60
-rw-r--r--info/ptex-manual/ptex-manual.pdfbin288365 -> 322239 bytes
-rw-r--r--info/ptex-manual/ptex-manual.sty14
-rw-r--r--info/ptex-manual/ptex-manual.tex634
12 files changed, 788 insertions, 213 deletions
diff --git a/info/ptex-manual/LICENSE b/info/ptex-manual/LICENSE
index 4309b809b8..65cd471041 100644
--- a/info/ptex-manual/LICENSE
+++ b/info/ptex-manual/LICENSE
@@ -1,4 +1,4 @@
-Copyright (C) 2017-2021 Japanese TeX Development Community
+Copyright (C) 2017-2022 Japanese TeX Development Community
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/info/ptex-manual/README.md b/info/ptex-manual/README.md
index aa2aa78556..9c872c4f25 100644
--- a/info/ptex-manual/README.md
+++ b/info/ptex-manual/README.md
@@ -36,6 +36,6 @@ the 3-clause BSD license (see [LICENSE](./LICENSE)).
## Release Date
-2021-08-04
+2022-04-05
Japanese TeX Development Community
diff --git a/info/ptex-manual/eptex_resume.pdf b/info/ptex-manual/eptex_resume.pdf
index 7a91fe6e15..5b70a13ac9 100644
--- a/info/ptex-manual/eptex_resume.pdf
+++ b/info/ptex-manual/eptex_resume.pdf
Binary files differ
diff --git a/info/ptex-manual/eptexdoc.pdf b/info/ptex-manual/eptexdoc.pdf
index 1e5aa65c0e..6542ef9392 100644
--- a/info/ptex-manual/eptexdoc.pdf
+++ b/info/ptex-manual/eptexdoc.pdf
Binary files differ
diff --git a/info/ptex-manual/eptexdoc.tex b/info/ptex-manual/eptexdoc.tex
index e89ece5bcf..caa69a5297 100644
--- a/info/ptex-manual/eptexdoc.tex
+++ b/info/ptex-manual/eptexdoc.tex
@@ -27,16 +27,6 @@
\MakeShortVerb*{|}
%%%%%%%%%%%%%%%%
-% logos
-\newcommand{\OMEGA}{\texorpdfstring{$\Omega$}{Ω}}
-\protected\def\epTeX{$\varepsilon$\nobreakdash-\pTeX}
-\protected\def\eupTeX{$\varepsilon$\nobreakdash-\upTeX}
-\protected\def\eTeX{$\varepsilon$\nobreakdash-\TeX}
-\def\upTeX{u\pTeX}\def\pTeX{p\kern-.15em\TeX}
-\def\NTS{\leavevmode\hbox{$\cal N\kern-0.35em\lower0.5ex\hbox{$\cal T$}%
- \kern-0.2emS$}\,}
-\def\TeXXeT{\TeX-\reflectbox{\bfseries\TeX-}}
-
\makeatletter
{\lccode`\!=`\_
\lowercase{%
@@ -484,7 +474,7 @@ delimiter codeについても同様である.
\footnote{%
現在ではさらに状況が動き,
2021年以降は,\LaTeXe 自体が本節で述べたプリミティブを
- 要求する予定である(\cite{l2e31}).
+ 要求している(\cite{l2e31}).
}などからあり,
ほとんど\hologo{pdfTeX}における実装をそのまま真似する形で実装している.
@@ -715,17 +705,18 @@ min10フォントメトリックで「ちょっと」を組むと「ょっ」の
\csitem[\.{lastnodechar} (read-only integer)]
現在構築中のリストの「最後のノード」が文字由来であれば,
そのコード番号(内部コード)を内部整数として返す.
+ リストが空の場合,また
+ 「最後のノード」が文字を表すものでなかった場合は,$-1$が返る.
上記「最後のノード」では,\pTeX によって自動挿入される
\begin{itemize}
- \item JFMによって入るグルー
+ \item メトリック由来の空白(JFMグルー,カーン)
\item 行末禁則処理のために挿入されるペナルティ
\item 欧文文字のベースライン補正用のノード
\end{itemize}
- は無視される.また,「最後のノード」が欧文文字のリガチャであった場合は,
- リガチャそれ自身のコード番号ではなく,
- 最後の構成要素の文字のコード番号を返す.
- 「最後のノード」が文字を表すものでなかった場合は,$-1$が返る.
+ は無視される.また,現在の実装では「最後のノード」が欧文文字のリガチャで
+ あった場合は,リガチャそれ自身のコード番号ではなく,
+ 最後の構成要素の文字のコード番号を返すようにしている.
\end{cslist}
例えば,\.{lastnodechar}を使って
@@ -751,8 +742,9 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\begin{quote}
abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\end{quote}
-となり,見た目では同じ「fi」が\.{lastnodechar}実行時の「最後のノード」であるかのように見えても,
-それが合字の場合(左側)では\.{lastnodechar}の実行結果は最後の構成要素「i」のコード番号105となる.
+となり,見た目では同じ「fi」が\.{lastnodechar}実行時の「最後のノード」で
+あるかのように見えても,それが合字の場合(左側)では\.{lastnodechar}の
+実行結果は最後の構成要素「i」のコード番号105となる.
\begin{dangerous}
「|これは,|」とソース中に入力したときの
@@ -769,8 +761,8 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\JY1/hmc/m/it/10 ,
\glue(refer from jfm) 4.62341 minus 4.62341
\end{verbatim}
- しかし,数段落上の説明の通り,\.{lastnodechar}は\pTeX の和文処理によって自動的に挿入された
- これらJFM由来の空白を無視する.
+ しかし,数段落上の説明の通り,\.{lastnodechar}は\pTeX の和文処理によって
+ 自動的に挿入されたこれらJFM由来の空白を無視する.
\end{dangerous}
「最後のノード」を見ているので,
@@ -784,23 +776,60 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\end{quote}
と「,」の内部コードが取得される.
+
+%%%
+\ifnum\epTeXversion>220213
+\subsection{\.{lastnodefont}プリミティブ}
+\.{lastnodechar}を補完するものとして,\epTeX~220214 (\TeX~Live 2022)で実装された.
+\begin{cslist}
+ \csitem[\.{lastnodefont} (read-only font identifier)]
+ 現在構築中のリストの「最後のノード」が文字由来であれば,
+ そのフォント(内部識別子)を返す.
+ リストが空の場合,また
+ 「最後のノード」が文字を表すものでなかった場合は,|\nullfont|が返る.
+
+ ここでも「最後のノード」は\.{lastnodechar}と同様で
+ \begin{itemize}
+ \item メトリック由来の空白(JFMグルー,カーン)
+ \item 行末禁則処理のために挿入されるペナルティ
+ \item 欧文文字のベースライン補正用のノード
+ \end{itemize}
+ は無視される.
+\end{cslist}
+
+\TeX~Live 2020の\pTeX~(p3.8.3)で追加された\.{ifjfont}, \.{iftfont}と
+組み合わせれば,「最後のノード」が和文文字かどうかを判別できる
+\footnote{\epTeX では「\.{lastnodechar}が256以上かどうか」でも判別できるが,
+\eupTeX では文字コード0--255の和文文字ノードも存在しうることに注意.}.
+\fi
+%%%
+
+
\subsection{\.{lastnodesubtype}プリミティブ}
-\cite{tjb28,plt63}などの議論で,「最後のグルーがJFMグルーだけ\.{unskip}する」処理の必要性が
-唱えられてきた.\epTeX にはもともと最後のノードの種別を返す\.{lastnodetype}プリミティブが
+\cite{tjb28,plt63}などの議論で,「最後のグルーがJFMグルーの場合のみ
+\.{unskip}する」処理の必要性が唱えられてきた.
+\eTeX にはもともと最後のノードの種別を返す\.{lastnodetype}プリミティブが
あったが,これでは最後のノードがグルーであるかしかわからない.
-そのため,\epTeX~180226で\.{lastnodesubtype}プリミティブを追加した.
+そのため,\epTeX~180226で\.{lastnodetype}を補完するものとして,
+\.{lastnodesubtype}プリミティブを追加した.
\begin{cslist}
\csitem[\.{lastnodesubtype} (read-only integer)]
- 現在構築中のリストの「最後のノード」(\.{lastnodechar}プリミティブと同様)の
- subtype値を内部整数として返す.
+ 現在構築中のリストの最後のノードのsubtype値を内部整数として返す.
+ ここでの最後のノードは\.{lastnodetype}と同様である.
+ すなわち,\.{lastnodechar}や\.{lastnodefont}とは
\begin{itemize}
- \item 「最後のノード」が文字ノードのときは0が返る.
+ \item メトリック由来の空白(JFMグルー,カーン)
+ \item 行末禁則処理のために挿入されるペナルティ
+ \end{itemize}
+ も対象とするという点で異なる.
+ \begin{itemize}
+ \item 最後のノードが文字ノードのときは0が返る.
\item 現在構築中のリストが空のときは$-1$が返る.
%%%
\ifnum\epTeXversion>210629
- \item \epTeX~210701以降では,数式内のノードについてはsubtype値そのままではほとんど意味がないので,
- 次ページの表の値を返す.
+ \item \epTeX~210701以降では,数式内のノードについてはsubtype値
+ そのままではほとんど意味がないので,次ページの表の値を返す.
\fi
%%%
\end{itemize}
@@ -915,7 +944,8 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\footnotetext{\.{displaystyle}, \.{textstyle}, \.{scriptstyle}, \.{scriptscriptstyle}.}
なお,\verb+\left...[\middle]...\right+の直後で\.{lastnodesubtype}を使用しても,
\verb+\left...[\middle]...\right+全体が一つの内部数式(\.{mathinner})となるので,
- \.{right}に「対応する」\.{lastnodesubtype}の値は取得できない.\.{over}プリミティブなどによる分数についても類似の事情がある.
+ \.{right}に「対応する」\.{lastnodesubtype}の値は取得できない.
+ \.{over}プリミティブなどによる分数についても類似の事情がある.
\end{description}
\fi
%%%
@@ -1024,6 +1054,8 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\section{Unicode \TeX 由来の機能}
+
+\subsection{\.{Uchar}, \.{Ucharcat}プリミティブ}
\hologo{XeTeX}, \hologo{LuaTeX}には,文字コード<character code>を引数にとり
\emph{文字トークン}に展開される「\.{Uchar} <character code>」というプリミティブが存在する
\footnote{\.{char}は展開不能プリミティブであることに注意.}.また\hologo{XeTeX}には,
@@ -1108,6 +1140,25 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\end{dangerous}
+%%%
+\ifdefined\suppresslongerror %% e-pTeX 211207
+\subsection{エラー抑制(\.{suppress...error})}
+\hologo{LuaTeX}に実装されているエラー発生を抑止するプリミティブたちのうち
+いくつかを,\epTeX~211207で追加した.
+% 説明文は https://github.com/texjporg/tex-jp-build/pull/127 より
+\begin{cslist}
+ \csitem[\.{suppresslongerror} (integer)]
+ この内部整数が非ゼロのとき,\.{long}なしで定義されたマクロの引数に\.{par}が入った
+ 場合の \texttt{! Paragraph ended before \.{...} was complete.} というエラーを抑止する.
+ \csitem[\.{suppressoutererror} (integer)]
+ この内部整数が非ゼロのとき,\.{outer}由来のエラーを抑止する.
+ \csitem[\.{suppressmathparerror} (integer)]
+ この内部整数が非ゼロのとき,数式モード中の\.{par}に由来するエラーを抑止する.
+\end{cslist}
+\fi
+%%%
+
+
\section{\TeX~Liveによる拡張}
2021年以降の\epTeX/\eupTeX には,\TeX~Liveチームによって
\hologo{pdfTeX}及び\hologo{XeTeX}と共通の
@@ -1116,6 +1167,10 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
% * tracingstacklevels.ch (add |\tracingstacklevels| since TL2021)
% * partokenname.ch (add |\tracingstacklevels| since TL2022)
% の change file は e-(u)pTeX のみならず,素の\pTeX にも適用されている.
+% 残りの
+% * char-warning-eptex.ch (enhance |\tracinglostchars| since TL2021)
+% * showstream.ch (add |\showstream| since TL2022)
+% の change file は e-TeX からの変更であるため,素の\pTeX には適用されない.
\subsection{デバッグ機能(\.{tracing...})}
\begin{cslist}
@@ -1222,6 +1277,25 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\fi
%%%
+%%%
+\ifdefined\showstream %% 2021-11-07
+\subsection{\.{show}系コマンドの出力制御}
+\begin{cslist}
+ \csitem[\.{showstream} (integer)]
+ 通常,\.{show}系コマンド\footnote{具体的には
+ \TeX82の\.{show}, \.{showbox}, \.{showlists}, \.{showthe}と
+ \eTeX の\.{showgroups}, \.{showifs}, \.{showtokens}が該当.
+ さらに\pTeX 系列では\.{showmode}も加わる.}は
+ エラー発生と同様に一旦停止し,種々の情報をターミナルやログファイルに出力する.
+ しかし,内部整数\.{showstream}の値をオープンな出力ストリーム(\.{openout}で
+ オープンされる)に一致させると,種々の情報の出力先がリダイレクトされ,
+ ターミナルやログファイルには出力せず一旦停止もしない.
+ 既定値は$-1$であり,これはファイルと一致しないため\TeX82と同じ動作となる.
+ 2021-11-07のコミットr60992(\TeX~Liveでは2022年以降)で追加された.
+\end{cslist}
+\fi
+%%%
+
\begin{comment}
\section{互換性}
@@ -1362,7 +1436,7 @@ $3$\,sp)だが,どこか気になるところである.
\url{https://github.com/latex3/latex2e/issues/95}
\bibitem{tjb81} 北川 弘典,「バイト列と和文文字トークンの区別」,2019/06/08.\\
\url{https://github.com/texjporg/tex-jp-build/issues/81}.
- \bibitem{tjb83} aminophen,「[e-pTeX] |\ifincsname|」,2019/07/09.\\
+ \bibitem{tjb83} aminophen,「[e-pTeX] \.{ifincsname}」,2019/07/09.\\
\url{https://github.com/texjporg/tex-jp-build/issues/83}.
\bibitem{tjb94} aminophen,「e(u)ptex: add |\current(x)spacingmode|, |\currentcjktoken|」,%
2019/10/28.\\
diff --git a/info/ptex-manual/jfm.pdf b/info/ptex-manual/jfm.pdf
index 7386fccf68..4d15ec2ab0 100644
--- a/info/ptex-manual/jfm.pdf
+++ b/info/ptex-manual/jfm.pdf
Binary files differ
diff --git a/info/ptex-manual/jfm.tex b/info/ptex-manual/jfm.tex
index 984f185f8a..0e8d9b1573 100644
--- a/info/ptex-manual/jfm.tex
+++ b/info/ptex-manual/jfm.tex
@@ -13,11 +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}
-\def\OMEGA{$\Omega$}
+\def\codechar#1{\ensuremath{\langle\mbox{\kern0pt\code{#1}\kern0pt}\rangle}}
\title{\emph{JFMファイルフォーマット}}
\author{ASCII Corporation \& Japanese \TeX\ Development Community}
@@ -136,7 +132,7 @@ JFMファイルでもTFMファイルと同じく,拡張子は\code{.tfm}が用
\item[\node{remainder} (8bits)]
\end{description}
-JFMでは$\size{bc}$は必ずゼロ\footnote{前節にある通り,文字コード及び
+JFMでは$\size{bc}$は必ずゼロ\footnote{前節にあるとおり,文字コード及び
文字タイプの項が0のものが必ず1つ存在するため.}なので,
1つのJFMに含まれる\node{char\_info}は全部で$\size{ec}+1$ワードになる.
@@ -275,14 +271,46 @@ JFMで扱うことができなかった.また,オリジナルの仕様で
それと同様である.2018年2月に日本語\TeX{}開発コミュニティによって,
\pTeX{}及びpPLtoTFで新たにサポートされた.
+\subsection{JFMフォーマットの制約事項}
-\section{JPLファイル}\label{jpl-format}
+冒頭に述べたとおり,文字タイプ(\node{char\_type})の上限は255であり,
+それに伴い可能な字幅も最大256種類しか許されない(さらに同じ字幅でも
+\node{glue}又は\node{kern}の挿入規則を変える場合はその分減る).
+しかし,実際のフォントでは字幅が256種類を超えることもあり,
+そのような時にJFMフォーマットは使用できない.
-TFMはバイナリ形式であるが,これをプロパティ(特性)という概念を使って
-テキスト形式で視覚化したものがPL (Property List)ファイルである.
-同様に,JFMをテキスト形式で視覚化したものが
-\emph{JPL (Japanese Property List)}ファイルである.
-JPLファイルでもPLファイルと同じく,拡張子は\code{.pl}が用いられる.
+例として,OTFパッケージ(japanese-otf) \cite{jotf}が提供する
+「ヒラギノフォントのプロポーショナル仮名を使う|\propshape|命令」では
+\begin{itemize}
+ \item 組版時に使われる\code{(up)phiraminw3-h.tfm}などの
+ 「(u)\pTeX 用JFM」は,約物類とプロポーショナル仮名のみに対応する
+ ので,字幅が256種類以内
+ \item VFを介して実際のフォントに割り当てられる
+ \code{hiramin-w3-h.tfm}などの「DVIドライバ用JFM」は,
+ Adobe-Japan1-5の20{,}317文字を全てCIDコード順に実際のフォントに
+ 即して定義しようとして,字幅が256種類を超えてしまう
+\end{itemize}
+という状況になっており,後者はJFMフォーマットで定義できない.
+
+一方で,\OMEGA で使われるOFMフォーマットは最大65{,}536種類の字幅を
+定義でき,かつ主要なDVIドライバ(\code{dvipdfmx}, \code{dvips})は
+JFMとOFMの両方に対応している.
+そこで\emph{あくまで回避策であるが},(u)\pTeX 用JFMはそのままに,
+機能しないDVIドライバ用JFMの代わりに「正しい字幅を定義したOFM」を
+用意して\code{dvipdfmx}や\code{dvips}に優先的に使わせるという方法が
+長らく用いられてきた.OTFパッケージが提供するOFMファイル群(|\CID|で
+使われる\code{otf-cjmr-h.ofm}\footnote{実はこちらは字幅が256種類
+以内であり,JFMフォーマットで十分対応できるが.}や|\propshape|で
+使われる\code{hiramin-w3-h.ofm}など)はこの目的で用意されている\cite{cidofm}.
+% メモ:\def\xspace{}
+% * OTFパッケージの|\CID|, |\propshape|では
+% DVIドライバ用JFMに割り当てるCMapは恒等変換|Identity-{H,V}|を指定
+% * \TL~2021以前の\code{dvips}では,
+% 回避策として用意された縦組用OFMがかえって邪魔となり不正な出力になった
+% (\code{-noomega}でOFMを無視する必要があった)が,
+% \TL~2022以降は「OFMの|FONTDIR RT|をJFMの|DIRECTION TATE|と同等に扱う」
+% という改修を入れており,
+% \code{otf-cj**-v.ofm}や\code{hira***-w*-v.ofm}もそれを利用するようにした
% -- tables begin
@@ -359,6 +387,91 @@ $\size{ng}$ & $\size{np}$ \\ \hline
\clearpage
+\section{JPLファイル}\label{jpl-format}
+
+TFMはバイナリ形式であるが,これをプロパティ(特性)という概念を使って
+テキスト形式で視覚化したものがPL (Property List)ファイルである.
+同様に,JFMをテキスト形式で視覚化したものが
+\emph{JPL (Japanese Property List)}ファイルである.
+JPLファイルでもPLファイルと同じく,拡張子は\code{.pl}が用いられる.
+
+和文用JPLに特有のプロパティとして,以下が存在する.
+
+\subsection{\code{CHARSINTYPE}}
+\code{CHARSINTYPE \codechar{1バイト長の整数} \codechar{任意個数の和文文字}}の
+形式で,文字タイプ\node{char\_type}及びそれに属する文字コードを設定する.
+以下に示すのは,開き括弧類を\node{char\_type}が1のグループに,
+閉じ括弧類を\node{char\_type}が2のグループに指定する例である(最初の
+\code{O 1}と\code{O 2}はそれぞれ8進数の1,2).
+\begin{verbatim}
+(CHARSINTYPE O 1
+ ( 〔 [ { 〈 《 「 『 【
+ )
+(CHARSINTYPE O 2
+ ) 〕 ] } 〉 》 」 』 】
+ )
+\end{verbatim}
+
+なお,\codechar{任意個数の和文文字}は直接入力のほか16進数コード値で与える
+こともできる.JISコードの場合は\code{J}で始め,UCSコード(\upTeX 専用)の
+場合は\code{U}で始める.
+以下の指定は上の例と等価である(例えば\codechar{(}はJIS~0x214A).
+\begin{verbatim}
+(CHARSINTYPE O 1
+ J 214A J 214C J 214E J 2150 J 2152 J 2154 J 2156 J 2158 J 215A
+ )
+(CHARSINTYPE O 2
+ J 214B J 214D J 214F J 2151 J 2153 J 2155 J 2157 J 2159 J 215B
+ )
+\end{verbatim}
+
+\subsection{\code{TYPE}}
+\code{TYPE \codechar{1バイト長の整数} \codechar{プロパティリスト}}の
+形式で,文字タイプ\node{char\_type}に含まれる文字の性質を定義する.
+欧文用PLの\code{CHARACTER}プロパティに相当するが,利用可能な下位のプロパティは
+\begin{itemize}
+ \item \code{CHARWD \codechar{実数値}}:文字の幅
+ \item \code{CHARHT \codechar{実数値}}:文字の高さ
+ \item \code{CHARDP \codechar{実数値}}:文字の深さ
+ \item \code{CHARIC \codechar{実数値}}:文字のイタリック補正値
+\end{itemize}
+に限られる(\code{NEXTLARGER}と\code{VARCHAR}は使えない).
+
+以下の例は,\pTeX の既定で使用している|min10.tfm|のソース|min10.pl|からの
+抜粋である.|min10.tfm|のデザインサイズは10.0\,ptであるので,これは
+文字タイプ0に含まれる文字の幅を9.62216\,pt,高さを7.77588\,pt,
+深さを1.38855\,ptという定義である.
+\begin{verbatim}
+(TYPE O 0
+ (CHARWD R 0.962216)
+ (CHARHT R 0.777588)
+ (CHARDP R 0.138855)
+ )
+\end{verbatim}
+
+\subsection{\code{GLUEKERN}}
+JFMの\node{glue\_kern}テーブルに収めるプログラムを記述する.
+欧文用PLの\code{LIGTABLE}と似ているが,\code{LIG}の代わりに\code{GLUE}を
+用いるところが異なる.
+% [TODO] 書きかけ
+
+\subsection{\code{DIRECTION}}
+\code{DIRECTION \codechar{文字列}}の形式で,日本語フォントの組方向を指定する.
+\codechar{文字列}の一文字目が|Y|であれば横組,|T|であれば縦組として扱う.
+未指定の場合はデフォルトで横組として扱う.
+(u)\pTeX と一緒に標準で配布しているものは,横組用に
+\begin{verbatim}
+(DIRECTION YOKO)
+\end{verbatim}
+を,縦組用に
+\begin{verbatim}
+(DIRECTION TATE)
+\end{verbatim}
+を指定している.
+
+\clearpage
+
+
\section{JFMを扱うプログラム}\label{jfm-program}
\pTeX と\upTeX ,あるいはそれらが生成したDVIを扱うプログラムが
@@ -529,7 +642,7 @@ JFMおよび和文VFを操作する種々の機能を提供するPerlスクリ
しばしば「|min10|系」と呼ばれる.
歴史が非常に古く,開発当時のドキュメントは残念ながらほとんど残っていない.
-以下は,株式会社アスキーによる「日本語\TeX version j1.7」\cite{jtex1.7}に
+以下は,株式会社アスキーによる「日本語\TeX\ version j1.7」\cite{jtex1.7}に
付属していたドキュメント|README.KANJI|からの抜粋である.
\begin{quotation}
@@ -574,13 +687,15 @@ I」を参照して下さい。(中略)
があります。
\end{quotation}
+\jfont\minten=min10 % used in this paragraph!
通常の和文フォントは正方形の仮想ボディに収まるようにデザインされるが,
-例えば公称10ポイントの|min10|は「幅9.62216pt,高さ7.77588pt,深さ1.38855pt」の
+例えば公称10ポイントの|min10|は「幅\the\fontcharwd\minten`漢,
+高さ\the\fontcharht\minten`漢,深さ\the\fontchardp\minten`漢」の
+% 幅9.62216pt,高さ7.77588pt,深さ1.38855pt
扁平な矩形でデザインされている($\mathrm{zw}=9.62216\,\mathrm{pt}$と
$\mathrm{zh}=9.16443\,\mathrm{pt}$が一致しない).
-また,例えば|ちょっと|が「ちょっと」ではなく
-「{\jfont\minten=min10 \minten ちょっと}」と詰まるなどの
-不自然な挙動も知られている\cite{min10otobe}.
+また,例えば|ちょっと|が「ちょっと」ではなく「{\minten ちょっと}」と
+詰まるなどの不自然な挙動も知られている\cite{min10otobe}.
ただし,\emph{互換性維持のため,コミュニティが修正を行う予定はない}.
\paragraph{JISフォントメトリック}
@@ -647,6 +762,12 @@ zw,zhの値を仮定した既存スタイルに影響を与えないように
\bibitem{jistfm}
奥村晴彦,「pLaTeX2e 新ドキュメントクラス」,2016/07/07,\\
|https://oku.edu.mie-u.ac.jp/~okumura/jsclasses/|
+ \bibitem{jotf}
+ Shuzaburo Saito,「Open Type Font用VF」,2019/04/01,\\
+ |https://psitau.kitunebi.com/otf.html|
+ \bibitem{cidofm}
+ Hironobu Yamashita,「otf-cjXX-X.ofm は何のため?」,2019/05/31,\\
+ |https://github.com/texjporg/japanese-otf-mirror/issues/15|
\end{thebibliography}
\end{document}
diff --git a/info/ptex-manual/ptex-guide-en.pdf b/info/ptex-manual/ptex-guide-en.pdf
index b5656817bf..71cae26336 100644
--- a/info/ptex-manual/ptex-guide-en.pdf
+++ b/info/ptex-manual/ptex-guide-en.pdf
Binary files differ
diff --git a/info/ptex-manual/ptex-guide-en.tex b/info/ptex-manual/ptex-guide-en.tex
index 470ee81d45..13fd54ccc6 100644
--- a/info/ptex-manual/ptex-guide-en.tex
+++ b/info/ptex-manual/ptex-guide-en.tex
@@ -53,17 +53,6 @@
% foreign text -> italic
\def\Foreign#1{\textit{#1}}
-% logos
-\def\eTeXpre{$\varepsilon$-}
-\def\eTeX{\leavevmode\hbox{\eTeXpre\TeX}}
-\def\epTeX{\leavevmode\hbox{\eTeXpre\pTeX}}
-\def\eupTeX{\leavevmode\hbox{\eTeXpre\upTeX}}
-\def\pTeX{p\kern-.10em\TeX}\def\upTeX{u\pTeX}
-\def\pLaTeX{p\LaTeX}\def\upLaTeX{u\pLaTeX}
-\def\pdfTeX{pdf\TeX}
-\def\OMEGA{$\Omega$}
-\def\TL{\TeX\ Live\xspace}
-
\def\_{\leavevmode\vrule width .45em height -.2ex depth .3ex\relax}
\frenchspacing
@@ -444,16 +433,16 @@ is to load a package \Pkg{mathfam256}\footnote{%
%%% 拡張プリミティブ
\subsection{Additional primitives and keywords}
-% -- as of r60088
+% -- as of r62095
% tex -ini: 322 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
+% ptex -ini: 374 multiletter control sequences (= 322 + p:48 + TL:3 + SyncTeX: 1)
+% uptex -ini: 381 multiletter control sequences (= 374 + up:7)
+% eptex -ini: 388 multiletter control sequences
+% eptex -ini -etex: 486 multiletter control sequences (= 374 + e:66 + ep:45 + TL:1)
+% euptex -ini: 395 multiletter control sequences
+% euptex -ini -etex: 494 multiletter control sequences (= 381 + e:66 + ep:46 + eup:1 + TL:1)
+% etex (pdftex) -ini: 477 multiletter control sequences
+% etex (pdftex) -ini -etex: 546 multiletter control sequences
Here we provide only complete lists of additional primitives
of \pTeX\ family in alphabetical order.
@@ -464,6 +453,7 @@ The features of each primitive can be found in Japanese edition.
% [TODO] 追加されたバージョン情報は正しいか?
\def\New#1{--- New primitive since #1}
+\def\NewKey#1{--- New keyword since #1}
\def\NewMoved#1#2{--- Imported from #1, since #2}
%%% pTeX のやつ
@@ -499,6 +489,7 @@ The features of each primitive can be found in Japanese edition.
\csitem[\.{noautoxspacing}]
\csitem[\.{postbreakpenalty}]
\csitem[\.{prebreakpenalty}]
+ \csitem[\.{ptexlineendmode} \New{p4.0.0 (\TL2022)}]
\csitem[\.{ptexminorversion} \New{p3.8.0 (\TL2018)}]
\csitem[\.{ptexrevision} \New{p3.8.0 (\TL2018)}]
\csitem[\.{ptexversion} \New{p3.8.0 (\TL2018)}]
@@ -538,6 +529,7 @@ The features of each primitive can be found in Japanese edition.
%%% e-pTeX/e-upTeX の pdfTeX 由来
%%% e-pTeX/e-upTeX の Omega 由来
+%%% e-pTeX/e-upTeX の XeTeX/LuaTeX 由来
%%% その他の独自拡張
\subsubsection{\epTeX\ additions (available in \epTeX, \eupTeX)}
\begin{simplelist}
@@ -550,6 +542,7 @@ The features of each primitive can be found in Japanese edition.
\csitem[\.{ifincsname} \New{190709 (\TL2020)}]
\csitem[\.{ifpdfprimitive} \New{150805 (\TL2016)}]
\csitem[\.{lastnodechar} \New{141108 (\TL2015)}]
+ \csitem[\.{lastnodefont} \New{220214 (\TL2022)}]
\csitem[\.{lastnodesubtype} \New{180226 (\TL2018)}]
\csitem[\.{odelcode}]
\csitem[\.{odelimiter}]
@@ -579,9 +572,12 @@ The features of each primitive can be found in Japanese edition.
\csitem[\.{pdfstrcmp}]
\csitem[\.{pdfuniformdeviate} \New{161114 (\TL2017)}]
\csitem[\.{readpapersizespecial} \New{180901 (\TL2019)}]
+ \csitem[\.{suppresslongerror} \New{211207 (\TL2022)}]
+ \csitem[\.{suppressmathparerror} \New{211207 (\TL2022)}]
+ \csitem[\.{suppressoutererror} \New{211207 (\TL2022)}]
\csitem[\.{Uchar} \New{191112 (\TL2020)}]
\csitem[\.{Ucharcat} \New{191112 (\TL2020)}]
- \csitem[\.{vadjust} \texttt{pre} \New{210701 (\TL2022)}]
+ \csitem[\.{vadjust} \texttt{pre} \NewKey{210701 (\TL2022)}]
\csitem[\.{vfi}]
\csitem[\texttt{fi}\index{fi=\texttt{fi}}]
\end{simplelist}
@@ -606,6 +602,7 @@ Sync\TeX\ extension (available in \pTeX, \upTeX, \epTeX, \eupTeX):
\begin{simplelist}
\csitem[\.{partokencontext} \New{\TL2022}]
\csitem[\.{partokenname} \New{\TL2022}]
+ \csitem[\.{showstream} \New{\TL2022}] % only e-(u)pTeX, not (u)pTeX
\csitem[\.{tracingstacklevels} \New{\TL2021}]
\end{simplelist}
@@ -1024,6 +1021,7 @@ corresponding to the whole valid Japanese character code range.\label{jfont}
%%% 縦組は諦めよう
% [TODO] どこに書くか困ったので最後に:内部コードのアレな話
+%%% 和文文字コードは連続でない
\subsection{Internal kanji encodings}\label{kanji-internal}
The <character code> is a union of the following two:
@@ -1051,6 +1049,8 @@ where
\]
Therefore, the overall range of <character code> is \emph{not} continuous.
+%%% 和文文字の内部コードとして有効(is_char_kanji が真)かどうかの判定
+%%% → ! Bad character code. エラーを出さないために使える
To check whether an integer is a valid Japanese character code or not,
you can use \.{iffontchar} with \epTeX~190709 or later (\TL2020).
Suppose a count register |\mycount| stores an integer, you can do it as follows:
@@ -1064,6 +1064,24 @@ a representative non-empty\footnote{This assumption is always safe after
one of the standard \pTeX\ formats (e.g. plain \pTeX, \pLaTeX) is loaded.}
Japanese font containing all valid Japanese character code (see \ref{jfont}).
+%%% pTeX がサポートする文字集合は JIS X 0208 のみで,内部コードとして有効な範囲より狭い
+%%% → JIS X 0208 に含まれる文字を表す整数値の判定もできる
+Note that \pTeX\ (not including \upTeX\ with internal Unicode) does not
+support typesetting characters outside JIS~X~0208,
+which is a subset of accepted range of <character code> described above.
+To check if an integer is in the range of JIS~X~0208,
+you can use \.{toucs} with \pTeX~p3.10.0 or later (\TL2022):
+\begin{verbatim}
+ \ifnum\toucs\mycount>0
+ % \mycount is in the range of JIS X 0208
+ \fi
+\end{verbatim}
+The primitive \.{toucs} converts an integer value
+from an internal \Foreign{kanji} code to a Unicode.
+This conversion is based on JIS-Unicode mapping table,\footnote{Defined in
+\code{jisx0208.h} of \code{ptexenc} library.} and returns $-1$
+if no mapping is available for the input integer.
+
\newpage
diff --git a/info/ptex-manual/ptex-manual.pdf b/info/ptex-manual/ptex-manual.pdf
index 47c8812072..04e46db2e7 100644
--- a/info/ptex-manual/ptex-manual.pdf
+++ b/info/ptex-manual/ptex-manual.pdf
Binary files differ
diff --git a/info/ptex-manual/ptex-manual.sty b/info/ptex-manual/ptex-manual.sty
index 6d57f3c840..9956ef10b4 100644
--- a/info/ptex-manual/ptex-manual.sty
+++ b/info/ptex-manual/ptex-manual.sty
@@ -134,4 +134,18 @@
\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus1fill}%
\def\pfill{\unskip~\dotfill\nobreak}
+% logos
+\def\eTeXpre{\texorpdfstring{$\varepsilon$\protect\nobreakdash-}{ε-}}
+\def\eTeX{\eTeXpre\TeX}
+\def\epTeX{\eTeXpre\pTeX}\def\eupTeX{\eTeXpre\upTeX}
+\def\pTeX{\texorpdfstring{p\kern-.10em\TeX}{pTeX}}
+\def\upTeX{u\pTeX}\def\pLaTeX{p\LaTeX}\def\upLaTeX{u\pLaTeX}
+\def\NTS{\leavevmode\hbox{$\cal N\kern-0.35em\lower0.5ex\hbox{$\cal T$}%
+ \kern-0.2emS$}\,}
+\def\TeXXeT{\TeX-\reflectbox{\bfseries\TeX-}}
+\def\OMEGA{\texorpdfstring{$\Omega$}{Ω}}
+\def\pdfTeX{pdf\TeX}
+\def\TL{\TeX\ Live\xspace}
+\AtBeginDocument{\providecommand{\texorpdfstring}[2]{#1}}
+
%%% EOF
diff --git a/info/ptex-manual/ptex-manual.tex b/info/ptex-manual/ptex-manual.tex
index a2e2dc6247..2b11bd6e95 100644
--- a/info/ptex-manual/ptex-manual.tex
+++ b/info/ptex-manual/ptex-manual.tex
@@ -17,7 +17,6 @@
\usepackage{pxjahyper}
\usepackage{hologo}
\usepackage{makeidx}\makeindex
-
% common
\usepackage{ptex-manual}
@@ -48,11 +47,6 @@
\MakeShortVerb*{|}
%%%%%%%%%%%%%%%%
-% logos
-\def\epTeX{$\varepsilon$-\pTeX}\def\eTeX{$\varepsilon$-\TeX}
-\def\eupTeX{$\varepsilon$-\upTeX}\def\upTeX{u\pTeX}
-\def\pTeX{p\kern-.10em\TeX}
-
\def\_{\leavevmode\vrule width .45em height -.2ex depth .3ex\relax}
\frenchspacing
@@ -69,12 +63,10 @@
(以下,「コミュニティ版\pTeX 」)についてまとめたものである.
\pTeX はもともとアスキー株式会社によって開発された\footnote{最新版は
p3.1.11 (2009/08/17).\url{https://asciidwango.github.io/ptex/}}ので,
-しばしば「ASCII \pTeX 」と呼ばれる.
-コミュニティ版\pTeX は,ASCII \pTeX に幾つかの改良を加えた
-「ptexenc版\pTeX\footnote{2004年から2011年まで開発されていた,
-UNIX向け日本語\TeX ディストリビューションptetexや後継のptexliveの
-一部であった.なお,バージョン番号はASCII~\pTeX と同じとされた.}」を
-基にしている.そのため,オリジナルのASCII~\pTeX とは
+しばしば「アスキー\pTeX 」または「ASCII \pTeX 」と呼ばれる.
+コミュニティ版\pTeX は,日本語\TeX 開発コミュニティがアスキー\pTeX を
+国際的なディストリビューション(かつてのte\TeX や現在の\TeX~Live)へ
+導入するにあたって幾つかの改良を加えたものであり,オリジナルとは
動作が異なる点もあるので注意されたい.
\begin{itemize}
\item コミュニティ版\pTeX の開発元:\\
@@ -108,24 +100,100 @@ UNIX向け日本語\TeX ディストリビューションptetexや後継のptexl
% https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=460
\TeX82で扱える文字コードの範囲は0--255であった.
-\pTeX ではこれに加えてJIS~X~0208の文字も利用可能になっている.
+\pTeX ではこれに加えてJIS~X~0208の文字も利用可能になっており,
+入力ファイルの文字コードはISO-2022-JP (jis),EUC-JP (euc),
+Shift-JIS (sjis)またはUTF-8 (utf8)に対応している.
+
+\begin{dangerous}
+ここでは,歴史に興味のある読者への情報として,アスキー\pTeX から
+現在のコミュニティ版\pTeX に至る文字コードの扱いの変遷を述べる.
+
+初期のアスキー\pTeX は「EUC版\pTeX 」「SJIS版\pTeX 」「JIS版\pTeX 」の
+3つのプログラムを別々に用意しており,一つの\pTeX バイナリでは文字コードが
+EUC-JP,Shift-JIS,ISO-2022-JPのどれか一つのファイルしか処理できなかった.
+% JIS のファイルなら EUC/SJIS どちらの ptex でも読み込めますが,
+% これも最初からではなく p2.1.5 (1997年) 以降のようで,
+% それまではスタイルファイルも EUC や SJIS にしておく必要があったようです.
+|-kanji| オプションが追加され,一つの\pTeX バイナリで複数の文字コードを
+選択処理できるようになったのは\pTeX~p3.0.1とp3.0.4の間(2002年10月頃)である.
+% http://tutimura.ath.cx/ptexlive/?ptexenc%2FDetails
+% の土村さんのコメント (2008-02-23) より
+
+コミュニティ版\pTeX は,UNIX向け日本語\TeX ディストリビューション
+ptetex\footnote{土村展之さんによって2004年から2009年まで開発.
+その後継のptexliveは,2010年に\pTeX が\TeX~Liveに取り込まれる際のベースに
+なった.}の開発過程で誕生した.
+2006年頃から文字コードがUTF-8のファイル入力への対応が進められ,2007年には
+文字コード変換を担う関数群が\code{ptexenc}というライブラリに切り出された.
+現在の\TeX~Liveでも\code{ptexenc}は種々のプログラムで利用されている.
+\end{dangerous}
+
+\subsection{ファイルの文字コードと内部コード}
+\pTeX への入力は,ファイルの文字コードそのままで扱われるとは限らず,
+\emph{内部コード}に変換されて内部処理に回される.ファイルの文字コードと
+内部コードは,それぞれ起動時のオプションによって制御できる.
+\begin{itemize}
+ \item |-kanji=|<encoding>
+ \begin{quotation}
+ 入出力テキストファイルの文字コードを指定する.\\
+ 利用可能な<encoding>の値:\code{euc}, \code{sjis}, \code{jis}, \code{utf8}
+ \end{quotation}
+ \item |-kanji-internal=|<encoding>
+ \begin{quotation}
+ 内部コードを指定する(INIモード専用\footnote{フォーマットファイルは
+ 内部コードに依存するので,実際の処理と整合性をとるため
+ virtual modeでは読み込んだフォーマットファイルと同じ内部コードで
+ 動作するように固定している.\pTeX\ p3.8.2以降の仕様.}).\\
+ 利用可能な<encoding>の値:\code{euc}, \code{sjis}
+ \end{quotation}
+\end{itemize}
+このとおり,\pTeX への入力を仮にUTF-8としても,
+必ずEUC-JPかShift-JISのいずれかの内部コードに変換されるため,
+\emph{\pTeX はJIS~X~0208外の文字をサポートしない}.
-\pTeX への入力は\emph{「7ビットASCII文字集合」に
-「ISO-2022-JP (jis),EUC-JP (euc),Shift-JIS (sjis)または
-UTF-8 (utf8)のいずれかでエンコードされたJIS~X~0208の文字集合」を
-加えたもの}として解釈される.
-なお,入出力ファイルの文字コードは,起動時のオプション|-kanji=|<encoding>に
-よって指定できる(可能な<encoding>の値は|utf8|,|euc|,|sjis|,|jis|).
+\pTeX の入出力ファイルの文字コードと内部コードは起動時のバナーから分かる.
+例えば
+\begin{verbatim}
+This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
+(preloaded format=ptex)
+\end{verbatim}
+というバナーの場合は,|(utf8.euc)| から
+\begin{itemize}
+ \item 入出力ファイルの(既定)文字コードはUTF-8(但し,JIS~X~0208の範囲内)
+ \item \pTeX の内部コードはEUC-JP
+\end{itemize}
+という情報が見て取れる.入出力ファイルの文字コードと内部コードが同じ場合は,
+\begin{verbatim}
+This is pTeX, Version 3.14159265-p3.8.0 (sjis) (TeX Live 2018)
+(preloaded format=ptex)
+\end{verbatim}
+のように表示される.この例は,入出力ファイルの文字コードと内部コードが
+ともにShift-JISであることを示す.
+\begin{dangerous}
+上にはこのように書いたが,
+極めて細かい話をすれば,起動時のバナーは時にウソをつくので注意.
+ログファイルには記録されるバナーは常に正しい.これは以下の事情による.
+
+virtual modeでは,起動直後にバナーを表示してから,フォーマットファイル
+読込が行われる.この時点で初めて,起動時の内部コードとフォーマットの
+内部コードの整合性が確認される.ここでもし合致しなかった場合は,\pTeX は
+警告を表示してフォーマットに合った内部コードを選択し,以降の処理を行う.
+ログファイルはこの後にオープンされるため,そこには正しい内部コード
+(フォーマットと同じ内部コード)が書き込まれる\cite{build55}.
+
+このようなウソは,\pTeX に限らず\code{(preloaded format=***)}でも見られる.
+\end{dangerous}
+
+\subsection{和文文字と欧文文字の区別}
+\pTeX への入力は\emph{「7ビットASCII文字集合」に「あるファイルの文字コードで
+エンコードされたJIS~X~0208の文字集合」を加えたもの}として解釈される.
そして,以下の規則により欧文文字と和文文字に区別して取り扱われる.
-なお,内部コードは|-kanji-internal=|<encoding>によって変更できる
-(可能な値は|euc|,|sjis|)が,こちらはini modeでのフォーマット作成時
-に限られ,virtual modeでは不可である(フォーマットの内部コードと実際の
-処理の整合性をとるため,\pTeX\ p3.8.2以降の仕様).
\begin{itemize}
\item 7ビットASCII文字集合は欧文文字として扱われる.
\item 最上位ビットが1の場合,\pTeX はそのバイトで始まる列について
- EUC-JPまたはShift-JISのいずれかの内部コードへの変換を試みる.
+ ファイルの文字コードからEUC-JPまたはShift-JISのいずれかの
+ 内部コードへの変換を試みる.
和文文字の内部コードとして許される整数は
$256c_1+c_2$,但し$c_i\in C_i$であり,ここで
\begin{description}
@@ -136,13 +204,43 @@ UTF-8 (utf8)のいずれかでエンコードされたJIS~X~0208の文字集合
$C_2=\{\hex{40},\dots,\hex{7e}\}\cup\{\hex{80},\dots,\hex{fc}\}$.
\end{description}
である.この内部コードのパターンに合えば和文文字として扱われ,
- 合わなければ8ビット欧文文字のバイト列として扱われる.\footnote{例えば,
+ 合わなければ8ビット欧文文字のバイト列として扱われる\footnote{例えば,
入力ファイルの文字コードがUTF-8の場合,JIS~X~0208にない文字は
- UTF-8のバイト列として読み込まれる.}
+ UTF-8のバイト列として読み込まれる.}.
\end{itemize}
% 参考:kanji.c の |is_char_kanji| の実装
-% [TODO] 8ビット欧文文字の ^^ab 形式への変換について
+なお,\TeX82には「|^^|記法」という間接的な入力法があり,|^^ab|のように
+カテゴリーコード7の文字2つに続いて|0|--|9|, |a|--|f|のいずれかが2つ続くと
+それを16進文字コードとする文字入力がなされたのと同じ処理に回るが,
+\pTeX 系列ではこれは\emph{常に欧文扱い}される(アスキー\pTeX~3.1.4以降
+\footnote{\pTeX~3.1.8で制御綴内での扱いが改善された.また,
+コミュニティ版\pTeX~4.0.0で文字列化においても常に欧文扱いするように改修した.
+これについては\ref{sec:printkanji16bit}節を参照.}).
+
+最近(2010年代以降)では,\pTeX でもファイルの文字コードをUTF-8とする
+利用が増えてきた.
+コミュニティ版\pTeX では,\code{ptexenc}ライブラリによって
+UTF-8ファイル入力を内部コードEUC-JPまたはShift-JISに変換する際に
+以下の特殊な加工を行っている.
+% http://tutimura.ath.cx/ptetex/?UTF-8%C2%D0%B1%FE%282%29
+\begin{itemize}
+ \item Unicodeでのバラツキを同一視する多対一変換
+ \footnote{例えば,ソースファイル中の全角ダーシ(\code{U+2015})と
+ EMダーシ(\code{U+2014})は同一視され,内部的にはJISコード\code{"213D}と
+ して扱われ,ファイルに書き出される時は\code{U+2015}になる.}
+ \item BOMの無視(ファイル先頭に限らず)
+ \item 濁音・半濁音の合字処理
+ \item JISに変換できない文字を|^^ab|形式に変換
+ \footnote{例えば,ソースファイル中にçのような欧文文字を直接書くと,
+ これは和文文字の内部コードに変換できないため|^^c3^^a7|に変換される.}
+\end{itemize}
+なお,UTF-8ファイル出力時にはこのような加工の逆変換は行わない(入力時に
+加工されたままで出力される).
+
+このように\emph{\pTeX は入力を内部コードに変換する処理を含むため,
+オリジナルの\TeX や\pdfTeX などの欧文\TeX とは入力に関して必ずしも
+互換でない}ことに注意が必要である.
\begin{dangerous}
以上で述べた「内部コードの範囲」はJIS~X~0213の漢字集合1面(Shift-JISの場合は2面も)を
@@ -165,45 +263,7 @@ UTF-8 (utf8)のいずれかでエンコードされたJIS~X~0208の文字集合
意図通りに出力されるかは全くの別問題である.
\end{dangerous}
-\pTeX の入出力ファイルの文字コードと内部コードは起動時のバナーから分かる.
-例えば
-\begin{verbatim}
-This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
-(preloaded format=ptex)
-\end{verbatim}
-というバナーの場合は,|(utf8.euc)| から
-\begin{itemize}
- \item 入出力ファイルの(既定)文字コードはUTF-8(但し,JIS~X~0208の範囲内)
- \item \pTeX の内部コードはEUC-JP
-\end{itemize}
-という情報が見て取れる.入出力ファイルの文字コードと内部コードが同じ場合は,
-\begin{verbatim}
-This is pTeX, Version 3.14159265-p3.8.0 (sjis) (TeX Live 2018)
-(preloaded format=ptex)
-\end{verbatim}
-のように表示される(この例は,入出力ファイルの文字コードと内部コードが
-ともにShift-JISの場合).
-
-\begin{dangerous}
-上にはこのように書いたが,
-極めて細かい話をすれば,起動時のバナーは時にウソをつくので注意.
-ログファイルには記録されるバナーは常に正しい.これは以下の事情による.
-
-virtual modeでは,起動直後にバナーを表示してから,フォーマットファイル
-読込が行われる.この時点で初めて,起動時の内部コードとフォーマットの
-内部コードの整合性が確認される.ここでもし合致しなかった場合は,\pTeX は
-警告を表示してフォーマットに合った内部コードを選択し,以降の処理を行う.
-ログファイルはこの後にオープンされるため,そこには正しい内部コード
-(フォーマットと同じ内部コード)が書き込まれる\cite{build55}.
-
-このようなウソは,\pTeX に限らず|(preloaded format=***)|でも見られる.
-\end{dangerous}
-
-なお,\pTeX はDVIファイル内の和文文字コードとしてはJISコードを出力する.
-ただし,|\special|命令の文字列は内部コードで符号化されたバイト列として書き出される.
-
-\section{文字コードの取得と指定}
-
+\subsection{文字コードの取得と指定}
\pTeX でも\TeX82と同様に,
バッククオート(|`|)を使って「|`あ|」のようにして和文文字の内部コードを
内部整数として得ることができる.欧文文字については,1文字の制御綴を
@@ -234,70 +294,15 @@ virtual modeでは,起動直後にバナーを表示してから,フォー
有限オートマトンとして記述できる(\cite{topic}).
\pTeX では,和文文字には
16~($\mathit{kanji}$), 17~($\mathit{kana}$), 18~($\mathit{other\_kchar}$)の
-カテゴリーコードの3つのいずれかが
-割り当てられており,\pTeX の入力プロセッサの状態遷移図は
-\autoref{fig:ptex_input}のように\TeX82のそれを拡張したものになっている.
+カテゴリーコードのいずれかが割り当てられている,
-\autoref{fig:ptex_input}を見れば分かるように,
+また,\pTeX~p4.0.0での入力プロセッサは
+\ref{sec:ptex_input}節で述べるように\TeX82のそれを拡張したものになっている.
+後の\autoref{fig:ptex_input}を見れば分かるように,
(欧文文字直後の改行は空白文字扱いされるのと対照的に)
-\emph{和文文字直後の改行は何も発生しない}.和文文字の直後にグループ開始・終了が来て
-行が終わった場合も同様である.
-
-\begin{figure}[b]
-\small
-\[
-\entrymodifiers={++[o][F-]}
-\xymatrix{%
- *\txt{}&*\txt{}&*\txt{}&*\txt{}\\
- *\txt{}\ar[r]&
- \textit{N} \ar@(ur,ul)[rr]^{1,2,7,13,E}
- \ar[u]^{5\tpar, 14}
- \ar@(d,l)[]^{9\tign,10\tign}
- \ar@/_3em/[ddrr]^(0.55){J}
- \ar[dr]^(0.4){0}&*\txt{}
- &\textit{M}
- \ar[u]^-{5\tsp,14}\ar@/_.5em/[dd]_(0.7){J}
- \ar@/_3em/[lldd]_(0.85){10}
- \ar@(u,r)[]^{1,2,7,9\tign,13,E}
- \ar@/_1ex/[dl]_0&*\txt{}\\
- *\txt{}&*\txt{}&*+[F-]\txt{\mbox{制御綴読み取り}}
- \ar@{-->}@/^.5em/[dl]\ar@{-->}@/_1ex/[ur]\\
- *\txt{}&
- \textit{S}\ar@/^.5em/[ur]^-(0.4){0}
- \ar[d]^-{5,14}
- \ar@(d,l)^{9\tign,10\tign}
- \ar@(d,d)@/_3em/[rr]_{J}
- \ar@/_3em/[uurr]_(0.3){1,2,7,13,E}&*\txt{}&
- \textit{K}\ar[ul]^(0.3){0}\ar@/_.5em/[uu]_{7,13,E}
- \ar@/^1.5em/[ll]^{10}
- \ar@(d,r)[]_{1,2,9\tign,J}
- \ar[d]_-{5,14}
- &*\txt{}\\
- *\txt{}&*\txt{}&*\txt{}&*\txt{}
-%
-}
-\]
-\begin{itemize}
- \item 状態\textit{N} (new line),状態\textit{M} (middle of line),
- 状態\textit{S} (skipping spaces)は\TeX82と同じであるが,
- 新たに状態\textit{K} (middle of kanji)が追加されている.
- \item 矢印の上下に書いた数字はカテゴリーコードを表す.
- \item ``E''はカテゴリーコード3, 4, 6, 8, 11, 12の文字達を,
- ``J''は和文文字を表す.
- \item ``$5\tpar$''のような下付き添字は「挿入するトークン」を表している.
- 但し,``$9\tign$'', ``$10\tign$''はその文字を無視することを示している.
- \item 図中央の「制御綴読み取り」の後で$S$,~$M$どちらの状態になるかは,
- 次のように決まっている:
- \begin{itemize}
- \item 制御綴が「|\ |」のようなカテゴリーコード10の文字
- からなるコントロールシンボルのときは状態$S$に遷移する.
- \item 制御綴が「|\#|」「|\】|」のようなその他のコントロールシンボルのときは状態$M$に遷移する.
- \item 制御綴がコントロールワードのときは状態$S$に遷移する.
- \end{itemize}
-\end{itemize}
-\caption{\pTeX の入力プロセッサの状態遷移図}
-\label{fig:ptex_input}
-\end{figure}
+\emph{和文文字直後の改行は何も発生しない}.
+これは,日本語の原稿内では自由な箇所で改行が行えたほうが便利なためである.
+% jtexdoc.tex に記載あり
和文文字のカテゴリーコードの値による動作の違いは次のようになる:
\begin{itemize}
@@ -321,10 +326,10 @@ virtual modeでは,起動直後にバナーを表示してから,フォー
\begin{cslist}
\csitem[\.{kcatcode} <character code>=<16--18>]
- 日本語\TeX 開発コミュニティ版の\pTeX では,和文文字のカテゴリーコード(|\kcatcode|)は
+ コミュニティ版\pTeX では,和文文字のカテゴリーコード(|\kcatcode|)は
DVI中の上位バイトごと(すなわち,JISコードでいう区ごと)に値が設定可能である
\footnote{%
- オリジナルのASCII~\pTeX では,内部コードの上位バイトごとに値が設定可能であった.
+ オリジナルのアスキー\pTeX では,内部コードの上位バイトごとに値が設定可能であった.
すなわち,内部コードがEUC-JPのときは区ごとに設定可能であったが,
内部コードがShift-JISのときは
$2n-1$区・$2n$区($1\leq n\leq 47$)は同一のカテゴリーコードを持つことになる.
@@ -346,18 +351,19 @@ virtual modeでは,起動直後にバナーを表示してから,フォー
% * 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}
\begin{dangerous}
- 例えば,以下のコードで定義される|\X|, |\Y|で引数終端をしめす「あ」には
- カテゴリーコードの情報は格納されない.そのため,|\X|,~|\Y|は全く同じ動作となる.
- \begin{verbatim}
+ 例えば,以下のコードで定義される|\X|, |\Y|で引数終端を示す「あ」には
+ カテゴリーコードの情報は格納されない.
+ そのため,\pTeX では|\X|,~|\Y|は全く同じ動作となる.
+\begin{verbatim}
\kcatcode`あ=16
\def\X#1あ{\message{X: #1}}
\kcatcode`あ=17
\def\Y#1あ{\message{X: #1}}
- \end{verbatim}
+\end{verbatim}
+ なお,\upTeX では|\kcatcode|は大きく仕様変更されており,
+ |\X|と|\Y|は異なる動作となる.
\end{dangerous}
\begin{dangerous}
@@ -367,10 +373,307 @@ virtual modeでは,起動直後にバナーを表示してから,フォー
事実上は「16--18のどれかを格納可能な追加レジスタ」程度の使い方しかない.
\end{dangerous}
-% [TODO] 和文文字を含む文字列化の挙動
-% "kanji character " になることも明文化したい
-% どの \section に含めるかわからないのでとりあえずここに置く
-|\string|や|\meaning|などの文字トークン列生成については以下の通り:
+\subsection{\pTeX の入力プロセッサ【\pTeX~4.0.0での改修を含む】}\label{sec:ptex_input}
+\TeX82の入力プロセッサは有限オートマトンとして記述できる.\pTeX においてもその点は
+変わらないが,和文文字絡みで拡張されたものになっている.
+
+\begin{figure}[tb]
+\small
+\[
+\entrymodifiers={++[o][F-]}
+\xymatrix{%
+ *\txt{}&*\txt{}&*\txt{}&*\txt{}\\
+ *\txt{}\ar[r]&
+ \textit{N} \ar@(ur,ul)[rr]^{1,2,7,13,E}
+ \ar[u]^{5\tpar, 14}
+ \ar@(d,l)[]^{9\tign,10\tign}
+ \ar@/_3em/[ddrr]^(0.55){J}
+ \ar[dr]^(0.4){0}&*\txt{}
+ &\textit{M}
+ \ar[u]^-{5\tsp,14}\ar@/_.5em/[dd]_(0.7){J}
+ \ar@/_3em/[lldd]_(0.85){10}
+ \ar@(u,r)[]^{1,2,7,9\tign,13,E}
+ \ar@/_1ex/[dl]_0&*\txt{}\\
+ *\txt{}&*\txt{}&*+[F-]\txt{\mbox{制御綴読み取り}}
+ \ar@{-->}@/^1ex/[dl]\ar@{-->}@/_1ex/[ur]
+ \ar@{-->}@/^1ex/[rrr]
+ &*\txt{}&*\txt{}&\textit{T}
+ \ar@/^1ex/[lll]^(0.25){0}
+ \ar[llu]_{7,13,E}\ar[d]^-{5,14}\ar@/^1ex/[lld]^{1,2,J}
+ \ar@(u,r)[]^{9\tign,10\tign}
+ \\
+ *\txt{}&
+ \textit{S}\ar@/^.5em/[ur]^-(0.4){0}
+ \ar[d]^-{5,14}
+ \ar@(d,l)^{9\tign,10\tign}
+ \ar@(d,d)@/_3em/[rr]_{J}
+ \ar@/_3em/[uurr]_(0.3){1,2,7,13,E}&*\txt{}&
+ \textit{K}\ar[ul]^(0.3){0}\ar@/_.5em/[uu]_(0.3){7,13,E}
+ \ar@/^1.5em/[ll]^{10}
+ \ar@(d,r)[]_{1,2,9\tign,J}
+ \ar[d]_-{5,14}
+ &*\txt{}&*\txt{}\\
+ *\txt{}&*\txt{}&*\txt{}&*\txt{}
+%
+}
+\]
+ \centering
+ \parbox{35zw}{%
+ ``E''はカテゴリーコード3, 4, 6, 8, 11, 12の文字達を,``J''は和文文字を表す.\\
+ ``$5\tpar$''のような下付き添字は「挿入するトークン」を表す.\\
+ 但し,``$9\tign$'', ``$10\tign$''はその文字を無視することを示している.
+ }
+ \caption{\pTeX~p4.0.0(既定)の入力プロセッサの状態遷移図}
+ \label{fig:ptex_input}
+\end{figure}
+
+\autoref{fig:ptex_input}は\emph{\pTeX~p4.0.0既定時}における入力プロセッサの状態遷移図である.
+\TeX82から拡張された点,および説明が必要な点を以下に述べる.
+\begin{description}
+ \item[内部状態の追加] \TeX82 では状態\textit{N} (new line),状態\textit{M} (middle of line),
+ 状態\textit{S} (skipping spaces)という3状態であったが,\pTeX では
+ 次の2状態が追加された:
+ \begin{description}
+ \item[状態\textit{K}] 和文文字の直後.状態\textit{M}との差異は改行でスペースを出力しないこと.
+ \item[状態\textit{T}] 和文文字で終わるコントロールワードの直後.
+ 状態\textit{S}との差異はグループ開始・終了(|{|, |}|)での遷移先が
+ 状態\textit{M}でなく状態\textit{K}であること.
+ \end{description}
+ \item[「制御綴読み取り」後の状態] 以下のように決まっている:
+ \begin{itemize}
+ \item 制御綴が「|\ |」のようなカテゴリーコード10の文字
+ からなるコントロールシンボルのときは状態$S$に遷移する.
+ \item 制御綴が「|\#|」「|\】|」のようなその他のコントロールシンボルのときは状態$M$に遷移する.
+ \item 制御綴がコントロールワードのときは,
+ その名称の末尾の文字が欧文文字のときは状態$S$に,和文文字のときは状態$T$に遷移する.
+ \end{itemize}
+\end{description}
+
+実際には以下に説明する\.{ptexlineendmode}プリミティブによって,\pTeX の入力プロセッサの挙動は
+ある程度ユーザが制御できる.
+
+\begin{cslist}
+ \csitem[\.{ptexlineendmode}=<0--7>]
+ \pTeX の入力プロセッサの挙動を制御する.この値を2進法で$zyx$と表したとき
+ \footnote{%
+ つまり$x$は「一の位」,$y$は「二の位」,$z$は「四の位」である.
+ 8以上の値を指定した場合は,下位3~bitの値が使われる.
+ 負数を指定してもエラーは発生しないが,その場合の動作は未定義である.
+ },$x$,~$y$,~$z$の値は,それぞれ以下のような状態で行が終わった場合,
+ 改行が空白文字を発生させるかを制御する.
+ いずれも0では「空白文字を発生させない」,1では「空白文字を発生させる」.
+ \begin{description}
+ \item[$x$] 和文文字で終わるコントロールワードの直後にグループ開始・終了が1つ以上
+ \footnote{%
+ \pTeX では,このとき「改行が何も発生させない」挙動を伝統的にとってきた
+ (\TeX82からの改造量を減らしたかったのであろう).
+ この挙動の是非が\.{ptexlineendmode}実装の一要因となった.
+ }
+ \item[$y$] 和文文字からなるコントロールシンボルの直後
+ \item[$z$] (コントロールワード・コントロールシンボルの名称の一部でない)
+ 和文文字の直後にグループ開始・終了が1つ以上
+ \end{description}
+
+ このプリミティブは\pTeX~p4.0.0で追加された.既定値は0(つまり$x=y=z=0$).
+\end{cslist}
+\begin{dangerous}
+ 「和文文字からなるコントロールシンボルの直後にグループ開始・終了が1つ以上ある」状態で行が終了した場合,
+ 改行が空白文字を発生させるのは$y$,~$z$のうち少なくとも1つが1のときである.
+\end{dangerous}
+
+\begin{dangerous}
+ 従って,和文文字と行末の関係を例で示すと,以下のようになる:
+ \medskip
+
+ \begin{enumerate}
+ \itemsep\medskipamount
+ \item コントロールワード・コントロールシンボルの一部でない和文文字で行が終わった場合,
+ 改行は何も発生しない.
+
+ \medskip
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+あいあ
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+あいあ
+い
+ \end{minipage}%
+
+ \item コントロールワード・コントロールシンボルの一部でない和文文字の直後に
+ グループ開始・終了(|{|, |}|)が1つ以上ある状態で行が終わった場合,
+ \.{ptexlineendmode}の値が0--3のとき,改行は何も発生しない.
+ 4--7のとき,改行は空白文字を発生する.
+
+ \medskip
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=0
+{あいあ}
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=0
+{あいあ}
+い
+ \end{minipage}%
+ \hfill\vrule\hfill\kern-2zw
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=4
+{あいあ}
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=4
+{あいあ}
+い
+ \end{minipage}
+ \item 和文文字で終わるコントロールワードの直後にグループ開始・終了が
+ 1つ以上ある状態で行が終わった場合,
+ \.{ptexlineendmode}の値が偶数のとき,改行は何も発生しない.
+ 奇数のとき,改行は空白文字を発生する.
+
+ \medskip
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=0
+\def\漢{あ}{\漢}
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=0
+\def\漢{あ}{\漢}
+い
+ \end{minipage}%
+ \hfill\vrule\hfill\kern-2zw
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=1
+\def\漢{あ}{\漢}
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=1
+\def\漢{あ}{\漢}
+い
+ \end{minipage}
+ \item 和文文字からなるコントロールシンボルで行が終わった場合,
+ \.{ptexlineendmode}の値が0,~1, 4,~5のとき,改行は何も発生しない.
+ 2,~3, 6,~7のとき,改行は空白文字を発生する.
+
+ \medskip
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=0
+\def\】{あ}\】
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=0
+\def\】{あ}\】
+い
+ \end{minipage}%
+ \hfill\vrule\hfill\kern-2zw
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=2
+\def\】{あ}\】
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=2
+\def\】{あ}\】
+い
+ \end{minipage}
+ \item 和文文字からなるコントロールシンボルの直後にグループ開始・終了が1つ以上ある状態で行が終わった場合,
+ \.{ptexlineendmode}の値が0,~1のとき,改行は何も発生しない.
+ その他のとき,改行は空白文字を発生する.
+
+ \medskip
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=0
+\def\】{あ}{\】}
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=0
+\def\】{あ}{\】}
+い
+ \end{minipage}%
+ \hfill\vrule\hfill\kern-2zw
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=1
+\def\】{あ}{\】}
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=1
+\def\】{あ}{\】}
+い
+ \end{minipage}
+ \par\medskip
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=2
+\def\】{あ}{\】}
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=2
+\def\】{あ}{\】}
+い
+ \end{minipage}%
+ \hfill\vrule\hfill\kern-2zw
+ \begin{minipage}[t]{13zw}
+\begin{verbatim}
+\ptexlineendmode=4
+\def\】{あ}{\】}
+い
+\end{verbatim}
+ \end{minipage}\quad →\quad
+ \begin{minipage}[t]{5zw}
+\ptexlineendmode=4
+\def\】{あ}{\】}
+い
+ \end{minipage}
+ \medskip
+ \end{enumerate}
+\ptexlineendmode=0
+
+ なお,以前の\pTeX の入力プロセッサの挙動は
+ \begin{itemize}
+ \item \pTeX~p3.8.1以前(アスキー版も同じ)の挙動は|\ptexlineendmode=3|~($(x,y,z)=(1,1,0)$)
+ \item \pTeX~p3.8.2以降p3.10.0まで挙動は|\ptexlineendmode=1|~($(x,y,z)=(1,0,0)$)
+ \end{itemize}
+ としてそれぞれ再現できる(\cite{build87}).
+
+% * 欧文文字直後の改行では空白文字を発生させる
+% * コントロールワードや「\ 」の直後の改行は何も発生しない
+% * 「\ 」以外のコントロールシンボルの直後の改行は空白文字を発生させる
+% * 和文文字直後の改行は何も発生させない
+% * 和文文字→グループ境界 {, } が有限個という状態で行が終わった場合も,
+% 何も発生しない(!)
+% ref. https://qiita.com/h-kitagawa/items/de963380bd3e576ab4e3
+\end{dangerous}
+
+
+
+\subsection{和文文字の文字列化の挙動【\pTeX~4.0.0での改修を含む】}\label{sec:printkanji16bit}
+|\string|や|\meaning|などの文字トークン列生成については以下の通りである.
\begin{itemize}
\item 欧文文字は\TeX82と同様で,(文字コード32の空白を除き)
すべてカテゴリーコード12の文字トークンになるが,
@@ -383,7 +686,7 @@ virtual modeでは,起動直後にバナーを表示してから,フォー
という問題があった.
\TeX~Live 2018の\pTeX~p3.8.1でこの問題は修正された(\cite{build37}).}.
\item 和文文字はそのカテゴリーコードによらず,|\meaning|すると
- \begin{itemize}
+ \begin{itemize}% すべて "kanji character " になる
\item \the\kcatcode`漢:\quad \texttt{\meaning 漢}
\item \the\kcatcode`あ:\quad \texttt{\meaning あ}
\item \the\kcatcode`):\quad \texttt{\meaning )}
@@ -391,6 +694,42 @@ virtual modeでは,起動直後にバナーを表示してから,フォー
となる.
\end{itemize}
+さて,\pTeX~version 3系列(\TeX~Live 2021まで)では|\meaning|,|\string|等の
+文字列化や制御綴名において和文文字と欧文文字の区別が失われてしまうケースがあった.
+% 途中の結果を一旦配列 |str_pool| に格納する処理で和欧文の区別が失われていた.
+\pTeX~4.0.0以降(\TeX~Live 2022)では,この状況でも
+和欧文の区別が維持される\cite{build81}.
+\begin{dangerous}
+\TeX~Live 2021では,ファイル文字コードUTF-8,内部コードEUC-JPの場合に例えば
+\begin{verbatim}
+ \def\fuga{^^c3^^bf 耽}\fuga
+ \meaning\fuga
+\end{verbatim}
+と入力すると,一行目は\def\fuga{^^c3^^bf 耽}「\code{\fuga}」であるのに対し
+二行目は「\code{macro:->耽 耽}」となっていた(\char\euc"C3BFはEUC-JPで
+\code{"C3BF}である.|^^c3^^bf|の代わりに直接\code{ÿ}と入力しても同様).
+また
+\begin{verbatim}
+ \catcode"C3=11 \catcode"BF=11
+ \def\耽{P} \def\^^c3^^bf{Q}
+\end{verbatim}
+としたときの|\meaning\耽|は「|macro:->Q|」であった.
+改修後の\TeX~Live 2022では,一つ目の例は
+ \def\fuga{^^c3^^bf 耽}「\code{\meaning\fuga}」% 和欧文が区別される
+であるし,二つ目の例は
+ \catcode"C3=11 \catcode"BF=11
+ \def\耽{P} \def\^^c3^^bf{Q}
+ 「\code{\meaning\耽}」% 和欧文が区別されるので "P" になるはず
+となる.
+% メモ:上の例は「^^c5^^bf <=> 顛」でもよかったのだが,
+% マニュアルの欧文フォント newtx/newtx で表示可能な文字にした.
+% 外部ファイル出力の変化例:
+% \label{ß}% % TL2021: <C3>^^9f => TL2022: ^^c3^^9f
+% \label{^^c3^^9f}% % TL2021: <C3>^^9f => TL2022: ^^c3^^9f
+% \label{ÿ}% % TL2021: 耽 => TL2022: ^^c3^^bf
+% \label{^^c3^^bf}% % TL2021: 耽 => TL2022: ^^c3^^bf
+\end{dangerous}
+
% jtex.tex の「ラインブレーク」を簡略化
\section{禁則}
\label{sec:kinsoku}
@@ -1269,8 +1608,8 @@ p3.1.2で復活したという経緯がある.}.
% luatexja.dtx より pTeX 用に移植
\begin{dangerous}
- 以上に挙げたプリミティブ(|\kuten|, |\jis|, |\euc|, |\sjis|, |\kansuji|)は
- 展開可能(expandable)であり,
+ 以上に挙げたプリミティブ(|\kuten|, |\jis|, |\euc|, |\sjis|, |\ucs|,
+ |\toucs|, |\kansuji|)は展開可能(expandable)であり,
内部整数を引数にとるが,実行結果は\emph{文字列}であることに注意
(\TeX82の|\number|, |\romannumeral|と同様).
@@ -1518,6 +1857,9 @@ has been |\let| equal to a non-active character token.
\pTeX でも通常2であるが,\pTeX の拡張DVI命令である|dir|が
使用されている場合のみ3にセットされる.
+% [TODO] 書き方を工夫したい.
+|\special|命令の文字列は内部コードで符号化されたバイト列として書き出される.
+
\begin{thebibliography}{99}
\bibitem{topic} Victor Eijkhout, \textit{\TeX\ by Topic, A \TeX nician's Reference},
Addison-Wesley, 1992.\\
@@ -1560,6 +1902,12 @@ has been |\let| equal to a non-active character token.
\bibitem{man4} aminophen, 「pTeX の和文文字トークンのカテゴリーコード」,
2019/04/22,\\
\url{https://github.com/texjporg/ptex-manual/issues/4}
+ \bibitem{build87} h-kitagawa, 「[ptex] [和字]+[ブレース]で終わっている行の行端の扱い」,
+ 2019/08/05,\\
+ \url{https://github.com/texjporg/tex-jp-build/issues/87}
+ \bibitem{build81} h-kitagawa, 「バイト列と和文文字トークンの区別」,
+ 2019/06/08,\\
+ \url{https://github.com/texjporg/tex-jp-build/issues/81}
\bibitem{dvistd0} TUG DVI Standards Working Group,
\textit{The DVI Driver Standard, Level 0}.\\
\url{https://ctan.org/pkg/dvistd}