From 2836126906a8ae46781df9e08c9eabb75228bd83 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 21 Mar 2020 21:18:15 +0000 Subject: ptex-manual (21mar20) git-svn-id: svn://tug.org/texlive/trunk@54450 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/ptex/ptex-manual/LICENSE | 2 +- Master/texmf-dist/doc/ptex/ptex-manual/README.md | 2 +- .../texmf-dist/doc/ptex/ptex-manual/eptexdoc.pdf | Bin 380603 -> 347556 bytes .../texmf-dist/doc/ptex/ptex-manual/eptexdoc.tex | 115 ++++----- Master/texmf-dist/doc/ptex/ptex-manual/fam256p.tex | 90 ++++---- Master/texmf-dist/doc/ptex/ptex-manual/jfm.pdf | Bin 157050 -> 164504 bytes Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex | 257 +++++++++++++++++---- .../doc/ptex/ptex-manual/ptex-guide-en.pdf | Bin 99191 -> 98937 bytes .../doc/ptex/ptex-manual/ptex-guide-en.tex | 28 ++- .../doc/ptex/ptex-manual/ptex-manual.pdf | Bin 381432 -> 329490 bytes .../doc/ptex/ptex-manual/ptex-manual.tex | 212 +++++++++++------ 11 files changed, 479 insertions(+), 227 deletions(-) (limited to 'Master/texmf-dist/doc/ptex') diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/LICENSE b/Master/texmf-dist/doc/ptex/ptex-manual/LICENSE index fb5ba975122..e10e83ffe85 100644 --- a/Master/texmf-dist/doc/ptex/ptex-manual/LICENSE +++ b/Master/texmf-dist/doc/ptex/ptex-manual/LICENSE @@ -1,4 +1,4 @@ -Copyright (C) 2017-2019 Japanese TeX Development Community +Copyright (C) 2017-2020 Japanese TeX Development Community All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/README.md b/Master/texmf-dist/doc/ptex/ptex-manual/README.md index 7a4f1656071..37291ae17aa 100644 --- a/Master/texmf-dist/doc/ptex/ptex-manual/README.md +++ b/Master/texmf-dist/doc/ptex/ptex-manual/README.md @@ -36,6 +36,6 @@ the 3-clause BSD license (see [LICENSE](./LICENSE)). ## Release Date -2019-11-26 +2020-03-21 Japanese TeX Development Community diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.pdf b/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.pdf index 4836488c052..34de3a3c6dd 100644 Binary files a/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.pdf and b/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.pdf differ diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.tex b/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.tex index e4e76503245..9c22097875f 100644 --- a/Master/texmf-dist/doc/ptex/ptex-manual/eptexdoc.tex +++ b/Master/texmf-dist/doc/ptex/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??} \\ + \item 和文フォントの場合:\.{fontchar??} \\ を$f$,を$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??} <8-bit number>\\ + \item 欧文フォントの場合:\.{fontchar??} <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} , \.{pdffilesize} ] それぞれの更新時刻(\.{pdfcreationdate}と同じ形式)と - ファイルサイズを表す文字列に展開する. + ファイルサイズを表す文字列に展開される. これらも\Pkg{standalone}パッケージのために\epTeX に実装されたプリミティブである. \csitem[\.{pdffiledump} \textrm{[}\texttt{offset} \textrm{]}% \ \texttt{length} ] で与えられたファイル名のバイト目(先頭は0)からバイトを読み込み, - 16進表記(大文字)したものに展開される. + 16進表記(大文字)した文字列に展開される. 本プリミティブはHeiko Oberdiek氏による\Pkg{bmpsize}パッケージを\epTeX でも使うために 角藤さんが実装したものである(2014/05/06). @@ -611,11 +603,17 @@ delimiter codeについても同様である. 本プリミティブは\TeX ユーザの集い2014でリクエストを受けて実装された(\cite{pdfse}). \csitem[\.{pdfmdfivesum} {[\texttt{file}]} ] - 引数のMD5ハッシュ値か,あるいは\texttt{file}が指定された場合は - ファイル名がのファイルのMD5ハッシュ値を計算する. + \texttt{file}が指定された場合は,ファイル名がのファイルのMD5ハッシュ値に展開される. + もしファイルが存在しなかった場合は何も返さない. - 前者の「引数のMD5ハッシュ値を計算する」場合には,\.{pdfstrcmp}と同じように - 和文文字をUTF-8で符号化してから計算する. + \texttt{file}が指定されなかった場合は,引数の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} , \.{pdfnormaldeviate}] - \.{pdfuniformdeviate}は,0以上未満の一様分布に従う乱数(整数値)を生成する. - \.{pdfnormaldeviate}は,平均値0,標準偏差65536の正規分布に従う乱数(整数値)を生成する. + \.{pdfuniformdeviate}は,0以上未満の一様分布に従う乱数 + \footnote{% + 乱数とはいっても,例えば\texttt{\.{pdfuniformdeviate}~536870912}は常に偶数を生成することが知られている + (\cite{xe4}).しかしもともとの\hologo{pdfTeX}の実装がそうなっており,他のエンジンでも直されていないため + \epTeX でもこの症状には独自対処はしない. + }(整数値)を生成し, + それを10進表記した文字列に展開される. + \.{pdfnormaldeviate}は,平均値0,標準偏差65536の正規分布に従う乱数(整数値)を生成し, + それを10進表記した文字列に展開される. \csitem[\.{pdfrandomseed} (read-only integer), \.{pdfsetrandomseed} ] - 乱数生成の種の値は,\.{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}には,引数を文字コードとする \emph{文字トークン}に展開される「\.{Uchar} 」というプリミティブが存在する @@ -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 diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/fam256p.tex b/Master/texmf-dist/doc/ptex/ptex-manual/fam256p.tex index d05847ab6d9..64242249943 100644 --- a/Master/texmf-dist/doc/ptex/ptex-manual/fam256p.tex +++ b/Master/texmf-dist/doc/ptex/ptex-manual/fam256p.tex @@ -15,52 +15,52 @@ -\DeclareMathAlphabet{\mbfa}{OT1}{cmr}{m}{n} -\DeclareMathAlphabet{\mbfb}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfc}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfd}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfe}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbff}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfg}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfh}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfi}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfj}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfk}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfl}{OT1}{cmr}{bx}{n}% ここで15番 +\DeclareMathAlphabet{\mbfa}{OT1}{lmr}{m}{n} +\DeclareMathAlphabet{\mbfb}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbfc}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbfd}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbfe}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbff}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbfg}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbfh}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbfi}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbfj}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbfk}{OT1}{lmr}{bx}{n} +\DeclareMathAlphabet{\mbfl}{OT1}{lmr}{bx}{n}% ここで15番 -\DeclareMathAlphabet{\mbfaa}{OT1}{cmtt}{m}{n} % 16 -\DeclareMathAlphabet{\mbfab}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfac}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfad}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfae}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfaf}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfag}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfah}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfai}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfaj}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfak}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfal}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfam}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfan}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfao}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfap}{OT1}{cmtt}{m}{n} +\DeclareMathAlphabet{\mbfaa}{OT1}{lmtt}{m}{n} % 16 +\DeclareMathAlphabet{\mbfab}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfac}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfad}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfae}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfaf}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfag}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfah}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfai}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfaj}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfak}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfal}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfam}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfan}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfao}{OT1}{lmtt}{m}{n} +\DeclareMathAlphabet{\mbfap}{OT1}{lmtt}{m}{n} -\DeclareMathAlphabet{\mbfba}{OT1}{cmss}{m}{it} % 32 -\DeclareMathAlphabet{\mbfbb}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbc}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbd}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbe}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbf}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbg}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbh}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbi}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbj}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbk}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbl}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbm}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbn}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbo}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbp}{OT1}{cmss}{m}{it} +\DeclareMathAlphabet{\mbfba}{OT1}{lmss}{m}{it} % 32 +\DeclareMathAlphabet{\mbfbb}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbc}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbd}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbe}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbf}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbg}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbh}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbi}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbj}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbk}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbl}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbm}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbn}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbo}{OT1}{lmss}{m}{it} +\DeclareMathAlphabet{\mbfbp}{OT1}{lmss}{m}{it} \DeclareMathAlphabet{\mbfca}{OT1}{ptm}{m}{n} % 48 \DeclareMathAlphabet{\mbfcb}{OT1}{ptm}{m}{n} @@ -77,7 +77,7 @@ \DeclareMathAlphabet{\mbfcm}{OT1}{ptm}{m}{n} \DeclareMathAlphabet{\mbfcn}{OT1}{ptm}{m}{n} \DeclareMathAlphabet{\mbfco}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcp}{OT1}{cmr}{bx}{n} +\DeclareMathAlphabet{\mbfcp}{OT1}{lmr}{bx}{n} \DeclareMathAlphabet{\mbfda}{OT1}{phv}{m}{n} % 64 \DeclareMathAlphabet{\mbfdb}{OT1}{pcr}{m}{n} diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/jfm.pdf b/Master/texmf-dist/doc/ptex/ptex-manual/jfm.pdf index 440180a3f33..3654a86ba3c 100644 Binary files a/Master/texmf-dist/doc/ptex/ptex-manual/jfm.pdf and b/Master/texmf-dist/doc/ptex/ptex-manual/jfm.pdf differ diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex b/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex index 128ba4399ac..4aef0812e70 100644 --- a/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex +++ b/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex @@ -16,6 +16,7 @@ % logos \def\pTeX{p\kern-.10em\TeX}\def\upTeX{u\pTeX} +\def\OMEGA{$\Omega$} \title{\emph{JFMファイルフォーマット}} \author{ASCII Corporation \& Japanese \TeX\ Development Community} @@ -36,7 +37,10 @@ JFMフォーマットの仕様は全く同じであり,ただ JISコードを用いる(\pTeX の場合)か, UCS-4の下位3バイトを用いる(\upTeX の場合)かだけが異なる. -\section{JFMファイルの構成} +\tableofcontents +\clearpage + +\section{JFMファイルの構成}\label{jfm-format} JFMファイルのフォーマットは, 基本的にはTFMファイルのフォーマットに準拠しており, @@ -92,20 +96,10 @@ JFMファイルでもTFMファイルと同じく,拡張子は\code{.tfm}が用 このテーブルの各エントリーは1ワード(=4バイト)で構成され, 上位3バイトに文字コード(符合位置),下位1バイトに文字タイプを持つ -\footnote{これが日本語\TeX{}開発コミュニティによって2018年1月に導入された -新仕様である;オリジナルのアスキーによる仕様では,「上位半ワードに -文字コード,下位半ワードに文字タイプを持つ」というものであった. -\pTeX{}では内部処理にJISが用いられ,JFMで扱う文字コードは2バイトが -上限だったため十分であったが,\upTeX{}でBMP超えの3バイトの文字を -JFMで扱うことを目的に仕様拡張した.}. +\footnote{日本語\TeX{}開発コミュニティによる新仕様; +詳細は第\ref{jfm-new}節を参照.}. 文字コードは,それが16進数24bit(3バイト)で\code{0xABcdef}と表されるとき, -\node{char\_type}テーブルには\code{cd ef AB}として格納される -\footnote{オリジナルの仕様では,下位半ワードに文字タイプを -格納していたが,文字タイプの上限は255なので,実はその上位バイトは -常に\code{00}であった.このことを利用し,日本語\TeX{}開発コミュニティの -新仕様では「この\code{00}が実は文字コードの上位だった」ということに -して,3バイト(U+10000以上)の文字コードで不足する1バイトを確保した. -これにより,新仕様はオリジナルの仕様の上位互換であることが保証されている.}. +\node{char\_type}テーブルには\code{cd ef AB}として格納される. テーブル内にはコードの値の順番に収められていなければならない. またこのテーブルの先頭には,デフォルトのインデックスとして 文字コード及び文字タイプの項が0のものが, @@ -162,11 +156,8 @@ JFMでは$\size{bc}$は必ずゼロ\footnote{前節にある通り,文字コ である場合は,実際の\node{glue\_kern}プログラムが \node{glue\_kern}[$256\times\size{op\_byte}+\size{remainder}$]から 収められている(すなわち,再配置されている)ことを示す - \footnote{「再配置」は,サイズが256を超える大きな - \node{glue\_kern}テーブルを格納するための方策であり, - 欧文TFMの\node{lig\_kern}テーブルにおけるそれと同様である. - 2018年2月に日本語\TeX{}開発コミュニティによって, - \pTeX{}及びpPLtoTFで新たにサポートされた.}. + \footnote{日本語\TeX{}開発コミュニティによって新たにサポート; + 詳細は第\ref{jfm-new}節を参照.}. 最初のワードでない場合(すなわち,既に再配置先あるいは プログラムのステップを開始した後のワードである場合)は, その場でプログラムを終了する. @@ -175,13 +166,8 @@ JFMでは$\size{bc}$は必ずゼロ\footnote{前節にある通り,文字コ \item 128より小さいとき\\ このワードを実行した後,次のステップまでスキップする ワード数を示す - \footnote{「スキップ」(SKIP)は,元々アスキーの公式ページ - \texttt{http://ascii.asciimw.jp/pb/ptex/tfm/jfm.html}に文書化 - されてはいたが,実際には(p)PLtoTFの\node{glue\_kern}テーブル内で - SKIP命令を使用することができず,\pTeX{}もやはりSKIP命令を - サポートしていなかった. - 2018年2月の日本語\TeX{}開発コミュニティの改修により, - 新たにサポートが開始された.}. + \footnote{日本語\TeX{}開発コミュニティによって新たにサポート; + 詳細は第\ref{jfm-new}節を参照.}. \end{itemize} \item[第2バイト] (\node{char\_type}) \begin{itemize} @@ -238,6 +224,67 @@ JFMでは$\size{bc}$は必ずゼロ\footnote{前節にある通り,文字コ % 上下位置補正に \fontdimen5 の値が用いられるらしい.他には? \end{dangerous} +\subsection{日本語\TeX{}開発コミュニティによる新仕様}\label{jfm-new} +長らくJFMフォーマットは株式会社アスキーが開発した当初仕様のままであったが, +2018年1月から2月にかけ,日本語\TeX{}開発コミュニティは下記の3点につき +JFMフォーマットの仕様を拡張した. +\begin{enumerate} + \item \node{char\_type}テーブルへの3バイトの文字コード格納 + \item \node{glue\_kern}テーブルでのスキップ(SKIP)コマンド使用 + \item \node{glue\_kern}テーブルでの再配置(rearrangement) +\end{enumerate} +和文JFMでこれらの拡張機能が使われている場合は\pTeX~p3.8.0以上が必要である. + +\subsubsection{\node{char\_type}テーブルへの3バイトの文字コード格納} +\node{char\_type}テーブルの各エントリーは1ワード(=4バイト)で +構成されるが,オリジナルの仕様では +\begin{itemize} + \item 上位半ワードに文字コード(符合位置),下位半ワードに文字タイプを持つ +\end{itemize} +であった. +\pTeX{}では内部処理にJISが用いられ,JFMで扱う文字コードは2バイトが +上限だったため十分であったが,\upTeX{}でBMP超えの3バイトの文字を +JFMで扱うことができなかった.また,オリジナルの仕様では文字タイプ用に +下位半ワードが確保されている一方で,文字タイプの上限は255なので +実はその上位バイトは常に\code{00}であり,勿体なかった. + +そこで,日本語\TeX{}開発コミュニティの新仕様(2018年1月)では +\begin{itemize} + \item 上位3バイトに文字コード(符合位置),下位1バイトに文字タイプを持つ + \item 文字コードは,それが16進数24bit(3バイト)で\code{0xABcdef}と + 表されるとき,テーブルには\code{cd ef AB}として格納される +\end{itemize} +とした.オリジナルの仕様で常に\code{00}だったバイトが +「実は文字コードの上位だった」と解釈することにして, +3バイト(U+10000以上)の文字コードで不足する1バイトを確保したのである. +これにより,新仕様はオリジナルの仕様の上位互換であることが保証されている. + +\subsubsection{\node{glue\_kern}テーブルでのスキップ(SKIP)コマンド使用} +「スキップ」(\code{SKIP})は,元々アスキーの公式ページ +\footnote{\texttt{https://asciidwango.github.io/ptex/tfm/jfm.html}} +% 旧: http://ascii.asciimw.jp/pb/ptex/tfm/jfm.html +に文書化されてはいたが,実際には(p)PLtoTFは\code{GLUEKERN}プロパティ内で +\code{SKIP}命令を受け付けず,\pTeX{}もやはりJFMの\code{SKIP}命令を +サポートしていなかった.2018年2月の日本語\TeX{}開発コミュニティの改修により, +新たにサポートが開始された. + +\subsubsection{\node{glue\_kern}テーブルでの再配置(rearrangement)} +「再配置」は,サイズが256を超える大きな\node{glue\_kern}テーブルを +格納するための方策であり,欧文TFMの\node{lig\_kern}テーブルにおける +それと同様である.2018年2月に日本語\TeX{}開発コミュニティによって, +\pTeX{}及びpPLtoTFで新たにサポートされた. + + +\section{JPLファイル}\label{jpl-format} + +TFMはバイナリ形式であるが,これをプロパティ(特性)という概念を使って +テキスト形式で視覚化したものがPL (Property List)ファイルである. +同様に,JFMをテキスト形式で視覚化したものが +\emph{JPL (Japanese Property List)}ファイルである. +JPLファイルでもPLファイルと同じく,拡張子は\code{.pl}が用いられる. + + +% -- tables begin \DeleteShortVerb{|} \begin{table}[tbp]\small \caption{JFMファイルの構成\label{構成}} @@ -307,31 +354,151 @@ $\size{ng}$ & $\size{np}$ \\ \hline \end{minipage} \end{table} \MakeShortVerb*{|} +% -- tables end +\clearpage -\section{JPLファイル} - -TFMはバイナリ形式であるが,これをプロパティ(特性)という概念を使って -テキスト形式で視覚化したものがPL (Property List)ファイルである. -同様に,JFMをテキスト形式で視覚化したものが -\emph{JPL (Japanese Property List)}ファイルである. -JPLファイルでもPLファイルと同じく,拡張子は\code{.pl}が用いられる. - - -\section{JFMを扱うプログラム} +\section{JFMを扱うプログラム}\label{jfm-program} \pTeX と\upTeX ,あるいはそれらが生成したDVIを扱うプログラムが JFMを扱うのは当然であるが,ここではJFMおよび関連するフォントフォーマットを 扱うことに特化したプログラムの主なものを挙げる. -%\subsection{pPLtoTF, upPLtoTF} - -%\subsection{pTFtoPL, upTFtoPL} - -%\subsection{chkdvifont} - -%\subsection{jfmutil} - -%\subsection{makejvf} +\subsection{pPLtoTF, upPLtoTF} + +テキスト形式のJPLファイルをバイナリ形式のJFMファイルに変換する.いずれも +欧文\TeX 用の\code{pltotf}の上位互換であり,入力ファイルが欧文用のPLファイルで +あれば欧文用のTFMを生成し,和文用のJPLファイルであれば和文用のJFMを生成する. + +\code{ppltotf}と\code{uppltotf}の違いは,エンコーディングである. +\begin{itemize} + \item \code{ppltotf}: 常に\textbf{JIS}コードでエンコードされたJFMを生成するため, + \pTeX 用のJFM生成には多くの場合\code{ppltotf}コマンドが用いられる. + \item \code{uppltotf}: デフォルトでは\textbf{Unicode}(UCS-4の下位3バイト)で + エンコードされたJFMを生成するため,主に\upTeX 用のJFM生成に用いられる. +\end{itemize} + +\code{ppltotf}においては,\code{-kanji}オプションで +入力JPLファイルの文字コードを指定できる +(有効な値は\code{euc}, \code{jis}, \code{sjis}, \code{utf8}). +\code{uppltotf}でも\code{-kanji}オプションが同じく使えるが, +同時にJFMのエンコードもJISになる(従って\code{ppltotf}と同じ挙動を示す)ことに注意 +\footnote{\code{uppltotf}における規定値は\code{uptex}であり, +この場合はJFMがUnicodeでエンコードされる.}. + +\subsection{pTFtoPL, upTFtoPL} + +バイナリ形式のJFMファイルをテキスト形式のJPLファイルに変換する.いずれも +欧文\TeX 用の\code{tftopl}の上位互換であり,入力ファイルが欧文用のTFMであれば +欧文用のPLファイルを生成し,和文用のJFMであれば和文用のJPLファイルを生成する. + +\code{ptftopl}と\code{uptftopl}の違いは,やはりエンコーディングである. +\begin{itemize} + \item \code{ptftopl}: 入力JFMファイルを常に\textbf{JIS}コードで解釈するため, + \pTeX 用のJFMデコードには多くの場合\code{ptftopl}コマンドが用いられる. + \item \code{uptftopl}: 入力JFMファイルをデフォルトでは\textbf{Unicode}で解釈するため, + 主に\upTeX 用のJFMデコードに用いられる. +\end{itemize} + +\code{ptftopl}においては,\code{-kanji}オプションで +出力JPLファイルの文字コードを指定できる +(有効な値は\code{euc}, \code{jis}, \code{sjis}, \code{utf8}). +\code{uptftopl}でも\code{-kanji}オプションが同じく使えるが, +同時にJFMもJISコードで解釈される(従って\code{ptftopl}と同じ挙動を示す)ことに注意 +\footnote{\code{uptftopl}における規定値は\code{uptex}であり, +この場合はJFMがUnicodeで解釈される.}. + +\subsection{chkdvifont} + +\TeX\ Live 2019で追加された比較的新しいコマンドであり, +TFM/JFMファイルの簡単な情報を表示する機能を持つ(\OMEGA 用のOFMファイルにも対応). + +実行例を示す(注意:ファイル名の拡張子は省略不可.また,ファイルが +現在のディレクトリにない場合は,フルパスの指定が必要). + +\paragraph{欧文TFMの場合} +\begin{verbatim} +$ chkdvifont cmr10.tfm + "cmr10" is a tfm file : 0 -> 127 + checksum = 4BF16079 + design size = 10485760 2^{-20} points = 10 points +\end{verbatim} +一行目の表示から, +欧文TFMであることと$\size{bc}=0$,$\size{ec}=127$であることが読み取れる. + +\paragraph{和文横組用JFMの場合} +\begin{verbatim} +$ chkdvifont jis.tfm + "jis" is a jfm file : 0 -> 5 + checksum = 00000000 + design size = 10485760 2^{-20} points = 10 points +\end{verbatim} +和文(横組用)JFMであることと$\size{bc}=0$,$\size{ec}=5$であることが読み取れる. + +\paragraph{和文縦組用JFMの場合} +\begin{verbatim} +$ chkdvifont upjisr-v.tfm + "upjisr-v" is a jfm(tate) file : 0 -> 5 + checksum = 00000000 + design size = 10485760 2^{-20} points = 10 points +\end{verbatim} +和文縦組用JFMであることと$\size{bc}=0$,$\size{ec}=5$であることが読み取れる +\footnote{\code{upjisr-v.tfm}は\upTeX 用JFMであるが, +原理的に\pTeX 用と\upTeX 用のJFMは区別できない.}. + +\paragraph{和文JFMの拡張機能が使われている場合} +第\ref{jfm-new}節で述べたとおり,日本語\TeX 開発コミュニティによって +下記の3点につきJFMフォーマットの仕様が拡張されている. +\begin{enumerate} + \item \node{char\_type}テーブルへの3バイトの文字コード格納 + \item \node{glue\_kern}テーブルでのスキップ(SKIP)コマンド使用 + \item \node{glue\_kern}テーブルでの再配置(rearrangement) +\end{enumerate} +和文JFMでこれらの拡張機能が使われている場合は\pTeX~p3.8.0以上が必要であるが, +この情報も表示される(下の例は再配置あり): +\begin{verbatim} +$ chkdvifont upphiraminw3-h.tfm + "upphiraminw3-h" is a jfm file : 0 -> 146 + New features in pTeX p3.8.0 / JFM 2.0: + + rearrangement in glue_kern + checksum = 00000000 + design size = 10485760 2^{-20} points = 10 points +\end{verbatim} + +\subsection{makejvf} + +JFMファイルを基にして,VF (virtual font)を生成するプログラムである. +\code{makejvf}が生成する和文VFの目的は以下のとおりである: +\begin{itemize} + \item \pTeX や\upTeX で使われる多くのJFMでは,約物類(かっこ,句読点など)の文字幅を + 半角幅として定義し,見た目の空白をグルーやカーンの挿入によって実現している. + 例えば``(''のような左に空きがある括弧類は,左半分は文字の一部として扱わず, + 「グルーによる半角分の右シフト」と「半角幅の\inhibitglue (」として扱っている. + \item 一方,DVIからPostScriptやPDFへ変換時に使われる実際のフォントでは, + 約物類も全角幅でデザインされている.そのため,DVIに配置された + ``(''を実際のフォントの``(''に安直に置き換えると,想定よりも右にずれた + 位置に出力されてしまう. + \item この位置ずれを補正するため,欧文フォントの合成や置換に実用されている + VF(仮想フォント)という仕組みを和文フォントにも応用する. + 例えばVF中に「``(''は左に半角分ずらして置き換える」という記述を追加することで, + DVIドライバがそれを解釈して位置補正できるようにする. +\end{itemize} +詳細はマニュアル|makejvf.1|(英語版)を参照してほしい. + +\subsection{jfmutil} + +JFMおよび和文VFを操作する種々の機能を提供するPerlスクリプトである. +主な機能は以下のとおり: +\begin{itemize} + \item 和文の仮想フォント(VFとJFMの組)に対応する独自仕様の + テキスト形式(ZVP形式)と,仮想フォントとの間の相互変換. + 欧文の仮想フォント(VFとTFMの組)とテキスト形式(VPL形式)との間を + 相互変換する|vftovp|/|vptovf|の和文版に相当する. + \item 和文・欧文問わず,VFそれ単独に対応する独自仕様の + テキスト形式(ZVP0形式;ZVP形式のサブセット)と,VFとの間の相互変換. + \item 和文の仮想フォント(VFとJFMの組)を別の名前で複製する機能. + VF中に記録された参照先のJFM名も適切に変更される.多書体化などに有用. +\end{itemize} +詳細は公式ドキュメントを参照してほしい. \end{document} diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.pdf b/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.pdf index 6228a3f4b51..eec4e67a3a7 100644 Binary files a/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.pdf and b/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.pdf differ diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex b/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex index 7e7eab90baf..66c651cc761 100644 --- a/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex +++ b/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex @@ -270,7 +270,10 @@ but may also apply to other countries: they do without driver options unless really needed. For example, the convention of having a global driver option does no harm even when no driver-dependent package is used, but - some users choose to omit a driver option to avoid a warning: + some users choose to omit a driver option to avoid a warning\footnote{% + Since \LaTeXe~2020-02-02, this warning is effectively gone. This is due + to preloading of \Pkg{expl3} into the format, and the driver-dependent + code of \Pkg{expl3} interprets the global driver option.}: \begin{verbatim} LaTeX Warning: Unused global option(s): [dvipdfmx]. @@ -332,19 +335,25 @@ both two drivers. A DVI file which is output by \pTeX\ can be converted directly to a PDF file using dvipdfmx. -% [TODO] Mention kanji-config-updmap for font setup +For Japanese fonts to be used in the output PDF, dvipdfmx refers to +|kanjix.map| generated by the command |updmap|. +You can use the script |kanji-config-updmap| to change font settings; +please refer to its help message or documentation. \subsubsection{Using \emph{dvips}} A DVI file which is output by \pTeX\ can be converted to a PostScript file using dvips. -% [TODO] Mention kanji-config-updmap again +For Japanese fonts to be used in the output PostScript, dvips refers to +\code{psfonts.map} generated by the command \code{updmap}. +You can use the script |kanji-config-updmap| to change font settings; +please refer to its help message or documentation. The resulting PostScript file can then be converted to a PDF file using Ghostscript (ps2pdf) or Adobe Distiller. When using Ghostscript, a proper setup of Japanese font must be done before converting PostScript into PDF. -An easy solution for the setup is a script |cjk-gs-integrate| +An easy solution for the setup is to run a script |cjk-gs-integrate| developed by Japanese \TeX\ Development Community. \section{Programming on \pTeX\ family} @@ -448,10 +457,12 @@ Knuthian \TeX; however, it is enabled in \pTeX\ family. \csitem[\.{euc}] \csitem[\.{ifdbox} \New{p3.2 (\TL2011)}] \csitem[\.{ifddir} \New{p3.2 (\TL2011)}] + \csitem[\.{ifjfont} \New{p3.8.3 (\TL2020)}] \csitem[\.{ifmbox} \New{p3.7.1 (\TL2017)}] \csitem[\.{ifmdir}] \csitem[\.{iftbox}] \csitem[\.{iftdir}] + \csitem[\.{iftfont} \New{p3.8.3 (\TL2020)}] \csitem[\.{ifybox}] \csitem[\.{ifydir}] \csitem[\.{inhibitglue}] @@ -754,7 +765,7 @@ is as follows: Short version: \begin{itemize} \item With \epTeX~191112 or later (\TL2020), - you can use expandable primitives \.{Uchar} and \.{Ucharcat} + you can use expandable primitives \.{Uchar} and \.{Ucharcat}. \item Otherwise, use the ``\.{kansuji} trick''. \end{itemize} @@ -803,10 +814,15 @@ the ``\.{kansuji} trick'' and the ``\.{lowercase} trick'' should be used complementarily. \paragraph{\.{Uchar}, \.{Ucharcat}} -The ``\.{kansuji} trick'' above include an assignment of \.{kansujichar} +The ``\.{kansuji} trick'' above includes an assignment of \.{kansujichar} which is unexpandable. \epTeX~191112 or later (\TL2020) provides expandable primitives \.{Uchar} and \.{Ucharcat}, which are derived from \hologo{XeTeX}. +Regardless of their names, and unlike \hologo{XeTeX} or \hologo{LuaTeX}, +these primitives do \emph{not} necessarily take +a Unicode value as an argument. +These primitives in \epTeX\ and \eupTeX\ take a valid character code +(see \ref{kanji-internal}) based on the internal kanji encoding. \begin{simplelist} \csitem[\.{Uchar} ] diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.pdf b/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.pdf index 6c35fa46541..681ba5f40a8 100644 Binary files a/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.pdf and b/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.pdf differ 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 f298c03870e..1c69ab24a03 100644 --- a/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex +++ b/Master/texmf-dist/doc/ptex/ptex-manual/ptex-manual.tex @@ -64,15 +64,31 @@ \date{version p\the\ptexversion.\the\ptexminorversion\ptexrevision,\today} \maketitle -本ドキュメントは,日本語\TeX 開発コミュニティ版の\pTeX% -~p\the\ptexversion.\the\ptexminorversion\ptexrevision -についてまとめたものである. -オリジナルのASCII~\pTeX\footnote{最新版はp3.1.11 (2009/08/17). - \url{https://asciidwango.github.io/ptex/}}とは +本ドキュメントは,日本語\TeX 開発コミュニティ版の +\pTeX~p\the\ptexversion.\the\ptexminorversion\ptexrevision +(以下,「コミュニティ版\pTeX 」)についてまとめたものである. +\pTeX はもともとアスキー株式会社によって開発された\footnote{最新版は +p3.1.11 (2009/08/17).\url{https://asciidwango.github.io/ptex/}}ので, +しばしば「ASCII \pTeX 」と呼ばれる. +コミュニティ版\pTeX は,ASCII \pTeX に幾つかの改良を加えた +「ptexenc版\pTeX\footnote{2004年から2011年まで開発されていた, +UNIX向け日本語\TeX ディストリビューションptetexや後継のptexliveの +一部であった.なお,バージョン番号はASCII~\pTeX と同じとされた.}」を +基にしている.そのため,オリジナルのASCII~\pTeX とは 動作が異なる点もあるので注意されたい. +\begin{itemize} + \item コミュニティ版\pTeX の開発元:\\ + \url{https://github.com/texjporg/tex-jp-build/} + \item 本ドキュメントの開発元:\\ + \url{https://github.com/texjporg/ptex-manual/} +\end{itemize} -\emph{\large 本ドキュメントはまだまだ未完成です.} +なお,本ドキュメントで述べる\pTeX のプリミティブや拡張機能は, +一般に「\pTeX 系列」と呼ばれる\epTeX, \upTeX, \eupTeX でも +そのまま利用可能である.\upTeX, \eupTeX については +文字コードや和文文字トークンの扱いが異なるので,簡単に注記してある. +\newpage \tableofcontents \newpage @@ -86,49 +102,70 @@ \section{\pTeX で利用可能な文字} \label{sec:ptexchar} -\TeX82で扱える文字コードの範囲は0--255であった. -\pTeX ではこれに加えてJIS X 0208の文字も利用可能であり, -以上の文字集合が欧文文字と和文文字に区別されて扱われる. +% このマニュアルを英語化する際は以下も参照. +% 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 -[TODO] 欧文文字とは何か,和文文字とは何か +\TeX82で扱える文字コードの範囲は0--255であった. +\pTeX ではこれに加えてJIS~X~0208の文字も利用可能になっている. -% 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 への入力は\emph{「7ビットASCII文字集合」に +「ISO-2022-JP (jis),EUC-JP (euc),Shift-JIS (sjis)または +UTF-8 (utf8)のいずれかでエンコードされたJIS~X~0208の文字集合」を +加えたもの}として解釈される. +なお,入出力ファイルの文字コードは,起動時のオプション|-kanji=|に +よって指定できる(可能なの値は|utf8|,|euc|,|sjis|,|jis|). -\pTeX は,入力をEUC-JPまたはShift-JISのいずれか(後述)の -内部コードに変換して取り扱う.和文文字の内部コードとして -許される整数は$256c_1+c_2$,但し$c_i\in C_i$であり,ここで -\begin{description} - \item[内部コードがEUC-JPのとき] +そして,以下の規則により欧文文字と和文文字に区別して取り扱われる. +なお,内部コードは|-kanji-internal=|によって変更できる +(可能な値は|euc|,|sjis|)が,こちらはini modeでのフォーマット作成時 +に限られ,virtual modeでは不可である(フォーマットの内部コードと実際の +処理の整合性をとるため,\pTeX\ p3.8.2以降の仕様). +\begin{itemize} + \item 7ビットASCII文字集合は欧文文字として扱われる. + \item 最上位ビットが1の場合,\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のとき] + \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} -である.この内部コードのパターンに合えば和文文字として扱われ, -合わなければ欧文文字として扱われる. + \end{description} + である.この内部コードのパターンに合えば和文文字として扱われ, + 合わなければ8ビット欧文文字のバイト列として扱われる.\footnote{例えば, + 入力ファイルの文字コードがUTF-8の場合,JIS~X~0208にない文字は + UTF-8のバイト列として読み込まれる.} +\end{itemize} % 参考:kanji.c の |is_char_kanji| の実装 -入力ファイルの文字コードがUTF-8の場合,JIS X 0208にない文字は -UTF-8のバイト列として読み込まれる. +% [TODO] 8ビット欧文文字の ^^ab 形式への変換について -% このマニュアルを英語化する際は以下も参照. -% 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 +\begin{dangerous} + 以上で述べた「内部コードの範囲」はJIS~X~0213の漢字集合1面(Shift-JISの場合は2面も)を + まるまる含んでいるが,\emph{\pTeX はJIS~X~0213には対応していない.} -\pTeX の入力ファイルの文字コードは,起動時のオプション|-kanji|によって -変更できる(可能な値は|utf8|,|euc|,|sjis|,|jis|). -同様に,内部コードは|-kanji-internal|オプションによって変更できる -(可能な値は|euc|,|sjis|)が,こちらはini modeでのフォーマット作成時 -に限られ,virtual modeでは不可である(フォーマットの内部コードと実際の -処理の整合性をとるため,\pTeX\ p3.8.2以降の仕様). + JIS~X~0213で規定された「85区1点」の位置の文字を入力ファイル中に書いた場合, + \begin{description} + \item[文字コードがEUC,~Shift-JISの場合] DVIには29985~(\texttt{"7521})%" + 番の文字として出力される. + \item[文字コードがJISの場合] 「\verb+! Missing $ inserted.+」というエラーが発生する. + これは,\pTeX がJIS~X~0213の1面を指示するエスケープシーケンス + \texttt{1B 24 28 4F} (JIS2000), \texttt{1B 24 28 51} (JIS2004)を認識せず, + \texttt{24}~(\texttt{\$})を数式モード区切りと解釈してしまうためである. + \item[文字コードがUTF-8の場合] UTF-8のバイト列\texttt{E6 93 84}として読み込まれる. + \end{description} + なお,\.{char}により「\verb+\char\kuten"5521+」%" + のようにして区点コードを指定した場合は,DVIには29985~(\texttt{"7521})%" + 番の文字として出力される. + また,DVIに文字として出力されたからといって,それをPostScriptやPDFに変換したときに + 意図通りに出力されるかは全くの別問題である. +\end{dangerous} -\pTeX の入力ファイルの文字コードと内部コードは起動時のバナーから分かる. +\pTeX の入出力ファイルの文字コードと内部コードは起動時のバナーから分かる. 例えば \begin{verbatim} This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018) @@ -136,15 +173,15 @@ This is pTeX, Version 3.14159265-p3.8.0 (utf8.euc) (TeX Live 2018) \end{verbatim} というバナーの場合は,|(utf8.euc)| から \begin{itemize} - \item 入力ファイルの(既定)文字コードはUTF-8(但し,JIS X 0208の範囲内) + \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} @@ -162,31 +199,9 @@ virtual modeでは,起動直後にバナーを表示してから,フォー このようなウソは,\pTeX に限らず|(preloaded format=***)|でも見られる. \end{dangerous} -[TODO] \pTeX の内部コードはEUC-JPかShift-JISのいずれかであるが, -DVIファイル内の和文文字コードとしてはJISコードを出力する. +なお,\pTeX はDVIファイル内の和文文字コードとしてはJISコードを出力する. ただし,|\special|命令の文字列は内部コードで符号化されたバイト列として書き出される. -\begin{dangerous} - 以上で述べた「内部コードの範囲」はJIS~X~0213の漢字集合1面(Shift-JISの場合は2面も)を - まるまる含んでいるが,\emph{\pTeX はJIS~X~0213には対応していない.} - - JIS~X~0213で規定された「85区1点」の位置の文字を入力ファイル中に書いた場合, - \begin{description} - \item[文字コードがEUC,~Shift-JISの場合] DVIには29985~(\texttt{"7521})%" - 番の文字として出力される. - \item[文字コードがJISの場合] 「\verb+! Missing $ inserted.+」というエラーが発生する. - これは,\pTeX がJIS~X~0213の1面を指示するエスケープシーケンス - \texttt{1B 24 28 4F} (JIS2000), \texttt{1B 24 28 51} (JIS2004)を認識せず, - \texttt{24}~(\texttt{\$})を数式モード区切りと解釈してしまうためである. - \item[文字コードがUTF-8の場合] UTF-8のバイト列\texttt{E6 93 84}として読み込まれる. - \end{description} - なお,\.{char}により「\verb+\char\kuten"5521+」%" - のようにして区点コードを指定した場合は,DVIには29985~(\texttt{"7521})%" - 番の文字として出力される. - また,DVIに文字として出力されたからといって,それをPostScriptやPDFに変換したときに - 意図通りに出力されるかは全くの別問題である. -\end{dangerous} - \section{文字コードの取得と指定} \pTeX でも\TeX82と同様に, @@ -1016,8 +1031,9 @@ JFMファイルもTFMファイルと同様の情報を持つが, 用いる命令である. \begin{itemize} \item フォントを定義する際は,欧文フォント・和文の横組用フォント・ - 和文の縦組用のフォントのいずれも - |\font|, |\jfont|, |\tfont|のどれを用いても定義できる. + 和文の縦組用フォントのいずれも + |\font|, |\jfont|, |\tfont|のどれを用いても定義できる + (要求された実際のTFM/JFMに応じて,自動的にアサインされる). \item |\the|等で「現在のフォント」を取得する際には, |\jfont|で「和文の横組用フォント」を, |\tfont|で「和文の縦組用フォント」を返す. @@ -1042,6 +1058,43 @@ JFMファイルもTFMファイルと同様の情報を持つが, % https://twitter.com/zr_tex8r/status/1098594165573722112 \end{dangerous} +\begin{cslist} +\csitem[\.{ifjfont} <\,font>, \.{iftfont} <\,font>] + |\ifjfont|はが和文の横組用フォントかどうか, + |\iftfont|は和文の縦組用フォントかどうかを判定する. + 2020-02-05のコミット(r53681)で追加され, + \TeX~Live 2020の\pTeX~(p3.8.3)で利用可能である. + + これにより,例えば\.{HOGE}が和文フォントか否かは +\begin{verbatim} +\ifjfont\HOGE + (和文の横組用フォント) +\else\iftfont\HOGE + (和文の縦組用フォント) +\else + (欧文フォント) +\fi +\end{verbatim} + として判定できる. +\end{cslist} + +\begin{dangerous} + 上述のとおり,欧文フォント・和文の横組用フォント・ + 和文の縦組用フォントのいずれも|\font|一つで定義可能だが, + 定義したフォントが実際にどの種類だったかを知る手段は + バージョンp3.8.2までの\pTeX には存在しなかった. + % https://github.com/texjporg/tex-jp-build/pull/97 +\end{dangerous} + +\begin{dangerous} + ちなみに,\epTeX, \eupTeX には\.{iffontchar}プリミティブが存在する. + しかし,<\,font>が和文フォントか否かを判定するために + \texttt{\.{iffontchar}~<\,font>~256}などと第二引数に256以上の値を指定することはできない. + なぜなら,欧文フォントに対し第二引数に0--255以外の値を指定すると + 「\verb+! Bad character code (...).+」エラーが発生するからである. +\end{dangerous} + + \begin{cslist} \csitem[\.{jfam}=] 現在の和文数式フォントファミリの番号を格納する @@ -1087,7 +1140,7 @@ p3.1.2で復活したという経緯がある.}. \begin{dangerous} \ref{sec:ptexchar}節でも述べたように, - \emph{\pTeX はJIS X 0213には対応せず,JIS X 0208の範囲のみ扱える}. + \emph{\pTeX はJIS~X~0213には対応せず,JIS~X~0208の範囲のみ扱える}. [TODO] \.{kuten}, \.{jis}, \.{sjis}, \.{euc}が$-1$とならない範囲はどこ? \end{dangerous} @@ -1113,26 +1166,39 @@ p3.1.2で復活したという経緯がある.}. (ちょうど|\romannumeral|にゼロまたは負の値を与えた場合と同様). |\kansujichar|で指定できるのは「和文文字の内部コードとして有効な値」であり, - 無効な値(例えば\pTeX では,|`A|は欧文文字コードであり,和文文字コードではない) - を指定すると + 例えば\pTeX で|\kansujichar1=`A|のように無効な値(\pTeX において|`A|は + 欧文文字コードであり,和文文字コードではない)を指定すると \begin{verbatim} -! Invalid KANSUJI char ("41) +! Invalid KANSUJI char ("41). \end{verbatim} というエラーが発生する\footnote{\upTeX では0--127も含め, Unicodeの文字コードすべてが和文文字コードとして有効であり (|\kchar|で任意の文字コードを和文文字ノードに変換して出力できる), 基本的にこのエラーは発生しない.}. + また,|\kansujichar|の引数に許される値は0--9に限られ, + 例えば|\kansujichar10=`拾|とすると +\begin{verbatim} +! Invalid KANSUJI number (10). +\end{verbatim} + というエラーが発生する. + % エラーからのリカバリで,他の TeX82 プリミティブが + % I changed this one to zero. + % とするのに対し,\kansujichar では + % I'm skipping this control sequences. + % とスキップされ,値の代入は行われない. \end{cslist} \begin{dangerous} |\kansujichar|は整数値パラメータであるが,p3.8.2までは 「代入できるが取得はできない」という挙動であった (例えば|\count255=\kansujichar1|はエラー). -\iffalse %%%%% TL2019-hack \pTeX~p3.8.3で取得もできるように修正された(\cite{build93})が, 以前の\pTeX も考慮すると,値の取得は以下のようにするのが安全である: |\count255=\expandafter`\kansuji1| -\fi %%%%% TL2019-hack + % \count123=\kansujichar45 のように \kansujichar の引数が不正な場合は, + % ! Invalid KANSUJI number (45). + % のエラーを出し,リカバリは \kansujichar を無視した \count123=45 と同義になる. + % これは \kansujichar の代入時の挙動に合わせたものである. \end{dangerous} % luatexja.dtx より pTeX 用に移植 @@ -1377,11 +1443,9 @@ has been |\let| equal to a non-active character token. \bibitem{build36} aminophen, 「欧文文字の|\kansujichar|,|\inhibitxspcode|」, 2017/11/26,\\ \url{https://github.com/texjporg/tex-jp-build/issues/36} -\iffalse %%%%% TL2019-hack \bibitem{build93} aminophen, 「[ptex] reading |\kansujichar|」, 2019/10/14,\\ \url{https://github.com/texjporg/tex-jp-build/issues/93} -\fi %%%%% TL2019-hack \bibitem{build37} aminophen, 「和文のコントロールシンボル」, 2017/11/29,\\ \url{https://github.com/texjporg/tex-jp-build/issues/37} -- cgit v1.2.3