From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- info/digests/tex88/hoenig/drop.tex | 22 +++ info/digests/tex88/hoenig/h0.tex | 290 +++++++++++++++++++++++++++++++++++++ 2 files changed, 312 insertions(+) create mode 100644 info/digests/tex88/hoenig/drop.tex create mode 100644 info/digests/tex88/hoenig/h0.tex (limited to 'info/digests/tex88/hoenig') 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} + -- cgit v1.2.3