[XeTeX] Bidipoem for dialogue poetry

Paul Isambert zappathustra at free.fr
Tue Oct 12 10:14:39 CEST 2010

  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):


\noexpand\expandafter\gdef\noexpand\csname#1 at linenumber\noexpand\endcsname{\the\count0}}% 

\newcount\LineNumber \newcount\templinenumber
\newdimen\linenumberskip \linenumberskip=5em
       \ifcsname\the\@linenumbercount @linenumber\endcsname
         \ifodd\csname\the\@linenumbercount @linenumber\endcsname\relax


> 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...


More information about the XeTeX mailing list