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. I can supply the number myself. I really don't want the numbers in the margin. Instead, I want the whole poem indented right, with the numbers left of the indent. I have tried using tabulate, but tabulate doesn't let me control the space between "lines," or really cells. Thanks Paul -- ************************ *Paul Tremblay * *phthenry@iglou.com * ************************
On Wed, Jul 13, 2005 at 04:59:05PM -0400, 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.
I can supply the number myself. I really don't want the numbers in the margin. Instead, I want the whole poem indented right, with the numbers left of the indent.
I have tried using tabulate, but tabulate doesn't let me control the space between "lines," or really cells.
Answering my own question. One posibility is: \startitemize \sym{1} This is the first line \nop This is the second line %% and so fourth \stopitmeize That allows you to control the space between the number and the actual line. In addition, ConTeXt should (?) do a good job making sure a single line doesn't become an orphan or widow. The only drawback is that you cannot use hanging indents for long lines: This is the forest premiva. The mummuring pines and the hemlocks \startitemize \sym{1} This is the forest premiva. The mummuring pines and \nop \hskip12pt the hemlocs %% and so fourth \stopitmeize Paul -- ************************ *Paul Tremblay * *phthenry@iglou.com * ************************
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
Mojca Miklavec wrote:
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}
\setuplinenumbering [start=2, step=2, distance=-1em] \startlinenumbering \startlines \fakewords{5}{8} \fakewords{5}{8} \fakewords{5}{8} \fakewords{5}{8} \fakewords{5}{8} \fakewords{5}{8} \fakewords{5}{8} \fakewords{5}{8} \stoplines \stoplinenumbering \setupparagraphnumbering[state=start,distance=-1em] \fakewords{5}{8} \par \fakewords{5}{8} \par \fakewords{5}{8} \par \fakewords{5}{8} \par \fakewords{5}{8} \par \fakewords{5}{8} \par \fakewords{5}{8} \par \fakewords{5}{8} \par -- ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
participants (3)
-
Hans Hagen
-
Mojca Miklavec
-
Paul Tremblay