Le 12/10/2010 01:53, Gareth Hughes a écrit :
Paul Isambert wrote:
Ok, the following works on your file, but I don't know how robust it is:
%%%
\newcount\LineNumber \newcount\templinenumber
\newdimen\linenumberskip \linenumberskip=6em
\chardef\linestep=2
\def\poemlinenumber{%
\advance\LineNumber1
\templinenumber=\LineNumber
\computelinenumber
}
\def\computelinenumber{%
\ifnum\templinenumber>\linestep
\advance\templinenumber-\linestep
\expandafter\computelinenumber
\else
\ifnum\templinenumber=\linestep
\leavevmode\rlap{\kern\linenumberskip\the\LineNumber}%
\fi
\fi
}
\newenvironment{numberedpoem}
{\everypar{\everypar{\poemlinenumber}}%
\begin{traditionalpoem}}
{\end{traditionalpoem}}
%%%
You poem should now be enclosed in the "numberedpoem" environment.
You can change \linestep (on line 3) to any value; if it is set /n/,
every /n/th line number is printed.
You can change \linenumberskip (on line 2), which sets the distance of
the line number to the margin.
This is not thoroughly tested! Sorry for the syntax, it's not LaTeX-like
(but you made me -- although you didn't ask! -- download so many
packages so your file can work than I need a little revenge :) ).
Best,
Paul
Thank you, Paul, for showing me how to do this. It looks good and is
quite flexible. I have a couple more questions, if I may.
1) What is the best way of changing the positioning of the numbers so
that they are on the right of the poem, or that they are on the inner or
outer edge in documents that define these things? Is this best done by
altering \linenumberskip?
For this point I have the following solution (needs two runs):
\makeatletter
\d...@writelinenumber#1{%
\wri...@mainaux{%
\noexpand\expandafter\gdef\noexpand\csnam...@linenumber\noexpand\endcsname{\the\count0}}%
}
\newcou...@linenumbercount
\newcount\LineNumber \newcount\templinenumber
\newdimen\linenumberskip \linenumberskip=5em
\chardef\linestep=2
\long\def\poemlinenumber{%
\advance\LineNumber1
\templinenumber=\LineNumber
\computelinenumber
}
\def\computelinenumber{%
\ifnum\templinenumber>\linestep
\advance\templinenumber-\linestep
\expandafter\computelinenumber
\else
\ifnum\templinenumber=\linestep
\global\advan...@linenumbercount1
\expandaft...@writelinenumber\expandafter{\the\@linenumbercount}%
\ifcsname\t...@linenumbercount @linenumber\endcsname
\ifodd\csname\t...@linenumbercount @linenumber\endcsname\relax
\leavevmode\rlap{\kern\dimexpr\hsize-\linenumberskip\relax\the\LineNumber}%
\else
\leavevmode\rlap{\kern\linenumberskip\the\LineNumber}%
\fi
\else
\leavevmode\rlap{\kern\linenumberskip\the\LineNumber}%
\fi
\fi
\fi
}
\newenvironment{numberedpoem}
{\everypar{\everypar{\poemlinenumber}}%
\begin{traditionalpoem}}
{\end{traditionalpoem}}
\makeatother
2) As it stands, a blank line, indicating a stanza break, is counted as
a line of the poem. How can this code be altered so as not to count the
blank lines between stanzas?
For this one, though, I don't have any solution. I've investigated
bidipoem a bit, and it does its job with alignments, and doesn't treat a
blank line simply as \par. So our macro fires on blank lines...
Of course a hack of bidipoem is possible (but I won't do it, no time to
do so), but I think it'd be easier to ask the author to implement such a
feature (line numbers in poems aren't uncommon...). Or find another way
to input a blank line...
Best,
Paul
--------------------------------------------------
Subscriptions, Archive, and List information, etc.:
http://tug.org/mailman/listinfo/xetex