ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Mojca Miklavec <mojca.miklavec.lists@gmail.com>
Subject: Re: how to number poetry?
Date: Mon, 18 Jul 2005 14:18:20 +0200	[thread overview]
Message-ID: <6faad9f0050718051840eba60b@mail.gmail.com> (raw)
In-Reply-To: <20050713205905.GA23919@localhost.localdomain>

Paul Tremblay wrote:
> What is the best way to number lines of poetry?
> 
> 1  This is the first line
>    This is the second line
>    ...
> 
> 5  this is the fifth
>    ...
> 
> 10 this is the tenth.

This is a solution, written in plain TeX. I hope it is commented well
enough so that you can change it if necessary. You have to surrond the
code with \start...\stop..., but I hope you can do it, otherwise ask
again on the list.

You can change the current line number any time by simply typing
\lineno=999. You probably have to set \lineno to 0 every time you
start typesetting a poem and restore \everypar={} after you are done
with the current poem (in the definition of \startnumberedpoem ...
\stopnumberedpoem of course, not manually).

The code attaches some stuff before every paragraph and there's a
macro that checks if the current paragraph number is divisible by
five. It is a macro with square complexity, so if you want to typeset
Iliad or Odyssey :), please let me know so that I'll change it to be
more efficient :)

The code has a small drawback: you have to write \\ for blank lines.
After I wrote the maco I noticed some comments about redefining the
\par command in Appendix D of the TeXBOOK, typesetting verbatim. If I
manage to fix that too, I'll post it here.

%%%%%%%%%%%%%%%%%%

% new counter for counting lines
% it is set to 0 at the beginning,
% but you can redefine it any time by saying \lineno=7 or similar
\newcount\lineno
% if 0, nothing happens, if 1, no line number will be printed
% and the line number won't advance for one
\newcount\isemptyline


%  templineno = lineno + 5
%  do {
%     templineno = templineno - 5
%  } while (templineno > 5);
%
%  if (templineno == 0) {
%     print lineno
%  }

% only prints \the\lineno if it is divisible by 5
\def\printonlyfives{%
	% define a new counter 'templineno'
	\newcount\templineno
	% set the temporary counter to the line counter
	\templineno=\lineno
	% subtract 5 from the temporary counter as long as the counter is positive
	\advance\templineno by5
	\loop\advance\templineno by-5\ifnum\templineno>5\repeat
	% if the line number is divisible by 5, the temporary counter is 0
	% and the line number will be printed out
	\ifnum\templineno=0{\the\lineno}\fi}

% add this before every paragraph:
% - if this is not an empty line
%    - add one to the line number
%    - print the line number (if divisible by five)
% - hfill (for right alignment)
\everypar={\ifnum\isemptyline=0 \advance\lineno by1 \printonlyfives\fi\hfill}

% (if '\\' is already defined for something else,
% you can use some other command name here)
% this will switch off line numbering, make a new line
% and switch line numbering on again
\def\\{\isemptyline=1\crlf\isemptyline=0}

\obeylines
\dorecurse{30}{the text goes here\par}

%%%%%%%%%%%%%%%%%%

Mojca

  parent reply	other threads:[~2005-07-18 12:18 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-13 20:59 Paul Tremblay
2005-07-14 17:14 ` Paul Tremblay
2005-07-18 12:18 ` Mojca Miklavec [this message]
2005-07-18 13:44   ` Hans Hagen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6faad9f0050718051840eba60b@mail.gmail.com \
    --to=mojca.miklavec.lists@gmail.com \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).