[comp.text.tex] looking for \everyline facilities

sean@aipna.ed.ac.uk (Sean Matthews) (08/09/90)

I have a tricky problem; I consider myself to be fairly good with
TeX, but I have not the slightest idea of how I would to do this.

What I want is a general facility for placing code at the
beginning, or end, of every line in a paragraph, in the same way
as I can place code at the beginning of every paragraph.

Two reasons for doing this are

1: for draft text, so that I can have (say) every fifth line
   labeled with its number (as in play scripts), so that I can
   indicate corrections and the like.

2: for some styles of quotation (not in English) there are
   running quotation marks down the side of the paragraph, as in

       `Statistics show that only 7.43 of 10 people who read this
       `manual actually  type the story.tex  file as recommended,
       `but that those people  learn TeX best.   So Why don't you
       `join them.'

Any ideas or example code welcome, posted or mailed

Sean

duchier@cs.yale.edu (Denys Duchier) (08/10/90)

In article <2718@aipna.ed.ac.uk> sean@aipna.ed.ac.uk (Sean Matthews) writes:
 >   2: for some styles of quotation (not in English) there are
 >      running quotation marks down the side of the paragraph, as in
 >
 >	  `Statistics show that only 7.43 of 10 people who read this
 >	  `manual actually  type the story.tex  file as recommended,
 >	  `but that those people  learn TeX best.   So Why don't you
 >	  `join them.'

You can approximate this functionality as follows:

\parindent=0pt
\newbox\foo \setbox\foo\hbox{`}
\everypar{\copy\foo}
\def\baz{\discretionary{}{\copy\foo\kern-3.33pt}{}%
  \penalty10000 \hskip3.33pt plus1.66pt minus1.11pt}
\catcode`\^^M=13\let^^M=\baz\catcode`\ =13\let =\baz%
...<Your Text (with approriate precautions)>...

--Denys

tchow@ub.d.umn.edu (Timothy Chow) (08/10/90)

In article <2718@aipna.ed.ac.uk> sean@aipna.ed.ac.uk (Sean Matthews) writes:

>What I want is a general facility for placing code at the
>beginning, or end, of every line in a paragraph, in the same way
>as I can place code at the beginning of every paragraph.

It is probably impossible to meet this request, simply because of the
way TeX works.  Each situation has to be handled on its own.

>2: for some styles of quotation (not in English) there are
>   running quotation marks down the side of the paragraph, as in
>
>       `Statistics show that only 7.43 of 10 people who read this
>       `manual actually  type the story.tex  file as recommended,
>       `but that those people  learn TeX best.   So Why don't you
>       `join them.'

In article <DUCHIER.90Aug9143832@albania.cs.yale.edu>
duchier-denys@cs.yale.edu suggests the following solution:

>\parindent=0pt
>\newbox\foo \setbox\foo\hbox{`}
>\everypar{\copy\foo}
>\def\baz{\discretionary{}{\copy\foo\kern-3.33pt}{}%
>  \penalty10000 \hskip3.33pt plus1.66pt minus1.11pt}
>\catcode`\^^M=13\let^^M=\baz\catcode`\ =13\let =\baz%
>...<Your Text (with approriate precautions)>...

One problem with this solution is that it doesn't work right if some of
the words in the text have to be hyphenated.  One solution that avoids
this drawback is the following.


\newbox\quotebox
\newcount\numlines
\def\quote#1{
\setbox\quotebox=\vbox{\noindent\strut #1'\strut
                       $$\global\numlines=\prevgraf$$}
\setbox\quotebox=\vbox{\noindent\strut #1'\strut}
\hbox to\hsize{\hss
\vbox{\loop\ifnum\numlines>0\hbox{`}\advance\numlines by-1\repeat}%
\box\quotebox}}

\quote{Text of paragraph to be set in quotes should go here.}


Here I have used ``hanging punctuation'' so that the left quotes stick
out into the left margin.  If you don't like this simply \advance
\hsize by the width of \hbox{`} before creating \quotebox, and restore
the value of \hsize afterwards.

There are at least two drawbacks to my solution.  The first is that the
text of the quote is typeset twice, and this is inefficient.  (This
shouldn't be too hard to fix.)  The second is that if the text to be
quoted contains displayed equations or lines whose height or depth
exceed that of a \strut, then the left quotes will not be placed
properly.  This is harder to fix, but in practice the problem will
probably not arise too often.

>1: for draft text, so that I can have (say) every fifth line
>   labeled with its number (as in play scripts), so that I can
>   indicate corrections and the like.

A similar technique to the one above (but unfortunately with the same
drawbacks) will work here.  For simplicity I have numbered every line
here, but a suitable \if construction can be incorporated so that only
every fifth line will have a number next to it.


\newbox\numberbox
\newcount\numlines
\newcount\linenum \linenum=0
\def\numberpar#1{
\setbox\numberbox=\vbox{\noindent\strut #1'\strut
                       $$\global\numlines=\prevgraf$$}
\setbox\numberbox=\vbox{\noindent\strut #1'\strut}
\hbox to\hsize{\hss
\vbox{\loop\ifnum\numlines>0\global\advance\linenum
       by1\hbox to.5in{\hfill$\scriptstyle\the\linenum$\ \ }\advance
       \numlines by-1\repeat}\box\numberbox}}

\numberpar{Text of paragraph to be numbered here.}

\numberpar{You can have as many paragraphs as you like.}
-- 
Timothy Chow       tchow@ub.d.umn.edu