\nopagenumbers \input makor2 \advance\hsize by-3in \tolerance=8000 %% The file PRIMER.TEX: typesetting Hebrew-English language primers. %% ================================================================= %% %% The output of this file should be regarded as a work in progress %% rather than as a finished product. It turns out to be unexpectedly %% difficult to create TeX macros that handle this situation; that is, %% the situation of (1) numbering lines in some fashion (often %% desirable in language texts to make it easy to refer to the line), %% and (2) placing an unknown word and its definition in the margin, %% but placing this definition next to the appearance of the original %% word in the source file. The main reason for the difficulty lies %% in the fact that in the transformation between Hebrew and English, %% there are a few \catcode changes. Category codes are often stamped %% irrevocably on characters when TeX slurps up an input file, and so %% agonizing care must be taken to deal with this problem. One %% approach is to write problem phrases out to a file and to then %% re-read the file when the text is needed. This works because text %% read from a file can be assigned catcodes on the basis of the %% context at the time this temp file is read. Also, the current %% macros work only for a portion of text. Some additional work would %% be necessary to typeset several pages-worth of primer. %% %% Directions for compiling: One of the output files of the process is %% called primer.voc. When you have made all your revisions, copy %% primer.voc to a file called primer.v. The macros expect this file %% to be present. The skeleton of operations would look something %% like this: %% omega primer %% cp primer.voc primer.v %% omega primer %% odvips primer %% (cp is the Unix 'copy' command; your operating system may use %% something different.) %% %% Anyone interested in pursuing these issues further is invited to %% get in touch with me. %% %% ---Alan Hoenig %% ahoenig@suffolk.lib.ny.us %% %% 4 Oct 2002 %% SOme fonts... \hfontdef{QAL}{osheb2}{16pt} \hfontdef{HDEFAULTFONT}{osheb2}{12pt} \hfontdef{Qal}{osheb2}{8pt} \font\qalrm=pacr9t at 7pt \font\xxx=cmsy10 at 8pt \baselineskip=15pt %% Macros for formatting this primer page... \def\category#1{\ifcase\catcode`#1 escape\or bgroup\or egroup\or math\or align\or endline\or parameter\or superscript\or otherchar\or active\or comment\or invalid\fi} \def\HINDENT{\noindent\textdir TRT} \newbox\xxxbox \setbox\xxxbox=\hbox{\xxx\char14} \newdimen\dingwd \dingwd = \wd\xxxbox \def\DING#1{\raise#1\copy\xxxbox } %% POOR MAN'S BOLD (from the TeXbook) is useful in cases where a genuine %% bold-face font is not available, such as osheb2 \newbox\pmbbox \def\PMB#1{\setbox\pmbbox=\hbox{#1}% for larger fonts \kern-.015em\copy\pmbbox\kern-\wd\pmbbox \kern.03em\copy\pmbbox\kern-\wd\pmbbox \kern-.015em\raise.025em\box\pmbbox } %% Some macros in the .voc temporary file... \def\VF{\hsize=6.5pc \leftskip=.5pc \parindent=0pt \noindent} \let\BG=\bgroup\let\EG=\egroup \def\Q{\ \qalrm\clearocplists} \let\eg=\endgraf %% Reading the voc file... \newread\vin \newwrite\vout \immediate\openin\vin=\jobname.v \newif\ifvocabfile \vocabfiletrue \ifeof\vin \vocabfilefalse \immediate\closein\vin \fi %% Preparing the voc file... \immediate\openout\vout=\jobname.voc \def\VOCAB#1#2{\DING{3.3pt}\mark{#2}% use the English text as a mark \bgroup\let\[=0\let\]=0\catcode`\^=\LETTER \catcode`\_=\LETTER \let\hfont=0\let\qalrm=0\let\Q=0\let\X=0\let\edef=0% \let\csname=0\let\endcsname=0\let\Q=0% \immediate\write\vout{% \hbox\BG\[\hfont{Qal}#1 \]\EG\Q #2\ }\egroup} %% Output shenanigans... \newbox\partialpage \newdimen\savedvsize \savedvsize=\vsize \newtoks\savedoutput \savedoutput=\output \newdimen\savedprevdepth \savedprevdepth=\prevdepth \newcount\currline \newcount\currtextline \setbox4=\vbox\bgroup\noindent\[\hfont{QAL}ch:agiygath hau'aeroo.siyn sh^el chayoothauh\CENTERLASTLINE\]\egroup \setbox2=\vbox\bgroup\noindent\[\hfont{Qal}.svywn lyvrkh.t\CENTERLASTLINE\]\egroup \setbox0=\vbox{\noindent\PMB{\box4}\smallskip\box2\smallskip \hrule\smallskip}\dimen0=\ht0 \advance\dimen0 by\dp0 \currline=\dimen0 \divide\currline by\baselineskip \advance\currline by1 \box0 \output={\global\setbox\partialpage=\vbox{\unvbox255\unskip}}\vfill\break \setbox2=\hbox{\[\hfont{QAL}l\]} \topskip=\ht2 \vsize=\topskip \currtextline = 1 \newcount\scr \def\testlinedp{\advance\dimen0 by-\savelinedp \ifdim\dimen0>0pt \scr=\dimen0 \dimen0=1sp \divide\scr by \dimen0 \showthe\scr\fi} \newcount\everyfewlines \everyfewlines = 2 \def\printlinenumber{\scr=\currtextline \divide\scr by\everyfewlines \multiply\scr by\everyfewlines \ifnum\scr=\currtextline\llap{\qalrm\the\currtextline\hskip.5pc}\fi \global\advance\currtextline by 1} \newbox\vobox \newwrite\tst \def\iwrite{\immediate\write}\def\iopenout{\immediate\openout} \def\icloseout{\immediate\closeout} \def\iread{\immediate\read}\def\iopenin{\immediate\openin} \def\iclosein{\immediate\closein} \ifvocabfile \iopenin\vin=\jobname.v \else \message{You're missing \jobname.v! Help...} \fi \def\getvocab{\iread\vin to\temp % but catcodes are frozen, so... \iopenout\tst=\jobname.tst \bgroup \let\BG=0\let\[=0\let\]=0\let\hfont=0\let\EG=0\let\Q=0% \iwrite\tst{\temp}% \egroup \icloseout\tst \input \jobname.tst} \def\getvocabdef{\edef\One{\topmark}\edef\Two{\firstmark}% \edef\Three{\botmark}\ifx\One\Two % no word defs; do nothing \G\setbox\vobox=\vtop to\topskip\BG\baselineskip=7pt \else \G\setbox\vobox=\vtop to\topskip\BG\baselineskip=7pt \noindent\raggedright\getvocab \fi} \def\testforsecondvocab{\ifx\Two\Three % only one word on that line \else \hfill\break\getvocab\fi \endgraf\vss\EG\dp\vobox=0pt} \output={\ifnum\currtextline<15 % assumes 15 lines in our display \global\setbox\partialpage=\vbox{\unvbox\partialpage \getvocabdef\testforsecondvocab \line{\printlinenumber\box255 \rlap{\box\vobox}}}\else \shipout\vbox{\unvbox\partialpage \unvbox255}\fi } \noindent\['eth ch:agiygath \VOCAB{'rw.syn}{engagement}% hau'aeroo.siyn sh^el chayoothauh qauv'`oo bim'hiyrooth, 'ach:araey sh^ehats'`iyriym hOdiy`oo `al kaukh' pith'\/'Om lahOriym.\HPAR \newdimen\hparindent \hparindent = 1pc \def\MYHEBREW{\HEBREW\hskip\hparindent} \HINDENT \MYHEBREW ch:amiysh^auh-`au^saur yaumiym lif'naey hach:agiygauh, `:adayin lo' chaush^av 'iysh^ `al \VOCAB{vwshh}{shame}% haboosh^auh \VOCAB{`lwl}{liable, likely}% sh^e`au{l}ool .sabauh men'd'l l'hauviy\/' `al koolaum.\HPAR \HINDENT\MYHEBREW koolaum hauyoo `:a.sooqiym: `aur'khoo \VOCAB{rshymh}{list}r'sh^iymOth sh^el hau'Or'chiym, hama\/':akhauliym, hakaeliym sh^eyaesh^ l'haukhiyn, hash^'khaeniym sh^emookhauniym la`:azOr, hamauthaunOth sh^echayoothauh m'vaqesh^eth l'qabael.\HPAR \HINDENT\MYHEBREW belauh, 'imauhh sh^el chayoothauh, hibiy.tauh babayith \VOCAB{nvhl}{be frightened}w'niv'h:alauh. \HPAR \HINDENT\MYHEBREW\null\hskip-\dingwd\VOCAB{khthm}{stain}hak'thaumiym `al \VOCAB{vdy rfwd}{upholstery}badaey hauripood nir'\/'oo lauhh qOf'tsiym lau`ayin, hawiylOnOth k'vaur y'sh^auniym, `al n'yar haqiyr bach:adar hau'Okhel rO\/'iym 'eth ha.siymauniym sh^el haki.s''Oth. \HPAR \HINDENT\MYHEBREW w'khaukh' nO.s'fauh gam r'sh^iymauh sh^el ch:anooyOth l'vadaey ripood \VOCAB{v`l-mqtsw`}{professional}ool'va`:alaey-miq'tsO`a. \HPAR \HINDENT\MYHEBREW b'thOkh' kaul haura`ash^ niz'k'rauh belauh sh^ehiy^' `adayin lo' hech'liy.tauh 'aeyzO ^sim'lauh thaukhiyn l'`ats'mauhh lach:agiygauh. \HPAR\]\vfill\break \output={\shipout\vbox{\unvbox\partialpage \unvbox255}}\vfill\break \bye