summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-12-03 16:50:23 +0000
committerKarl Berry <karl@freefriends.org>2019-12-03 16:50:23 +0000
commit9935e94e9e8ba76f4872122b09a49752c54d1947 (patch)
tree94a7cbcf33e4cd63239d87de42b48fc1c789059b /Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex
parenta205aa5923f85096449cfed612c4b0150edc9b16 (diff)
ptex-manual
git-svn-id: svn://tug.org/texlive/trunk@53007 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex')
-rw-r--r--Master/texmf-dist/doc/ptex/ptex-manual/ptex-guide-en.tex506
1 files changed, 443 insertions, 63 deletions
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 bbf6918839f..7e7eab90baf 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
@@ -16,11 +16,12 @@
\usepackage[dvipdfmx,hyperfootnotes=false]{hyperref}
\usepackage{pxjahyper}
\usepackage{hologo}
+\usepackage{xspace}
\usepackage{makeidx}\makeindex
% common
\usepackage{ptex-manual}
-
+\let\emph=\origemph
\makeatletter
\newlist{simplelist}{description}1
\setlist[simplelist]{%
@@ -55,14 +56,14 @@
\def\pLaTeX{p\LaTeX}\def\upLaTeX{u\pLaTeX}
\def\pdfTeX{pdf\TeX}
\def\OMEGA{$\Omega$}
-\def\TL{\TeX\ Live\ }
+\def\TL{\TeX\ Live\xspace}
\def\_{\leavevmode\vrule width .45em height -.2ex depth .3ex\relax}
\frenchspacing
\begin{document}
\catcode`\<=13
-\title{\emph{Guide of \pTeX\ for developers not interested in Japanese}}
+\title{\textsf{\textbf{Guide to \pTeX\ for developers unfamiliar with Japanese}}}
\author{Japanese \TeX\ Development Community\null
\thanks{\url{https://texjp.org},\ e-mail: \texttt{issue(at)texjp.org}}}
\date{version p\the\ptexversion.\the\ptexminorversion\ptexrevision, \today}
@@ -71,7 +72,7 @@
\pTeX\ and its variants, \upTeX, \epTeX\ and \eupTeX, are all \TeX\ engines
with native Japanese support.
Its output is always a DVI file, which can be processed by several
-DVI drivers with Japanese support including {\em dvips} and {\em dvipdfmx}.
+DVI drivers with Japanese support including \emph{dvips} and \emph{dvipdfmx}.
Formats based on \LaTeX\ is called \pLaTeX\ when running on \pTeX/\epTeX,
and called \upLaTeX\ when running on \upTeX/\eupTeX.
@@ -93,7 +94,7 @@ We hope that this document helps authors of packages or classes
to proceed with supporting \pTeX\ family smoothly.
\begin{quotation}
-Note: This English edition (\jobname.pdf) is {\em not} meant
+Note: This English edition (\jobname.pdf) is \emph{not} meant
to be a complete translation of Japanese edition (ptex-manual.pdf).
For example, this document does not cover the following aspects of \pTeX:
\begin{itemize}
@@ -129,8 +130,8 @@ so we focus mainly on \epTeX/\eupTeX.
\section{Compatibility with Western \TeX}
%%% pTeX/upTeX は Knuthian TeX に対してほぼ上位互換
-\pTeX/\upTeX\ are almost uppercompatible with Knuthian \TeX,
-however, they do not pass TRIP test.
+\pTeX/\upTeX\ are almost upward compatible with Knuthian \TeX,
+however, they do not pass the TRIP test.
%%% 入力の8bitの扱いが異なる。フォントの8bitはそのまま
In \pTeX/\upTeX, input handling is different from Knuthian \TeX;
if a pair of two or more 8-bit codes matches Japanese character code,
@@ -138,16 +139,16 @@ it is regarded as one Japanese character.
There is no difference in handling 8-bit TFM font.
%%% e-pTeX/e-upTeX は e-TeX に対してほぼ上位互換
-\epTeX/\eupTeX\ are almost uppercompatible with \eTeX,
+\epTeX/\eupTeX\ are almost upward compatible with \eTeX,
however, input handling is similar to \pTeX/\upTeX.
-It does not pass e-TRIP test.
+It does not pass the e-TRIP test.
%%% だけど e-TeX はもうなく,pdfTeX の DVI モードがあるだけ
That said, please note that ``raw \eTeX'' is unavailable anymore
in \TeX\ Live and derived distributions;
they provide a command |etex| only as ``DVI mode of \pdfTeX.''
%%% e-pTeX/e-upTeX は pdfTeX の DVI モードに対して上位互換ではない
We should note that
-\epTeX/\eupTeX\ are {\em not} uppercompatible with DVI mode of \pdfTeX,
+\epTeX/\eupTeX\ are \emph{not} upward compatible with DVI mode of \pdfTeX,
which will be discussed later in section \ref{dvi-pdftex}.
%%% LaTeX ムニャムニャ
@@ -171,7 +172,7 @@ related to the followings:
\item Adjustment for mixing horizontal and vertical texts
\end{itemize}
%%% author レベルでは LaTeX とほぼ互換,ただし例外あり
-For authors, \pLaTeX/\upLaTeX\ is almost uppercompatible with
+For authors, \pLaTeX/\upLaTeX\ are almost upward compatible with
original \LaTeX, except for the followings:
\begin{itemize}
\item Order of float objects; in \pLaTeX/\upLaTeX,
@@ -182,7 +183,7 @@ original \LaTeX, except for the followings:
% [TODO] 他にもあるか?
\end{itemize}
%%% developer レベルでは pdfTeX 拡張や pLaTeX カーネルでムニャムニャ
-For developers, additional cares may be needed,
+For developers, additional care may be needed,
for changes in the kernel macros and/or absence of \pdfTeX\ features.
%%% 際立った pTeX 系列の特徴
@@ -192,7 +193,7 @@ The most important characteristics of \pTeX/\upTeX\ can be
summarized as follows:
%%% 欧文と和文が別個に存在する・縦組がある
\begin{itemize}
- \item Japanese characters are interpret and handled completely apart from
+ \item Japanese characters are interpreted and handled completely apart from
Western characters.
\item Texts can be aligned vertically, called ``tate-gumi'' (縦組).
The horizontal alignment of texts is called ``yoko-gumi'' (横組),
@@ -211,20 +212,83 @@ summarized as follows:
\section{Output format --- DVI}
%%% DVI だけ
-The output of \pTeX/\upTeX\ is always a DVI file.
+The output of \pTeX\ family is always a DVI file.
+This is in contrast to the mainstream of \pdfTeX\ in the Western \TeX\ world.
+
+In case you are not familiar with DVI output processing,
+first we give some general notice on how to get a ``correct'' output
+using \LaTeX\ in DVI mode.
+
+\begin{itemize}
+ \item The DVI format is, as its name suggests, inherently driver-independent.
+ However, some \LaTeX\ packages (\Pkg{graphicx}, \Pkg{color}, \Pkg{hyperref} etc.)
+ embed some \.{special} commands into the DVI, which can be interpreted later
+ by some specific DVI driver.
+ Such a DVI is no longer driver-independent, thus those are called
+ driver-dependent packages.
+ \item In almost all major \TeX\ distributions (of course including \TL),
+ the default DVI driver is set to |dvips|.
+ When you choose to process the resulting DVI file with a driver
+ other than dvips (e.g. dvipdfmx) after running \LaTeX,
+ you need to pass a proper driver option (e.g. |[dvipdfmx]|) to
+ all driver-dependent packages.
+\end{itemize}
+
+%%% 日本の DVI ドライバの状況
+Now, let's move on to the situation in Japan,
+which is slightly complicated due to historical reasons
+but may also apply to other countries:
+\begin{itemize}
+ \item There are two major conventions to pass a proper driver option
+ to all driver-dependent packages:
+ \begin{enumerate}
+ \item To give a driver option to each driver-dependent package:
+\begin{verbatim}
+\documentclass{article}
+\usepackage[dvipdfmx]{graphicx}
+\usepackage[dvipdfmx]{color}
+\end{verbatim}
+ \item To have a driver option as global:
+\begin{verbatim}
+\documentclass[dvipdfmx]{article}
+\usepackage{graphicx}
+\usepackage{color}
+\end{verbatim}
+ \end{enumerate}
+ The former convention has been used for many years since 1990s
+ when the number of driver-dependent packages was limited.
+ But in recent years (around 2010--), there are much more
+ driver-dependent packages available. Thus
+ we (Japanese \TeX\ experts) advise a global driver option
+ rather than individual package options for simplicity,
+ but not yet fully widespread.\footnote{The fact that
+ there had been a mismatch in option names
+ (\code{[dvipdfm]} vs. \code{[dvipdfmx]})
+ between packages may also have been part of it;
+ \Pkg{geometry} did not understand \code{[dvipdfmx]} option until 2018!}
+ \item Many people still see driver options as ``optional'';
+ 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:
+\begin{verbatim}
+LaTeX Warning: Unused global option(s):
+ [dvipdfmx].
+\end{verbatim}
+\end{itemize}
+
+\subsection{Extensions of DVI format in \pTeX\ family}
+
%%% pTeX の DVI は欧文の横組みだけなら普通。和文が入ると特殊,縦組ならIDも変化
-Its DVI format is completely compatible with Knuthian \TeX,
-as long as the following conditions are met:
+The DVI format output by \pTeX\ family is fully compatible with
+Knuthian \TeX, as long as the following conditions are met:
\begin{itemize}
\item No Japanese characters are typeset.
\item There is no portion of vertical text alignment.
\end{itemize}
-\subsection{Extensions of DVI format}
-
-In \pTeX/\upTeX,
-some additional DVI commands, which are defined in the
-standard \cite{dvistd0} but never used in \TeX82, are used.
+However, some additional DVI commands, which are defined in the
+standard \cite{dvistd0} but never used in \TeX82, can come out.
\begin{itemize}
\item |set2| (129), |put2| (134):
Appears in both \pTeX\ and \upTeX\ DVI.
@@ -254,37 +318,23 @@ Normally it is set to 2, as with \TeX82; however,
when |dir| (255) appears at least once in a single \pTeX/\upTeX\ DVI,
the |post_post| table of postamble contains $\mathrm{ID} = 3$.
-%%% 日本の DVI ドライバの状況
\subsection{DVI drivers with Japanese support}
-There is some DVI drivers with Japanese support.
-The most eminent drivers are {\em dvips} and {\em dvipdfmx}.
-Nowadays most of casual Japanese users are using {\em dvipdfmx} as a DVI driver.
-On the other hand, users of {\em dvips} are unignorable, especially those
+There are some DVI drivers with Japanese support.
+The most eminent drivers are \emph{dvips} and \emph{dvipdfmx}.
+Nowadays most of casual Japanese users are using \emph{dvipdfmx} as a DVI driver.
+On the other hand, users of \emph{dvips} are unignorable, especially those
working in publishing industry.
+In recent years, most of major driver-dependent packages support
+both two drivers.
-\subsubsection{Using {\em dvipdfmx}}
+\subsubsection{Using \emph{dvipdfmx}}
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
-{\em Note for casual \LaTeX\ users} ---
-when you choose to process the resulting DVI file with dvipdfmx
-after running \LaTeX\ (command |platex| or |uplatex|),
-you need to pass a proper driver option |[dvipdfmx]| for
-all driver-dependent packages, such as |graphicx| and |color|.
-This is because the default for such packages is set to |dvips| mode
-as with the original \LaTeX\ in DVI mode (command |latex|).
-For simplicity, we recommend a global driver option |[dvipdfmx]|
-as in the following example:
-\begin{verbatim}
- \documentclass[dvipdfmx,...]{article}
- \usepackage{graphicx}
- \usepackage{color}
-\end{verbatim}
-
-\subsubsection{Using {\em dvips}}
+\subsubsection{Using \emph{dvips}}
A DVI file which is output by \pTeX\ can be converted to a PostScript file
using dvips.
@@ -302,17 +352,65 @@ developed by Japanese \TeX\ Development Community.
We focus on programming aspects of \pTeX\ and its variants.
%%% レジスタの数
-\subsection{Number of registers}
+\subsection{Number of registers and marks}
\pTeX\ and \upTeX\ have exactly the same number ($=256$) of registers
-as Knuthian \TeX.
+(count, dimen, skip, muskip, box, and token) as Knuthian \TeX.
\epTeX\ and \eupTeX\ in extended mode have more registers;
there are 65536, which is twice as many as 32768 of \eTeX.
+Similarly \epTeX\ and \eupTeX\ have 65536 mark classes,
+which is twice as many as 32768 of \eTeX.
-% [TODO] まとめて 65536 個と書いて良い? レジスタの種類毎に書くべき?
+The following code presents an example of detecting the number of
+regsiters and mark classes available:
+\begin{verbatim}
+ \ifx\eTeXversion\undefined
+ % Knuthian TeX, pTeX, upTeX:
+ % 256 registers, 1 mark
+ \else
+ \ifx\omathchar\undefined
+ % e-TeX, pdfTeX (in extended mode):
+ % 32768 registers, 32768 mark classes
+ \else
+ % e-pTeX, e-upTeX (in extended mode):
+ % 65536 registers, 65536 mark classes
+ \fi
+ \fi
+\end{verbatim}
+Here a primitive \.{omathchar}, which is derived from \OMEGA, is used
+as a marker of a change file \code{fam256.ch}.\footnote{%
+There is another \pTeX-derived engine named \pTeX-ng (or Asiatic \pTeX)
+\url{https://github.com/clerkma/ptex-ng}; it is based on
+\eTeX\ and \upTeX, but currently does not adopt \code{fam256.ch}
+so it has the same number of registers and mark classes as \eTeX.}
+
+%%% 数式ファミリの数
+\subsection{Number of math families}
+
+In \pTeX\ and \upTeX,
+the number of math fonts is restricted to 16,
+each of which can contain 256 characters (same as Knuthian \TeX).
+In \epTeX\ and \eupTeX, a change file \code{fam256.ch},
+which is derived from \OMEGA, extends the upper limit to 256.
+As a consequence, \epTeX\ and \eupTeX\ allows 256 math fonts,
+each of which can contain 256 characters.\footnote{\OMEGA\ allows
+256 math fonts, each of which can contain 65536 characters.}
+
+For \pLaTeX/\upLaTeX\ users to use more than 16 math fonts,
+it is necessary to use macros which exploit \OMEGA-derived primitives
+such as \.{omathchar}.
+Recent (u)\pLaTeX\ (since 2016/11/29) partially supports this,
+and the maximum number of math alphabets that can be defined by
+|\DeclareMathAlphabet| is extended to 256 (|\e@mathgroup@top|)
+without needing any extension package.
+However, symbol fonts are restricted to 16 as
+|\DeclareMathSymbol| etc still use the standard \.{mathchar} etc.
+A simple solution to use more symbol fonts as well as math alphabets
+is to load a package \Pkg{mathfam256}\footnote{%
+\url{https://www.ctan.org/pkg/mathfam256}} though it's still preliminary.
%%% 拡張プリミティブ
-\subsection{Additional primitives}
+\subsection{Additional primitives and keywords}
% tex -ini: 322 multiletter control sequences
% ptex -ini: 366 multiletter control sequences
% uptex -ini: 374 multiletter control sequences
@@ -325,7 +423,7 @@ there are 65536, which is twice as many as 32768 of \eTeX.
Here we provide only complete lists of additional primitives
of \pTeX\ family in alphabetical order.
-Feature of each primitive can be found in Japanese edition.
+The features of each primitive can be found in Japanese edition.
% [TODO] 抜けがないか?
% [TODO] アルファベット順に正しく並んでいるか?
@@ -410,6 +508,8 @@ Knuthian \TeX; however, it is enabled in \pTeX\ family.
%%% その他の独自拡張
\subsubsection{\epTeX\ additions (available in \epTeX, \eupTeX)}
\begin{simplelist}
+ \csitem[\.{currentspacingmode} \New{191112 (\TL2020)}]
+ \csitem[\.{currentxspacingmode} \New{191112 (\TL2020)}]
\csitem[\.{epTeXinputencoding} \New{160201 (\TL2016)}]
\csitem[\.{epTeXversion} \New{180121 (\TL2018)}]
\csitem[\.{expanded} \New{180518 (\TL2019)}]
@@ -446,10 +546,18 @@ Knuthian \TeX; however, it is enabled in \pTeX\ family.
\csitem[\.{pdfstrcmp}]
\csitem[\.{pdfuniformdeviate} \New{161114 (\TL2017)}]
\csitem[\.{readpapersizespecial} \New{180901 (\TL2019)}]
+ \csitem[\.{Uchar} \New{191112 (\TL2020)}]
+ \csitem[\.{Ucharcat} \New{191112 (\TL2020)}]
\csitem[\.{vfi}]
\csitem[\texttt{fi}\index{fi=\texttt{fi}}]
\end{simplelist}
+%%% e-upTeX の独自拡張
+\subsubsection{\eupTeX\ additions (available in \eupTeX)}
+\begin{simplelist}
+ \csitem[\.{currentcjktoken} \New{191112 (\TL2020)}]
+\end{simplelist}
+
% [TODO] 引数は何で返り値は何か,expandable?
%%% (e-)TeX にあるが (e-)upTeX にないもの
@@ -462,7 +570,7 @@ One is enc\TeX\ extension, such as |\mubyte|.
The ML\TeX\ extension, such as |\charsubdef|, is included but not well-tested.
%%% コマンドラインオプションの話
-% [TODO] ptex.man1.pdf も参照
+% [TODO] Please also refer to ptex.man1.pdf
\subsection{Behavior of Western \TeX\ primitives}
@@ -478,7 +586,6 @@ other codes will give an error ``! Bad character code.''
|\sfcode|,
|\mathcode|,
|\delcode|,
- |\mathchardef|,
|\lccode|,
|\uccode|.
\end{quote}
@@ -501,6 +608,7 @@ The following primitives are extended to support Japanese characters:
\.{chardef} <control sequence>=<character code>]
In addition to 0--255, internal codes of Japanese characters are allowed.
For putting Japanese characters, a Japanese font is chosen.
+ More information can be found in \ref{chardef}.
\csitem[\.{font}, \.{fontname}, \.{fontdimen}]
% [TODO]
@@ -525,14 +633,16 @@ If either token is a control sequence,
unless the current equivalent of that control sequence
has been |\let| equal to a non-active character token.
\end{quote}
-However, this includes a lie; in the real implementation of tex.web,
+However, this includes a lie; in the real implementation of \code{tex.web},
a control sequence is considered to have a category code 0.
\end{dangerous}
\subsection{Case study}
-Based on the above knowledge, we provide some code examples
+Here we provide some code examples
which may be useful for package developers.
+% [TODO] 本当は Based on the above knowledge としたいところだが
+% 説明が圧倒的に不足しているので天下り的なコード解説…
%%% pTeX かどうかの判定
\subsubsection{Detecting \pTeX}
@@ -542,23 +652,210 @@ the safer solution for detecting \pTeX\ is
to test if a primitive |\kanjiskip| is defined.
\begin{verbatim}
\ifx\kanjiskip\undefined
- % not pTeX, upTeX, e-pTeX and e-upTeX
\else
- % pTeX, upTeX, e-pTeX and e-upTeX
+ % pTeX / upTeX / e-pTeX / e-upTeX
+ \fi
+\end{verbatim}
+
+%%% upTeX かどうかの判定
+\subsubsection{Detecting \upTeX}
+
+\upTeX/\eupTeX\ are almost upward compatible
+with \pTeX/\epTeX\ respectively, however,
+there are two major differences:
+\begin{enumerate}
+ \item Improvements in the \.{kcatcode} business,
+ mainly for better handling of Latin-1 characters and CJK tokens.
+ \item Unicode as the default internal kanji encoding,
+ for direct use of its huge character set.
+\end{enumerate}
+
+The first difference can be detected by checking if
+\.{...cjktoken} primitive is defined.
+\begin{verbatim}
+ \ifx\enablecjktoken\undefined
+ \else
+ % upTeX/e-upTeX
\fi
\end{verbatim}
-% [TODO] upTeX 系列は \enablecjktoken か \ucs か?
-% [TODO] \forcecjktoken は比較的新しい?
-% [TODO] 内部コードが uptex かどうかの判定
+The second difference can be detected by checking if
+the character \code{0x2121} (fullwidth space in JIS encoding)
+is stored as \hex{3000} internally.
+\begin{verbatim}
+ \ifx\kanjiskip\undefined
+ \else
+ \ifnum\jis"2121="3000
+ % upTeX/e-upTeX with internal Unicode
+ \else
+ % pTeX/e-pTeX
+ % or, upTeX/e-upTeX with internal EUC-JP or Shift-JIS
+ \fi
+ \fi
+\end{verbatim}
+Please note that
+the format-build setting of \verb+-kanji-internal=(sjis|euc)+ with
+\upTeX\ makes it effectively \pTeX\ regarding the character set,
+which means that only JIS~X~0208 character set is supported.
%%% pTeX のバージョン判定
+% [TODO] 何が有用?
+
+%%% 大きな定数を定義する話
+\subsubsection{Defining large integer constants}
+\label{chardef}
+
+According to \cite{topic} (Section 3.3),
+\begin{quote}
+A control sequence that has been defined with a \.{chardef} command
+can also be used as a <number>.
+This fact is used in allocation commands such as |\newbox|.
+Tokens defined with \.{mathchardef} can also be used this way.
+\end{quote}
+Here is the list of primitives which can be used for this purpose
+in \pTeX\ family:
+\begin{simplelist}
+ \csitem[\.{chardef} <control sequence>=<character code>]
+ Defines a control sequence to be a synonym for
+ \.{char} <character code>.
+
+ \csitem[\.{kchardef} <control sequence>=<character code> (for \upTeX/\eupTeX)]
+ Defines a control sequence to be a synonym for
+ \.{kchar} <character code>.
+
+ \csitem[\.{mathchardef} <control sequence>=<15-bit number>]
+ Defines a control sequence to be a synonym for
+ \.{mathchar} <15-bit number>.
+
+ \csitem[\.{omathchardef} <control sequence>=<27-bit number> (for \epTeX/\eupTeX)]
+ Defines a control sequence to be a synonym for
+ \.{omathchar} <27-bit number>.
+\end{simplelist}
+
+The first two (\.{chardef} and \.{kchardef}) are usable only when
+the integer being defined is in the range of valid character codes,
+which is not necessarily continuous (see \ref{kanji-internal}).
+The most efficient and convenient way of defining integer constants
+is as follows:
+\begin{itemize}
+ \item 0--255: \.{chardef}
+ % "FF = 255
+ \item 256--32767: \.{mathchardef}
+ % "7FFF = 32767
+ \item 32768--134217727: \.{omathchardef} (only for \epTeX/\eupTeX)
+ % "7FFFFFF = 134217727
+ \item (optional) 256--2147483647: \.{chardef} (only for \upTeX/\eupTeX)
+ % "7FFFFFFF = 2147483647 (+1 => ! Number too big.)
+\end{itemize}
+
+%%% 指定のコードの和文トークンを得る方法
+\subsubsection{Creating a Japanese character token with a specified code}
+
+Short version:
+\begin{itemize}
+ \item With \epTeX~191112 or later (\TL2020),
+ you can use expandable primitives \.{Uchar} and \.{Ucharcat}
+ \item Otherwise, use the ``\.{kansuji} trick''.
+\end{itemize}
+
+\paragraph{The ``\.{kansuji} trick''}
+This is a modified version of the ``\.{lowercase} trick''
+available in \pTeX\ family.
+
+\begin{dangerous}
+Short note on the ``\.{lowercase} trick'':
+to create a character token with a specified code value between 0--255
+with Knuthian \TeX, the ``\.{lowercase} trick'' can be used; for example,
+\begin{verbatim}
+ \begingroup
+ \lccode`\?=\mycount
+ \lowercase{\endgroup \def\X{?}}
+\end{verbatim}
+defines |\X| which expands to a character number |\mycount|
+while the \.{catcode} of |?| (\the\catcode`\?) is preserved.
+However, the trick cannot be applied to Japanese characters,
+since \pTeX\ family does not support \.{lccode} outside 0--255.
+\end{dangerous}
+
+\.{kansuji} is an expandable primitive like \.{number} or \.{romannumeral},
+and it converts an integer into its corresponding kanji notation
+called ``kansuji'' (漢数字). The important point here is that
+the number-kanji mapping can be altered by \.{kansujichar}.
+
+Example 1: equivalent to |\def\X{あ}| (JIS code \code{0x2422} is ``あ''):
+\begin{verbatim}
+ \begingroup
+ \kansujichar1=\jis"2422 \xdef\X{\kansuji1}
+ \endgroup
+\end{verbatim}
+
+Example 2: equivalent to |\def\日本{Japan}|.
+\begin{verbatim}
+ \begingroup
+ \kansujichar5=\jis"467C\relax
+ \kansujichar6=\jis"4B5C\relax
+ \expandafter\gdef\csname\kansuji56\endcsname{Japan}
+ \endgroup
+\end{verbatim}
+
+Since \.{kansujichar} accepts only Japanese character code,
+the ``\.{kansuji} trick'' and the ``\.{lowercase} trick'' should be
+used complementarily.
+
+\paragraph{\.{Uchar}, \.{Ucharcat}}
+The ``\.{kansuji} trick'' above include an assignment of \.{kansujichar}
+which is unexpandable.
+\epTeX~191112 or later (\TL2020) provides expandable primitives
+\.{Uchar} and \.{Ucharcat}, which are derived from \hologo{XeTeX}.
+
+\begin{simplelist}
+ \csitem[\.{Uchar} <character code>]
+ Expands to a character token with specified slot <character code>.
+ \begin{itemize}
+ \item When an 8-bit number (0--255) is given,
+ it expands to a Latin character token with category code 12,
+ except for a space character (32) which has category code 10.
+ \item When a Japanese character code greater than 255 is given,
+ it expands to a Japanese character token with its current category code;
+ 16--18 for \epTeX, 16--19 for \eupTeX.
+ % [TODO] 本当は pTeX では和文文字トークン自体は \kcatcode を
+ % 持たないが,簡単のためまあいっか.
+ \end{itemize}
+
+ \csitem[\.{Ucharcat} <character code> <category code>]
+ Expands to a character token with slot <character code> and
+ <category code> specified.
+ \begin{itemize}
+ \item With \epTeX:
+ \begin{itemize}
+ \item Only 8-bit number (0--255) are allowed for <character code>;
+ that is, only Latin characters can be generated.
+ \item The values allowed for <category code> are 1--4, 6--8, 10--13.
+ \end{itemize}
+ \item With \eupTeX:
+ \begin{itemize}
+ \item When <character code> is between 0--127,
+ only Latin characters can be generated.
+ Thus, the values allowed for <category code> are
+ 1--4, 6--8, 10--13.
+ \item When <character code> is between 128--255,
+ both Latin and Japanese characters can be generated
+ depending on the specified <category code>;
+ 1--4, 6--8, 10--13: Latin character,
+ 16--19: Japanese character.
+ \item When <character code> is greater than 255,
+ only Japanese characters can be generated.
+ Thus, the values allowed for <category code> are
+ 16--19.
+ \end{itemize}
+ \end{itemize}
+\end{simplelist}
%%% pdfTeX と違うところ
\subsection{Difference from \pdfTeX\ in DVI mode}\label{dvi-pdftex}
As stated above,
-\epTeX/\eupTeX\ are {\em not} uppercompatible with DVI mode of \pdfTeX.
+\epTeX/\eupTeX\ are \emph{not} upward compatible with DVI mode of \pdfTeX.
%%% pdfTeX の DVI モードにあって e-(u)pTeX にないプリミティブ
%%% その他ムニャムニャ
@@ -591,29 +888,112 @@ This section does not aim to explain Japanese typesetting completely;
here we provide a minimum requirement for ``getting away'' with Japanese.
%%% 空白・ペナルティ挿入:勝手に入ってくる!
-\subsection{Automatic insertion of glues and penalties}
+\subsection{Automatic insertion of glue and penalties}
-Sometimes \pTeX\ family automatically inserts glues and penalties
+Sometimes \pTeX\ family automatically inserts glue and penalties
between characters.
% [TODO] もう少しだけ詳しく
%%% 和文フォント
\subsection{Japanese fonts}
-For typesetting Japanese characters, a JFM (Japanese \TeX\ font metric)
-format is used. It is a modified version of \TeX\ TFM.
-
%%% 欧文とは別個
+\pTeX\ family can have 3 different ``current'' fonts at the same time;
+a Latin font, a Japanese font for horizontal writing (``yoko-gumi''),
+and a Japanese font for vertical writing (``tate-gumi'').
+The first one is the same as in the Knuthian \TeX,
+which is defined in a standard TFM format.
+The latter two are specific to \pTeX\ family, which are defined
+in a JFM (Japanese \TeX\ font metric) format.\footnote{%
+A JFM is a modified version of the standard TFM.
+It can be created by (u)pPLtoTF, and decoded by (u)pTFtoPL.
+Please also refer to the man pages of these programs
+(\code{ppltotf.man1.pdf} and \code{ptftopl.man1.pdf}).}
+
+While typesetting, \pTeX\ family automatically switches between
+these 3 fonts, depending on the character code and the writing direction:
+\begin{itemize}
+ \item For typesetting Latin characters,
+ the current Latin font shown by |\the\font| is selected.
+ \item For typesetting Japanese characters,
+ the current Japanese font suitable for the current writing direction
+ is selected. It is shown by |\the\jfont| for horizontal writing
+ and |\the\tfont| for vertical writing.
+\end{itemize}
+
%%% \nullfont しても全部消えない
+%%% 「和文 \nullfont」は和文フォントが一回もグローバルに
+%%% 設定されていないとき = iniTeX 時しかない
+In Knuthian \TeX, the primitive \.{nullfont} refers to an ``empty font''
+in which all characters are undefined.
+However in \pTeX\ family, this is regarded as a Latin font
+and there is no equivalent to ``Japanese \.{nullfont}'' by design.
+To elaborate, it is possible \emph{only} when no Japanese font is
+set globally, i.e. in ini\TeX\ mode.
+Once a valid Japanese font is selected, there is no way of
+selecting ``Japanese \.{nullfont}'' to discard all characters.
+
+Moreover, \pTeX\ and friends assume that each Japanese font
+(except ``Japanese \.{nullfont}'' in ini\TeX\ mode)
+contains all valid Japanese character code.
+In other words, all Japanese fonts share the same character set
+corresponding to the whole valid Japanese character code range.\label{jfont}
+
+\section{Other strange beasts}
%%% 縦組は諦めよう
+% [TODO] どこに書くか困ったので最後に:内部コードのアレな話
+\subsection{Internal kanji encodings}\label{kanji-internal}
+
+The <character code> is a union of the following two:
+\begin{itemize}
+ \item Range of numbers between 0--255, and
+ \item Numbers allowed for internal code of Japanese characters.
+\end{itemize}
+The former is the same as Knuthian \TeX, but the latter is a problem.
+In \upTeX/\eupTeX\ with \code{-kanji-internal=uptex} (default on),
+the range is very simple:
+\[ c \ge 0 \]
+However in \pTeX/\epTeX, only legacy encodings (EUC-JP as |euc|,
+or Shift-JIS as |sjis|) are available for \code{-kanji-internal}.
+In this case, the range can be represented as follows:
+\[
+ c = 256c_1+c_2 \; (c_i\in C_i)
+\]
+where
+\[
+ \begin{cases}
+ C_1=C_2=\{\hex{a1},\dots,\hex{fe}\} & (\mathtt{euc}), \\
+ 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}\} & (\mathtt{sjis}).
+ \end{cases}
+\]
+Therefore, the overall range of <character code> is \emph{not} continuous.
+
+To check whether an integer is a valid Japanese character code or not,
+you can use \.{iffontchar} with \epTeX~190709 or later (\TL2020).
+Suppose a count register |\mycount| stores an integer, you can do it as follows:
+\begin{verbatim}
+ \iffontchar\jfont\mycount
+ % \mycount is a valid Japanese character code
+ \fi
+\end{verbatim}
+Here the primitive \.{jfont} is used merely as
+a representative non-empty\footnote{This assumption is always safe after
+one of the standard \pTeX\ formats (e.g. plain \pTeX, \pLaTeX) is loaded.}
+Japanese font containing all valid Japanese character code (see \ref{jfont}).
+
+
\newpage
\begin{thebibliography}{99}
\bibitem{dvistd0} TUG DVI Standards Working Group,
\textit{The DVI Driver Standard, Level 0}.\\
\url{https://ctan.org/pkg/dvistd}
+ \bibitem{topic} Victor Eijkhout, \textit{\TeX\ by Topic, A \TeX nician's Reference},
+ Addison-Wesley, 1992.\\
+ \url{https://www.eijkhout.net/texbytopic/texbytopic.html}
\end{thebibliography}
\newpage