diff options
Diffstat (limited to 'info/ptex-manual/eptexdoc.tex')
-rw-r--r-- | info/ptex-manual/eptexdoc.tex | 115 |
1 files changed, 60 insertions, 55 deletions
diff --git a/info/ptex-manual/eptexdoc.tex b/info/ptex-manual/eptexdoc.tex index e4e7650324..9c22097875 100644 --- a/info/ptex-manual/eptexdoc.tex +++ b/info/ptex-manual/eptexdoc.tex @@ -1,17 +1,17 @@ %#!make eptexdoc.pdf \documentclass[a4paper,11pt,nomag]{jsarticle} \usepackage[bold,deluxe]{otf} + \input fam256p.tex \usepackage[textwidth=42zw,lines=40,truedimen,centering]{geometry} - %%%%%%%%%%%%%%%% % additional packages \usepackage{amsmath} \usepackage{mathtools,amssymb,comment} \usepackage[dvipdfmx]{graphicx} +\usepackage{lmodern} \usepackage[T1]{fontenc} \usepackage{booktabs,enumitem,multicol} -\usepackage{lmodern} \usepackage[dvipdfmx,hyperfootnotes=false]{hyperref} \usepackage{pxjahyper} \usepackage{hologo} @@ -242,11 +242,10 @@ tracing機能や条件判断文の強化などあるが,そこら辺はパッ \end{multilist}} \csitem[\.{currentiftype} (read-only integer)] -\ifnum\epTeXversion>190131 %%%%% TL2019-hack 条件判断文とそれを表す数字との対応は以下のようになっている (\epTeX~190709以降). 21,~22は\hologo{pdfTeX}由来の条件判断文(後述), - 23--30が,\pTeX 拡張で追加された条件判断文に対応する.\\ + 23--32が\pTeX 拡張で追加された条件判断文に対応する.\\ \parbox{.9\linewidth}{% \begin{multilist}{3}{\hfil\hskip1.5zw#:&\quad#\qquad\hfil} \item 1&\.{if}\cr\item 2&\.{ifcat}\cr\item 3&\.{ifnum}\cr\item 4&\.{ifdim}\cr @@ -259,46 +258,28 @@ tracing機能や条件判断文の強化などあるが,そこら辺はパッ \item \bf 23&\.{iftdir}\cr\item \bf 24&\.{ifydir}\cr \item \bf 25&\.{ifddir}\cr\item \bf 26&\.{ifmdir}\cr\item \bf 27&\.{iftbox}\cr \item \bf 28&\.{ifybox}\cr\item \bf 29&\.{ifdbox}\cr\item \bf 30&\.{ifmbox}\cr + \item \bf 31&\.{ifjfont}\cr\item \bf 32&\.{iftfont}\cr \end{multilist}} -\else %%%%% TL2019-hack - 条件判断文とそれを表す数字との対応は以下のようになっている - (\epTeX~190131まで;\epTeX~190709以降は\.{ifincsname}プリミティブ追加により変化するので注意). - 21--28が,\pTeX 拡張で追加された条件判断文に対応する. - 29の\.{ifpdfprimitive}は\hologo{pdfTeX}由来のプリミティブ(後述)である.\\ - \parbox{.9\linewidth}{% - \begin{multilist}{3}{\hfil\hskip1.5zw#:&\quad#\qquad\hfil} - \item 1&\.{if}\cr\item 2&\.{ifcat}\cr\item 3&\.{ifnum}\cr\item 4&\.{ifdim}\cr - \item 5&\.{ifodd}\cr\item 6&\.{ifvmode}\cr\item 7&\.{ifhmode}\cr - \item 8&\.{ifmmode}\cr\item 9&\.{ifinner}\cr\item 10&\.{ifvoid}\cr - \item 11&\.{ifhbox}\cr\item 12&\.{ifvbox}\cr\item 13&\.{ifx}\cr - \item 14&\.{ifeof}\cr\item 15&\.{iftrue}\cr\item 16&\.{iffalse}\cr - \item 17&\.{ifcase}\cr\item 18&\.{ifdefined}\cr\item 19&\.{ifcsname}\cr - \item 20&\.{iffontchar}\cr\item \bf 21&\.{iftdir}\cr\item \bf 22&\.{ifydir}\cr - \item \bf 23&\.{ifddir}\cr\item \bf 24&\.{ifmdir}\cr\item \bf 25&\.{iftbox}\cr - \item \bf 26&\.{ifybox}\cr\item \bf 27&\.{ifdbox}\cr\item \bf 28&\.{ifmbox}\cr - \item \bf 29&\.{ifpdfprimtive}\cr - \end{multilist}} -\fi %%%%% TL2019-hack -\ifnum\epTeXversion>190131 %%%%% TL2019-hack - \csitem[\.{fontcharwd}, \.{fontcharht}, \.{fontchardp}, \.{fontcharic}] + \csitem[\.{fontcharwd}, \.{fontcharht}, \.{fontchardp}, \.{fontcharic} (dimension)] + 基本的にフォント内の文字の寸法を内部長さとして返す命令であるが, 欧文フォントと和文フォントを判別し,それに応じて処理が分かれる. それに伴い,許容される引数範囲と意味が異なることに注意 (\epTeX~190709以降). 以下,|??|は|wd|, |ht|, |dp|, |ic|のいずれかを表す. \begin{itemize} - \item 和文フォントの場合: \.{fontchar??} <Japanese font> <number>\\ + \item 和文フォントの場合:\.{fontchar??} <Japanese font> <number>\\ <Japanese font>を$f$,<number>を$c$とおくと, \begin{itemize} \item $c \geq 0$の場合は,$c$を\emph{文字コード}とみなす. $c$が和文文字コードとして有効であれば, 和文フォント$f$における文字コード$c$の和文文字の寸法値を返す. - 和文文字コードとして無効であれば|0pt|を返す. + 和文文字コードとして無効であれば0\,ptを返す. \item $c < 0$の場合は,$-(c+1)$を\emph{文字タイプ}とみなす. 和文フォント$f$に文字タイプ$-(c+1)$が定義されていればその寸法値を返し, - 未定義であれば|0pt|を返す. + 未定義であれば0\,ptを返す. \end{itemize} - \item 欧文フォントの場合: \.{fontchar??} <font> <8-bit number>\\ + \item 欧文フォントの場合:\.{fontchar??} <font> <8-bit number>\\ オリジナルの\eTeX と同じ挙動である.すなわち, 引数に$c \geq 256$や$c < 0$を与えると \verb+! Bad character code (256).+ @@ -323,10 +304,8 @@ tracing機能や条件判断文の強化などあるが,そこら辺はパッ \verb+! Bad character code (256).+ のようにエラーが出る. \end{itemize} -\fi %%%%% TL2019-hack \end{cslist} -\ifnum\epTeXversion>190131 %%%%% TL2019-hack \begin{dangerous} 上記で「和文文字コードとして有効かどうか」は,関数|is_char_kanji|を参照. この関数は内部コードによって異なるため,マクロで実装するのは面倒であるが, @@ -334,7 +313,6 @@ tracing機能や条件判断文の強化などあるが,そこら辺はパッ なお,\upTeX では任意の非負の値が和文文字コードとして有効なため, |is_char_kanji|は非負かどうかの判定になっている. \end{dangerous} -\fi %%%%% TL2019-hack \section{\OMEGA 由来の機能(旧名称:\texttt{FAM256}パッチ)} \epTeX には,掲示板\TeX\ Q\ \&\ Aの山本氏の書き込み @@ -471,7 +449,15 @@ delimiter codeについても同様である. \end{cases} \] となっている.内部では\texttt{fi}レベルが1,\texttt{fil}レベルが2,……として - 処理している. + 処理している\footnote{% + \hologo{LuaTeX}にも無限のレベル\texttt{fi}が存在するが, + |\gluestretchorder|, |\glueshrinkorder|は\eTeX や\epTeX と異なり, + 有限/\texttt{fi}/\texttt{fil}/\texttt{fill}/\texttt{filll}で0/1/2/3/4である. + また,r52360で\eTeX 互換を意図した + |\eTeXgluestretchorder|, |\eTeXglueshrinkorder|も追加されており, + そちらは有限/\texttt{fil}/\texttt{fill}/\texttt{filll}で0/1/2/3とし, + \texttt{fi}は$-1$である. + }. \end{itemize} \paragraph{レジスタについて} @@ -494,7 +480,12 @@ delimiter codeについても同様である. が必要となっており,もはや純粋な\eTeX ですら \LaTeX 3を利用することはできない状況である (\cite{expl31,expl32,expl33}). その他にも,\hologo{pdfTeX}由来のいくつかのプリミティブ(\cite{pdftexman})の実装が -日本の\TeX ユーザからあり, +日本の\TeX ユーザ,および\LaTeX3~team% +\footnote{% + 現在ではさらに状況が動き, + 2021年以降は,\LaTeXe 自体が本節で述べた(\.{readpapersizespecial}以外の)プリミティブを + 要求する予定である(\cite{l2e31}). +}などからあり, ほとんど\hologo{pdfTeX}における実装をそのまま真似する形で実装している. 現在の\epTeX で利用できる\hologo{pdfTeX}由来のプリミティブの一覧を以下に示す. @@ -526,9 +517,10 @@ delimiter codeについても同様である. この2つの内部長さを設定するだけではdviに何の影響も与えない. 後で述べる\.{pdflastxpos}, \.{pdflastypos}による出力位置の取得 - の際の原点位置を設定するためだけに使われ,初期値は0である. + の際の原点位置を設定するためだけに使われ,初期値は0\,ptである + (\hologo{pdfTeX}のdviモードと同じ挙動). - \csitem[\.{readpapersizespecial} (integer)] + \csitem[\.{readpapersizespecial}(integer,\emph{\epTeX 独自拡張で,\hologo{pdfTeX}にはない})] \pTeX 系列では, 用紙サイズの指定には伝統的にpapersize specialが利用されてきた.それを考慮して, 本内部整数\.{readpapersizespecial}(既定値は1)が正の場合は @@ -562,7 +554,7 @@ delimiter codeについても同様である. 原点はページの(物理的な意味の)左下隅であり,$y$軸は(物理的な)上方向に向かって増加する. \begin{itemize} \item ページの物理的な幅と高さはすぐ上の\.{pdfpagewidth}, \.{pdfpageheight}で設定する. - これらの内部長さが0であった場合は,\.{shipout}されたボックスの寸法と + これらの内部長さが0\,ptであった場合は,\.{shipout}されたボックスの寸法と \.{hoffset}(または\.{voffset})の値から自動的に計算される. \item \pTeX では横組・縦組と組方向が複数あるので,\.{pdflastxpos}, \.{pdflastypos}の値の座標系を 「物理的な」向きとすべきか,それとも「組方向に応じた」向きとすべきかは悩みどころである. @@ -575,7 +567,7 @@ delimiter codeについても同様である. \end{itemize} \csitem[\.{pdfcreationdate}] - エンジン起動時の時刻を,\texttt{\pdfcreationdate}の形式で表した文字列に展開する. + エンジン起動時の時刻を\texttt{\pdfcreationdate}の形式で表した文字列に展開される. 末尾に|+09'00'|などと表示されるのはローカルのタイムゾーンであるが, 例えば|SOURCE_DATE_EPOCH=1000000000|のように環境変数を設定すると |D:20010909014640Z|のようにタイムゾーンは|Z|と表示される. @@ -590,13 +582,13 @@ delimiter codeについても同様である. \csitem[\.{pdffilemoddate} <filename>, \.{pdffilesize} <filename>] それぞれ<filename>の更新時刻(\.{pdfcreationdate}と同じ形式)と - ファイルサイズを表す文字列に展開する. + ファイルサイズを表す文字列に展開される. これらも\Pkg{standalone}パッケージのために\epTeX に実装されたプリミティブである. \csitem[\.{pdffiledump} \textrm{[}\texttt{offset} <offset>\textrm{]}% \ \texttt{length} <length> <filename>] <filename>で与えられたファイル名の<offset>バイト目(先頭は0)から<length>バイトを読み込み, - 16進表記(大文字)したものに展開される. + 16進表記(大文字)した文字列に展開される. 本プリミティブはHeiko Oberdiek氏による\Pkg{bmpsize}パッケージを\epTeX でも使うために 角藤さんが実装したものである(2014/05/06). @@ -611,11 +603,17 @@ delimiter codeについても同様である. 本プリミティブは\TeX ユーザの集い2014でリクエストを受けて実装された(\cite{pdfse}). \csitem[\.{pdfmdfivesum} {[\texttt{file}]} <general text>] - 引数<general text>のMD5ハッシュ値か,あるいは\texttt{file}が指定された場合は - ファイル名が<general text>のファイルのMD5ハッシュ値を計算する. + \texttt{file}が指定された場合は,ファイル名が<general text>のファイルのMD5ハッシュ値に展開される. + もしファイルが存在しなかった場合は何も返さない. - 前者の「引数のMD5ハッシュ値を計算する」場合には,\.{pdfstrcmp}と同じように - 和文文字をUTF-8で符号化してから計算する. + \texttt{file}が指定されなかった場合は,引数<general text>のMD5ハッシュ値に展開される. + その際,\.{pdfstrcmp}と同じように和文文字はUTF-8で符号化してから計算される. + 例えば +\begin{verbatim} +\pdfmdfivesum{あ} +\pdfmdfivesum{^^e3^^81^^82} +\end{verbatim} + の結果はいずれも\texttt{\pdfmdfivesum{あ}}である. このプリミティブは\cite{xe5}以降の議論を元に,角藤さんがリクエストしたもので, 2015/07/04に\epTeX に実装されている. @@ -635,11 +633,18 @@ delimiter codeについても同様である. 現在では\Pkg{expl3}パッケージではこれらのプリミティブは要求していない. \csitem[\.{pdfuniformdeviate} <number>, \.{pdfnormaldeviate}] - \.{pdfuniformdeviate}は,0以上<number>未満の一様分布に従う乱数(整数値)を生成する. - \.{pdfnormaldeviate}は,平均値0,標準偏差65536の正規分布に従う乱数(整数値)を生成する. + \.{pdfuniformdeviate}は,0以上<number>未満の一様分布に従う乱数 + \footnote{% + 乱数とはいっても,例えば\texttt{\.{pdfuniformdeviate}~536870912}は常に偶数を生成することが知られている + (\cite{xe4}).しかしもともとの\hologo{pdfTeX}の実装がそうなっており,他のエンジンでも直されていないため + \epTeX でもこの症状には独自対処はしない. + }(整数値)を生成し, + それを10進表記した文字列に展開される. + \.{pdfnormaldeviate}は,平均値0,標準偏差65536の正規分布に従う乱数(整数値)を生成し, + それを10進表記した文字列に展開される. \csitem[\.{pdfrandomseed} (read-only integer), \.{pdfsetrandomseed} <number>] - 乱数生成の種の値は,\.{pdfrandomseed}で取得できる. + 乱数生成の種の値は,内部整数\.{pdfrandomseed}で取得できる. 種の初期化にはシステムのマイクロ秒単位での現在時刻情報が使われる.また,種の値を 設定するには\.{pdfsetrandomseed}に引数として渡せば良い. @@ -660,12 +665,10 @@ delimiter codeについても同様である. \hologo{pdfTeX}, \epTeX, \hologo{XeTeX}で一斉に実装された. \epTeX~180518以降で利用可能である. -\ifnum\epTeXversion>190131 %%%%% TL2019-hack \csitem[\.{ifincsname}] \texttt{\.{csname}~...~\.{endcsname}}内で評価されたちょうどその時に真となる. \LaTeX~2019-10-01で行われる変更(\cite{latex95,tjb83})で必要になったために \epTeX~190709で導入された. -\fi %%%%% TL2019 \end{cslist} @@ -912,7 +915,6 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar % (\uccode, \lccode は参照しない) \end{cslist} -\ifnum\epTeXversion>190131 %%%%% TL2019-hack \section{\.{current[x]spacingmode}プリミティブ} もともと\pTeX 系列では,\.{kanjiskip},~\.{xkanjiskip}の挿入が有効になっているか 直接的に知る方法が\.{showmode}プリミティブしかなかった. @@ -939,9 +941,8 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar \.{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>」というプリミティブが存在する @@ -1025,7 +1026,6 @@ abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar \verb+\Ucharcat\numexpr\jis"3441\relax 17 % エラー回避+ \end{quote} \end{dangerous} -\fi %%%%% TL2019 @@ -1131,6 +1131,9 @@ $3$\,sp)だが,どこか気になるところである. \bibitem{random} Joseph Wright, ``[tex-live] Random number primitives'', 2016/11/12,\\ \url{http://tug.org/pipermail/tex-live/2016-November/039436.html} + \bibitem{xe4} Bruno Le Floch, ``[XeTeX] Random number primitives'', + 2016/12/06,\\ + \url{http://tug.org/pipermail/pipermail/xetex/2016-December/026920.html} \bibitem{eptexinputenc} 阿部 紀行,「2016年2月2日」,2016/02/02.\\ \url{http://abenori.blogspot.jp/2016/02/e-ptexeptexinputencoding.html}. \bibitem{etexman} The \NTS\!\ Team. \textit{The \eTeX\ manual} (v2.0). \\ @@ -1163,7 +1166,6 @@ $3$\,sp)だが,どこか気になるところである. 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.\\ @@ -1173,7 +1175,10 @@ $3$\,sp)だが,どこか気になるところである. \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 + \bibitem{l2e31} + The \LaTeX3 Project Team, \textit{\LaTeX\ News Issue 31}, 2020.\\ + |$TEXMFDIST/source/latex/base/ltnews31.tex|, \\ + \url{https://www.latex-project.org/news/latex2e-news/ltnews31.pdf}. \end{thebibliography} \newpage |