diff options
Diffstat (limited to 'info/ptex-manual/ptex-manual.tex')
-rw-r--r-- | info/ptex-manual/ptex-manual.tex | 212 |
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} |