diff options
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.tex | 408 |
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 |