summaryrefslogtreecommitdiff
path: root/info/ptex-manual/eptexdoc.tex
diff options
context:
space:
mode:
Diffstat (limited to 'info/ptex-manual/eptexdoc.tex')
-rw-r--r--info/ptex-manual/eptexdoc.tex375
1 files changed, 265 insertions, 110 deletions
diff --git a/info/ptex-manual/eptexdoc.tex b/info/ptex-manual/eptexdoc.tex
index 62d11cc730..e4e7650324 100644
--- a/info/ptex-manual/eptexdoc.tex
+++ b/info/ptex-manual/eptexdoc.tex
@@ -28,7 +28,7 @@
%%%%%%%%%%%%%%%%
% logos
-\newcommand{\OMEGA}{$\Omega$}
+\newcommand{\OMEGA}{\texorpdfstring{$\Omega$}{Ω}}
\protected\def\epTeX{$\varepsilon$\nobreakdash-\pTeX}
\protected\def\eupTeX{$\varepsilon$\nobreakdash-\upTeX}
\protected\def\eTeX{$\varepsilon$\nobreakdash-\TeX}
@@ -217,7 +217,7 @@ tracing機能や条件判断文の強化などあるが,そこら辺はパッ
以下,\eTeX 拡張を\pTeX 拡張とマージするにあたって調整した箇所を述べる.
\begin{cslist}
- \csitem[\.{lastnodetype}]
+ \csitem[\.{lastnodetype} (read-only integer)]
\pTeX 拡張では,\TeX と比較して\node{dir\_node}と\node{disp\_node}という2種類のノードが
追加された.前者は,現在のリストの中に違う組方向のboxを挿入する際に寸法を補正するために作られ,
\.{hbox}や\.{vbox}のコンテナとなっている.
@@ -241,7 +241,7 @@ tracing機能や条件判断文の強化などあるが,そこら辺はパッ
\item 14&unset node\cr\item 15&math mode nodes\cr
\end{multilist}}
- \csitem[\.{currentiftype}]
+ \csitem[\.{currentiftype} (read-only integer)]
\ifnum\epTeXversion>190131 %%%%% TL2019-hack
条件判断文とそれを表す数字との対応は以下のようになっている
(\epTeX~190709以降).
@@ -305,7 +305,7 @@ tracing機能や条件判断文の強化などあるが,そこら辺はパッ
のようにエラーが出る.
\end{itemize}
- \csitem[\.{iffontchar}]
+ \csitem[\.{iffontchar} <font> <number>]
\begin{itemize}
\item 和文フォントの場合: \.{iffontchar} <Japanese font> <number>\\
<Japanese font>を$f$,<number>を$c$とおくと,
@@ -355,13 +355,18 @@ fam256d.tex}(本文)と\texttt{fam256p.tex}(preamble部)に対応する
extended modeの時に限り有効になる.
\paragraph{数式フォント制限の緩和}
-\OMEGA の大きな特徴としては,\TeX 内部のデータ構造を倍の領域を用いるよう
-に改変し\footnote{詳しい話は\texttt{texk/web2c/texmfmem.h}中の共用体%
-\texttt{memoryword}の定義を参照.大雑把に言うと,1つの「メモリ要素」に2つの32\,bit整
-数を同時に格納できるようになっている.},\TeX に従来から存在し
-ていた「256個制限」を$2^{16}$個にまで緩和したことが挙げられる.同様に,
-\OMEGA では(\cite{yamamoto}にもあるように)数式フォントを同時に256個まで
-用いることができ,各フォントも65536文字まで許されるようになっている.
+\OMEGA の大きな特徴としては,\TeX 内部のデータ構造を改変し
+\footnote{詳しくは\texttt{texk/web2c/texmfmem.h}中の共用体%
+\texttt{memoryword}の定義を参照.大雑把に言うと,
+1つの「メモリ要素」に2つの32\,bit整数を同時に格納できるようになっている.
+なお,少なくともtetex3以降では\texttt{memoryword}は8バイトであるが,
+\TeX 82では1つの「メモリ要素」を2つの32\,bit整数として使うことはしていない.
+% [TODO] 正確には "big TeX" からだが,
+% ・big TeX はいつからあるのか? ・それが標準になったのはいつから?
+},
+\TeX に従来から存在していたいくつかの「256個制限」を$2^{16}$個にまで緩和したことが挙げられる.
+同様に,\OMEGA では(\cite{yamamoto}にもあるように)数式フォントを
+同時に256個まで用いることができ,各フォントも65536文字まで許されるようになっている.
\medskip
@@ -389,26 +394,27 @@ extended modeの時に限り有効になる.
すなわち,以下のプリミティブが追加されている\footnote{\OMEGA では\bits{8}のところが\bits{16}に
なっている.}.
\begin{cslist}[itemsep=\dimexpr-\baselineskip+\medskipamount]
-\csitem[\.{omathcode} \bits{8}\texttt{=}\bits{27}]\
-\csitem[\.{omathcode} \bits{8}]\
-\csitem[\.{omathchar} \bits{27}]\
-\csitem[\.{omathaccent} \bits{27}]\
-\csitem[\.{omathchardef} <control sequence>\texttt{=}\bits{27}]\
-\csitem[\.{odelcode} \bits{8}\texttt{=}\bits{27}\ \bits{24}]\
-\csitem[\.{odelimiter} \bits{27}\ \bits{24}]\
-\csitem[\.{oradical} \bits{27}\ \bits{24}]\
+ \csitem[\.{omathcode} \bits{8}\texttt{=}\bits{27}]\
+ \csitem[\.{omathcode} \bits{8}]\
+ \csitem[\.{omathchar} \bits{27}]\
+ \csitem[\.{omathaccent} \bits{27}]\
+ \csitem[\.{omathchardef} <control sequence>\texttt{=}\bits{27}]\
+ \csitem[\.{odelcode} \bits{8}\texttt{=}\bits{27}\ \bits{24}]\
+ \csitem[\.{odelimiter} \bits{27}\ \bits{24}]\
+ \csitem[\.{oradical} \bits{27}\ \bits{24}]\
\end{cslist}
\vspace{-\baselineskip}
ここで,27\,bitとか24\,bitの自然数の意味については,上の表の
\OMEGA の行を参照して欲しい.上に書いた内部のデータ構造から推測できる通り,
-\.{omathchar}等のcharacter codeの指定に使われる16\,bitの数値のうち実際に使われるのは下位
-8\,bitであり,上位8\,bitは無視される.
-例えば,|\omathchar"4012345|と|\omathchar"4010045|は内部表現としては全く同じである.
+\.{omathchar}等のcharacter codeの指定に使われる16\,bitの数値のうち
+実際に使われるのは下位8\,bitであり,上位8\,bitは無視される.
+例えば,|\omathchar"4012345|と|\omathchar"4010045|は同義である.
-なお,|\odelcode|~\bits 8として
-delimiter codeを取得しようとしても,現時点のパッチでは,うまく動作しない
-\footnote{51\,bit自然数を返さないといけないですからねえ.やる気があれば
-検討してみます.}.
+なお,|\mathcode|~\bits 8としてmath code値を取得できる文字はファミリ番号が16未満のもの
+(すなわち,\TeX82における|\mathcode|格納値の形式に当てはまるもの)に限られる.
+delimiter codeについても同様である.
+さらに,|\odelcode|~\bits 8として51\,bitの形式のdelimiter codeを取得することはできない
+($-1$が返る).
\medskip
\LaTeX において数式フォントを同時に16個以上使うには,|\omathchar|%
@@ -454,7 +460,7 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
}.
\item |\gluestretchorder|\indcs{gluestretchorder},
|\glueshrinkorder|\indcs{glueshrinkorder}の動作を\eTeX のそれと合わせた.
- 具体的には,ある適当なglue~|\someglue|の伸び量を<stretch>とおくとき,
+ 具体的には,あるglue~|\someglue|の伸び量を<stretch>とおくとき,
\[
\hbox{|\gluestretchorder\someglue|}=
\begin{cases}
@@ -469,21 +475,23 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
\end{itemize}
\paragraph{レジスタについて}
-\OMEGA では(前にも書いたが)データ構造の変更が行われ,それによってレジ
-スタが各種類あたり65536個使えるようになっている.
+\OMEGA では(前にも書いたが)データ構造の変更が行われ,それによってレジスタが
+各種類あたり0番から65535番までの65536個を使えるようになっている.
一方,\eTeX では,256番以降のレジスタを専用のsparse treeに格納することにより,
32767番までのレジスタの使用を可能にしていた.このツリー構造を分析してみる
-と,65536個までレジスタを拡張するのはさほど難しくないことのよう
-に思われた.具体的には,ツリーの階層を1つ増やしてみた(だから,おそらく
-各種類あたり$16\cdot 32768=524288$個まで使えるとは思うが,これはきりが悪
-い).
-そこで,\epTeX では\eTeX 流の方法を用いながらも,レジスタをさ
-らに65536個まで増やしている.
+と,65536個までレジスタを拡張するのはさほど難しくないことが分かった.
+そこで,\epTeX では\eTeX 流の方法を用いながらも,
+ツリーの階層を1つ増やして,レジスタ(count, dimen, skip, muskip, box, token)を
+\OMEGA と同じように0番から65535番までの65536個を使えるようにした.
+同様に,マーク(mark)のクラス数も32768個から65536個まで増やしている.
\section{\hologo{pdfTeX}由来の機能}
開発中の\LaTeX 3では,\eTeX 拡張の他に,\hologo{pdfTeX}で導入された
-\.{pdfstrcmp}(又はその同等品)が必要となっており,もはや純粋な\eTeX ですら
+プリミティブ\.{pdfstrcmp}(またはその同等品%
+\footnote{\hologo{XeTeX}では\.{strcmp}という名称で,
+\hologo{LuaTeX}ではLuaを用いて実装されている.})%
+が必要となっており,もはや純粋な\eTeX ですら
\LaTeX 3を利用することはできない状況である (\cite{expl31,expl32,expl33}).
その他にも,\hologo{pdfTeX}由来のいくつかのプリミティブ(\cite{pdftexman})の実装が
日本の\TeX ユーザからあり,
@@ -496,7 +504,7 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
\csitem [\.{pdfstrcmp} <general text> <general text>]
2つの引数を文字列化したものを先頭バイトから比較し,
結果を$-1$(第1引数の方が先),0(等しい),1(第2引数の方が先)として文字列で返す.
-
+
比較する文字列中に和文文字がある場合には,(\epTeX の内部漢字コードにかかわらず)
UTF-8で符号化して比較する.
そのため,例えば
@@ -512,17 +520,20 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
|\UseRawInputEncoding|の実行が必要になる.
}.
- \csitem[\.{pdfpagewidth}, \.{pdfpageheight}]
+ \csitem[\.{pdfpagewidth}, \.{pdfpageheight} (dimension)]
ページの「幅」「高さ」を表す内部長さであるが,
\emph{ここで言う「幅」は「字送り方向」のことではなく,物理的な意味である}.
この2つの内部長さを設定するだけではdviに何の影響も与えない.
- すぐ後で述べる\.{pdflastxpos}, \.{pdflastypos}による出力位置の取得
+ 後で述べる\.{pdflastxpos}, \.{pdflastypos}による出力位置の取得
の際の原点位置を設定するためだけに使われ,初期値は0である.
+ \csitem[\.{readpapersizespecial} (integer)]
+ \pTeX 系列では,
用紙サイズの指定には伝統的にpapersize specialが利用されてきた.それを考慮して,
+ 本内部整数\.{readpapersizespecial}(既定値は1)が正の場合は
papersize specialがdvi中に書き出される時,\epTeX にはその内容を解釈して
- 自動的に\.{pdfpagewidth}, \.{pdfpageheight}の値を設定する機能がある
+ 自動的に\.{pdfpagewidth}, \.{pdfpageheight}の値を設定する
\footnote{%
papersize specialで指定した長さは常に\texttt{true}付きで解釈するのが慣習と
なっているが,\epTeX~180901より前では\texttt{true}なしの寸法として解釈するという
@@ -533,7 +544,7 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
\def\<#1>{\langle\mbox{#1}\rangle}
\begin{align*}
\<special> &\longrightarrow \texttt{papersize=}\<length>\texttt{,}\<length>\\
- \<length> &\longrightarrow \<decimal>
+ \<length> &\longrightarrow \<decimal>
\<optional~\texttt{true}>\<physical unit>\\
\<decimal> &\longrightarrow \texttt{.} \mid \<digit>\<decimal> \mid
\<decimal>\<digit>
@@ -541,12 +552,13 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
負の符号や小数点としての「\texttt{,}」,そして一切の空白を許容しないところに
注目してほしい.また,\texttt{zw},~\texttt{zh},~\texttt{em},~\texttt{ex}という
現在のフォントに依存する単位も使用不可能である.
- }.\epTeX~180901より前ではこの機能は常に有効
- であったが,\epTeX~180901以降では内部整数
- \.{readpapersizespecial}\indcs{readpapersizespecial}(既定値は1)が正の場合のみ有効となる.
-
- \csitem[\.{pdflastxpos}, \.{pdflastypos}]
- \.{pdfsavepos}\indcs{pdfsavepos}が置かれた場所の,dviにおける出力位置を返す内部整数(読み取り専用).
+ }.
+
+ このプリミティブは\epTeX~180901で追加された.それより前のバージョンでは
+ 前段落で述べた機能は常に有効であった.
+
+ \csitem[\.{pdflastxpos}, \.{pdflastypos} (read-only integer)]
+ \.{pdfsavepos}\indcs{pdfsavepos}が置かれた場所の,dviにおける出力位置を返す内部整数.
原点はページの(物理的な意味の)左下隅であり,$y$軸は(物理的な)上方向に向かって増加する.
\begin{itemize}
\item ページの物理的な幅と高さはすぐ上の\.{pdfpagewidth}, \.{pdfpageheight}で設定する.
@@ -561,7 +573,7 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
移動したところになる
\footnote{これは\hologo{pdfTeX}のdviモードや\hologo{XeTeX}と同じ挙動である.}.
\end{itemize}
-
+
\csitem[\.{pdfcreationdate}]
エンジン起動時の時刻を,\texttt{\pdfcreationdate}の形式で表した文字列に展開する.
末尾に|+09'00'|などと表示されるのはローカルのタイムゾーンであるが,
@@ -580,24 +592,24 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
それぞれ<filename>の更新時刻(\.{pdfcreationdate}と同じ形式)と
ファイルサイズを表す文字列に展開する.
これらも\Pkg{standalone}パッケージのために\epTeX に実装されたプリミティブである.
-
+
\csitem[\.{pdffiledump} \textrm{[}\texttt{offset} <offset>\textrm{]}%
\ \texttt{length} <length> <filename>]
<filename>で与えられたファイル名の<offset>バイト目(先頭は0)から<length>バイトを読み込み,
16進表記(大文字)したものに展開される.
-
+
本プリミティブはHeiko Oberdiek氏による\Pkg{bmpsize}パッケージを\epTeX でも使うために
角藤さんが実装したものである(2014/05/06).
-
- \csitem[\.{pdfshellescape}]
- \.{write18}によるshell-escapeが利用可能になっているかを示す内部整数(読み取り専用).
+
+ \csitem[\.{pdfshellescape} (read-only integer)]
+ \.{write18}によるshell-escapeが利用可能になっているかを示す内部整数.
0ならば不許可,1ならば許可,2ならばrestricted shell-escape%
\footnote{あらかじめ「安全」と認められたプログラム(\texttt{texmf.cnf}中で指定する)
のみ実行を許可する仕組み.}%
である.
-
+
本プリミティブは\TeX ユーザの集い2014でリクエストを受けて実装された(\cite{pdfse}).
-
+
\csitem[\.{pdfmdfivesum} {[\texttt{file}]} <general text>]
引数<general text>のMD5ハッシュ値か,あるいは\texttt{file}が指定された場合は
ファイル名が<general text>のファイルのMD5ハッシュ値を計算する.
@@ -607,8 +619,8 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
このプリミティブは\cite{xe5}以降の議論を元に,角藤さんがリクエストしたもので,
2015/07/04に\epTeX に実装されている.
-
- \csitem[\.{pdfpritimive}, \.{ifpdfprimitive}]
+
+ \csitem[\.{pdfpritimive} <control sequence>, \.{ifpdfprimitive} <control sequence>]
\.{pdfprimitive}は次に続く制御綴がプリミティブと同じ名称であった場合に,
プリミティブ本来の意味で実行させるものである.例えば
\begin{verbatim}
@@ -620,20 +632,21 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
これらのプリミティブは2015/07/15版の\Pkg{expl3}パッケージで使われた
(\cite{15715})ことを受けて実装されたものだが,
- 現在ではこれらのプリミティブは使われていない.
+ 現在では\Pkg{expl3}パッケージではこれらのプリミティブは要求していない.
\csitem[\.{pdfuniformdeviate} <number>, \.{pdfnormaldeviate}]
\.{pdfuniformdeviate}は,0以上<number>未満の一様分布に従う乱数(整数値)を生成する.
\.{pdfnormaldeviate}は,平均値0,標準偏差65536の正規分布に従う乱数(整数値)を生成する.
-
- 現在の乱数生成の種の値は,\.{pdfrandomseed}\indcs{pdfrandomseed}で取得できる(読み取り専用).
- 種の初期化にはシステムのマイクロ秒単位での現在時刻情報が使われる.また,種の値は
- \.{pdfsetrandomseed} <number>\indcs{pdfsetrandomseed}によって特定の値に設定可能である.
-
- \LaTeX3のl3fpにおいて,2016/11/12あたりから実装された乱数生成機能(\cite{random})を
+
+ \csitem[\.{pdfrandomseed} (read-only integer), \.{pdfsetrandomseed} <number>]
+ 乱数生成の種の値は,\.{pdfrandomseed}で取得できる.
+ 種の初期化にはシステムのマイクロ秒単位での現在時刻情報が使われる.また,種の値を
+ 設定するには\.{pdfsetrandomseed}に引数として渡せば良い.
+
+ \LaTeX3の\Pkg{l3fp}において,2016/11/12あたりから実装された乱数生成機能(\cite{random})を
サポートするために\epTeX~161114から実装された.
- \csitem[\.{pdfelapsedtime}, \.{pdfresettimer}]
+ \csitem[\.{pdfelapsedtime} (read-only integer), \.{pdfresettimer}]
\.{pdfelapsedtime}は,エンジン起動からの経過時間を``scaled seconds''すなわち
$1/65536$秒単位で返す.この値は\.{pdfresettimer}によって再び0にリセットできる.
すぐ上の乱数生成プリミティブと同時に実装された.
@@ -648,19 +661,20 @@ delimiter codeを取得しようとしても,現時点のパッチでは,う
\epTeX~180518以降で利用可能である.
\ifnum\epTeXversion>190131 %%%%% TL2019-hack
- \csitem[\.{ifincsname}]
+ \csitem[\.{ifincsname}]
\texttt{\.{csname}~...~\.{endcsname}}内で評価されたちょうどその時に真となる.
\LaTeX~2019-10-01で行われる変更(\cite{latex95,tjb83})で必要になったために
\epTeX~190709で導入された.
\fi %%%%% TL2019
\end{cslist}
+
\section{バージョン番号}
\pTeX~p3.8.0に\.{ptexversion}が実装されたのと同時に,\epTeX でもバージョン番号を
取得する\.{epTeXversion}プリミティブが\epTeX~180121から追加された.
\begin{cslist}
- \csitem[\.{epTeXversion}]
+ \csitem[\.{epTeXversion} (read-only integer)]
\epTeX のバージョン番号(例えば\the\epTeXversion)を内部整数で返す.\epTeX 起動時のバナーでは
\eTeX, \pTeX のバージョン番号も表示されるので,それを再現しようとすると以下のようになる.
\begin{verbatim}
@@ -668,8 +682,6 @@ This is e-pTeX, Version 3.14159265-%
p\number\ptexversion.\number\ptexminorversion\ptexrevision-%
\number\epTeXversion-\number\eTeXversion\eTeXrevision ...
\end{verbatim}
-
-
\end{cslist}
@@ -707,17 +719,20 @@ min10フォントメトリックで「ちょっと」を組むと「ょっ」の
改善する助けになることを目指して実装された.
\begin{cslist}
- \csitem[\.{lastnodechar}]
- 現在構築中のリストの「最後のノード」が文字由来であれば,そのコード番号(内部コード)を内部整数として返す.
-
+ \csitem[\.{lastnodechar} (read-only integer)]
+ 現在構築中のリストの「最後のノード」が文字由来であれば,
+ そのコード番号(内部コード)を内部整数として返す.
+
上記「最後のノード」では,\pTeX によって自動挿入される
\begin{itemize}
\item JFMによって入るグルー
\item 行末禁則処理のために挿入されるペナルティ
\item 欧文文字のベースライン補正用のノード
\end{itemize}
- は無視される.また,「最後のノード」が欧文文字のリガチャであった場合は,リガチャそれ自身のコード番号ではなく,
- 最後の構成要素の文字のコード番号を返す.「最後のノード」が文字を表すものでなかった場合は,$-1$が返る.
+ は無視される.また,「最後のノード」が欧文文字のリガチャであった場合は,
+ リガチャそれ自身のコード番号ではなく,
+ 最後の構成要素の文字のコード番号を返す.
+ 「最後のノード」が文字を表すものでなかった場合は,$-1$が返る.
\end{cslist}
例えば,\.{lastnodechar}を使って
@@ -735,7 +750,6 @@ min10フォントメトリックで「ちょっと」を組むと「ょっ」の
}が得られる.これによって,\.{textmc}等の命令の直前の文字を知ることができるので,
あとは\TeX マクロ側でなんとかできるだろう,という目論見である.
-
また,上記の説明にあるとおり,
\begin{verbatim}
abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
@@ -770,11 +784,12 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\begin{verbatim}
これは,\relax\sffamily{}\the\lastnodechar\textmc{『ほげ党宣言』}……
\end{verbatim}
-などとノードに関係しないものが途中にあっても,それは単純に無視されて
+のようにノードを作らない\.{relax}, |{}|, \.{sffamily}などが途中にあっても,
+それらは単純に無視されて
\begin{quote}
これは,\relax\sffamily{}\the\lastnodechar\textmc{『ほげ党宣言』}……
\end{quote}
-となる.
+と「,」の内部コードが取得される.
\section{\.{lastnodesubtype}プリミティブ}
\cite{tjb28,plt63}などの議論で,「最後のグルーがJFMグルーだけ\.{unskip}する」処理の必要性が
@@ -783,13 +798,13 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
そのため,\epTeX~180226で\.{lastnodesubtype}プリミティブを追加した.
\begin{cslist}
- \csitem[\.{lastnodesubtype}]
- 現在構築中のリストの「最後のノード」(\.{lastnodechar}プリミティブと同様)の
- subtype値を内部整数として返す.
-\begin{itemize}
- \item 「最後のノード」が文字ノードのときは0が返る.
- \item 現在構築中のリストが空のときは$-1$が返る.
-\end{itemize}
+ \csitem[\.{lastnodesubtype} (read-only integer)]
+ 現在構築中のリストの「最後のノード」(\.{lastnodechar}プリミティブと同様)の
+ subtype値を内部整数として返す.
+ \begin{itemize}
+ \item 「最後のノード」が文字ノードのときは0が返る.
+ \item 現在構築中のリストが空のときは$-1$が返る.
+ \end{itemize}
\end{cslist}
実際に有用なのは,以下の場合であろう:
@@ -872,17 +887,148 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar
\cite{eptexinputenc}を参照してほしいが,おおまかに述べると以下のようになるだろう.
\begin{cslist}
- \csitem[\.{epTeXinputencoding} <encoding>]
+ \csitem[\.{epTeXinputencoding} <encoding>]
現在読み込んでいるファイルの文字コードを<encoding>に変更する.
実際に変更されるのは「次の行」であり,また現在のファイルからさらに\.{input}等で
読まれたファイルには効力を及ぼさない.
+
+ 引数<encoding>の読み取りは,
+ (\LaTeX で定義が上書きされていない,プリミティブの)\.{input}の引数(ファイル名)を
+ 取得するのと同じルーチンが用いられる.
+ そのため,
+\begin{verbatim}
+\epTeXinputencoding sjis
+\end{verbatim}
+ のように,<encoding>は|{}|で囲まないこと.
<encoding>の末尾は,空白トークンや展開不能トークンによって区切られる.
- % [TODO] これで合っていますか? -- aminophen
+ % scan_file_name で<encoding> を取得しているので,
+ % \epTeXinputencoding "euc" \epTeXinputencoding ""e""u""c"" も OK.
<encoding>の値は,基本的には\pTeX の\texttt{-kanji}オプションで指定できる値
(\texttt{euc}, \texttt{sjis}, \texttt{jis}, \texttt{utf8})である.
+ 大文字小文字は考慮しない(\TeX の\.{uccode}, \.{lccode}は参照しない).
+ % BINARY, ISO-2022-JP, EUC-JP, Shift_JIS, UTF-8 (, uptex) も OK
+ % ptexenc 側で strcasecmp で比較しているので,大文字・小文字の区別はしない
+ % (\uccode, \lccode は参照しない)
\end{cslist}
+\ifnum\epTeXversion>190131 %%%%% TL2019-hack
+\section{\.{current[x]spacingmode}プリミティブ}
+もともと\pTeX 系列では,\.{kanjiskip},~\.{xkanjiskip}の挿入が有効になっているか
+直接的に知る方法が\.{showmode}プリミティブしかなかった.
+これでは使い勝手が悪いので,
+\.{currentspacingmode}, \.{currentxspacingmode}プリミティブが2019/10/28に
+山下さんによって実装された(\cite{tjb94}).
+
+\begin{cslist}
+ \csitem[\.{currentspacingmode} (read-only integer)]
+ \pTeX の「標準で\.{kanjiskip}を挿入する」機能が有効(\.{autospacing})ならば1,
+ 無効(\.{noautospacing})ならば0を返す.
+ \csitem[\.{currentxspacingmode} (read-only integer)]
+ \pTeX の「標準で\.{xkanjiskip}を挿入する」機能が有効(\.{autoxspacing})ならば1,
+ 無効(\.{noautoxspacing})ならば0を返す.
+\end{cslist}
+
+同様に,\eupTeX でも\.{currentcjktoken}プリミティブが2019/10/28に実装された.
+% e-pTeX の追加プリミティブではないが,ドキュメント化の都合上ここに書いた.
+
+\begin{cslist}
+ \csitem[\.{currentcjktoken}(read-only integer,\emph{\eupTeX のみ})]
+ \upTeX の「和文(CJK)文字と欧文文字を区別する」機能について,
+ \.{enablecjktoken}の状態ならば0,
+ \.{disablecjktoken}の状態ならば1,
+ \.{forcecjktoken}の状態ならば2を返す.
+\end{cslist}
+\fi %%%%% TL2019
+
+\ifnum\epTeXversion>190131 %%%%% TL2019-hack
+\section{\.{Uchar}, \.{Ucharcat}プリミティブ}
+\hologo{XeTeX}, \hologo{LuaTeX}には,引数<character code>を文字コードとする
+\emph{文字トークン}に展開される「\.{Uchar} <character code>」というプリミティブが存在する
+\footnote{\.{char}は展開不能プリミティブであることに注意.}.
+また,\hologo{XeTeX}には「\.{Ucharcat}~<character code>~<category code>」という,
+文字コード・カテゴリーコードがそれぞれ<character code>, <category code>である
+文字トークンを作るプリミティブが存在する\footnote{\hologo{LuaTeX}ではLuaによる代替物がある.}.
+
+% pTeX の「抜け道」の具体的なコード?
+\pTeX で「和文版\.{Uchar}」に相当することは\TeX~Live 2019以前の\pTeX ではマクロで実現することが可能だが,
+将来の\pTeX の改修で不可能になる恐れ(\cite{tjb81,tjb95})があるので,
+\epTeX~191112で前段落で述べた\.{Uchar}, \.{Ucharcat}プリミティブを追加することにした.
+
+\begin{cslist}
+ \csitem[\.{Uchar} <character code>]
+ 文字コードが<character code>の文字トークンに展開される.
+ 指定した値と得られる文字トークンの対応表は次の通り.
+
+ \begin{center}
+ \small\medskip
+ \begin{tabular}{lccc}
+ \toprule
+ <character code>&和文・欧文&\multicolumn{2}{c}{category code}\\\cmidrule(lr){3-4}
+ &&\epTeX&\eupTeX\\
+ \midrule
+ 0--31, 33--255&欧文文字トークン&12&12\\
+ 32 &欧文文字トークン&10&10\\
+ 256以上の<kanji code>&和文文字トークン&---(都度取得)&その時の\.{kcatcode}\footnotemark\\
+ \bottomrule
+ \end{tabular}
+ \end{center}
+ \footnotetext{もし\.{kcatcode}の値が15だったときは,得られる和文文字トークンの
+ \.{kcatcode}は18となる.}
+
+ \csitem[\.{Ucharcat} <character code> <category code>]
+ 文字コード・カテゴリーコードがそれぞれ<character code>, <category code>の文字トークンに展開される.
+
+ \epTeX では和文文字トークンにはカテゴリーコードの情報は保存されないため,
+ \epTeX の\.{Ucharcat}は欧文文字トークンの生成しかサポートしない.
+ 具体的には,
+ 指定可能な値は<character code>が0--255,<category code>が1--4, 6--8, 10--13のみである.
+\end{cslist}
+\begin{dangerous}
+ \eupTeX では,\.{Ucharcat}で和文文字トークンの生成もサポートしている.
+
+ \medskip
+ \begin{itemize}
+ \item <character code>が0--127のときは,欧文文字トークンのみ生成可能である.従って
+ <category code>の指定可能値は1--4, 6--8, 10--13.
+ \item <character code>が128--255のときは,欧文文字トークン・和文文字トークンの
+ どちらも生成可能である.
+ <category code>の指定可能値は1--4, 6--8, 10--13(以上欧文文字トークンを生成),
+ および16--19(和文文字トークンを生成).
+ \item <character code>が256以上のときは,和文文字トークンのみ生成可能である.従って
+ <category code>の指定可能値は16--19.
+ \end{itemize}
+\end{dangerous}
+\begin{dangerous}
+ \.{Uchar}で和文文字トークンを生成するには,その和文文字コードを
+ 与える必要があるが,その値は内部漢字コードに依るので,
+ |\jis|や|\euc|等の文字コード変換プリミティブを使うのが便利である
+ (例えば|\Uchar\jis"3441|で「\Uchar\jis"3441」を得る).
+
+ ただし,\eupTeX の\.{Ucharcat}では<character code>と<category code>を
+ 空白トークンで区切る必要があり,注意を要する.
+ 例えば,カテゴリーコード17の「漢」を得ようとして,
+ 単に
+ \begin{quote}
+ \verb+\Ucharcat\jis"3441 17 % エラー+
+ \end{quote}
+ と書くとエラー\footnote{%
+ \.{jis}の展開時に後ろの空白トークンが食われてしまい,\.{Uchar}には
+ 文字コード2845017($\text{漢}=\text{U+6F22}\rightarrow 28450$と17が
+ 繋がった結果)が渡ってしまう.
+ }が発生する.次のように書けばエラーが回避できるようである.
+ \begin{quote}
+ \verb+\Ucharcat\jis"3441\noexpand\space17 % エラー回避+
+ \end{quote}
+ あるいは:
+ \begin{quote}
+ \verb+\Ucharcat\numexpr\jis"3441\relax 17 % エラー回避+
+ \end{quote}
+\end{dangerous}
+\fi %%%%% TL2019
+
+
+
\begin{comment}
\section{互換性}
\eTeX, \pTeX との互換性をはかるのに有効な手段としては,まず\texttt{TRIP}
@@ -948,38 +1094,39 @@ $3$\,sp)だが,どこか気になるところである.
\begin{thebibliography}{99}
\bibitem{h7k} 北川 弘典,「計算数学II 作業記録」,2008.\\
\url{https://osdn.jp/projects/eptex/document/resume/ja/1/resume.pdf}ほか,
- 本pdfと同じディレクトリにある\texttt{resume.pdf}がそれにあたる.
- \bibitem{yamamoto} 山本 和義,「数式famの制限とluatex」,掲示板「\TeX\
- Q\ \&\ A」,2009/02/12.\\
+ 本pdfと同じディレクトリにある\texttt{eptex\_resume.pdf}がそれにあたる.
+ \bibitem{yamamoto} 山本 和義,「数式famの制限とluatex」,
+ 掲示板「\TeX\ Q\ \&\ A」,2009/02/12.\\
\url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/52744.html}
- \bibitem{yamamoto2} 山本 和義,「Re: 数式famの制限とluatex」,掲示板「\TeX\
- Q\ \&\ A」,2009/02/16.
+ \bibitem{yamamoto2} 山本 和義,「Re: 数式famの制限とluatex」,
+ 掲示板「\TeX\ Q\ \&\ A」,2009/02/16.
\url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/52767.html}
-\bibitem{yamamoto3} 山本 和義,「数式fam拡張マクロ for e-pTeX等」,掲示板「\TeX\
- Q\ \&\ A」,2009/02/21.
+ \bibitem{yamamoto3} 山本 和義,「数式fam拡張マクロ for e-pTeX等」,
+ 掲示板「\TeX\ Q\ \&\ A」,2009/02/21.
\url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/52799.html}
-\bibitem{expl31} 河原,「パッケージとディストリビューションについて」,掲示板「\TeX\
- Q\ \&\ A」,2010/12/16.
+ \bibitem{expl31} 河原,「パッケージとディストリビューションについて」,
+ 掲示板「\TeX\ Q\ \&\ A」,2010/12/16.
\url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/55464.html}
- \bibitem{expl32} 角藤 亮,「Re: パッケージとディストリビューションについて」,掲示板「\TeX\
- Q\ \&\ A」,2010/12/19.
+ \bibitem{expl32} 角藤 亮,「Re: パッケージとディストリビューションについて」,
+ 掲示板「\TeX\ Q\ \&\ A」,2010/12/19.
\url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/55478.html}
- \bibitem{expl33} zrbabbler,「LaTeX3 と expl3 パッケージ」,ブログ「マクロツイーター」内
- ,2010/12/22.
+ \bibitem{expl33} zrbabbler,「LaTeX3 と expl3 パッケージ」,
+ ブログ「マクロツイーター」内,2010/12/22.
\url{http://d.hatena.ne.jp/zrbabbler/20101222/1293050561}
- \bibitem{strcmp} 角藤 亮,「Re: e-pTeX 101231」,掲示板「\TeX\
- Q\ \&\ A」,2011/01/01.\\
+ \bibitem{strcmp} 角藤 亮,「Re: e-pTeX 101231」,
+ 掲示板「\TeX\ Q\ \&\ A」,2011/01/01.\\
\url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/55528.html}
\bibitem{pdfse} Dora TeX,「Re: |\pdfshellescape|,
|\lastnodechar| の実装」,\TeX~Forum,2014/11/19.
\url{http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=1435#p8053}
\bibitem{lnc} 北川 弘典,「|\lastnodechar| プリミティブについて」,2014/12/15.\\
- \url{https://ja.osdn.net/projects/eptex/wiki/lastnodechar}
+ \url{https://ja.osdn.net/projects/eptex/wiki/lastnodechar}
\bibitem{xe5} Joseph Wright, ``[XeTeX] |\(pdf)mdfivesum|'',
2015/07/01,\\
\url{http://tug.org/pipermail/xetex/2015-July/026044.html}
- \bibitem{15715} tat tsan,「[expl3 / e(u)ptex] 2015/07/15 版 expl3 パッケージが
- 、(u)platex で通らない」,\TeX~Forum,2015/07/26.\\
+ \bibitem{15715} tat tsan,
+ 「[expl3 / e(u)ptex] 2015/07/15 版 expl3 パッケージが、(u)platex で通らない」,
+ \TeX~Forum,2015/07/26.\\
\url{http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=1632}
\bibitem{random} Joseph Wright, ``[tex-live] Random number primitives'',
2016/11/12,\\
@@ -988,11 +1135,11 @@ $3$\,sp)だが,どこか気になるところである.
\url{http://abenori.blogspot.jp/2016/02/e-ptexeptexinputencoding.html}.
\bibitem{etexman} The \NTS\!\ Team. \textit{The \eTeX\ manual} (v2.0). \\
|$TEXMFDIST/doc/etex/base/etex_man.pdf|
- \bibitem{omegaman} J.\ Plaice, Y.\ Haralambous. \textit{Draft
- documentation for the $\it\Omega$ system}, 1999.\\
+ \bibitem{omegaman} J.\ Plaice, Y.\ Haralambous.
+ \textit{Draft documentation for the $\it\Omega$ system}, 1999.\\
|$TEXMFDIST/doc/omega/base/doc-1.8.tex|
- \bibitem{pdftexman} H\`an Th\'{\^e} Th\`anh et al. \textit{The
- \hologo{pdfTeX}\ user manual}, 2015.\\
+ \bibitem{pdftexman} H\`an Th\'{\^e} Th\`anh et al.
+ \textit{The \hologo{pdfTeX}\ user manual}, 2015.\\
|$TEXMFDIST/doc/pdftex/manual/pdftex-a.pdf|
\bibitem{l2e26}
The \LaTeX3 Project Team, \textit{\LaTeX\ News Issue 26}, 2017.\\
@@ -1004,7 +1151,7 @@ $3$\,sp)だが,どこか気になるところである.
\bibitem{plt63} Dora TeX,
「p 指定の tabular でのセル冒頭の |\relax\par|」,2018/02/19.\\
\url{https://github.com/texjporg/platex/issues/63}.
- \bibitem{expanded1} Joseph Wright,
+ \bibitem{expanded1} Joseph Wright,
``[tex-live] Primitive parity, |\expanded| and |\Ucharcat|'',
2018/05/04,\\
\url{http://tug.org/pipermail/tex-live/2018-May/041599.html}
@@ -1012,12 +1159,20 @@ $3$\,sp)だが,どこか気になるところである.
Joseph Wright, ``A `new' primitive: |\expanded|'', 2018/12/06.\\
\url{https://www.texdev.net/2018/12/06/a-new-primitive-expanded}
\bibitem{latex95}
- Volker-Weissmann, ``Feature Request: Better error messages for non-ASCII symbols in labels.'',
+ Volker-Weissmann, ``Feature Request: Better error messages for
+ non-ASCII symbols in labels.'',
2018/12/03.\\
\url{https://github.com/latex3/latex2e/issues/95}
\ifnum\epTeXversion>190131 %%%%% TL2019-hack
+ \bibitem{tjb81} 北川 弘典,「バイト列と和文文字トークンの区別」,2019/06/08.\\
+ \url{https://github.com/texjporg/tex-jp-build/issues/81}.
\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.\\
+ \url{https://github.com/texjporg/tex-jp-build/pull/94}.
+ \bibitem{tjb95} 北川 弘典,「[eptex] |\Uchar| and |\Ucharcat|」,2019/10/30.\\
+ \url{https://github.com/texjporg/tex-jp-build/issues/95}.
\fi %%%%% TL2019
\end{thebibliography}