From b7e54219e4294fa527035f0bd2819ca11c3c6964 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 5 Aug 2021 03:02:12 +0000 Subject: CTAN sync 202108050302 --- info/ptex-manual/ptex-manual.tex | 87 +++++++++++++++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 10 deletions(-) (limited to 'info/ptex-manual/ptex-manual.tex') diff --git a/info/ptex-manual/ptex-manual.tex b/info/ptex-manual/ptex-manual.tex index d76fbf3f6f..a2e2dc6247 100644 --- a/info/ptex-manual/ptex-manual.tex +++ b/info/ptex-manual/ptex-manual.tex @@ -334,7 +334,18 @@ virtual modeでは,起動直後にバナーを表示してから,フォー \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 @@ virtual modeでは,起動直後にバナーを表示してから,フォー \item 当該の欧文文字の直前が和文文字(後方に禁則ペナルティを伴っても構わない)の 場合に限り,その欧文文字に設定された|\prebreakpenalty|を挿入する. \end{itemize} -\iffalse %%%%% TL2019-hack +\iffalse %%%%% [TODO] \begin{dangerous} 上記の「欧文文字に設定された禁則ペナルティが挿入される状況」は 欧文文字と和文文字の境界であり, @@ -452,7 +463,7 @@ virtual modeでは,起動直後にバナーを表示してから,フォー \item 和文→欧文文字間: |penalty_node| (\.{prebreakpenalty}) → |disp_node| の順 \end{itemize} \end{dangerous} -\fi %%%%% TL2019-hack +\fi %%%%% \begin{dangerous} 禁則ペナルティはリスト構築中に自動的に挿入されるので,\.{showlists}で @@ -542,7 +553,7 @@ virtual modeでは,起動直後にバナーを表示してから,フォー \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 @@ virtual modeでは,起動直後にバナーを表示してから,フォー \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 @@ p3.1.2で復活したという経緯がある.}. それぞれ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} ] + Unicodeから内部コードへの変換を行う. + もともと\upTeX で実装されていたが,\pTeX~3.10.0で取り入れた. + +\csitem[\.{toucs} ] + 内部コードから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 @@ p3.1.2で復活したという経緯がある.}. 「整数値をその符号値をもつ和文文字トークンに変換する」という目的に 用いることもでき\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 @@ has been |\let| equal to a non-active character token. \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} -- cgit v1.2.3