1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
% ifxptex-doc.tex
% !TeX encoding = UTF-8
% !TeX program = pdfLaTeX
\RequirePackage{fix-cm}
\documentclass[a4paper]{article}
\usepackage{amsfonts}
\usepackage[OT1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[UKenglish]{babel}
\usepackage[babel]{microtype}
\usepackage{etoolbox}
\usepackage{amstext}
\usepackage{booktabs}
\AtBeginEnvironment{verbatim}{\microtypesetup{activate=false}}
\abovetopsep=\medskipamount
\newcommand\NormalSans{\normalfont\sffamily}
\newcommand\pkg[1]{{\protect\NormalSans#1}}
\newcommand\pTeX{p\kern-0.15em\TeX}
\newcommand\e{\ensuremath{\varepsilon}}
\newcommand\eTeX{\e-\TeX}
\newcommand\epTeX{\e-\pTeX}
\newcommand\upTeX{u\pTeX}
\newcommand\eupTeX{\e-\upTeX}
\newcommand\ApTeX{A\kern-0.1em\pTeX}
\newcommand\dpx{DVI\-PDFM\ensuremath{x}}
\newcommand\FooTeX{Foo\kern-0.1em\TeX}
\newcommand\yes{\checkmark}
\newcommand\UNI{(Unicode)}
\newcommand\uni{{\footnotesize\UNI}}
\begin{document}
\title{The \pkg{ifxptex} package%
\thanks{CTAN Homepage: \texttt{https://ctan.org/pkg/ifxptex}}
\thanks{Repository: \texttt{https://github.com/Man-Ting-Fang/ifxptex}}}
\author{Yue \textsc{Zhang}}
\date{2017-12-27\quad v0.2}
\maketitle
\begin{abstract}
This package provides commands for detecting \pTeX\ and its derivatives (\epTeX,
\upTeX, \eupTeX, and \ApTeX). Both \LaTeX\ and plain \TeX\ are supported.
\end{abstract}
\section{Introduction}
\pTeX\ is an extension of \TeX. It has several derivatives:
\begin{itemize}
\item \epTeX: \( \text{\pTeX} + \text{\eTeX} + \cdots \)
\item \upTeX: \( \text{\pTeX} + \text{native Unicode support} + \cdots \)
\item \eupTeX: \( \text{\epTeX} + \text{\upTeX} \)
\item \ApTeX:\footnote{Full name: Asiatic \pTeX; synonym: \pTeX-ng; obsolete
names: Asian \pTeX, toua-\pTeX, toua-\TeX, toua\TeX, \ldots}
\( \text{\upTeX} + \text{\eTeX} + \cdots \)
\end{itemize}
Table \ref{tab:cmds} shows the command line commands for invoking them.%
\footnote{Old implementations and other \TeX\ formats are not taken into
consideration.}
\vskip-10pt\relax
\begin{table}[!ht]\centering
\caption{Commands for invoking *\pTeX}
\label{tab:cmds}
\begin{tabular}{cccc}
\toprule
& \multicolumn{2}{c}{Command} & \\
\cmidrule(lr){2-3}
Engine & Plain \TeX & \LaTeX & Output format(s)\footnotemark \\
\midrule
\pTeX & \verb|ptex| & n/a & DVI (extended) \\
\epTeX & \verb|eptex| & \verb|platex| & DVI (extended) \\
\upTeX & \verb|uptex| & n/a & DVI (extended) \\
\eupTeX & \verb|euptex| & \verb|uplatex| & DVI (extended) \\
\ApTeX & \verb|ptex-ng| & \verb|platex-ng| & DVI (extended) and PDF \\
\bottomrule
\end{tabular}
\end{table}
\footnotetext{DVI files produced by *\pTeX\ can be converted to PDF files by
\dpx, or some scripts for convenience (also use \dpx\ internally), but this
subject is outside the scope of this document. (Note that \ApTeX\ outputs both
DVI and PDF files directly.)}
\noindent Both \LaTeX3 and the \pkg{ifptex} package (and its alias, the
\pkg{ifuptex} package) have already provided commands for detecting some *\pTeX\
engines. However, they do not satisfy the author, thus this package is written.
For compatibility, all user commands provided by this package have an extra
letter ``\verb|x|'' or ``\verb|X|''.
\section{Naming conventions}
There are two more naming conventions in this package:
\begin{itemize}
\item Suppose that there is a \TeX\ engine called \FooTeX, then both
\verb|FooTeX| and \verb|footex| are used in commands' names, but they refer to
different things: \verb|FooTeX| stands for the \FooTeX\ engine itself, while
\verb|footex| stands for all engines (mostly) compatible with \FooTeX\
(including \FooTeX).
\item Furthermore, \verb|UniFooTeX| and \verb|unifootex| stand respectively for
\verb|FooTeX| and \verb|footex| when using Unicode as the internal encoding.
(Similarly, ``\UNI'' used in the following tables indicates that the engine
should be the corresponding \verb|UniFooTeX|.) (Note that \ApTeX\ always uses
Unicode as its internal encoding.)
\end{itemize}
\section{Usage}
This package has no options, just load it as usual:
\begin{itemize}
\item \LaTeX: \verb|\usepackage{ifxptex}|
\item Plain \TeX: \verb|\input ifxptex.sty|
\end{itemize}
\subsection{Conditionals}
Table \ref{tab:cond} lists the conditionals provided by this package.
\vskip-10pt\relax
\begin{table}[!ht]\centering
\caption{Conditionals provided by this package}
\label{tab:cond}
\begin{tabular}{lccccc}
\toprule
& \multicolumn{5}{c}{True when using (one of)} \\
\cmidrule(lr){2-6}
Conditional & \pTeX & \epTeX & \upTeX & \eupTeX & \ApTeX \\
\midrule
\verb|\ifxpTeX| & \yes & & & & \\
\verb|\ifxepTeX| & & \yes & & & \\
\verb|\ifxupTeX| & & & \yes & & \\
\verb|\ifxeupTeX| & & & & \yes & \\
\verb|\ifxApTeX| & & & & & \yes \\
\verb|\ifxUniupTeX| & & & \yes\ \uni & & \\
\verb|\ifxUnieupTeX| & & & & \yes\ \uni & \\
\verb|\ifxptex| & \yes & \yes & \yes & \yes & \yes \\
\verb|\ifxeptex| & & \yes & & \yes & \\
\verb|\ifxuptex| & & & \yes & \yes & \yes \\
\verb|\ifxeuptex| & & & & \yes & \\
\verb|\ifxaptex| & & & & & \yes \\
\verb|\ifxuniuptex| & & & \yes\ \uni & \yes\ \uni & \yes \\
\verb|\ifxunieuptex| & & & & \yes\ \uni & \\
\bottomrule
\end{tabular}
\end{table}
\noindent These conditionals can be used as usual. For example:
\medskip
\noindent{\ttfamily\hskip2em}%
\verb|\ifxeupTeX|%
\ensuremath{\langle}material for \eupTeX\ensuremath{\rangle}%
\verb|\else|%
\ensuremath{\langle}material not for \eupTeX\ensuremath{\rangle}%
\verb|\fi|
\subsection{Declarations}
Table \ref{tab:decl} lists the declarations provided by this package. (This
table is very similar to Table \ref{tab:cond}.)
\vskip-10pt\relax
\begin{table}[!ht]\centering\advance\tabcolsep by -0.1pt\relax
\caption{Declarations provided by this package}
\label{tab:decl}
\begin{tabular}{lccccc}
\toprule
& \multicolumn{5}{c}{Reports an error if the engine in
use is not (one of)} \\
\cmidrule(lr){2-6}
Declaration & \pTeX & \epTeX & \upTeX & \eupTeX & \ApTeX \\
\midrule
\verb|\RequireXpTeX| & \yes & & & & \\
\verb|\RequireXepTeX| & & \yes & & & \\
\verb|\RequireXupTeX| & & & \yes & & \\
\verb|\RequireXeupTeX| & & & & \yes & \\
\verb|\RequireXApTeX| & & & & & \yes \\
\verb|\RequireXUniupTeX| & & & \yes\ \uni & & \\
\verb|\RequireXUnieupTeX| & & & & \yes\ \uni & \\
\verb|\RequireXptex| & \yes & \yes & \yes & \yes & \yes \\
\verb|\RequireXeptex| & & \yes & & \yes & \\
\verb|\RequireXuptex| & & & \yes & \yes & \yes \\
\verb|\RequireXeuptex| & & & & \yes & \\
\verb|\RequireXaptex| & & & & & \yes \\
\verb|\RequireXuniuptex| & & & \yes\ \uni & \yes\ \uni & \yes \\
\verb|\RequireXunieuptex| & & & & \yes\ \uni & \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
|