% \iffalse %<*internal> \begingroup \input docstrip.tex \keepsilent \usedir{tex/latex/poetrytex} \preamble Copyright 2012 Samuel Whited This file may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license or (at your option) any later version. The latest version of this license is in: http://www.latex-project.org/lppl.txt and version 1.3c or later is part of all distributions of LaTeX version 2008/05/04 or later. \endpreamble \postamble ___________ Maintainer: Sam Whited Website: https://samwhited.com Contact: sam@samwhited.com Public key: 0xEC2C9934 This work consists of this file poetrytex.dtx and the derived files poetrytex.sty and poetrytex.pdf \endpostamble \askforoverwritefalse \generate{\file{poetrytex.sty}{\from{poetrytex.dtx}{poetrytex}}} \generate{\file{poetrytex-style.sty}{\from{poetrytex.dtx}{doc-style}}} \obeyspaces \Msg{****************************************************} \Msg{* *} \Msg{* To finish the installation you have to move the *} \Msg{* following file into a directory searched by TeX: *} \Msg{* *} \Msg{* poetrytex.sty *} \Msg{* *} \Msg{****************************************************} \endgroup % % %<*driver> \ProvidesFile{poetrytex.dtx} % % %<*poetrytex> \NeedsTeXFormat{LaTeX2e}[1994/06/01] \ProvidesPackage{poetrytex}[2013/02/13] %% % %<*driver> \documentclass[a4paper]{ltxdoc} \usepackage{poetrytex-style} \usepackage{poetrytex} \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{\jobname.dtx} \end{document} % % % \fi % % \GetFileInfo{poetrytex.dtx} % \makeatletter % \errorcontextlines=999 % % \title{The \textsf{poetrytex} package} % \author{ % \name{Sam Whited}\\ % \texttt{sam@samwhited.com} % } % \date{\today\\\gitdescribe} % % \maketitle % \maketoc % % \section{Introduction} % % The \pkg{poetrytex} package is designed to aid in the formatting and % typesetting of anthologies of poetry. % % \subsection{History} % % The package started out as a collection of macros for automating simple tasks % that I often had to perform while working on a collection of poetry and prose. % After a time, I decided to turn it into an STY file which would be geared % more towards the idea of an anthology or a collection of works and less about % typesetting the verse itself (for which there were already several good % packages on CTAN). While the file was small this worked well---Learning to % use the package was easily accomplished by reading the annotated source code % (generated via a modified version of Jeremy Ashkenas' literate programming % tool `docco'). However, as the source and scope of the project grew I decided % to move away from docco and start working on a proper package that would use % more traditional \TeX-style docs. % % \subsection{License / about the source} % % This project may be distributed and/or modified under the conditions of the % \LaTeX\ Project Public License, either version 1.3c of this license or (at % your opinion) any later version. The latest version of this license is in: % % \url{http://www.latex-project.org/lppl.txt} % % and version 1.3c or later is part of all distributions of \LaTeX\ version % 2008/05/04 or later. % % Contributions are welcome, and the latest development version of the project % can always be found at \url{https://github.com/samwhited/poetrytex}. % % \subsection{Acknowledgements} % % A special thanks is in order for Brittany Taylor. Though she probably has no % idea what \TeX\ is or that this project even exists it is due mostly to her % influence that it ever got off the ground. % % \StopEventually{} % \changes{1.0}{2012/07/18}{Converted package to dtx} % % \section{Package building and loading} % % \begin{macrocode} %<*poetrytex> % \end{macrocode} % % \paragraph{Building} % % Before building \pkg{poetrytex} you should verify that the following % dependencies are installed: % \changes{1.0}{2012/07/18}{Removed \pkg{fontspec} / \pkg{xelatex} dependency} % \changes{1.2}{2012/10/03}{Removed \pkg{parskip} dependency} % \changes{1.2}{2012/10/03}{Removed default \pkg{hyperref} options} % \changes{1.3}{2012/10/03}{Load \pkg{hyperref} at end of package} % \begin{macrocode} \RequirePackage{expl3} \AtEndOfPackage{\RequirePackage{hyperref}} % \end{macrocode} % Once you have all the required packages, building \pkg{poetrytex} from source % can be accomplished in multiple ways. If the Makefile is present running % \code{make help} will tell you everything you need to know. To manually % extract the files and generate the documentation simply run \code{pdflatex} % or \XeLaTeX\ against \fname{poetrytex.dtx}: % % \begin{Verbatim} % pdflatex poetrytex.dtx % \end{Verbatim} % % You can also use the \code{-{}-shell-escape} option to generate documentation % which includes the current git commit short-hash in the version number: % % \begin{Verbatim} % pdflatex --shell-escape poetrytex.dtx % \end{Verbatim} % % It should be noted that this option is extremely unsafe and you should only % use it if you understand the risks. % % \paragraph{Loading} % % Using \pkg{poetrytex} in your project works exactly as you'd expect: % % \begin{Verbatim} % \usepackage{poetrytex} % \end{Verbatim} % % \hypertarget{POETRYTEX:OPTIONS}{} % \changes{1.2}{2012/10/03}{Added various package options} % \begin{macro}{verse} % \begin{macro}{numbertop} % \begin{macro}{resetnumongroup} % \begin{macro}{numberpoems} % \begin{macro}{usedefaulttitles} % \changes{1.4}{2012/02/13}{Add package option to use default titles} % \begin{macro}{clearpageafterpoem} % The package can also be loaded with any of the following options: % \begin{macrocode} \DeclareOption{verse}{\usepackage{verse}} \DeclareOption{numbertop}{\numbertop} \DeclareOption{resetnumongroup}{\resetnumongroup} \DeclareOption{numberpoems}{\numberpoems} \DeclareOption{usedefaulttitles}{\ptusedefaulttitles} \DeclareOption{clearpageafterpoem}{\clearpageafterpoem} \DeclareOption{clearpageafterpoems}{\clearpageafterpoem} \DeclareOption*{% \PassOptionsToPackage{\CurrentOption}{hyperref}% } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % For instance: % % \begin{Verbatim} % \usepackage[numberpoems,clearpageafterpoem]{poetrytex} % \end{Verbatim} % % % \part{Document setup and structure} % % The \pkg{poetrytex} package is fairly simple as far as \TeX\ packages go, so % it's worth taking a look at how it works internally. % % \section{Environment setup and defaults} % % First we setup our environment, define some useful properties, and choose some % default values for those properties. % % \subsection{Title page} % % We'll start with the title page: % % \begin{macro}{\pttitle} % \begin{macro}{\ptsubtitle} % \begin{macro}{\ptauthor} % \begin{macro}{\ptdate} % These properties will affect the appearance of \code{\textbackslash% % maketitle}: % \begin{macrocode} \newcommand*{\pttitle}{Title} \newcommand*{\ptsubtitle}{Subtitle} \newcommand*{\ptauthor}{Author} \newcommand*{\ptdate}{\today} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % Since we define them as commands, you can change the appearance of your % title page by redefining them in your preamble like so: % % \begin{Verbatim} % \renewcommand*{\pttitle}{My Title} % \renewcommand*{\ptauthor}{The Author} % \end{Verbatim} % % We then use these properties to set the document title, author, and date: % \begin{macrocode} \title{% \pttitle% \ifx\ptsubtitle\@ptundefined\relax\else\\\ptsubtitle\fi% } \author{\ptauthor} \date{\ptdate} % \end{macrocode} % Since \code{\textbackslash maketitle} clears the internal title, author, and % date we use the \code{\textbackslash pt} equivalents so that we can refer to % them again later, or redefine them throughout the document---in anthologies % with works by multiple authors, for instance. % % \subsection{Poem config} % % \begin{macro}{\@ptpoemlabeltext} % Each time you create a poem in your document we automatically assign it a % special label that can be used to link to it later. This label is prefixed % with \code{\textbackslash @ptpoemlabeltext} to prevent it from conflicting % with user defined labels, or labels defined in other packages. % \begin{macrocode} \newcommand*{\@ptpoemlabeltext}{poetrytexpoem:} % \end{macrocode} % \end{macro} % % Chances are you'll never need to touch this. % % \begin{macro}{poemnum} % \begin{macro}{absolutepoemnum} % \begin{macro}{untitledpoemnum} % \changes{1.4}{2013/02/12}{Create a new counter to keep track of untitled% % poems} % \begin{macro}{absoluteuntitledpoemnum} % \changes{1.4}{2013/02/12}{Create a new counter to keep track of untitled% % poems} % The \code{poemnum} and \code{absolutepoemnum} counters will be incremented % every time we include a poem in our document and can be used later to number % the poems. The \code{absolutepoemnum} counter will never be reset by \pkg{% % poetrytex} while \code{poemnum} may sometimes be reset to 0 (at the beginning % of a new \code{poemgroup} for instance). The \code{untitledpoemnum} and % \code{absoluteuntitledpoemnum} are similar except that they are only % incremented when the poem does not have a title. % \begin{macrocode} \newcounter{poemnum} \newcounter{absolutepoemnum} \newcounter{untitledpoemnum} \newcounter{absoluteuntitledpoemnum} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\poemvspace} % \changes{1.4}{2013/02/11}{Allow whitespace before every poem} % Sometimes you might want to insert a certain amount of vertical space before % every poem. For instance, maybe you have several poems without titles and you % need a visual cue to let your readers know that a new poem is starting. This % can be acomplished by setting \code{\textbackslash poemvspace}: % % \begin{macrocode} \newlength{\poemvspace} \setlength{\poemvspace}{0em} % \end{macrocode} % \end{macro} % % \begin{macro}{\pttitleleftspace} % \changes{1.4}{2013/02/14}{Add macro to define poem title left hspace} % \begin{macro}{\pttitlerightspace} % \changes{1.4}{2013/02/14}{Add macro to define poem title right hspace} % \begin{macro}{\ptsubtitleleftspace} % \changes{1.4}{2013/02/14}{Add macro to define poem subtitle left hspace} % \begin{macro}{\ptsubtitlerightspace} % \changes{1.4}{2013/02/14}{Add macro to define poem subtitle right hspace} % To indent the poems title or subtitle to the left or the right, set the length % of \code{\textbackslash pttitleleftspace} and \code{\textbackslash% % pttitlerightspace}. % % \begin{macrocode} \newlength{\pttitleleftspace} \setlength{\pttitleleftspace}{0em} \newlength{\pttitlerightspace} \setlength{\pttitlerightspace}{0em} \newlength{\ptsubtitleleftspace} \setlength{\ptsubtitleleftspace}{0em} \newlength{\ptsubtitlerightspace} \setlength{\ptsubtitlerightspace}{0em} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\ptusedefaulttitles} % \begin{macro}{\ptdefaulttitle} % \changes{1.4}{2013/02/12}{Add a default poem title} % The default title for poems that don't include one. If \code{\textbackslash % ptusedefaulttitles} is called the default title will be displayed above the % poem itself as well as in the table of contents. Otherwise the title is left % blank. % % \begin{macrocode} \newcommand*{\ptusedefaulttitles}{\newcommand*{\@ptusedefaulttitles}{}} \newcommand*{\ptdefaulttitle}{% Untitled No. \arabic{absoluteuntitledpoemnum}% } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\ptdefaultenv} % \changes{1.2}{2012/09/20}{Added an option to change the default environment} % \begin{macro}{\pttitleenv} % \changes{1.4}{2013/02/13}{Allow changing of the poem title environment} % These macros contain the names of the default environments in which we should % wrap poems and poem titles. % \begin{macrocode} \newcommand*{\ptdefaultenv}{verse} \newcommand*{\pttitleenv}{center} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\ptannotationenv} % \changes{1.3}{2012/10/30}{Added an option to change the default annotation % environment} % This contains the name of the default environment in which we should wrap % annotations. % \begin{macrocode} \newcommand*{\ptannotationenv}{flushleft} % \end{macrocode} % \end{macro} % % \subsection{Dedication} % % After your title page you might want to add a dedication page. % % \begin{macro}{\ptdedication} % \begin{macro}{\makededication} % \changes{1.1}{2012/07/21}{Added optional `environment' argument} % As with the \code{\textbackslash pttitle} and author commands you can simply % redefine \code{\textbackslash ptdedication} to change the dedication text. % % To create a dedication page, the \code{\textbackslash makededication} command % can be called. By default, this command aligns everything to the right, % however, by adding an optional argument you can specify any environment to % wrap the dedication in. % \begin{macrocode} \newcommand*{\ptdedication}{Renew \textsf{\textbackslash ptdedication}} \newcommand*{\makededication}[1][flushright]{% \thispagestyle{empty} \vspace*{\fill} \begin{#1} \emph{\ptdedication} \end{#1} \vspace*{\fill} } % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Tables and links} % % Next we setup the table of contents and list of poems: % % \begin{macro}{\toptitle} % \begin{macro}{\topentrytype} % The value of \code{\textbackslash toptitle} will be rendered atop the Table of % Poems, and \code{\textbackslash topentrytype} will set the default entry type % for poems in the TOP. % \begin{macrocode} \newcommand*{\toptitle}{List of Poems} \newcommand*{\topentrytype}{subsection} % \end{macrocode} % \end{macro} % \end{macro} % % We then set the \code{secnumdepth} and \code{tocdepth} counters to disable % chapter, section, and subsection numbering, and to limit the maximum depth of % entries in the TOC. % % \begin{macrocode} \setcounter{secnumdepth}{-1} \setcounter{tocdepth}{2} \renewcommand*{\listtablename}{\toptitle} % \end{macrocode} % % \begin{macro}{\beforetoc} % \changes{1.4}{2012/02/18}{Add hook before table of contents} % \begin{macro}{\aftertoc} % \changes{1.4}{2012/02/18}{Add hook after table of contents} % \begin{macro}{\beforetop} % \changes{1.4}{2012/02/18}{Add hook before table of poems} % \begin{macro}{\aftertop} % \changes{1.4}{2012/02/18}{Add hook after table of poems} % Several hooks are provided which allow you to insert content before or after % the tables: % \begin{macrocode} \newcommand{\beforetoc}{} \newcommand{\aftertoc}{} \newcommand{\beforetop}{} \newcommand{\aftertop}{} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\maketoc} % \begin{macro}{\maketop} % \begin{macro}{\maketop*} % Once you've configured the TOC and TOP you probably want to insert them into % your document somewhere. While you could just use the \LaTeX\ commands \code{% % \textbackslash tableofcontents} and \code{\textbackslash listoftables}, we % provide alternatives that add a bit of formatting and clear the page. By % default the TOP creates a listing in the TOC---Using the star modifier % prevents this. An example table of poems can be found at the end of this % document. % \begin{macrocode} \newcommand*{\maketoc}{% \beforetoc \tableofcontents \pagestyle{plain} \aftertoc \clearpage \thispagestyle{empty} } \newcommand*{\maketop}{\@ifstar{\@ptmaketopStar}{\@ptmaketopNoStar}} \newcommand*{\@ptmaketopStar}{% \cleardoublepage \beforetop \listoftables \pagestyle{plain} \aftertop \clearpage } \newcommand*{\@ptmaketopNoStar}{% \cleardoublepage \beforetop \phantomsection \addcontentsline{toc}{section}{\toptitle} \listoftables \pagestyle{plain} \aftertop \clearpage } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\numbertop} % Placing this command in your document preamble will cause the table of poems % to be numbered. % \begin{macrocode} \newcommand*{\numbertop}{\newcommand*{\@ptnumbertop}{}} % \end{macrocode} % \end{macro} % % \part{Poems and annotations} % % Now that we've got all the boilerplate, configuration, titles, tables, and % properties out of the way, it's time to move on to the core functionality of % \pkg{poetrytex}: displaying and organizing poems! % % \section{The \code{poem} environment} % % \begin{environment}{poem} % \changes{1.2}{2012/09/20}{Use \code{hypertarget} instead of \code{label}} % Inserting a poem or other writing into your anthology is accomplished by % wrapping it in the \code{poem} environment. This environment takes in two % arguments, the title and subtitle (or author, date, etc.) of the poem. % \begin{macrocode} \newenvironment{poem}[3][\ptdefaultenv]{% % \end{macrocode} % % \begin{macro}{\@ptwrapenvironment} % By default \code{poem} re-wraps your text in the \code{verse} environment. % However, this can be changed by passing in an optional argument with the name % of another environment to wrap it in (eg. \code{center}) or, for all poems, by % redefining \code{ptdefaultenv}. % \begin{macrocode} \newcommand*{\@ptwrapenvironment}{#1} % \end{macrocode} % \end{macro} % % For example, a poem wrapped in the \code{center} environment might look like % this: % % \begin{Example} % \begin{Verbatim} % \begin{poem}[center] % {The Sea Bell}{J.R.R. Tolkien} % I walked by the sea, % and there came to me,\\ % as a star-beam on the wet sand,\\ % a white shell like a sea-bell;\\ % trembling it lay % in my wet hand.\\ % In my fingers shaken % I heard waken\\ % a ding within, by a harbour bar\\ % a buoy swinging, a call ringing\\ % over endless seas, % faint now and far\ldots % \end{poem} % \end{Verbatim} % \columnbreak % \begin{poem}[center] % {The Sea Bell} % {J.R.R. Tolkien} % I walked by the sea, % and there came to me,\\ % as a star-beam on the wet sand,\\ % a white shell like a sea-bell;\\ % trembling it lay in my wet hand.\\ % In my fingers shaken I heard waken\\ % a ding within, by a harbour bar\\ % a buoy swinging, a call ringing\\ % over endless seas, % faint now and far\ldots % \end{poem} % \end{Example} % % Now we render the page header, title, and the actual poem: % \begin{macrocode} \poetryheadings \addtocounter{poemnum}{1} \addtocounter{absolutepoemnum}{1} \ifx&% \addtocounter{untitledpoemnum}{1} \addtocounter{absoluteuntitledpoemnum}{1} \fi \vspace*{\poemvspace} \begin{\pttitleenv} \phantomsection% \addcontentsline{lot}{\topentrytype}{% \ifx\@ptnumbertop\@ptundefined% \relax% \else% \toppoemnum% \fi% \ifx&% \ptdefaulttitle% \else% #2% \fi% }% \hypertarget{\@ptpoemlabeltext\arabic{absolutepoemnum}}{} {\poemtitleformat% \ifx\@ptnumberpoems\@ptundefined \relax \else \titlepoemnum \fi% \ifx&% \ifx\@ptusedefaulttitles\@ptundefined% \relax% \else% \hspace*{\pttitleleftspace}\ptdefaulttitle% \hspace*{\pttitlerightspace}\\% \fi% \else \hspace*{\pttitleleftspace}#2\hspace*{\pttitlerightspace}\\% \fi% }% \hspace*{\ptsubtitleleftspace}#3\hspace*{\ptsubtitlerightspace} \end{\pttitleenv} \begin{\@ptwrapenvironment} \begingroup\setlength{\parskip}{\stanzaparskip}% }{% \endgroup \end{\@ptwrapenvironment} \ifx\@ptclearpageafterpoem\@ptundefined \relax \else \clearpage \fi } % \end{macrocode} % \end{environment} % % \section{Formatting} % % The \code{poem} environment provides some reasonable defaults for formatting % your work but chances are you want a little more control. % % \subsection{Headings} % % \begin{macro}{\poetryheadings} % Every time a new \code{poem} or \code{annotation} environment is created we % automatically call \code{\textbackslash poetryheadings}. By redefining this % you can change how your headings look, use packages like \pkg{fancyhdr}, or % remove headers from poem pages altogether. % \begin{macrocode} \newcommand*{\poetryheadings}[0]{% \pagestyle{myheadings} \markboth{\ |\ \textsc{\pttitle}\hfill } {\hfill\textsc{\ptgroup}\ |\ } } % \end{macrocode} % \end{macro} % % \subsection{Numbering} % % \begin{macro}{\resetnumongroup} % \begin{macro}{\numberpoems} % These commands determine if the \code{poemnum} counter should be reset when % the poem group changes and if the poems should display their number above the % title. Generally these should be called from the preamble but they can be % defined at any point in your document to change how numbering works, or to % turn on numbering from that point forward. % \begin{macrocode} \newcommand*{\resetnumongroup}{\newcommand*{\@ptresetnumongroup}{}} \newcommand*{\numberpoems}{\newcommand*{\@ptnumberpoems}{}} % \end{macrocode} % \end{macro} % \end{macro} % Using \code{\textbackslash numberpoems} results in: % % \begin{Example} % \begin{Verbatim} % \numberpoems % \numbertop % % \begin{poem}{The Highwayman} % {Alfred Noyes} % The wind was a torrent of % darkness among the gusty trees,\\ % The moon was a ghostly galleon % tossed upon cloudy seas,\\ % The road was a ribbon of % moonlight over the purple moor% % \ldots % \end{poem} % \end{Verbatim} % \columnbreak % \numberpoems % \numbertop % % \begin{poem}{The Highwayman}{Alfred Noyes} % The wind was a torrent of % darkness among the gusty trees,\\ % The moon was a ghostly galleon % tossed upon cloudy seas,\\ % The road was a ribbon of % moonlight over the purple moor% % \ldots % \end{poem} % \end{Example} % % \begin{macro}{\titlepoemnum} % \changes{1.4}{2012/02/18}{Add hook for poem number formatting} % \begin{macro}{\toppoemnum} % \changes{1.4}{2012/02/18}{Add hook for Table of Poems poem number formatting} % These commands are used to insert the poem number into the poem title and the % table of poems respectively. By redefining them you can customize how the % numbering looks. % \begin{macrocode} \newcommand*{\titlepoemnum}{\arabic{poemnum}\\} \newcommand*{\toppoemnum}{\arabic{poemnum}.\ } % \end{macrocode} % \end{macro} % \end{macro} % % If we want to use uppercase roman numerals on the poems, and lowercase roman % numerals in the \code{\hyperlink{POETRYTEX:TOP}{Table of Poems}}, we could % redefine them like so: % % \begin{Example} % \begin{Verbatim} % \numberpoems % \numbertop % \renewcommand*{\titlepoemnum}{% % \unskip\Roman{poemnum}\\} % \renewcommand*{\toppoemnum}{ % \unskip\roman{poemnum}.\ } % % \begin{poem}% % {The Lady of Shalott}% % {Alfred Tennyson (1842)} % On either side the river lie\\ % Long fields of barley and % of rye,\\ % That clothe the wold and meet % the sky;\\ % And through the field the road % runs by\\ % To many-towered Camelot;\\ % And up and down the people go,\\ % Gazing where the lilies blow\\ % Round an island there below,\\ % The island of Shalott--- % \end{poem} % \end{Verbatim} % \columnbreak % \numberpoems % \numbertop % \renewcommand*{\titlepoemnum}{% % \unskip\Roman{poemnum}\\} % \renewcommand*{\toppoemnum}{ % \unskip\roman{poemnum}.\ } % % \begin{poem}% % {The Lady of Shalott}% % {Alfred Tennyson (1842)} % On either side the river lie\\ % Long fields of barley and % of rye,\\ % That clothe the wold and meet % the sky;\\ % And through the field the road % runs by\\ % To many-towered Camelot;\\ % And up and down the people go,\\ % Gazing where the lilies blow\\ % Round an island there below,\\ % The island of Shalott--- % \end{poem} % \end{Example} % % \subsection{Spacing and indentation} % % \begin{macro}{\stanzaparskip} % This length is used to change the \code{parskip} within a poem environment. % \begin{macrocode} \newlength{\stanzaparskip} \setlength{\stanzaparskip}{0.7em} % \end{macrocode} % \end{macro} % % \begin{macro}{\clearpageafterpoem} % \code{clearpageafterpoem} causes the page to be cleared after every poem % environment. % \begin{macrocode} \newcommand*{\clearpageafterpoem}{\newcommand*{\@ptclearpageafterpoem}{}} % \end{macrocode} % \end{macro} % % \begin{macro}{\ptgap} % \begin{macro}{\ptind} % \begin{macro}{\ptind*} % The \code{\textbackslash ptgap} length and \code{\textbackslash ptind} % command are two of those places where \pkg{poetrytex} strays a bit into the % realm of poetry typesetting. They overlap with the \pkg{verse} package's % \code{\textbackslash vgap} and \code{\textbackslash vin} commands and insert % indentation at at the beginning of a line. This is useful for typesetting % poems consistently when the \pkg{verse} package is not loaded. Redefine % \code{\textbackslash ptgap} to change the length that \code{\textbackslash% % ptind} indents by. The starred version of \code{ptind} uses\code{% % \textbackslash hspace*}. % \begin{macrocode} \newlength{\ptgap} \setlength{\ptgap}{2em} \newcommand*{\ptind}{% \@ifstar{% \@ptindStar }{% \@ptindNoStar } } \newcommand*{\@ptindStar}{\hspace*{\ptgap}} \newcommand*{\@ptindNoStar}{\hspace{\ptgap}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % Using it works something like this: % % \begin{Example} % \begin{Verbatim} % \setlength{\ptgap}{2em} % \begin{poem}[flushleft]{PoE\TeX} % {An {\tipaencoding % /Ig"zA:mp@l/} poem} % There once was a poem called% % PoE\TeX\\* % That's name sounded somewhat% % {\tipaencoding /p@"TEtEk/}.\\* % \ptind It was really quite% % sad,\\* % \ptind to see pronunciation% % so bad,\\* % And to read such a terrible% % {\tipaencoding /"lIme(@)rEk/}! % \end{poem} % \end{Verbatim} % \columnbreak % \setlength{\ptgap}{2em} % \begin{poem}[flushleft]{PoE\TeX} % {An {\tipaencoding % /Ig"zA:mp@l/} poem} % There once was a poem called% % PoE\TeX\\* % That's name sounded somewhat% % {\tipaencoding /p@"TEtEk/}.\\* % \ptind It was really quite% % sad,\\* % \ptind to see pronunciation% % so bad,\\* % And to read such a terrible% % {\tipaencoding /"lIme(@)rEk/}! % \end{poem} % \end{Example} % % \subsection{Style} % % \begin{macro}{\poemtitleformat} % By redefining \code{\textbackslash poemtitleformat} we can change how the poem % title is rendered. % \begin{macrocode} \newcommand*{\poemtitleformat}{\normalfont\bfseries\large} % \end{macrocode} % \end{macro} % % % If you want a stylistic marker between two poems, or between sections % or stanzas within a poem, the following commands are your friend. % % \begin{macro}{\ptspacergap} % \begin{macro}{\ptspacerchar} % \begin{macro}{\ptspacernum} % The \code{ptspacergap} length is the indentation of the spacer, and\code{% % \textbackslash ptspacerchar} is the actual character that will be printed % \code{\textbackslash ptspacernum} times. % \begin{macrocode} \newlength{\ptspacergap} \setlength{\ptspacergap}{4em} \newcommand*{\ptspacerchar}{\S} \newcommand*{\ptspacernum}{3} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\ptspacer} % \changes{1.0}{2012/07/17}{Repeat \code{\textbackslash ptspacernum} times} % \begin{macro}{\ptspacer*} % The starred version of the \code{ptspacer} command uses \code{\textbackslash% % hspace*} for indention. % \begin{macrocode} \newcommand*{\ptspacer}{% \@ifstar{% \@ptspacerStar }{% \@ptspacerNoStar } } \newcommand*{\@ptspacerStar}{% \hspace*{\ptspacergap}% \@ptrepeat{\ptspacernum}{\ptspacerchar}% } \newcommand*{\@ptspacerNoStar}{% \hspace{\ptspacergap}% \@ptrepeat{\ptspacernum}{\ptspacerchar}% } \ExplSyntaxOn \cs_new_eq:NN \@ptrepeat \prg_replicate:nn \ExplSyntaxOff % \end{macrocode} % \end{macro} % \end{macro} % % For example: % % \begin{Example} % \begin{Verbatim} % \renewcommand{\ptspacerchar}{\o} % \renewcommand{\ptspacernum}{2} % \begin{poem}{The Love Song% % of J. Alfred Prufrock} % {T.S. Eliot} % \ldots I should have been a pair% % of ragged claws\\ % Scuttling across the floors of% % silent seas. % % \ptspacer % % And the afternoon, the evening, % sleeps so peacefully!\\ % Smoothed by long fingers,\\ % Asleep\ldots\ tired\ldots\ or% % it malingers,\\ % Stretched on the floor, here% % beside you and me\ldots % \end{poem} % \end{Verbatim} % \columnbreak % \renewcommand{\ptspacerchar}{\o} % \renewcommand{\ptspacernum}{2} % \begin{poem}{The Love Song% % of J. Alfred Prufrock} % {T.S. Eliot} % \ldots I should have been a pair% % of ragged claws\\ % Scuttling across the floors of% % silent seas. % % \ptspacer % % And the afternoon, the evening, % sleeps so peacefully!\\ % Smoothed by long fingers,\\ % Asleep\ldots\ tired\ldots\ or% % it malingers,\\ % Stretched on the floor, here% % beside you and me\ldots % \end{poem} % \end{Example} % % \subsection{Groups and linking} % % When putting together a large collection of poetry and prose you most likely % need a way to organize your works and find them quickly. While the table of % poems helps we might also want to link directly to poems, or further subdivide % the collection into groups of related works (by year written, or subject % matter for instance). % % \begin{macro}{\linktopoem} % \changes{1.1}{2012/07/24}{Fix spacing and multiple use issues} % \changes{1.2}{2012/09/20}{Use \code{hyperlink} when linking to a poem} % We can \emph{\linktopoem[1]{link}} \emph{\linktopoem[2]{to}}% % \emph{\linktopoem[3]{poems}} easily enough by providing \code{linktopoem} with % the text for the link and, optionally, the number of the poem to link to. If % only one argument is given it is used as both the link destination and text. % \begin{macrocode} \newcommand*{\linktopoem}[2][ptnull]{% \ifx{#1}{ptnull} \hyperlink{\@ptpoemlabeltext#2}{#2}\relax \else \hyperlink{\@ptpoemlabeltext#1}{#2}\relax \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\ptgroup} % \begin{macro}{\poemgroup} % \begin{macro}{\poemgroup*} % Dividing poems up into groups can be accomplished with the \code{% % \textbackslash poemgroup} command. The command creates a title-page for the % group at the current location and adds entries to the TOP and TOC unless the % starred version of the command is used. The \code{\textbackslash ptgroup} % command will always contain a reference to the current group in case you need % to refer to it later. % \begin{macrocode} \newcommand*{\ptgroup}{} \newcommand*{\poemgroup}{% \@ifstar{% \@ptpoemgroupStar }{% \@ptpoemgroupNoStar } } \newcommand*{\@ptpoemgroupStar}[1]{% \ifx\@ptresetnumongroup\@ptundefined \relax \else \setcounter{poemnum}{0} \setcounter{untitledpoemnum}{0} \fi \cleardoublepage \vspace*{\fill} \renewcommand*{\ptgroup}{#1} \pagestyle{empty} \begin{center} \section*{#1} \end{center} \vspace*{\fill} \clearpage } \newcommand*{\@ptpoemgroupNoStar}[1]{% \ifx\@ptresetnumongroup\@ptundefined \relax \else \setcounter{poemnum}{0} \setcounter{untitledpoemnum}{0} \fi \cleardoublepage \vspace*{\fill} \renewcommand*{\ptgroup}{#1} \pagestyle{empty} \begin{center} \section{#1} \addcontentsline{lot}{section}{#1} \end{center} \vspace*{\fill} \clearpage } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \section{The \code{annotation} environment} % % \begin{environment}{annotation} % \changes{1.1}{2012/07/20}{Added optional `environment' argument} % Annotations allow you to insert prose that relates to a specific poem into % your document. It uses \code{\textbackslash poetryheadings}, clears the page % twice, and adds itself to the TOC (but not the TOP). The page is also cleared % again after the annotation. % % Like the \code{poetry} environment, an optional first argument can be used to % specify the environment in which the annotation will be wrapped. The default % is \code{flushleft} and can be changed by redefining \code{ptannotationenv}. % \begin{macrocode} \newenvironment{annotation}[2][\ptannotationenv]{% \newcommand*{\@ptwrapenvironment}{#1} \cleardoublepage \poetryheadings \begin{\@ptwrapenvironment} \subsection{#2} }{% \end{\@ptwrapenvironment} \clearpage } % \end{macrocode} % \end{environment} % % Now that everything is defined we can process any % \hyperlink{POETRYTEX:OPTIONS}{options} that were passed in by the user: % \begin{macrocode} \ProcessOptions\relax % % \end{macrocode} % % \clearpage % \setcounter{IndexColumns}{2} % \phantomsection % \addcontentsline{toc}{section}{Index} % \PrintIndex % % \makeatletter % \renewenvironment{theglossary}{% % \glossary@prologue % \setlength\emergencystretch{5em} % \GlossaryParms \let\item\@idxitem \ignorespaces}{} % \makeatother % \clearpage % \phantomsection % \addcontentsline{toc}{section}{Change History} % \PrintChanges % \changes{1.1}{2012/07/19}{Added an example table of poems} % \renewcommand*{\beforetop}{\hypertarget{POETRYTEX:TOP}{}} % \maketop % \Finale % % \iffalse %<*doc-style> % \begin{macrocode} \ProvidesPackage{poetrytex-style} \usepackage{fancyvrb,hologo,framed,multicol,tipa,url} \usepackage[pdfborder=0, bookmarks, colorlinks=false, hidelinks]{hyperref} \usepackage[parfill]{parskip} \fvset{gobble=2} \newenvironment{Example}{% \begingroup\setlength{\columnseprule}{.4pt} \begin{minipage}{\textwidth} \begin{multicols}{2} }{ \end{multicols} \end{minipage} \endgroup } \newcommand*{\gitdescribe}{% \immediate\write18{% rm gitdescribe.tex 2> /dev/null; (git describe --tags --dirty ||% echo "v0.0") 2> /dev/null > gitdescribe.tex }% \InputIfFileExists{gitdescribe.tex}{}{}\unskip% \immediate\write18{% rm gitdescribe.tex 2> /dev/null }% } \newcommand\XeTeX{\hologo{XeTeX}} \newcommand\XeLaTeX{\hologo{XeLaTeX}} \newcommand\LuaTeX{\hologo{LuaTeX}} \newcommand\LuaLaTeX{\hologo{LuaLaTeX}} \newcommand*\name[1]{\textsc{#1}} \newcommand*\fname[1]{\textsf{#1}} \newcommand*\pkg[1]{\textsf{#1}} \newcommand*\code[1]{\texttt{#1}} \renewcommand\partname{Part} % \end{macrocode} % %\fi \endinput