summaryrefslogtreecommitdiff
path: root/info/ptex-manual/ptex-manual.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-08-05 03:02:12 +0000
committerNorbert Preining <norbert@preining.info>2021-08-05 03:02:12 +0000
commitb7e54219e4294fa527035f0bd2819ca11c3c6964 (patch)
tree6809ec5fe48f0c77fd85957a212fb223c3c3ab10 /info/ptex-manual/ptex-manual.tex
parentda02fd6ad1c5fb45c5ec641bf236d8de4745709f (diff)
CTAN sync 202108050302
Diffstat (limited to 'info/ptex-manual/ptex-manual.tex')
-rw-r--r--info/ptex-manual/ptex-manual.tex87
1 files changed, 77 insertions, 10 deletions
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} <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 @@ 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}