summaryrefslogtreecommitdiff
path: root/info/digests/tex88/hoenig
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /info/digests/tex88/hoenig
Initial commit
Diffstat (limited to 'info/digests/tex88/hoenig')
-rw-r--r--info/digests/tex88/hoenig/drop.tex22
-rw-r--r--info/digests/tex88/hoenig/h0.tex290
2 files changed, 312 insertions, 0 deletions
diff --git a/info/digests/tex88/hoenig/drop.tex b/info/digests/tex88/hoenig/drop.tex
new file mode 100644
index 0000000000..acd3124190
--- /dev/null
+++ b/info/digests/tex88/hoenig/drop.tex
@@ -0,0 +1,22 @@
+%dropped cap macro from tom rokicki (via alan hoenig)
+\font\dfont=cmb10 scaled\magstep5
+\newbox\dibox \newbox\vsk
+\def\di#1{\smallskip\noindent\strut
+ \setbox\dibox=\hbox{\dfont #1}%
+ \setbox\vsk=\hbox{(}%
+ \hangindent=\wd\dibox
+ \hangafter=-2 % depends on the fonts
+ \strut\hbox to 0pt{\hss\vbox to0pt
+ {\vskip-\ht\vsk
+ \box\dibox\vss}}\noindent}
+%and an example...
+\di There is another advantage to \TeX's command structure.
+Since the command is independent of the text
+it is possible to change the text secure in the knowledge
+that we have not altered the typeset appearance of the
+document in any fundamental way. This is not always the
+case with other computer typesetting systems, which would
+require relaying out of the text after certain revisions.
+Using a macro written by Tom Rokicki, this paragraph has
+been set by\dots
+\bye
diff --git a/info/digests/tex88/hoenig/h0.tex b/info/digests/tex88/hoenig/h0.tex
new file mode 100644
index 0000000000..ef6878c0f1
--- /dev/null
+++ b/info/digests/tex88/hoenig/h0.tex
@@ -0,0 +1,290 @@
+%%
+%%
+%% STRUTS and miscellaneous macros.
+%%
+%\newdimen\strutheight \newdimen\strutdepth
+%\strutheight=\ht\strutbox \strutdepth=\dp\strutbox
+\newdimen\fudgedimen \fudgedimen=1.944444pt
+\font\specialfont=cmbxsl10 scaled\magstep1 \def\z{0pt}
+%%
+%% WHERE AM I?
+%% Macro a la Reid to determine current position
+%% on the page. \NEWOUTPUT is the temporary new
+%% output that we use in this macro to get position.
+%% Normal output routine is stored as \SAVEDOUTPUT.
+%%
+\newtoks\savedoutput \savedoutput={\the\output}
+\newbox\partialpage \newdimen\currentheight
+\def\newoutput{\setbox\partialpage=\vbox{\unvbox255}%
+\global\currentheight=\ht\partialpage \unvbox\partialpage}
+%%
+\def\whereami{\global\savedoutput=\output %
+\global\output={\newoutput}%
+\par \penalty-10000 % huge reward for doing output
+\global\output=\savedoutput}
+%%
+%% COMPUTEGOALHEIGHT
+%% =================
+%%
+%% Computes space we want to allocate for page 1
+%% of story. \GOALHEIGHT stores the computed goad
+%% height. This macro uses the following rule: If
+%% the space left on page is > .5\vsize, then half of
+%% that will be the goal height. Otherwise, all the re-
+%% maining space is allocated to \goalheight. Users and
+%% editors can code their own space allocation scheme into
+%% this macro. This macro has no arguments.
+%%
+\newdimen\goalheight
+\def\computegoalheight{%
+\goalheight=\vsize %%
+\advance\goalheight by-\currentheight
+\ifdim\currentheight>.5\vsize \else \divide\goalheight by2
+\fi
+\advance\goalheight by-2\baselineskip % adjust for title
+\count10=\goalheight %% compute goalheight equiv in lines
+\divide\count10 by\baselineskip
+\advance\count10 by1 %% adjust for truncation in division
+}
+%%
+%% \BEGINSTORY, \ENDSTORY Macros
+%% ======================
+%% Use these macros to typeset the article. Begin
+%% with \beginstory and frame the end with \endstory.
+%%
+\newcount\n %% used by \createparshapespec
+\newbox\currentpage %% to hold the article lead
+\newtoks\parshapespec %% used by \createparshapespec
+\newtoks\keyword %% will contain keyword identifier
+\newdimen\leadhsize % \hsize of lead
+\newdimen\jumphsize % \hsize of jump
+\newdimen\shortsize % width of last line of lead
+%%
+\def\beginstory[title:#1][key:#2][lead hsize:#3][lead
+height:#4lines][jump hsize:#5]{%
+%% #1: the title of the story
+%% #2: a single word for ident purposes
+%% #3: width (hsize) of story lead
+%% #4: depth of first part of story in LINES (1line
+%% = \baselineskip); let it be -1 (or any negative num)
+%% if you want \TeX to compute it as the goalheight
+%% #5: width of second part (jump) of story
+%% \BEGINSTORY will always typeset the lead part of the
+%% story. Complete the story with the command \ENDSTORY
+%% You have to explicitly give the command to typeset the
+%% JUMP. Do this via ``\printjump[key]'' where the `key' is
+%% the parameter #2.
+%%
+%% Because the determination of the forward and backward
+%% page references requires a 2-pass compilation, you will
+%% have to typeset your story TWICE. Otherwise, the page
+%% references will appear as question marks `???'.
+%%
+\setbox0=\hbox{\quad\it Please see {\bf #2} on page ??}
+\shortsize=#3 %% to hold width of last line of lead
+\advance\shortsize by-\wd0 %% reduce by space for xref
+%%
+\leadhsize=#3 \jumphsize=#5
+\setbox0=\vbox to2\baselineskip{\hbox
+to\leadhsize{\hss\specialfont #1\hss}\vss}%
+%% assume title occupies 2\baselineskip of space
+\box0 %% typeset title info
+\count10=#4 \advance\count10 by-2 %% adjust for title
+%%
+\ifnum\count10>0 %% User specified space for lead?
+ \goalheight=\count10\baselineskip %% yes
+ \n=\count10 %% set numerical argument for \parshape
+ \else %% no
+ \whereami \computegoalheight
+ \n=\count10 %%set numerical argument for \parshape
+\fi %\n is the number of lines in the lead
+\advance\n by1 % \n is the parameter for \parshape
+%% \box0 will contain title
+\createparshapespec
+\makeboxident{#2}%
+\global\keyword={#2}%
+\partoks=% will contain `stuff' controlling typesetting
+{\tolerance=7000 \hsize=#3 \pageshape=\n \the\parshapespec}
+\putinvbox{#2}%
+} %% END OF MACRO \BEGINSTORY
+%%
+%%
+\newdimen\splitheight %% ht of article lead
+\def\endstory{%% \ENDSTORY Macro
+\shutbox %% close box containing lead
+\splittopskip=\strutheight
+\ifpasstwo %% then determine page reference
+\def\pageident{\expandafter\csname\the\keyword
+b\endcsname}%
+ \else %% first pass; for explanation of weird
+%% \write convolutions, see TeXbook, ex 21.10
+\def\pageident{???}{\edef\mywrite{\write\xrefout{\{\csname\the\keyword
+a\endcsname:}} \mywrite}%
+{\let\the=0\edef\mywrite{\write\xrefout{\the\pageno:\} }}
+\mywrite}\fi
+\advance\n by-1 %% num of lines in lead
+\splitheight=\n\baselineskip %% how high will lead be?
+\setbox\currentpage=\vsplit\allocationnumber to\splitheight
+%% see TeXbook, pg 346 ff for \allocationnumber
+\vbox{% keep \box\currentpage & reference together
+\box\currentpage
+\vskip-\baselineskip \vskip-\strutdepth
+\vskip-\fudgedimen
+\hbox to\leadhsize{\hss\it \strut Please see
+{\bf\the\keyword} on page \pageident}%
+}% end of \vbox
+}%% End of \ENDSTORY
+%%
+%%
+%% \CREATEPARSHAPESPEC Macro
+%% =========================
+%%
+%% \n contains the numerical argument for \parshape.
+%% This macro called by \beginstory only.
+%%
+\def\createparshapespec{%
+\count10=\n %% use \count10 as scratch register
+\advance\count10 by-2 \global\parshapespec={}%
+\loop\ifnum\count10>0
+\parshapespec=\expandafter{\the\parshapespec \z\leadhsize}
+\advance\count10 by-1 \repeat
+\parshapespec=\expandafter{\the\parshapespec \z\shortsize}
+\parshapespec=\expandafter{\the\parshapespec \z\jumphsize}%
+}
+%%
+%% PAGESHAPE Macros
+%%
+\newcount\linesdone %% tracks \prevgraf for each par
+\newtoks\oldeverypar \oldeverypar={}
+\let\oldparshape=\parshape
+\def\parshape{\prevgraf=0 \linesdone=0 \oldparshape}
+\def\par{{\endgraf \global\linesdone=\prevgraf}}
+\everypar={\the\oldeverypar \prevgraf=\linesdone}
+\def\pageshape{\global\linesdone=0 \oldparshape}
+%%
+%%
+%% BOXIDENTS: How to use them.
+%% ===========================
+%% Any KEYWORD can refer to a box by first saying
+%% \makeboxident{KEYWORD} (e.g., \makeboxident{Story1},
+%% etc.). TWO commands control placing text in the box.
+%% Start with the \PUTINVBOX{KEYWORD} command. KEYWORD
+%% should be the same as in the corresponding
+%% \makeboxident command. Follow \PUTINVBOX with
+%% the text. Finish up with the \SHUTBOX command (no
+%% arguments.) \PUTINVBOX starts by expanding a \partoks
+%% token list, so commands to control the text can be
+%% placed in this token (e.g., \partoks={\noindent \hsize
+%% 3.5in \bf \parshape=3 0pt\hsize 0pt.75\hsize
+%% 0pt.5\hsize}). In these macros, ``a'' refers to the
+%% lead of an article, and ``b'' refers to the jump.
+%%
+%% To typeset the material, enter the command
+%% \printjump{KEYWORD}, e.g.,
+%% \printjump{Story1}.
+%%
+%% Redefine NEWBOX so as not to be OUTER.
+%% WARNING: This is a deviation from Plain.Tex. If
+%% this offends you, please read no further. If it
+%% doesn't offend you, please beware of possible box
+%% allocation problems that may arise.
+%%
+%% See TeXbook, page 346 ff, for discussion of box and
+%% register allocation.
+%%
+\catcode`\@=11 %% make @ a letter temporarily
+\def\newbox#1{%\alloc@4\box\chardef\insc@unt}
+\global\advance\count14 by1
+\ch@ck4\insc@unt\box% make sure there is still room
+\allocationnumber=\count14
+\global\expandafter\chardef#1=\allocationnumber
+\wlog{\string#1=\string\box\the\allocationnumber}}
+\catcode`\@=12
+%%
+\newtoks\partoks \partoks={}
+%%
+\def\makeboxident#1{\newbox{\csname#1box\endcsname}}
+%%
+\def\putinvbox#1{%
+%% single argument is keyword identifier
+%%
+\gdef\myident{\csname#1box\endcsname}%
+\setbox\myident=\vbox\bgroup \the\partoks \strut%
+} %% End of \PUTINVBOX.
+%%
+\def\shutbox{\strut\egroup} %% \SHUTBOX closes box opened
+%% by \putinvbox.
+%%
+\def\printjump[#1]{%% to print the jump portion of article
+\gdef\myident{\csname#1box\endcsname}%
+\ifpasstwo \def\pageident{\csname#1a\endcsname}\else
+\def\pageident{???}
+{\edef\mywrite{\write\xrefout{\{\csname#1b\endcsname:}}\mywrite}
+{\let\the=0\edef\mywrite{\write\xrefout{\the\pageno:\}}}\mywrite}
+\fi
+\vtop{\hbox to\jumphsize{{\bf#1} {\it from page
+\pageident}\strut\hss}\box\myident}}
+%%
+%%
+%% INPUT, OUTPUT, CROSS_REFERENCE Section.
+%% =======================================
+%%
+%% In what follows, we provide the i/o and
+%% cross-reference machinery for replacing the
+%% `???' in the `Please see...' and `Continued
+%% from...' messages. As before, everything will be
+%% keyed off the KEYWORD spec.
+%%
+%%
+%% Temporary redefinition of group symbols so we can
+%% redefine \{ and \} for use in output.
+%%
+\bgroup
+\catcode`\{=11 \catcode`\}=11 \catcode`\[=1 \catcode`\]=2
+\gdef\{[{] \gdef\}[}]
+\egroup
+%%
+\newread\xrefin \newwrite\xrefout
+\newif\ifpasstwo \passtwofalse
+\openin\xrefin=\jobname.xrf
+\ifeof\xrefin \passtwofalse \else\passtwotrue \fi
+\ifpasstwo
+\immediate\write16{**********************************}%
+\immediate\write16{I AM NOW INSERTING PAGE REFERENCES IN
+YOUR ARTICLES.}%
+\immediate\write16{**********************************}%
+\else
+\immediate\write16{**********************************}%
+\immediate\write16{PLEASE don't forget to typeset this a
+SECOND time!}%
+\immediate\write16{**********************************}%
+\openout\xrefout=\jobname.xrf \fi
+%%
+\newtoks\mytok
+\def\readxreffile{%
+\read\xrefin to\mykey
+\mytok=\mykey
+\ifeof\xrefin \let\next=\relax \else
+\expandafter\parse\the\mytok
+\let\next=\readxreffile \fi \next}
+
+%%
+\def\parse#1: #2:{\def#1{#2}}
+%%
+\ifpasstwo \readxreffile \fi
+
+%%
+\def\cleanup{\closein\xrefin \closeout\xrefout}
+%%
+%% TESTING the macros.
+%%
+%%
+\font\bigbold=cmbx10 scaled \magstep3
+\def\warbond{\setbox0=\vbox to60.8pt{\bigbold\null\vfil
+\hbox to.25\hsize{\hss BUY\hss}\vfil \hbox to.25\hsize{\hss
+WAR\hss}\vfil \hbox to.25\hsize{\hss
+BONDS!\hss}\vfil}\setbox0=\vbox{\null
+\vskip6pt\hbox{\hskip6pt\box0\hskip6pt}\vskip6pt}
+\setbox0=\vbox{\hrule height3pt\hbox{\vrule
+width3pt\box0\vrule width3pt}\hrule height3pt} \box0}
+