summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/ifis-macros/ifis-macros-doc.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/plain/contrib/ifis-macros/ifis-macros-doc.tex')
-rw-r--r--macros/plain/contrib/ifis-macros/ifis-macros-doc.tex138
1 files changed, 138 insertions, 0 deletions
diff --git a/macros/plain/contrib/ifis-macros/ifis-macros-doc.tex b/macros/plain/contrib/ifis-macros/ifis-macros-doc.tex
new file mode 100644
index 0000000000..a5b3c21942
--- /dev/null
+++ b/macros/plain/contrib/ifis-macros/ifis-macros-doc.tex
@@ -0,0 +1,138 @@
+% This file is part of the CTAN package named isIntDim.
+%
+% info.tex: instructions for two macro packages: ifisinteger.tex
+% and ifisdimension.tex
+%
+% Copyright (C) 2024 Udo Wermuth (author)
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+% %%%
+% %%% verbatim macros (from manmac.tex)
+% %%%
+\newskip\ttglue {\tt\global\ttglue=0.5em plus 0.25em minus 0.15em }
+\def\ttverbatim{\begingroup \frenchspacing
+ \catcode`\\=12 \catcode`\{=12 \catcode`\}=12 \catcode`\$=12 \catcode`\&=12
+ \catcode`\#=12 \catcode`\%=12 \catcode`\~=12 \catcode`\_=12 \catcode`\^=12
+ \obeyspaces \obeylines \tt}
+\def\verbatimspace{\ifvmode\indent\fi\space}
+{\obeyspaces \gdef\makespaceverbspace{\def {\verbatimspace}}}
+\outer\def\verbatim{$$\ifdim\parskip>0pt
+ \abovedisplayskip=\parskip \abovedisplayshortskip=\parskip
+ \belowdisplayskip=\parskip \belowdisplayshortskip=\parskip
+ \else
+ \abovedisplayskip=3pt \abovedisplayshortskip=3pt
+ \belowdisplayskip=3pt \belowdisplayshortskip=3pt
+ \fi
+ \let\par=\endgraf \ttverbatim \makespaceverbspace \parskip=0pt
+ \catcode`\§=0 \advance\leftskip by 10pt \ttfinish}
+{\catcode`\§=0 §catcode`§\=12 % § is temporary escape character
+ §obeylines % end of line is active
+ §gdef§ttfinish#1^^M#2\endverbatim{§vbox{#2}§endgroup$$}}
+\catcode`\|=\active
+{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}}
+
+\def\noitem{\item{\phantom{0.}}}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\font\titlefont=cmssdc10 at 36pt
+\font\subtitlefont=cmssdc10 at 17pt
+%
+\centerline{\titlefont ifis-macros}
+\bigskip
+\centerline{\subtitlefont Version 1.0, 7.04.2024}
+\bigskip
+\centerline{Macros for plain \TeX}
+\medskip
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\noindent
+There are two main macros in the files {\tt ifisinteger.tex} and {\tt
+ifisdimension.tex}. The macro |\ifisint| tests if a given input string
+represents a number for \TeX. The macro |\ifisdim| does this for
+dimensions.
+
+Both macros generate errors but hide them from the terminal as they
+work in |\batchmode|. There is one configuration parameter:
+|\IIcurrentmode|. The default is |\errorstopmode|. Change this if you
+call the macros in a different interaction mode so that they can
+return to this mode.
+
+\bigskip
+
+\beginsection 0.\ Installation
+
+To use the macro |\ifisint| load via |\input ifisinteger.tex| the file
+that contains the code. For |\ifisdim| use |\input ifisdimension.tex|.
+
+\bigskip
+
+\beginsection 1.\ File {\tt ifisinteger.tex}
+
+The main macro is called |\ifisint| and must be used like an
+|\if|-conditional except that its argument is delimited by |\Boolend|:
+|\ifisint <argument>\Boolend <true branch>\else <false branch>\fi|.
+
+\medskip
+
+The implemented algorithm has four steps:
+\smallskip
+\item{1.}1)~Remove signs with or without braces; add sentinel |W|.
+\noitem 2)~Test that the input isn't now |"W|, etc.; otherwise
+ return false.
+\item{2.}Create a canonical form with a leading zero.
+\item{3.}1)~Assign the input to a |\count| register inside an
+ |\hbox|.
+\noitem 2)~Test that the box width is the width of the sentinel.
+\noitem 3)~Otherwise return false.
+\item{4.}1)~Return true if the number isn't \TeX's maximum.
+\noitem 2)~Otherwise test if the canonical form is \TeX's maximum.
+ If yes, return true.
+\noitem 3)~Otherwise return false.
+\medskip
+
+For more details see my article in TUGboat {\bf45}:1 (2024), 106--109.
+
+\bigskip
+
+\beginsection 2.\ File {\tt ifisdimension.tex}
+
+The main macro is called |\ifisdim| and must be used like an
+|\if|-conditional except that its argument is delimited by |\Boolend|:
+|\ifisdim <argument>\Boolend <true branch>\else <false branch>\fi|.
+
+\medskip
+
+The implemented algorithm has four steps:
+\smallskip
+\item{1.}1)~Remove signs with or without braces; add sentinel |mm|.
+\noitem 2)~Exclude trivial non-numerics as done in |\ifisint|.
+\noitem 3)~Otherwise return false.
+\item{2.}1)~Get the integer part.
+\noitem 2)~Get fraction and the unit.
+\noitem 3)~Get the width of the unit.
+\item{3.}1)~Assign the input to a |\dimen| register inside an
+ |\hbox|.
+\noitem 2)~Test that the box width is the width of the sentinel.
+\noitem 3)~Otherwise return false.
+\item{4.}1)~Return true if the dimension isn't \TeX's |\maxdimen|.
+\noitem 2)~Otherwise test if the coerced sum of the integer part
+ and the fraction expressed in the unit |sp| is |\maxdimen|.
+\noitem 3)~If no, return false.
+\noitem 4)~Otherwise return true.
+\medskip
+
+For more details see my article in TUGboat {\bf45}:1 (2024), 109--112.
+
+\bye