summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex')
-rw-r--r--Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex408
1 files changed, 343 insertions, 65 deletions
diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex b/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex
index b6806860b7a..f48e8bc8252 100644
--- a/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex
+++ b/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex
@@ -2,7 +2,8 @@
\documentclass[a4paper,11pt,nomag]{jsarticle}
\usepackage[textwidth=42zw,lines=40,truedimen,centering]{geometry}
\usepackage{amsmath}
-\usepackage{array}\usepackage[arrow]{xy}
+\usepackage{array}\usepackage[all]{xy}
+\SelectTips{cm}{}
%\usepackage[dvipdfmx]{graphicx}
\usepackage[T1]{fontenc}
\usepackage{booktabs,enumitem,multicol}
@@ -134,6 +135,10 @@
\fi
\fi}
+\def\tsp{_{\mbox{\fontsize\sf@size\z@\ttfamily \char32}}}
+\def\tpar{_{\mbox{\fontsize\sf@size\z@\ttfamily \string\par}}}
+\def\tign{_{\mbox{\fontsize\sf@size\z@\selectfont --}}}
+
\usepackage{shortvrb}
\MakeShortVerb*{|}
@@ -167,37 +172,52 @@ e-mail: \texttt{issue(at)texjp.org}}}
ここでは,\pTeX の日本語組版の概略と,それを実現するために導入された
プリミティブを説明する.
-\section{文字コードの指定}
-\TeX82では「文字コードの範囲」は0--255であった.
-一方,\pTeX では「文字コードを引数にとるプリミティブ」といっても,状況によって
-\begin{itemize}
- \item 欧文文字の文字コード0--255をとる(例:|\catcode|)
- \item 和文文字の内部コードをとる(例:|\inhibitxspcode|)
- \item 上記2つのどちらでもとれる(例:|\prebreakpenalty|)
-\end{itemize}
-のいずれの場合もありうる.
+\section{\pTeX で利用可能な文字}
-\medskip
+\TeX82で扱える文字コードの範囲は0--255であった.
+\pTeX ではこれに加えてJIS X 0208の文字も利用可能であり,
+以上の文字集合が欧文文字と和文文字に区別されて扱われる.
-本ドキュメントでは上のどれかを明示するために,以下のような記法を採用する.
-\begin{description}
- \item[<8-bit number>] 0--255の範囲内の整数
- \item[<kanji code>] 和文文字の内部コード
- \item[<character code>] 0--255の範囲内の整数,および和文文字の内部コード
- \item[<16-bit number>] 0--65535の範囲内の整数
-\end{description}
+[TODO] 欧文文字とは何か,和文文字とは何か
+
+% https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=460#p2422
+% あたりによると,以下のようになるが,今も正しいのか?
+%
+% \pTeX への入力は,「7ビットASCII文字集合」に「ISO-2022-JP (jis),EUC-JP (euc),
+% Shift-JIS (sjis)またはUTF-8 (utf8)のいずれかでエンコードされた
+% JIS X 0208の文字集合」を加えたものとして解釈される.
-\pTeX の内部コードはEUC-JPかShift-JISのいずれかである.和文文字の内部コードとして
+\pTeX は,入力をEUC-JPまたはShift-JISのいずれか(後述)の
+内部コードに変換して取り扱う.和文文字の内部コードとして
許される整数は$256c_1+c_2$,但し$c_i\in C_i$であり,ここで
\begin{description}
- \item[内部コードがEUC-JPのとき] $C_1=C_2=\{\hex{a1},\dots,\hex{fe}\}$.
- \item[内部コードがShift-JISのとき]
- $C_1=\{\hex{81},\dots,\hex{9f}\}\cup\{\hex{e0},\dots,\hex{fc}\}$,\\
- $C_2=\{\hex{40},\dots,\hex{7e}\}\cup\{\hex{80},\dots,\hex{fc}\}$.
+ \item[内部コードがEUC-JPのとき]
+ $C_1=C_2=\{\hex{a1},\dots,\hex{fe}\}$.
+ \item[内部コードがShift-JISのとき]
+ $C_1=\{\hex{81},\dots,\hex{9f}\}\cup\{\hex{e0},\dots,\hex{fc}\}$,\\
+ $C_2=\{\hex{40},\dots,\hex{7e}\}\cup\{\hex{80},\dots,\hex{fc}\}$.
\end{description}
である.
-\begin{dangerous}
-\pTeX の内部コードは\pTeX 起動時のバナーから分かる.例えば
+
+% この内部コードのパターンに合えば和文文字として扱われ,
+% 合わなければ欧文文字として扱われる,でよい?
+
+% http://tutimura.ath.cx/ptexlive/?ptexenc%2FDetails
+% http://ajt.ktug.org/assets/2008/5/1/0201tsuchimura_kuroki.pdf
+% https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=460
+
+入力ファイルの文字コードがUTF-8の場合,JIS X 0208にない文字は
+UTF-8のバイト列として読み込まれる.
+
+\pTeX の入力ファイルの文字コードは,起動時のオプション|-kanji|によって
+変更できる(可能な値は|utf8|,|euc|,|sjis|,|jis|).
+同様に,内部コードは|-kanji-internal|オプションによって変更できる
+(可能な値は|euc|,|sjis|)が,こちらはini modeでのフォーマット作成時
+に限られ,virtual modeでは不可である(フォーマットの内部コードと実際の
+処理の整合性をとるため,\pTeX\ p3.8.2以降の仕様).
+
+\pTeX の入力ファイルの文字コードと内部コードは起動時のバナーから分かる.
+例えば
\begin{verbatim}
This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
(preloaded format=ptex)
@@ -207,14 +227,167 @@ This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
\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}
-\TeX82と同様に,バッククオート(|`|)を使って「|`あ|」のようにして和文文字の内部コードを
+[TODO] \pTeX の内部コードはEUC-JPかShift-JISのいずれかであるが,
+DVIファイル内の和文文字コードとしてはJISコードを出力する.
+
+\section{文字コードの取得と指定}
+
+\pTeX でも\TeX82と同様に,
+バッククオート(|`|)を使って「|`あ|」のようにして和文文字の内部コードを
内部整数として得ることができる.欧文文字については,1文字の制御綴を
代わりに指定することができた(例えば,「|`b|」と「|`\b|」は同じ意味だった)が,
同じことを和文文字に対して「|`\あ|」などと行うことはできない.
+\pTeX では「文字コードを引数にとるプリミティブ」といっても,状況によって
+\begin{itemize}
+ \item 欧文文字の文字コード0--255をとる(例:|\catcode|)
+ \item 和文文字の内部コードをとる(例:|\inhibitxspcode|)
+ \item 上記2つのどちらでもとれる(例:|\prebreakpenalty|)
+\end{itemize}
+のいずれの場合もありうる.
+
+\medskip
+
+本ドキュメントでは上のどれかを明示するために,以下のような記法を採用する.
+\begin{description}
+ \item[<8-bit number>] 0--255の範囲内の整数
+ \item[<kanji code>] 和文文字の内部コード
+ \item[<character code>] 0--255の範囲内の整数,および和文文字の内部コード
+ \item[<16-bit number>] 0--65535の範囲内の整数
+\end{description}
+
+\section{和文文字と\.{kcatcode}}
+\TeX82では,各文字に0--15のカテゴリーコードを割り当てており,
+\TeX82の入力プロセッサは「どのカテゴリーコードの文字が来たか」で状態が遷移する
+有限オートマトンとして記述できる(\cite{topic}).
+\pTeX では,和文文字には
+16~($\mathit{kanji}$), 17~($\mathit{kana}$), 18~($\mathit{other\_kchar}$)の
+カテゴリーコードの3つのいずれかが
+割り当てられており,\pTeX の入力プロセッサの状態遷移図は
+\autoref{fig: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 矢印の上下に書いた数字はカテゴリーコードを表す.
+ \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}
+
+和文文字のカテゴリーコードの値による動作の違いは次のようになる:
+\begin{itemize}
+ \item \TeX82では,「複数文字からなる命令」(コントロールワード)には
+ カテゴリーコードが11~($\mathit{letter}$)の文字しか使用できないことになっていたが,
+ \pTeX では16,~17の和文文字も合わせて使用することができる.
+ \item 一方,カテゴリーコードが18の和文文字はコントロールワード中には使用できない.
+ 「|\】|」のように一文字命令(コントロールシンボル)に使用することはできる
+ \footnote{「|\】|」のように和文文字からなるコントロールシンボルを文字列化する際に,
+ バージョンp3.7.2以前の\pTeX では「|\】 |」と後ろに余計な空白文字を補ってしまうという問題があった.
+ \TeX~Live 2018の\pTeX~p3.8.1でこの問題は修正された(\cite{build37}).
+
+ また,バージョンp3.8.1以前では
+ 「|\】|」のような和文のコントロールシンボルで行が終わった場合,「|\!|」のような
+ 欧文コントロールシンボルと同様に改行由来の空白が追加されてしまい,
+ 和文文字直後の改行は何も発生しないという原則に反していたが,
+ こちらは\TeX~Live 2019の\pTeX~p3.8.2で修正された(\cite{build37}).
+ }.
+ \item 後で説明する|\jcharwidowpenalty|は,カテゴリーコードが16,~17の和文文字の前にのみ
+ 挿入されうるもので,カテゴリーコードが18の和文文字の前には挿入されない.
+ \item 欧文文字は\TeX82と同様に1つの文字トークンはカテゴリーコード$c$と文字コード$s$の組
+ み合わせ($256c+s$)で表現されていた.\pTeX では和文文字トークンは文字コードのみで表現さ
+ れ,そのカテゴリーコードは随時算出されるようになっている
+ \footnote{\upTeX では和文文字トークンについてもそのカテゴリーコードの情報が
+ 含まれるようになった.}.
+\end{itemize}
+
+\begin{cslist}
+ \csitem[\.{kcatcode} <character code>=<16--18>]
+ |\kcatcode|はDVI中の上位バイト(すなわち,JISコードでいう区ごと)に値が設定可能である.
+ 初期状態では1,~2, 7--15, 85--94区の文字が18,3--6区の文字が17,16--84区の文字が16である.
+\end{cslist}
+\begin{dangerous}
+ |\kcatcode|では欧文文字の文字コード(0--255)も指定することができるが,
+ その場合「0区扱い」として扱われる
+ \footnote{\pTeX の処理でこの「0区」の|\kcatcode|が使われることはないので,
+ 事実上は「16--18のどれかを格納可能な追加レジスタ」程度の使い方しかない.}.
+
+ なお,\upTeX においては,|\kcatcode|は大きく仕様変更されている.
+\end{dangerous}
+
% jtex.tex の「ラインブレーク」を簡略化
\section{禁則}
欧文と和文の処理で見かけ上最も大きな違いは,行分割処理であろう.
@@ -263,7 +436,8 @@ This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
直後に10000のペナルティが付けられ,行末禁則文字の対象となる.
\end{cslist}
-和文文字,欧文文字の区別無しに指定できる.また,同一の文字に対して
+|\prebreakpenalty|, |\postbreakpenalty|は
+和文文字,欧文文字の区別無しに指定できるが,同一の文字に対して
両方のペナルティを同時に与えるような指定はできない
(もし両方指定された場合,後から指定されたものに置き換えられる).
禁則テーブルには256文字分の領域しかないので,
@@ -375,7 +549,7 @@ This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
\end{dangerous}
\begin{cslist}
-\csitem[\.{xkanjiskip}]
+\csitem[\.{xkanjiskip}=<skip>]
和文文字と欧文文字の間に標準で入るグルーを設定する.
段落途中でこの値を変えても影響はなく,
段落終了時の値が段落全体にわたって用いられる.
@@ -458,7 +632,7 @@ This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
\begin{itemize}
\item メトリック由来の空白が挿入されないだけであり,
その代わりに|\kanjiskip|や|\xkanjiskip|が挿入されることは禁止していない.
- \item 本命令は現在が(非限定,限定問わず)水平モードのときしか効力を発揮しない
+ \item 本命令は現在のモードが(非限定,限定問わず)水平モードのときしか効力を発揮しない
(数式モードでも効かない).
段落が和文文字「\verb+【+」で始まり,その文字の直前にメトリック由来の空白が入ることを抑止
したい場合は,次のように一旦段落を開始してから|\inhibitglue|を実行する必要がある.
@@ -466,8 +640,40 @@ This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
\leavevmode\inhibitglue 【
\end{verbatim}
\end{itemize}
+ 以前の\pTeX では「この命令が実行された位置」が何を指すのか大雑把でわかりにくかったが,
+ \TeX~Live 2019の\pTeX~p3.8.2以降では,明確に\emph{新たなノードが追加されない限り},と
+ 定めた(\cite{build28,forum_2566}).すなわち,
+ \begin{enumerate}
+ \item |\inhibitglue|は,ノード挿入処理を行う命令
+ (|\null|,~|\hskip|, |\kern|, |\vrule|,~\dots)が後ろに来た場合は無効化される.
+ \item 一方,|\relax|やレジスタへの代入などのノードを作らない処理では無効化されない.
+ \item |\inhibitglue|の効果は別レベルのリストには波及しない.
+ \end{enumerate}
\end{cslist}
\begin{dangerous}
+ 以上の説明の具体例を以下に示す:
+
+ \medskip\noindent
+ \begin{minipage}[t]{.8\linewidth}
+ \begin{verbatim}
+ )\vrule(\\
+ )\vrule\inhibitglue(\\
+ )\inhibitglue\vrule(\\
+ )\inhibitglue\relax(\\
+ )\relax\inhibitglue(\\ % 「)」「\relax」間で二分空きが入る
+ あ\setbox0=\hbox{\inhibitglue}(
+ \end{verbatim}
+ \end{minipage}\hfill
+ \begin{minipage}[t]{.1\linewidth}
+ )\vrule(\\
+ )\vrule\inhibitglue(\\
+ )\inhibitglue\vrule(\\
+ )\inhibitglue\relax(\\
+ )\relax\inhibitglue(\\
+ あ\setbox0=\hbox{\inhibitglue}(
+ \end{minipage}
+\end{dangerous}
+\begin{dangerous}
p\LaTeX~2017-10-28以降では,|\inhibitglue|の短縮として|\<|が次のように
定義されている(|\protected|は\eTeX 拡張の機能だが,現在では\LaTeX 自体が
\eTeX 拡張を要求している).
@@ -475,6 +681,13 @@ This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018)
\protected\def\<{\ifvmode\leavevmode\fi\inhibitglue}
\end{verbatim}
\end{dangerous}
+\begin{cslist}
+\csitem[\.{disinhibitglue}]
+ |\inhibitglue|の効果を無効化(つまり,メトリック由来の空白の挿入を許可)する.
+ \pTeX~p3.8.2で新しく追加された.
+\end{cslist}
+
+
\section{組方向}
@@ -687,7 +900,7 @@ DtoU方向での数式ディレクションはそれぞれ非数式の場合と
ベースライン補正量をどうするかを常に気にしないといけない.
例えば次のコードを考える:
\begin{verbatim}
- \ybaselineshift=10pt\scriptbaselineshifyfactor=700
+ \ybaselineshift=10pt\scriptbaselineshiftfactor=700
漢字pqr$a\hbox{xあ}^{%
b\hbox{\scriptsize yう}
\hbox{\scriptsize\ybaselineshift=7pt zえ}
@@ -754,33 +967,7 @@ $10\,\mathrm{pt}-7\,\mathrm{pt}=3\,\mathrm{pt}$だけ上に配置されてしま
|\jfont|で「和文の横組用フォント」を,
|\tfont|で「和文の縦組用フォント」を返す.
\end{itemize}
-
-\csitem[\.{kcatcode} <character code>=<16--18>]
- \pTeX では,和文文字に
- 16~($\mathit{kanji}$), 17~($\mathit{kana}$), 18~($\mathit{other\_kchar}$)の
- いずれかのカテゴリーコードを割り当てている.
- これらの値による動作の違いは次のようになる:
-\begin{itemize}
- \item \TeX82では,「複数文字からなる命令」(control word)には
- カテゴリーコードが11~($\mathit{letter}$)の文字しか使用できないことになっていたが,
- \pTeX では16,~17の和文文字も合わせて使用することが出来る.
- カテゴリーコードが18の和文文字はcontrol word中には使用できない
- \footnote{但し「|\】|」のように一文字命令(control symbol)としての使用は可能である.}.
- \item 前で説明した|\jcharwidowpenalty|は,カテゴリーコードが16,~17の和文文字の前にのみ
- 挿入されうるもので,カテゴリーコードが18の和文文字の前には挿入されない.
-\end{itemize}
-
- |\kcatcode|はDVI中の上位バイト(すなわち,JISコードでいう区ごと)に値が設定可能である.
- 初期状態では1,~2, 7--15, 85--94区の文字が18,3--6区の文字が17,16--84区の文字が16である.
\end{cslist}
-\begin{dangerous}
- |\kcatcode|では欧文文字の文字コードも指定することができ,
- その場合「0区扱い」として扱われる
- \footnote{\pTeX の処理でこの「0区」の|\kcatcode|が使われることはないので,
- 事実上は「16--18のどれかを格納可能な追加レジスタ」程度の使い方しかない.}.
-
- なお,\upTeX においては,|\kcatcode|は大きく仕様変更されている.
-\end{dangerous}
\section{文字コード変換,漢数字}
@@ -818,12 +1005,28 @@ p3.1.2で復活したという経緯がある.}.
\end{verbatim}
は「{\kansujichar1=`壱 \kansujichar2=\euc"C6F5\relax
\kansujichar3=\jis"3B32\relax \kansuji 1234}」と出力される.
+ なお,|\kansuji|に続く数値<number>が負の場合は,空文字列になる
+ (ちょうど|\romannumeral|にゼロまたは負の値を与えた場合と同様).
+
+ |\kansujichar|で指定できるのは「和文文字の内部コードとして有効な値」であり,
+ 無効な値(例えば\pTeX では,|`A|は欧文文字コードであり,和文文字コードではない)
+ を指定すると
+\begin{verbatim}
+! Invalid KANSUJI char ("41)
+\end{verbatim}
+ というエラーが発生する\footnote{\upTeX では0--127も含め,
+ Unicodeの文字コードすべてが和文文字コードとして有効であり
+ (|\kchar|で任意の文字コードを和文文字ノードに変換して出力できる),
+ 基本的にこのエラーは発生しない.}.
\end{cslist}
% luatexja.dtx より pTeX 用に移植
-以上に挙げたプリミティブ(|\kuten|, |\jis|, |\euc|, |\sjis|, |\kansuji|)は
-内部整数を引数にとるが,実行結果は\emph{文字列}であることに注意.
-また,\pTeX はJIS X 0213には対応せず,JIS X 0208の範囲のみ扱える.
+\begin{dangerous}
+ 以上に挙げたプリミティブ(|\kuten|, |\jis|, |\euc|, |\sjis|, |\kansuji|)は
+ 展開可能(expandable)であり,
+ 内部整数を引数にとるが,実行結果は\emph{文字列}であることに注意
+ (\TeX82の|\number|, |\romannumeral|と同様).
+ また,\pTeX はJIS X 0213には対応せず,JIS X 0208の範囲のみ扱える.
\medskip\noindent
\begin{minipage}{.6\linewidth}
@@ -843,6 +1046,26 @@ p3.1.2で復活したという経緯がある.}.
\kansuji1701
\end{minipage}\medskip
+ 以上の挙動から,|\kansuji|を
+ 「整数値をその符号値をもつ和文文字トークンに変換する」という目的に
+ 用いることもでき\footnote{ただし,\upTeX で
+ 0--127の文字コードを|\kansujichar|で指定した場合のみ,
+ |\kansuji|で生成されるトークンは欧文文字トークンになる\cite{build36}.},
+ これは時に“|\kansuji|トリック”と呼ばれる.例えば
+\begin{verbatim}
+ \kansujichar1=\jis"2422 \edef\X{\kansuji1}
+\end{verbatim}
+ としておけば,|\expandafter\meaning\X|は「\texttt{%
+ \kansujichar1=\jis"2422 \edef\X{\kansuji1}%
+ \expandafter\meaning\X}」であるし,
+\begin{verbatim}
+ \begingroup \kansujichar5=\jis"467C\relax \kansujichar6=\jis"4B5C\relax
+ \expandafter\gdef\csname\kansuji56\endcsname{test}
+ \endgroup
+\end{verbatim}
+ とすれば,|\日本|という和文の制御綴をASCII文字だけで定義できる.
+\end{dangerous}
+
\section{長さ単位}
\pTeX では\TeX82に加えて以下の単位が使用可能である:
@@ -932,11 +1155,11 @@ p3.1.2で復活したという経緯がある.}.
\begin{cslist}
\csitem[\.{char} <character code>,
\.{chardef} <control sequence>=<character code>]
- 引数として0--255に加えて和文文字の内部コードも指定できる.
- 和文文字の内部コードを指定した場合は和文文字を出力する.
-\csitem[\.{accent} <character code>=<character>]
- |\accent|プリミティブにおいても,アクセントの部分に和文文字の内部コードを指定できるほか,
- アクセントのつく親文字を和文文字にすることもできる.
+ 引数として0--255に加えて和文文字の内部コードも指定できる.
+ 和文文字の内部コードを指定した場合は和文文字を出力する.
+ \csitem[\.{accent} <character code>=<character>]
+ |\accent|プリミティブにおいても,アクセントの部分に和文文字の内部コードを指定できるほか,
+ アクセントのつく親文字を和文文字にすることもできる.
\end{cslist}
\begin{itemize}
@@ -953,10 +1176,65 @@ p3.1.2で復活したという経緯がある.}.
\end{itemize}
\end{itemize}
+\begin{cslist}
+ \csitem[\.{if} <token$_1$> <token$_2$>, \.{ifcat} <token$_1$> <token$_2$>]
+ 文字トークンを指定する場合,その文字コードは\TeX82では0--255のみが許されるが,
+ \pTeX では和文文字トークンも指定することができる.
+
+ |\if|による判定では,欧文文字トークン・和文文字トークンともに
+ その文字コードが比較される.
+ |\ifcat|による判定では,欧文文字トークンについては|\catcode|,
+ 和文文字トークンについては|\kcatcode|が比較される.
+ % [TODO] TeX Live 2018 の upTeX では,
+ % ^^ab 形式での文字コード指定は欧文扱いされるので,
+ % \ifcat 判定では \catcode が読み出される.
+ % 例えば \showthe\kcatcode`^^b0 では 18 が返るが,
+ % 和文扱いはされないことに注意.
+ % https://github.com/texjporg/tex-jp-build/issues/68
+\end{cslist}
+
+\begin{dangerous}
+\TeX bookには,オリジナルの\TeX における|\if|と|\ifcat|の説明として
+\begin{quote}
+If either token is a control sequence,
+\TeX\ considers it to have character code 256 and category code 16,
+unless the current equivalent of that control sequence
+has been |\let| equal to a non-active character token.
+\end{quote}
+とある.すなわち
+\begin{quote}
+|\if|や|\ifcat|の判定では(実装の便宜上)
+コントロールシークエンスは文字コード256,
+カテゴリーコード16を持つとみなされる
+\end{quote}
+というのである.ところが,tex.webの実装はこの通りでなく,
+コントロールシークエンスをカテゴリーコード0とみなしている.
+そのため,\pTeX 系列において和文文字トークンの|\kcatcode|の値が
+16である場合も,|\ifcat|判定でコントロールシークエンスと混同されることはない.
+\end{dangerous}
+
\begin{thebibliography}{99}
+ \bibitem{topic} Victor Eijkhout, \textit{\TeX\ by Topic, A \TeX nician's Reference},
+ Addison-Wesley, 1992.\\
+ \url{https://www.eijkhout.net/texbytopic/texbytopic.html}
\bibitem{tatemath} aminophen, 「縦数式ディレクションとベースライン補正」,
2016/09/05,\\
\url{https://github.com/texjporg/platex/issues/22}
+ \bibitem{build28} h-kitagawa, 「[ptex] |\inhibitglue|の効力」,
+ 2017/09/20,\\
+ \url{https://github.com/texjporg/tex-jp-build/issues/28}
+ \bibitem{build36} aminophen, 「欧文文字の|\kansujichar|,|\inhibitxspcode|」,
+ 2017/11/26,\\
+ \url{https://github.com/texjporg/tex-jp-build/issues/36}
+ \bibitem{build37} aminophen,「和文のコントロールシンボル」,
+ 2017/11/29,\\
+ \url{https://github.com/texjporg/tex-jp-build/issues/37}
+ \bibitem{build55} aminophen,「[(u)pTeX] 内部コードの -kanji-internal オプション」,
+ 2018/04/03,\\
+ \url{https://github.com/texjporg/tex-jp-build/issues/55}
+ \bibitem{forum_2566} aminophen, 「\TeX~Live 2019 での |\inhibitglue| の挙動変更【予定】」,
+ 2019/02/06,\\
+ \url{https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=2566}
\end{thebibliography}
\newpage