summaryrefslogtreecommitdiff
path: root/info/ptex-manual/ptex-manual.tex
diff options
context:
space:
mode:
Diffstat (limited to 'info/ptex-manual/ptex-manual.tex')
-rw-r--r--info/ptex-manual/ptex-manual.tex212
1 files changed, 138 insertions, 74 deletions
diff --git a/info/ptex-manual/ptex-manual.tex b/info/ptex-manual/ptex-manual.tex
index f298c03870..1c69ab24a0 100644
--- a/info/ptex-manual/ptex-manual.tex
+++ b/info/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=|<encoding>に
+よって指定できる(可能な<encoding>の値は|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=|<encoding>によって変更できる
+(可能な値は|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|で「和文の縦組用フォント」を返す.
@@ -1043,6 +1059,43 @@ JFMファイルもTFMファイルと同様の情報を持つが,
\end{dangerous}
\begin{cslist}
+\csitem[\.{ifjfont} <\,font>, \.{iftfont} <\,font>]
+ |\ifjfont|は<font>が和文の横組用フォントかどうか,
+ |\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}=<number>]
現在の和文数式フォントファミリの番号を格納する
\footnote{\pTeX,~\upTeX では0--15の範囲が許される.
@@ -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}