%% %% This is file `verse.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% verse.dtx (with options: `usc') %% %% ----------------------------------------------------------------- %% Author: Peter Wilson (herries dot press at earthlink dot net) %% Herries Press %% Copyright 2001--2005 Peter R. Wilson %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either %% version 1.3 of this license or (at your option) any %% later version. %% The latest version of the license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of %% LaTeX version 2003/06/01 or later. %% %% This work has the LPPL maintenance status "author-maintained". %% %% This work consists of the files listed in the README file. %% ----------------------------------------------------------------- %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{verse}[2005/08/22 v2.22 verse typesetting] \newcounter{vslineno} \newcounter{poemline} \newcounter{modulo@vs} \newcounter{verse@envctr}\setcounter{verse@envctr}{0} \newcommand*{\theHpoemline}{\arabic{verse@envctr}.\arabic{poemline}} \newcommand{\poemlines}[1]{% \ifnum#1>\z@ \setcounter{modulo@vs}{#1} \else \setcounter{modulo@vs}{0} \fi } \poemlines{0} \newcommand{\getmodulo@vs}{{\@tempcnta\c@poemline \ifnum\c@modulo@vs<\@ne % no line numbers \else \ifnum\c@modulo@vs<\tw@ % number every line \thepoemline \else \divide\@tempcnta\c@modulo@vs \multiply\@tempcnta\c@modulo@vs \ifnum\@tempcnta=\c@poemline\thepoemline\fi \fi \fi }} \newif\ifaltindent \altindentfalse \newif\ifpattern \patternfalse \newif\ifstarpattern \starpatternfalse \newlength{\versewidth} \newlength{\vgap} \setlength{\vgap}{1.5em} \newcommand{\vin}{\hspace*{\vgap}} \newlength{\vindent} \setlength{\vindent}{2\vgap} \newlength{\stanzaskip} \setlength{\stanzaskip}{0.75\baselineskip} \newlength{\vleftskip} \setlength{\vleftskip}{30pt} \newlength{\vrightskip} \setlength{\vrightskip}{10pt} \newcommand{\flagverse}[1]{\hskip-\vleftskip\llap{#1}\hskip\vleftskip\ignorespaces} \newcommand{\verselinebreak}[1][\z@]{\newline\hspace*{#1}% extra verseindent } \newcommand{\incr@vsline}{% \refstepcounter{poemline}% \stepcounter{vslineno}} \newcommand{\@vsifbang}[1]{\@ifnextchar !{\@firstoftwo{#1}}} \newcommand{\@vsifgt}[1]{\@ifnextchar >{\@firstoftwo{#1}}} \newcommand{\@vscentercr}{% \ifhmode \unskip\else \@nolnerr\fi \hfill\rlap{\kern\vrightskip\kern\rightmargin\getmodulo@vs}% \@vsifgt{\verselinebreak}{% \incr@vsline \par\@ifstar{\nobreak\@vsxcentercr}{% \@vsifbang{\@ifnextchar[ {\@vsicentercr}{}}{\@vsxcentercr}}}} \newcommand{\@vsxcentercr}{\addvspace{-\parskip}% \@ifnextchar[ {\@vsicentercr}{\start@vsline}} \def\@vsicentercr[#1]{\vskip #1\ignorespaces \start@vsline} \newcommand{\start@vsline}{% \ifaltindent\ifodd\c@vslineno\else\vin\fi\fi% \ifpattern\get@vsindent\fi% \ifstarpattern\getstar@vsindent\fi} \renewenvironment{verse}[1][\linewidth]{ \stepcounter{verse@envctr}% \setcounter{poemline}{0}\refstepcounter{poemline}% \setcounter{vslineno}{1}% \let\\=\@vscentercr \list{}{\itemsep \z@ \itemindent -\vindent% \listparindent\itemindent \parsep \stanzaskip \ifdim #1 < \linewidth \rightmargin \z@ \setlength{\leftmargin}{\linewidth}% \addtolength{\leftmargin}{-#1}% \addtolength{\leftmargin}{-0.5\leftmargin}% \else \rightmargin \leftmargin \fi \addtolength{\leftmargin}{\vindent}} \item[]}{\endlist} \newenvironment{altverse}% {\starpatternfalse\patternfalse\altindenttrue\setcounter{vslineno}{1}}% {\altindentfalse} \newcommand{\@nameedef}[1]{ \expandafter\protected@edef\csname #1\endcsname} \newif\ifbounderror \bounderrorfalse \newif\ifinteger \newcounter{chrsinstr} % CHARactersINSTRing \newcommand{\newarray}[3]{% \@nameedef{#1-low}{#2}% \@nameedef{#1-high}{#3}% \ifnum #3<#2 \PackageError{verse}{Limits for array #1 are in reverse order}{\@ehc}% \fi } \newcommand{\stringtoarray}[2]{% \def\@vsarrayname{#1}% \protected@edef\the@vsstring{#2}% \newarray{\@vsarrayname}{1}{1}% \@ifmtarg{#2}{% \c@chrsinstr \z@ \@namedef{\@vsarrayname-1}{} }{% \c@chrsinstr \@ne \expandafter\@vsstringtoarray \the@vsstring\@vsend } } \def\@vsstringtoarray #1#2\@vsend{% \@namedef{\@vsarrayname-\the\c@chrsinstr}{#1} \@nameedef{\@vsarrayname-high}{\the\c@chrsinstr} \@ifmtarg{#2}{% \def\@vsinext{}% }{% \advance\c@chrsinstr \@ne \def\@vsinext{% \@vsstringtoarray #2\@vsend% }% } \@vsinext } \newcommand{\setarrayelement}[3]{% \checkarrayindex{#1}{#2}% \@nameedef{#1-#2}{#3}% } \newcommand{\getarrayelement}[3]{% \checkarrayindex{#1}{#2}% \protected@edef#3{\@nameuse{#1-#2}}% } \newcommand{\checkarrayindex}[2]{% \bounderrorfalse \expandafter\ifx\csname #1-low\endcsname\relax% \ifpattern\else \PackageError{verse}{No array called #1}{\@ehc}% \fi \bounderrortrue \fi \ifnum #2<\@nameuse{#1-low}\relax% \ifpattern\else \PackageError{verse}{Index #2 outside limits for array #1}{\@ehc}% \fi \bounderrortrue \fi \ifnum #2>\@nameuse{#1-high}\relax% \ifpattern\else \PackageError{verse}{Index #2 outside limits for array #1}{\@ehc}% \fi \bounderrortrue \fi } \begingroup \catcode`\Q=3 \long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil} \long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4} \long\gdef\@ifnotmtarg#1{\@xifmtarg#1QQ\@firstofone\@gobble\@nil} \endgroup \newcommand{\arraytostring}[2]{% \def#2{}% \c@chrsinstr = \@nameuse{#1-low}% \@vsarraytostring{#1}{#2}% } \newcommand{\@vsarraytostring}[2]{% \ifnum\c@chrsinstr>\@nameuse{#1-high}\else \protected@edef#2{#2\@nameuse{#1-\thechrsinstr}}% \advance\c@chrsinstr\@ne% \@vsarraytostring{#1}{#2}% \fi% } \newcommand{\checkifinteger}[1]{% \protected@edef\@vsa{#1}% \ifcat _\ifnum9<1\gobm{#1} _\else A\fi \integertrue% \else \integerfalse% \fi% } \newcommand{\gobm}[1]{#1} \newcommand{\indentpattern}[1]{% \stringtoarray{Array@vs}{#1}} \newcommand{\get@vsindent}{% \getarrayelement{Array@vs}{\number\value{vslineno}}{\@vspat}% \ifbounderror \arraytostring{Array@vs}{\@vsp@t}% \PackageWarning{verse}{% Index `\thevslineno' for pattern `\@vsp@t' is out of bounds}% \def\@vspat{0}% \else \checkifinteger{\@vspat}% \ifinteger\else \arraytostring{Array@vs}{\@vsp@t}% \PackageWarning{verse}{% `\@vspat' at index `\thevslineno' in pattern `\@vsp@t' is not a digit}% \def\@vspat{0}% \fi \fi \ifcase\@vspat\else\hspace*{\@vspat\vgap}\fi} \newcommand{\getstar@vsindent}{% \expandafter\ifx\csname Array@vs-high\endcsname\relax \PackageError{verse}{A pattern has not been specified}{\@ehc} \else \ifnum\c@vslineno>\@nameuse{Array@vs-high}% \setcounter{vslineno}{1}% \fi \get@vsindent \fi} \newenvironment{patverse}% {\starpatternfalse\patterntrue\altindentfalse\setcounter{vslineno}{1}}% {\patternfalse} \newenvironment{patverse*}% {\starpatterntrue\patternfalse\altindentfalse\setcounter{vslineno}{1}}% {\starpatternfalse} \newcommand{\poemtitle}{\par% \secdef\@vsptitle\@vssptitle} \newcommand{\poemtoc}{section} \def\@vsptitle[#1]#2{% \@nameuse{phantomsection}% \addcontentsline{toc}{\poemtoc}{#1} \poemtitlemark{#1}% \@vstypeptitle{#2} \@afterheading} \def\@vssptitle#1{% \@vstypeptitle{#1} \@afterheading} \newcommand{\@vstypeptitle}[1]{% \vspace{\beforepoemtitleskip} {\poemtitlefont #1\par} \vspace{\afterpoemtitleskip} } \newcommand{\poemtitlefont}{\normalfont\large\bfseries\centering} \newcommand{\poemtitlemark}[1]{} \newlength{\beforepoemtitleskip} \setlength{\beforepoemtitleskip}{3.5ex \@plus 1ex \@minus .2ex} \newlength{\afterpoemtitleskip} \setlength{\afterpoemtitleskip}{2.3ex \@plus.2ex} \endinput %% %% End of file `verse.sty'.