summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/iftex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-10-31 03:00:53 +0000
committerNorbert Preining <norbert@preining.info>2019-10-31 03:00:53 +0000
commit038f3d26e9b2f40210a14133c33f1d2dfb5261bf (patch)
tree6e4ac4cf157fbd7b80ca0f6044dfb2452add0376 /macros/latex/contrib/iftex
parent120cbc10db92bf43caa6bbf29549667e979beba4 (diff)
CTAN sync 201910310300
Diffstat (limited to 'macros/latex/contrib/iftex')
-rw-r--r--macros/latex/contrib/iftex/README29
-rw-r--r--macros/latex/contrib/iftex/README.md65
-rw-r--r--macros/latex/contrib/iftex/ann.txt52
-rw-r--r--macros/latex/contrib/iftex/ifetex.sty18
-rw-r--r--macros/latex/contrib/iftex/ifluatex.sty17
-rw-r--r--macros/latex/contrib/iftex/ifpdf.sty17
-rw-r--r--macros/latex/contrib/iftex/iftex.pdfbin30641 -> 201646 bytes
-rw-r--r--macros/latex/contrib/iftex/iftex.sty304
-rw-r--r--macros/latex/contrib/iftex/iftex.tex256
-rw-r--r--macros/latex/contrib/iftex/ifvtex.sty45
-rw-r--r--macros/latex/contrib/iftex/ifxetex.sty17
11 files changed, 630 insertions, 190 deletions
diff --git a/macros/latex/contrib/iftex/README b/macros/latex/contrib/iftex/README
deleted file mode 100644
index 95def7f467..0000000000
--- a/macros/latex/contrib/iftex/README
+++ /dev/null
@@ -1,29 +0,0 @@
-_________________
-The iftex package
-v0.2
-
-This very simple package, for both Plain TeX and LaTeX,
-defines the \ifPDFTeX, \ifXeTeX, and \ifLuaTeX boolean
-for testing whether PDFTeX, or XeTeX, or LuaTeX is being
-used for typesetting.
-
-Also provides the \RequirePDFTeX, \RequireXeTeX, and \RequireLuaTeX
-command which throws an error if PDFTeX, XeTeX and LuaTeX (respectively)
-is not the engine in use.
-
-If you want to report any bugs or typos and corrections in the documentation,
-or ask for any new features, or suggest any improvements, or ask any questions
-about the package, then please do not send any direct emails to us; we will not
-answer any direct emails. Instead please use the issue tracker:
- <https://github.com/persian-tex/iftex/issues>
-In doing so, please always explain your issue well enough, always include
-a minimal working examples showing the issue, and always choose the appropriate
-label for your query (i.e. if you are reporting any bugs, choose `bug' label).
-
-Current version release date: 2013/04/04
-______________
-Persian TeX Group
-persian-tex@tug.org
-
-Copyright 2010–2013
-Distributed under the LaTeX Project Public License
diff --git a/macros/latex/contrib/iftex/README.md b/macros/latex/contrib/iftex/README.md
new file mode 100644
index 0000000000..ec8f5b74cc
--- /dev/null
+++ b/macros/latex/contrib/iftex/README.md
@@ -0,0 +1,65 @@
+# iftex
+
+## TeX Engine Detection
+
+This iftex package provides a suite of commands for detecting
+different TeX variants.
+
+For each supported engine, tests are provided of the form
+
+ \ifpdftex which is true if PDFTeX is in use and \RequirePDFTeX
+ which stops the run with an error message if PDFTeX is not being used.
+
+The package (which works with plain TeX as well as LaTeX) has tests
+for:
+
+eTeX, PDFTeX, XeTeX, LuaTeX, LuaHBTeX, pTeX, upTeX, pTeX-ng, VTeX, Aleph.
+
+
+In addition, an \iftutex test is true for XeTeX and LuaTeX, and
+an \ifpdf test is provided to test the PDF or DVI output mode.
+
+## Compatibility Packages
+
+In addition to the main iftex.sty package, small wrapper packages are
+provided
+
+ifetex.sty ifluatex.sty ifvtex.sty ifxetex.sty ifpdf.sty
+
+These include iftex and in some cases emulate some additional
+commands to allow these packages to replace the original packages in TeX
+distributions. It is recommended that new documents do not use these
+packages, but instead load iftex.sty directly.
+
+This package may be used on any format (it may be loaded into initex)
+it does not assume LaTeX.
+
+
+----
+
+This is a merger and simplification of several packages
+Based on a suggestion of Norbert Preining
+
+https://github.com/bidi-tex/iftex/issues/1
+
+
+ * ifetex: Martin Scharrer
+ * ifxetex: Will Robertson
+ * iftex: Persian TeX Group / Vafa Khalighi
+ * ifluatex, ifvtex: Heiko Oberdiek
+ * ifptex: Takayuki Yato
+ * ifpdf: Heiko Oberdiek and LaTeX3 Project
+
+
+The existing if(u)ptex packages do far more extensive testing to
+distinguish different variants which are not copied here.
+
+A document specifically for Japanese texts may need the finer grained
+tests of the ifptex package which has tests for particular versions
+of the pTeX (Japanese TeX) variant in use, and for the mode that is
+active.
+
+This generic package only has coarser tests for the tex variant in
+use, so is sufficient for example to distinguish upTeX from pTeX, and
+to distinguish both of those from LuaTeX.
+
diff --git a/macros/latex/contrib/iftex/ann.txt b/macros/latex/contrib/iftex/ann.txt
new file mode 100644
index 0000000000..9e153b59ab
--- /dev/null
+++ b/macros/latex/contrib/iftex/ann.txt
@@ -0,0 +1,52 @@
+** UPLOAD: iftex
+https://ctan.org/pkg/iftex
+
+New README will be uploaded, please change catalogue to say
+maintained by LaTeX Team
+Licence LPPL 1.3
+Bug Tracker: https://github.com/latex3/iftex/issues/
+Repository: https://github.com/latex3/iftex/
+
+** UPLOAD: oberdiek
+https://ctan.org/pkg/oberdiek
+This release will not distribute ifpdf.sty ifluatex.sty ifvtex.sty
+
+
+** DELETE ifxetex
+https://ctan.org/pkg/ifxetex
+Please change the catalogue to point to the iftex distribution (which will contain ifxetex.sty)
+and change maintainer and github links as for iftex above.
+
+Will Robertson is on LaTeX Team so aware of this.
+
+** DELETE ifetex
+https://ctan.org/pkg/ifetex
+Please change the catalogue to point to the iftex distribution (which will contain ifetex.sty)
+and change maintainer and github links as for iftex above.
+
+Martin Scharrer <martin.scharrer@web.de> has agreed to his version of ifetex being deleted
+
+> Hi David,
+>
+> I always hated the fact that there where so many if..tex packages and I
+> am glad that you people rationalise them now.
+>
+> Feel free to withdraw my package ifetex from CTAN.
+>
+> Best Regards,
+>
+> Martin
+
+** CATALOGUE Change ifpdf, ifluatex, ifvtex
+https://ctan.org/pkg/ifpdf
+https://ctan.org/pkg/ifluatex
+https://ctan.org/pkg/ifvtex
+Please change the catalog entries for these three so they point to iftex as above,
+not to the oberdiek bundle.
+
+
+** NO CHANGE
+Just to confirm ifptex and ifxptex packages are _not_ affected by this re-arrangement.
+
+
+
diff --git a/macros/latex/contrib/iftex/ifetex.sty b/macros/latex/contrib/iftex/ifetex.sty
new file mode 100644
index 0000000000..51027d89c5
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifetex.sty
@@ -0,0 +1,18 @@
+% Compatibility stub package for ifetex
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifetex package was written by Martin Scharrer
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifetex}[2019/10/25 v1.3 ifetex legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+ \newcommand*\NeedsETeX[1][]{\RequireeTeX}
+\fi
diff --git a/macros/latex/contrib/iftex/ifluatex.sty b/macros/latex/contrib/iftex/ifluatex.sty
new file mode 100644
index 0000000000..e762e8281f
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifluatex.sty
@@ -0,0 +1,17 @@
+% Compatibility stub package for ifluatex
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifluatex package was written by Heiko Oberdiek
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifluatex}[2019/10/25 v1.5 ifluatex legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+\fi
diff --git a/macros/latex/contrib/iftex/ifpdf.sty b/macros/latex/contrib/iftex/ifpdf.sty
new file mode 100644
index 0000000000..ec500fba25
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifpdf.sty
@@ -0,0 +1,17 @@
+% Compatibility stub package for ifpdf
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifpdf package was written by Heiko Oberdiek
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifpdf}[2019/10/25 v3.4 ifpdf legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+\fi
diff --git a/macros/latex/contrib/iftex/iftex.pdf b/macros/latex/contrib/iftex/iftex.pdf
index 483276ea7c..426b5c4622 100644
--- a/macros/latex/contrib/iftex/iftex.pdf
+++ b/macros/latex/contrib/iftex/iftex.pdf
Binary files differ
diff --git a/macros/latex/contrib/iftex/iftex.sty b/macros/latex/contrib/iftex/iftex.sty
index 7651466448..feb5a75f8d 100644
--- a/macros/latex/contrib/iftex/iftex.sty
+++ b/macros/latex/contrib/iftex/iftex.sty
@@ -1,97 +1,231 @@
+%% iftex TeX engine tests
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+%%
+%% Using ideas from:
%%
-%% This is file `iftex.sty',
-
-%%
-%% __________________________________
-%% Copyright © 2010–2013 Persian TeX Group
-%%
-%% License information appended.
-%%
-%%
-\csname iftexloaded\endcsname
-\let\iftexloaded\endinput
+%% ifetex Martin Scharrer
+%% ifxetex Will Robertson
+%% iftex 0.2 Persian TeX Group / Vafa Khalighi
+%% ifluatex ifvtex Heiko Oberdiek
+%% ifptex Takayuki YATO
+%% ifpdf Heiko Oberdiek and LaTeX3 Project
+
+
+% Only load once (not needed in LaTeX, but does no harm).
+\csname IFTEX\string @loaded\endcsname
+\expandafter\let\csname IFTEX\string @loaded\endcsname\endinput
+
+% File loadable in initex
+% require { } # with standard catcodes.
+\catcode123=1
+\catcode125=2
+\catcode35=6
+
+
+% ProvidesPackage declaration in LaTeX
+\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname ProvidesPackage\endcsname\relax\else
- \ProvidesPackage{iftex}
- [2013/04/04 v0.2 Provides if(tex) conditional for PDFTeX, XeTeX, and LuaTeX]
-\fi
-\def\RequirePDFTeX{%
- \ifPDFTeX\else
- \begingroup
- \errorcontextlines=-1\relax
- \newlinechar=10\relax
- \errmessage{^^J
- ********************************************^^J
- * PDFTeX is required to compile this document.^^J
- * Sorry!^^J
- ********************************************}%
- \endgroup
- \fi}
-\def\RequireXeTeX{%
- \ifXeTeX\else
- \begingroup
- \errorcontextlines=-1\relax
- \newlinechar=10\relax
- \errmessage{^^J
- ********************************************^^J
- * XeTeX is required to compile this document.^^J
- * Sorry!^^J
- ********************************************}%
- \endgroup
- \fi}
-\def\RequireLuaTeX{%
- \ifLuaTeX\else
- \begingroup
- \errorcontextlines=-1\relax
- \newlinechar=10\relax
- \errmessage{^^J
- ********************************************^^J
- * LuaTeX is required to compile this document.^^J
- * Sorry!^^J
+ \ProvidesPackage{iftex}[2019/10/24 v1.0a TeX engine tests]
+\fi
+
+% Save @ catcode, to restore at end, not needed in LaTeX.
+\expandafter\chardef\csname IFTEX\string @atcatcode\endcsname\catcode64
+\catcode 64 11
+
+% Message format used in several pre-existing if*tex packages
+% Modified here to do a hard stop and not show any error context lines.
+\def\IFTEX@Require#1#2#3{%
+ #1\else
+ \newlinechar 64\relax
+ \errorcontextlines -1\relax
+ \immediate\write20{@
+ ********************************************@
+ * #2 is required to compile this document.@
+ * Sorry!@
********************************************}%
- \endgroup
- \fi}
-\expandafter\ifx\csname ifPDFTeX\endcsname\relax\else
- \expandafter\endinput
+ \batchmode\read -1 to \@tempa
+ #3%
+}
+
+
+% eTeX \protected if available.
+\ifx\protected\@undefined
+ \let\IFTEX@protected\relax
+\else
+ \let\IFTEX@protected\protected
\fi
-\expandafter\ifx\csname ifXeTeX\endcsname\relax\else
- \expandafter\endinput
+
+% make sure \detokenize and \protected are available in lualatex,
+% but avoid defining them after the package if not already defined.
+ {
+ \catcode34 12 % "
+ \catcode40 12 % (
+ \catcode41 12 % )
+ \catcode44 12 % ,
+ \catcode46 12 % .
+ \ifx\directlua\@undefined\else
+ \directlua{tex.enableprimitives("IFTEX@", {"detokenize","protected"})}
+ \fi
+ }
+
+% \Require... commands that stop if the wrong engine detected.
+\IFTEX@protected\def\RequireeTeX{\IFTEX@Require\ifetex{eTeX}\fi}
+\IFTEX@protected\def\RequirePDFTeX{\IFTEX@Require\ifpdftex{pdfTeX}\fi}
+\IFTEX@protected\def\RequireXeTeX{\IFTEX@Require\ifxetex{XeTeX}\fi}
+\IFTEX@protected\def\RequireLuaTeX{\IFTEX@Require\ifluatex{LuaTeX}\fi}
+\IFTEX@protected\def\RequireLuaHBTeX{\IFTEX@Require\ifluahbtex{LuaHBTeX}\fi}
+\IFTEX@protected\def\RequirepTeX{\IFTEX@Require\ifptex{pTeX}\fi}
+\IFTEX@protected\def\RequireupTeX{\IFTEX@Require\ifuptex{upTeX}\fi}
+\IFTEX@protected\def\RequirepTeXng{\IFTEX@Require\ifptexng{pTeX-ng}\fi}
+\IFTEX@protected\def\RequireVTeX{\IFTEX@Require\ifvtex{VTeX}\fi}
+% alephtex as aleph name too generic
+\IFTEX@protected\def\RequireAlephTeX{\IFTEX@Require\ifalephtex{Aleph}\fi}
+% tutex == has \Umathchardef == XeTeX or Lua(HB)TeX currently
+\IFTEX@protected\def\RequireTUTeX{\IFTEX@Require\iftutex{LuaTeX or XeTeX}\fi}
+
+
+% As a matter of policy over-write any existing \if*tex macro and set
+% by the tests here.
+
+% \csname and \let construct useful for hiding \ifzzz tokens from
+% outer level \if tests.
+\def\IFTEX@let#1#2{%
+ \expandafter\let\csname if#1\expandafter\endcsname
+ \csname if#2\endcsname}
+
+% etex (should always be true in latex based formats)
+\ifx\numexpr\@undefined
+ \IFTEX@let{etex}{false}
+\else
+ \IFTEX@let{etex}{true}
\fi
-\expandafter\ifx\csname ifLuaTeX\endcsname\relax\else
- \expandafter\endinput
+\IFTEX@let{eTeX}{etex}
+
+% pdftex (including in dvi mode)
+\ifx\pdftexversion\@undefined
+ \IFTEX@let{pdftex}{false}
+\else
+ \IFTEX@let{pdftex}{true}
\fi
-\newif\ifPDFTeX
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname pdfmatch\endcsname\relax
- \PDFTeXfalse
+\IFTEX@let{PDFTeX}{pdftex}
+
+% xetex
+\ifx\XeTeXrevision\@undefined
+ \IFTEX@let{xetex}{false}
\else
- \PDFTeXtrue
+ \IFTEX@let{xetex}{true}
\fi
-\newif\ifXeTeX
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname XeTeXinterchartoks\endcsname\relax
- \XeTeXfalse
+\IFTEX@let{XeTeX}{xetex}
+
+
+% luatex (including luahbtex)
+\ifx\directlua\@undefined
+ \IFTEX@let{luatex}{false}
\else
- \XeTeXtrue
+ \IFTEX@let{luatex}{true}
\fi
-\newif\ifLuaTeX
+\IFTEX@let{LuaTeX}{luatex}
+
+% luahbtex (or luatex + luaharfbuzz)
+% Use luaharfbuzz test rather than status.luatex_engine=="luahbtex"
+% for issue #2.
+\IFTEX@let{luahbtex}{false}
+\ifx\directlua\@undefined
+\else
+ \directlua{\IFTEX@detokenize{
+ if(pcall(require, 'luaharfbuzz')) then
+ tex.print("\\let\\ifluahbtex\\iftrue ")
+ end
+ }}
+
+\fi
+\IFTEX@let{LuaHBTeX}{luahbtex}
+
+
+% ptex (including all variants)
+\ifx\kanjiskip\@undefined
+ \IFTEX@let{ptex}{false}
+\else
+ \IFTEX@let{ptex}{true}
+\fi
+\IFTEX@let{pTeX}{ptex}
+
+% uptex (including euptex)
+\ifx\enablecjktoken \@undefined
+ \IFTEX@let{uptex}{false}
+\else
+ \IFTEX@let{uptex}{true}
+\fi
+\IFTEX@let{upTeX}{uptex}
+
+% ptex-ng
+\ifx\ngbanner\@undefined
+ \IFTEX@let{ptexng}{false}
+\else
+ \IFTEX@let{ptexng}{true}
+\fi
+\IFTEX@let{pTeXng}{ptexng}
+
+% vtex
+\ifx\VTeXversion\@undefined
+ \IFTEX@let{vtex}{false}
+\else
+ \IFTEX@let{vtex}{true}
+\fi
+\IFTEX@let{VTeX}{vtex}
+
+% aleph
+\IFTEX@let{alephtex}{false}
+\ifptex\else
+\ifx\omathchardef\@undefined
+\else
+ \IFTEX@let{alephtex}{true}
+\fi
+\fi
+\IFTEX@let{AlephTeX}{alephtex}
+
+
+% tutex (LuaTeX or XeTeX)
+\ifx\Umathchardef\@undefined
+ \IFTEX@let{tutex}{false}
+\else
+ \IFTEX@let{tutex}{true}
+\fi
+\IFTEX@let{TUTeX}{tutex}
+
+
+
+% Output mode
+% declare with as if with \newif
+\def\pdftrue{\let\ifpdf\iftrue}
+\def\pdffalse{\let\ifpdf\iffalse}
+\pdffalse
+\ifx\directlua\undefined
\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname directlua\endcsname\relax
- \LuaTeXfalse
+\expandafter\ifx\csname pdfoutput\endcsname\relax
+\ifvtex
+ \ifnum\OpMode=3 %
+ \pdftrue
+ \fi
+\fi
\else
- \LuaTeXtrue
-\fi
-%%
-%% Copyright © 2010–2013 by Persian TeX Group <persian-tex@tug.org>
-%%
-%% Distributable under the LaTeX Project Public License,
-%% version 1.3c or higher (your choice). The latest version of
-%% this license is at: http://www.latex-project.org/lppl.txt
-%%
-%% This work is "maintained" (as per LPPL maintenance status)
-%% by Persian TeX Group.
-%%
-%%
-%%
-%%
-%%
-%% End of file `iftex.sty'.
+ \ifnum\pdfoutput>0 %
+ \pdftrue
+ \fi
+\fi
+\else
+\directlua{\IFTEX@detokenize{
+if (tex.outputmode or tex.pdfoutput or 0) > 0 then
+ tex.print('\\pdftrue')
+end
+}}
+\fi
+
+% restore things
+\catcode64 \IFTEX@atcatcode
diff --git a/macros/latex/contrib/iftex/iftex.tex b/macros/latex/contrib/iftex/iftex.tex
index a247e22b5b..67703b93c5 100644
--- a/macros/latex/contrib/iftex/iftex.tex
+++ b/macros/latex/contrib/iftex/iftex.tex
@@ -1,80 +1,184 @@
-\documentclass{artikel3}
-\usepackage{calc}
-\usepackage{pifont}
-\usepackage{bbding}
-\usepackage[colorlinks=true,linkcolor=mybrown,urlcolor=mygreen]{hyperref}
-\usepackage{bidicode}
-\newcounter{local}
-\renewcommand\theenumi{\protect\setcounter{local}%
- {201+\the\value{enumi}}\protect\ding{\value{local}}}
-\renewcommand\labelenumi{\theenumi}
-\renewcommand\labelitemi{\HandRight}
-\renewcommand\labelitemii{\HandRightUp}
-\renewcommand\labelitemiii{\HandCuffRight}
-\renewcommand\labelitemiv{\HandPencilLeft}
-\definecolor{mybrown}{rgb}{.6,0,0}
-\definecolor{mygreen}{rgb}{0,.43,0}
-\definecolor{Orange}{rgb}{1,.4,.2}
-\newcommand\PDFTeX{PDF\TeX}
-\newcommand\XeTeX{Xe\TeX}
-\newcommand\LuaTeX{Lua\TeX}
-\title{The \textsf{iftex} Package\\ \href{https://github.com/persian-tex/iftex}{\texttt{https://github.com/persian-tex/iftex}}}
-\author{Persian TeX Group\\ \href{mailto:persian-tex@tug.org}{\texttt{persian-tex@tug.org}}}
-\date{Version 0.2}
+\documentclass{article}
+\usepackage[T1]{fontenc}
+\usepackage{hyperref}
+\hypersetup{colorlinks}
+\usepackage{iftex}
+
+\title{The iftex package}
+\author{The \LaTeX\ Project Team\thanks{%
+\url{https://github.com/latex3/iftex}}}
+
+\date{\csname ver@iftex.sty\endcsname}
+
+\newcommand\cs[1]{{\ttfamily\textbackslash #1}}
+\renewcommand*\descriptionlabel[1]{\makebox[\dimexpr\textwidth][l]{%
+ \normalfont\bfseries #1}}
+
\begin{document}
+
\maketitle
\tableofcontents
+
+
\section{Introduction}
-This package provides a way to check if a document is being processed with \PDFTeX, or \XeTeX, or \LuaTeX.
-\section{Loading The Package}
-The package can be loaded in the usual way both in Plain \TeX\ and \LaTeX.
-\subsection{Loading The Package in Plain \TeX}
-\begin{BDef}
-\Lcs{input}\quad \Larg{iftex.sty}
-\end{BDef}
-\subsection{Loading The Package in \LaTeX}
-\begin{BDef}
-\Lcs{usepackage}\Largb{iftex}
-\end{BDef}
-\section{Defined Conditionals}
-\subsection{For \PDFTeX}
-\begin{BDef}
-\Lcs{ifPDFTeX}\\
-\qquad\Larga{material for \PDFTeX}\\
-\Lcs{else}\\
-\qquad\Larga{material not for \PDFTeX}\\
-\Lcs{fi}
-\end{BDef}
-\subsection{For \XeTeX}
-\begin{BDef}
-\Lcs{ifXeTeX}\\
-\qquad\Larga{material for \XeTeX}\\
-\Lcs{else}\\
-\qquad\Larga{material not for \XeTeX}\\
-\Lcs{fi}
-\end{BDef}
-\subsection{For \LuaTeX}
-\begin{BDef}
-\Lcs{ifLuaTeX}\\
-\qquad\Larga{material for \LuaTeX}\\
-\Lcs{else}\\
-\qquad\Larga{material not for \LuaTeX}\\
-\Lcs{fi}
-\end{BDef}
-\section{Defined Commands}
-\subsection{For \PDFTeX}
-\begin{BDef}
-\Lcs{RequirePDFTeX}
-\end{BDef}
-This command tests for \PDFTeX\ use and throws an error if a different engine is being used.
-\subsection{For \XeTeX}
-\begin{BDef}
-\Lcs{RequireXeTeX}
-\end{BDef}
-This command tests for \XeTeX\ use and throws an error if a different engine is being used.
-\subsection{For \LuaTeX}
-\begin{BDef}
-\Lcs{RequireLuaTeX}
-\end{BDef}
-This command tests for \LuaTeX\ use and throws an error if a different engine is being used.
-\end{document} \ No newline at end of file
+This original \textsf{iftex} was written as part of the \textsf{bidi}
+collection (by the Persian TeX Group / Vafa Khalighi)
+and provided checks for whether a document was being
+processed with PDF\TeX, or Xe\TeX, or Lua\TeX. This version recodes
+the package and incorporates similar tests from the \textsf{ifetex}
+package by Martin Scharrer, the \textsf{ifxetex} package by Will
+Robertson, the \textsf{ifluatex} and \textsf{ifvtex}
+packages from Heiko Oberdiek and parts of \textsf{ifptex} by Takayuki
+Yato.
+
+For each \TeX\ variant engine supported two commands are provided:
+\begin{itemize}
+\item
+ a conditional, \verb|\iffootex| that is true if the \textsf(footex)
+engine (or a compatible extension) is being used.
+
+For compatibility with earlier packages which did not all use the same
+naming convention all these conditionals are provided in two forms, a
+lowercase name \verb|\iffootex| and a mixed case name \verb|\ifooTeX|.
+
+\item a command \verb|RequireFooTeX| which checks that \textsf{footex}
+ is being used, and stops the run with an error message if a
+ different engine is detected.
+\end{itemize}
+
+\section{Loading the package}
+The package can be loaded in the usual way in both Plain \TeX\ and \LaTeX.
+\subsection{Loading the package in plain \TeX}
+\begin{verbatim}
+\input iftex.sty
+\end{verbatim}
+
+\subsection{Loading the package in \LaTeX}
+\begin{verbatim}
+\usepackage{iftex}
+\end{verbatim}
+
+\subsection{Loading the package in ini\TeX}
+The package assumes no existing macros and may be loaded
+during format setup in a format without the plain \TeX\ or \LaTeX\
+format being loaded. From an initial ini\TeX\ setup the package may
+be loaded as for plain \TeX.
+
+\section{Engine test conditionals}
+All the conditionals defined here are used in the same way:
+\begin{verbatim}
+\ifluatex
+ luatex specific code
+\else
+ code for other engines
+\fi
+\end{verbatim}
+
+
+
+\begin{description}
+\item[\cs{ifetex}, \cs{ifeTeX}]
+True if an e\TeX\ enabled format is in use. (This is necessarily true
+in all \LaTeX\ variants.)
+\item[\cs{ifpdftex}, \cs{ifPDFTeX}]
+True if PDF\TeX\ is in use (whether writing PDF or DVI), so this is
+true for documents processed with both the \textsf{latex} and
+\textsf{pdflatex} commands.
+\item[\cs{ifxetex}, \cs{ifXeTeX}]
+True if Xe\TeX\ is in use.
+\item[\cs{ifluatex}, \cs{ifLuaTeX}]
+True if Lua\TeX\ and extensions such as LuaHB\TeX\ are in use.
+\item[\cs{ifluahbtex}, \cs{ifLuaHBTeX}]
+True if the \textsf{luaharftex} Lua module is available.
+This will be true in \textsf{luahbtex} and may be true in
+\textsf{luatex} if a binary Lua \textsf{luaharftex} module has been
+compiled and is available in Lua's search path.
+\item[\cs{ifptex}, \cs{ifpTeX}]
+True if any of the p\TeX\ variants are in use.
+\item[\cs{ifuptex}, \cs{ifupTeX}]
+True if any of the up\TeX\ variants are in use. (\verb|\ifetex| could
+be used in addition to distinguish \textsf{uptex} and \textsf{euptex}.)
+\item[\cs{ifptexng}, \cs{ifpTeXng}]
+True if p\TeX-ng (Asiatic p\TeX) is in use.
+\item[\cs{ifvtex}, \cs{ifVTeX}]
+True if V\TeX\ is in use.
+\item[\cs{ifalephtex}, \cs{ifAlephTeX}]
+True if Aleph is in use. (The \textsf{aleph}-based \LaTeX\ command is
+\textsf{lamed}.)
+\item[\cs{iftutex}, \cs{ifTUTeX}]
+This is not strictly an engine variant, but it is true if
+\verb|\Umathchardef| is available, which essentially means that it is
+true for Lua\TeX\ and Xe\TeX, allowing constructs such as
+\begin{verbatim}
+\iftutex
+ \usepackage{fontspec}
+ \setmainfont{TeX Gyre Termes}
+ \usepackage{unicode-math}
+ \setmathfont{Stix Two Math}
+\else
+ \usepackage{newtxtext,newtxmath}
+\fi
+\end{verbatim}
+
+\end{description}
+
+\section{Requiring specific engines}
+For each supported engine, the package provides a command
+\verb|\Require...| which checks that the document is being processed
+with a suitable engine, and stops with an error message if not.
+
+\begin{description}
+\item[\cs{RequireeTeX}]
+\item[\cs{RequirePDFTeX}]
+\item[\cs{RequireXeTeX}]
+\item[\cs{RequireLuaTeX}]
+\item[\cs{RequireLuaHBTeX}]
+\item[\cs{RequirepTeX}]
+\item[\cs{RequireupTeX}]
+\item[\cs{RequirepTeXng}]
+\item[\cs{RequireVTeX}]
+\item[\cs{RequireAlephTeX}]
+\item[\cs{RequireTUTeX}]
+\end{description}
+
+
+\section{Output mode conditional}
+This package also provides an \verb|\ifpdf| conditional that is true
+if the format is set up to output in PDF mode rather than DVI. This is
+equivalent to the test in the existing \textsf{ifpdf} package.
+
+Unlike the engine tests above this is defined as if by \verb|\newif|
+with user-documented commands \verb|\pdftrue| and \verb|\pdffalse| that can
+change the boolean value. These would be needed to reset the boolean
+if the output mode is reset (for example by setting
+\verb|\pdfoutput=0| in PDF\LaTeX).
+
+Unlike the original \textsf{ifpdf} package, the version here also
+detects PDF output mode if running in V\TeX.
+
+\section{Additional packages}
+This extended \textsf{iftex} is designed to replace the original
+\textsf{iftex} and also the packages
+\textsf{ifetex},
+\textsf{ifluatex},
+\textsf{ifvtex},
+\textsf{ifxetex},
+\textsf{ifpdf}.
+
+This collection includes small packages with these names that include
+the main \textsf{iftex} package, and in some cases define additional
+commands for increased compatibility. These packages should mean that
+authors do not need to change existing documents, although it is
+recommended that new documents use the \textsf{iftex} package
+directly.
+
+
+Note that while this package provides basic support for detecting
+p\TeX\ (Japanese \TeX) variants and is broadly compatible with the
+\textsf{ifptex} package, the \textsf{ifptex} package has many more detailed
+tests for p\TeX\ variants and this package does \emph{not} replace the
+\textsf{ifptex} (or \textsf{ifxptex}) packages, which are maintained
+by their original authors and recommended for Japanese documents that
+need fine control over the Japanese \TeX\ system in use.
+
+\end{document}
diff --git a/macros/latex/contrib/iftex/ifvtex.sty b/macros/latex/contrib/iftex/ifvtex.sty
new file mode 100644
index 0000000000..109cf1cc09
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifvtex.sty
@@ -0,0 +1,45 @@
+% Compatibility stub package for ifvtex
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifvtex package was written by Heiko Oberdiek
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifvtex}[2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+\fi
+
+
+\IFTEX@let{vtexdvi}{false}
+\IFTEX@let{vtexpdf}{false}
+\IFTEX@let{vtexps}{false}
+\IFTEX@let{vtexhtml}{false}
+\IFTEX@let{vtexgex}{false}
+
+\ifvtex
+ \ifcase\OpMode\relax
+ \IFTEX@let{vtexdvi}{true}
+ \or % 1
+ \IFTEX@let{vtexpdf}{true}
+ \or % 2
+ \IFTEX@let{vtexps}{true}
+ \or % 3
+ \IFTEX@let{vtexps}{true}
+ \or\or\or\or\or\or\or % 10
+ \IFTEX@let{vtexhtml}{true}
+ \fi
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname gexmode\endcsname\relax
+ \else
+ \ifnum\gexmode>0 %
+ \IFTEX@let{vtexgex}{true}
+ \fi
+ \fi
+\fi
diff --git a/macros/latex/contrib/iftex/ifxetex.sty b/macros/latex/contrib/iftex/ifxetex.sty
new file mode 100644
index 0000000000..8261ec2671
--- /dev/null
+++ b/macros/latex/contrib/iftex/ifxetex.sty
@@ -0,0 +1,17 @@
+% Compatibility stub package for ifxetex
+
+%% LaTeX3 Project
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version.
+
+% The original ifxetex package was written by Will Robertson
+
+\ifx\RequirePackage\undefined
+ \input iftex.sty
+\else
+ \ProvidesPackage{ifxetex}[2019/10/25 v0.7 ifxetex legacy package. Use iftex instead.]
+ \RequirePackage{iftex}
+\fi