diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-13 00:10:57 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-13 00:10:57 +0000 |
commit | f65449ef5ddb6cf94a22c17d567b255ee088a0fe (patch) | |
tree | 16e9d593b5a666cfee62f6618e632da094da404f | |
parent | f88fe31bc3bee63a2c2878d32f4cf704c2e5f87c (diff) |
verse
git-svn-id: svn://tug.org/texlive/trunk@1438 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/tex/latex/verse/verse.sty | 304 |
1 files changed, 304 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/verse/verse.sty b/Master/texmf-dist/tex/latex/verse/verse.sty new file mode 100644 index 00000000000..97720bca8bf --- /dev/null +++ b/Master/texmf-dist/tex/latex/verse/verse.sty @@ -0,0 +1,304 @@ +%% +%% 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'. |