

% 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}
