diff options
Diffstat (limited to 'macros/inrstex/inrstex/inrsutil.tex')
-rw-r--r-- | macros/inrstex/inrstex/inrsutil.tex | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/macros/inrstex/inrstex/inrsutil.tex b/macros/inrstex/inrstex/inrsutil.tex new file mode 100644 index 0000000000..d687ee7092 --- /dev/null +++ b/macros/inrstex/inrstex/inrsutil.tex @@ -0,0 +1,164 @@ +%-*-tex-*- +% Copyright Michael J. Ferguson, INRS-Telecommunications +% All rights reserved. + +% ======== INRSTeX Utilities ====== + + +% ========= Houskeeping Utilities ========= + +% These are houskeeping utilities and should be kept. They will most likely +% not interfere with any other commands. + +\newif\ifsilent \silentfalse % defaults to not quiet ... used in \a@utonum + +\def\silent#1{\setbox0=\hbox{#1}} % causes #1 to be silently expanded + +% ----- #1 break penalty , #2 skip amount +\def\penaltybreak#1#2{\par\ifdim\lastskip<#2 + \removelastskip\penalty #1\vskip #2 \fi} + +% ------ advances only the dimension part of a glue statement +% must be of form \a@dvance #1 by #2 where #2 is a dimension + % coerces glue to be a dimen +\def\a@dvance #1#2{\dimen0 = #1\relax + \advance #1 by -\dimen0\relax + \advance #1 by #2\relax} + + +%------- appends a second token list onto a first one ---- +%#1 token list #2 token list #1 is resulting name +% used in creating autonumbers +\def\appendtoks#1#2{ \edef\next{\noexpand #1 = {\the#1 \the#2} } + \next} + +%---------- non outer allocations same as in plain --------- +\def\n@ewcount{\alloc@0\count\countdef\insc@unt} +\let\n@ewtoks=\relax % we do this to allow inrs.tex to be read in twice +\def\n@ewtoks{\alloc@5\toks\toksdef\@cclvi} +\def\n@ewwrite{\alloc@7\write\chardef\sixt@@n} +\def\n@ewswitch#1{\expandafter\let\csname if#1\endcsname\relax + \toks@{\iftrue}% + \expandafter\edef\csname#1true\endcsname + {\let\csname if#1\endcsname=\the\toks@}% + \toks@{\iffalse}% + \expandafter\edef\csname#1false\endcsname + {\let\csname if#1\endcsname=\the\toks@}% + \csname#1false\endcsname} % the switch starts out false + + +% --- undefined command check --- 7.7 from the texbook +\def\ifundefined#1{\expandafter\ifx\csname #1\endcsname\relax} % needs \fi to end + +% ------ Input a file. If it does not exist, treat it as a null file. +% #1 file name. +\def\inputwithcheck#1{\edef\i@wc{#1}\openin1=\i@wc\relax + \ifeof1 + \closein1 + \else + \closein1 + \input \i@wc \relax + \fi} + +% \writeterm +% ----------- Write to the terminal -------- +% Format is similar to \writelistfile. Its main claim is that +% it removes ugly \cr and ~ that might lead to problems. +% #1#2#3 the three arguments are concatenated in the output text. +\def\writeterm#1#2#3{{\def\cr{ }\def~{ }\immediate\write32{#1#2#3}}} + + +% ======= Single/Multicolumn Page Eject and Insert Control ====== +% "\end..." is only used in conjunction with a matched "\begin... +% However "\end" has not been redefined. + +\def\ejectcolumn{\par\vfill\eject} +\let\ejectpage=\ejectcolumn +\def\superejectpage{\par\vfill\supereject} +\def\done{\superejectpage\end} % to be modified +\def\ejectinsert{\ifnum\insertpenalties>0 \null\ejectcolumn\ejectinsert\fi} +\let\ejectinserts=\ejectinsert % historical error + + +% ========= Miscellaneous Paragraph Shape Macros ========= + +% ---- a symmetric narrowing of the page ---- +\newtoks\everynarrowtext + +\def\beginnarrowtext #1 {\par + \begingroup + \advance\leftskip by #1\relax + \advance\rightskip by #1\relax + \the\everynarrowtext} +\def\endnarrowtext {\par \endgroup} + + +% ----- centers lines in paragraph --------- +% This is used in Titles ... + +\def\paragraphcenterline{\advance\rightskip by 0pt plus 1fill + \advance\leftskip by + 0pt plus 1fill \def\cr{\par}\parindent = 0pt} + + +% --- a very ragged right ... will suppress all hyphenation for title/sections +\def\veryraggedright{\advance\rightskip by 0pt plus 1fil\relax} + +%----- linebreak in horizontal mode +\def\linebreak{\hfil\break} + +% ========= Half quad ========== +\def\hquad{\hskip .5em} + + +% ========= Year/Month/Day ========= +% This is used in the Output Routine +% --- form for version +\def\date{\the\year/\the\month/\the\day} +\def\version{Version: \date} + +% =========== New Boxit ============= + +% --- puts rules around the outside of a box +% #1 line thickness, #2 border separation #3 box +\long\def\boxit#1#2#3{\vbox{\dimen0=#1 \dimen2=#2 \hrule height \dimen0 + \hbox{\vrule width\dimen0 \hskip\dimen2\vbox{\vskip \dimen2 + \vbox{#3} + \vskip \dimen2}\hskip + \dimen2 \vrule width\dimen0} + \hrule height \dimen0}} + + +% ============== Number Format Conversion Forms ============= + +% ------ This gives an uppercase alphabetic form for a number ---- +% There should be an easier way! + +\def\Alphabetic#1{\ifcase #1\or A\or B\or C\or D\or E\or + F\or G\or H\or I\or J\or + K\or L\or M\or N\or O\or + P\or Q\or R\or S\or T\or + U\or V\or W\or X\or Y\or + Z\else #1\fi} + +\def\alphabetic#1{\ifcase #1\or a\or b\or c\or d\or e\or + f\or g\or h\or i\or j\or + k\or l\or m\or n\or o\or + p\or q\or r\or s\or t\or + u\or v\or w\or x\or y\or + z\else #1\fi} + +% ------ This does the same for roman numerals --- from TeXbook +\def\UpperRoman#1{\uppercase\expandafter{\romannumeral #1}} + + +% ========= These are dangerous macros that easily allow for loss of @ +% protection ========= + +% ======= general protect/unprotect ======= +\def\protect{\catcode`\@=12} +\def\unprotect{\catcode`@=11} + +% ======= Activate/deactivate ========= +\def\activate{\catcode`\"=\active \catcode`\|=\active} +\def\deactivate{\catcode`\"=12 \catcode`\|=12} |