% \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} % \changes{2.0.0}{2013/02/23}{Require \pkg{tcloft} package} % \changes{2.0.0}{2013/08/17}{Begin using semantic versioning (semver.org)} % \begin{macrocode} \RequirePackage{expl3} \RequirePackage{tocloft} \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}{poemsintoc} % \changes{2.0.0}{2012/08/17}{Add option to insert poems in the ToC} % \begin{macro}{numbertop} % \begin{macro}{numbertoc} % \changes{2.0.0}{2012/08/17}{Add option to number poems in the ToC} % \begin{macro}{resetnumongroup} % \begin{macro}{numberpoems} % \begin{macro}{usedefaulttitles} % \changes{1.4}{2012/02/13}{Add package option to use default titles} % \begin{macro}{useincipits} % \changes{2.0.0}{2012/03/06}{Add package option to use incipits} % \begin{macro}{clearpageafterpoem} % The package can also be loaded with any of the following options: % \begin{macrocode} \DeclareOption{verse}{\usepackage{verse}} \DeclareOption{poemsintoc}{\listpoemsintoc} \DeclareOption{numbertop}{\numbertop} \DeclareOption{numbertoc}{\numbertoc} \DeclareOption{resetnumongroup}{\resetnumongroup} \DeclareOption{numberpoems}{\numberpoems} \DeclareOption{usedefaulttitles}{\ptusedefaulttitles} \DeclareOption{useincipits}{\ptuseincipits} \DeclareOption{clearpageafterpoem}{\clearpageafterpoem} \DeclareOption{clearpageafterpoems}{\clearpageafterpoem} \DeclareOption*{% \PassOptionsToPackage{\CurrentOption}{hyperref}% } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \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{% \beforetitle\pttitle\aftertitle% \ifx\ptsubtitle\@ptundefined% \relax% \else% \\*\beforesubtitle\ptsubtitle\aftersubtitle% \fi% } \author{\beforeauthor\ptauthor\afterauthor} \date{\beforedate\ptdate\afterdate} % \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 track untitled poems} % \begin{macro}{absoluteuntitledpoemnum} % \changes{1.4}{2013/02/12}{Create a new counter to track of untitled poems} % \begin{macro}{poemgroupnum} % \changes{2.0.0}{2013/02/23}{Create a new counter to track poem groups} % 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} \newcounter{poemgroupnum} % \end{macrocode} % \end{macro} % \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} % \begin{macro}{\ptuseincipits} % \changes{2.0.0}{2013/03/06}{Add option for using incipits in the ToP} % 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. We can also use incipits in the ToP by calling % \code{\textbackslash ptuseincipits}. This will override the default title in % the ToP, but will not be displayed atop the poem itself. % % \begin{macrocode} \newcommand*{\ptusedefaulttitles}{\newcommand*{\@ptusedefaulttitles}{}} \newcommand*{\ptdefaulttitle}{% Untitled No. \arabic{absoluteuntitledpoemnum}% } \newcommand*{\ptuseincipits}{\newcommand*{\@ptuseincipits}{}} % \end{macrocode} % \end{macro} % \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}{\ptdefaultgroupenv} % \changes{2.0.0}{2013/03/09}{Allow changing of the default group environment} % \begin{macro}{\grouppagestyle} % \changes{2.0.0}{2013/03/09}{Allow changing of group page style} % \begin{macro}{\pregroupvspace} % \changes{2.0.0}{2013/03/09}{Allow change in vspace before group} % \begin{macro}{\postgroupvspace} % \changes{2.0.0}{2013/03/09}{Allow change in vspace after group} % The following macros can be used to configure how the poem group page looks. % \begin{macrocode} \newcommand*{\ptdefaultgroupenv}{center} \newcommand*{\grouppagestyle}{empty} \newlength{\pregroupvspace} \newlength{\postgroupvspace} \setlength{\pregroupvspace}{\fill} \setlength{\postgroupvspace}{\fill} % \end{macrocode} % \end{macro} % \end{macro} % \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*{\prededicationvspace} \begin{#1} \beforededication{\dedicationformat\ptdedication}\afterdedication \end{#1} \vspace*{\postdedicationvspace} } % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Tables and links} % % Next we setup the table of contents and list of poems: % % \begin{macro}{\listofpoems} % \changes{2.0.0}{2013/02/23}{Use custom table for list of poems} % \begin{macro}{\resetnumon} % \changes{2.0.0}{2013/02/23}{Allow user to reset poem nums on counter change} % The \code{\textbackslash listofpoems} command is nothing more than a % convenient alias for \code{\textbackslash listofpoem} as defined by the % \pkg{tocloft} package. We can reset poem numbering at a given point by % redefining the \code{\textbackslash resetnumon} macro. This should probably % not be changed by users directly. Instead, use the built in macro % \code{\textbackslash resetnumongroup}. % \begin{macrocode} \newcommand*{\resetnumon}{} \newlistof[\resetnumon]{poem}{top}{\topname} \newcommand*{\listofpoems}{\listofpoem} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\topname} % \changes{2.0.0}{2013/03/16}{Rename from \code{\textbackslash toptitle}} % \begin{macro}{\topentrytype} % \begin{macro}{\toptocentrytype} % \changes{2.0.0}{2013/03/07}{Add hook to change ToP entry type in ToC} % The value of \code{\textbackslash topname} will be rendered atop the Table of % Poems, and \code{\textbackslash topentrytype} will set the default entry type % for poems in the TOP. \code{\textbackslash toptocentrytype} sets the default % entry type for the TOP in the TOC. % \begin{macrocode} \newcommand*{\topname}{List of Poems} \newcommand*{\topentrytype}{subsection} \newcommand*{\toptocentrytype}{section} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\listpoemsintoc} % \changes{2.0.0}{2013/08/17}{List poems in the table of contents} % \begin{macro}{\tocentrytype} % \changes{2.0.0}{2013/08/17}{Sets the entry type for poems in the ToC} % Using these commands you can cause poems to be listed in the ToC and set the % entry type just like the ToP. By default, the ToC entry type is set to % \code{\textbackslash topentrytype}. % \begin{macrocode} \newcommand*{\listpoemsintoc}{\newcommand*{\@ptlistpoemsintoc}{}} \newcommand*{\tocentrytype}{\topentrytype} % \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}{\topname} % \end{macrocode} % % \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 \listofpoems \pagestyle{plain} \aftertop \clearpage } \newcommand*{\@ptmaketopNoStar}{% \cleardoublepage \beforetop \phantomsection \addcontentsline{toc}{\toptocentrytype}{\topname} \listofpoems \pagestyle{plain} \aftertop \clearpage } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\numbertop} % \begin{macro}{\numbertoc} % \changes{2.0.0}{2012/08/17}{Number poems in the table of contents} % Placing one of these commands in your document preamble will cause the table % of poems or table of contents to be numbered. % \begin{macrocode} \newcommand*{\numbertop}{\newcommand*{\@ptnumbertop}{}} \newcommand*{\numbertoc}{\newcommand*{\@ptnumbertoc}{}} % \end{macrocode} % \end{macro} % \end{macro} % % \section{Hooks and formatting} % \changes{2.0.0}{2013/03/08}{Refactor hooks into new section} % A great many commands are provided to act as hooks into various parts of % \pkg{poetrytex}. These commands don't do anything initially, but can be % redefined to customize the way \pkg{poetrytex} behaves. % % \subsection{Title page} % % \begin{macro}{\beforetitle} % \changes{2.0.0}{2013/03/08}{Add hook before title} % \begin{macro}{\aftertitle} % \changes{2.0.0}{2013/03/08}{Add hook after title} % \begin{macro}{\beforesubtitle} % \changes{2.0.0}{2013/03/08}{Add hook before subtitle} % \begin{macro}{\aftersubtitle} % \changes{2.0.0}{2013/03/08}{Add hook after subtitle} % \begin{macro}{\beforeauthor} % \changes{2.0.0}{2013/03/08}{Add hook before author} % \begin{macro}{\afterauthor} % \changes{2.0.0}{2013/03/08}{Add hook after author} % \begin{macro}{\beforedate} % \changes{2.0.0}{2013/03/08}{Add hook before date} % \begin{macro}{\afterdate} % \changes{2.0.0}{2013/03/08}{Add hook after date} % These hooks get inserted before or after elements on the title page or % dedication. If the element has formatting, they will be inserted outside of % the formatted block, but inside of any enclosing environments. % \begin{macrocode} \newcommand*{\beforetitle}{} \newcommand*{\aftertitle}{} \newcommand*{\beforesubtitle}{} \newcommand*{\aftersubtitle}{} \newcommand*{\beforeauthor}{} \newcommand*{\afterauthor}{} \newcommand*{\beforedate}{} \newcommand*{\afterdate}{} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Dedication} % % \begin{macro}{\dedicationformat} % \changes{2.0.0}{2013/03/08}{Allow customization of dedication format} % \begin{macro}{\prededicationvspace} % \changes{2.0.0}{2013/03/08}{Add length for setting the pre-dedication vspace} % \begin{macro}{\postdedicationvspace} % \changes{2.0.0}{2013/03/08}{Add length for setting the post-dedication vspace} % \begin{macro}{\beforededication} % \changes{2.0.0}{2013/03/08}{Add hook before dedication} % \begin{macro}{\afterdedication} % \changes{2.0.0}{2013/03/08}{Add hook after dedication} % Redefine \code{\textbackslash dedicationformat} to change how the dedicaton % text is formatted. You can change the length of the vspace around the % dedication using \code{\textbackslash pre} and \code{\textbackslash % postdedicationvspace} or use the \code{before} and \code{afterdedication} % hooks to insert text around the deciation text. % \begin{macrocode} \newcommand*{\dedicationformat}{\normalfont\itshape} \newlength{\prededicationvspace} \newlength{\postdedicationvspace} \setlength{\prededicationvspace}{\fill} \setlength{\postdedicationvspace}{\fill} \newcommand*{\beforededication}{} \newcommand*{\afterdedication}{} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Tables and links} % % \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} % % \subsection{Poem group} % % \begin{macro}{\beforepoemgroup} % \changes{2.0.0}{2013/03/09}{Add hook before group} % \begin{macro}{\afterpoemgroup} % \changes{2.0.0}{2013/03/09}{Add hook after group} % The following hooks occur before and after a new poem group. % \begin{macrocode} \newcommand*{\beforepoemgroup}{\cleardoublepage} \newcommand*{\afterpoemgroup}{\clearpage} % \end{macrocode} % \end{macro} % \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! % % \begin{macro}{\theincipit} % \changes{2.0.0}{2013/03/06}{Allow the user to insert the incipit} % This will expand to the incipit for the current poem if one has been declared. % % \begin{macrocode} \newcommand*{\theincipit}{% \csname @poem\arabic{absolutepoemnum} incipit\endcsname% } % \end{macrocode} % \end{macro} % % \section{The \code{poem} environment} % % \begin{environment}{poem} % \changes{1.2}{2012/09/20}{Use \code{hypertarget} instead of \code{label}} % \changes{2.0.0}{2013/08/15}{Prevent orphan / widow lines in stanzas (\href{https://github.com/SamWhited/poetrytex/issues/7}{Issue \#7)}} % 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} % % \begin{macro}{\incipit} % \changes{2.0.0}{2013/03/06}{Allow the user to declare an incipit} % An incipit can be declared within the poem environment using the % \code{\textbackslash incipit} command. This will reprint the first argument so % you don't have to write your first line twice. This is useful for untitled % poems as you can put their incipit in the ToP in place of a default title. % \begin{macrocode} \newcommand*{\incipit}[1]{% \global\expandafter\def% \csname% @poem\arabic{absolutepoemnum} incipit% \endcsname{##1}% ##1% } % \end{macrocode} % \end{macro} % % An untitled poem with a default title and an incipit in the ToP might look % something like this: % % \begin{Example} % \begin{Verbatim} % \ptusedefaulttitles % \ptuseincipits % \begin{poem}{}{Traditional} % \incipit{Media vita in morte% % sumus};\\* % Quem qu\ae rimus adjutorem nisi% % te, Domine?\\* % Qui pro peccatis nostris juste% % irasceris\\* % Sancte Deus, Sancte fortis,% % Sancte et misericors % Salvator,\\* % Amar\ae morti ne tradas nos. % \end{poem} % \end{Verbatim} % \columnbreak % \ptusedefaulttitles % \ptuseincipits % \begin{poem}{}{Traditional} % \incipit{Media vita in morte% % sumus};\\* % Quem qu\ae rimus adjutorem nisi% % te, Domine?\\* % Qui pro peccatis nostris juste% % irasceris\\* % Sancte Deus, Sancte fortis,% % Sancte et misericors% % Salvator,\\* % Amar\ae morti ne tradas nos. % \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} \refstepcounter{poem}% \phantomsection% \addcontentsline{top}{\topentrytype}{% \ifx\@ptnumbertop\@ptundefined% \relax% \else% \toppoemnum% \fi% \ifx&% \ifx\@ptuseincipits\@ptundefined% \ptdefaulttitle% \else% {\incipittopformat \theincipit}% \fi% \else% #2% \fi% }% \ifx\@ptlistpoemsintoc\@ptundefined% \relax% \else% \addcontentsline{toc}{\tocentrytype}{% \ifx\@ptnumbertoc\@ptundefined% \relax% \else% \tocpoemnum% \fi% \ifx&% \ifx\@ptuseincipits\@ptundefined% \ptdefaulttitle% \else% {\incipittocformat \theincipit}% \fi% \else% #2% \fi% }% \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} \nopagebreak \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}{}% \renewcommand*{\resetnumon}{poemgroupnum}% } \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} % \begin{macro}{\tocpoemnum} % \changes{2.0.0}{2013/08/17}{Add hook for Table of Contents poem number formatting} % These commands are used to insert the poem number into the poem title, the % table of poems, and the table of contents respectively. By redefining them you % can customize how the numbering looks. % \begin{macrocode} \newcommand*{\titlepoemnum}{\arabic{poemnum}\\*} \newcommand*{\toppoemnum}{\arabic{poemnum}.\ } \newcommand*{\tocpoemnum}{\toppoemnum} % \end{macrocode} % \end{macro} % \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} % % \begin{macro}{\incipittopformat} % \changes{2.0.0}{2013/02/23}{Add hook for incipit formatting in the ToP} % \begin{macro}{\incipittocformat} % \changes{2.0.0}{2013/08/17}{Add hook for incipit formatting in the ToC} % Similarly we can change how the incipit is rendered in the Table of Poems or % Table of Contents: % \begin{macrocode} \newcommand*{\incipittopformat}{\itshape} \newcommand*{\incipittocformat}{\incipittopformat} % \end{macrocode} % \end{macro} % \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}[1]{% \addtocounter{poemgroupnum}{1} \ifx\@ptresetnumongroup\@ptundefined \relax \else \setcounter{poemnum}{0} \setcounter{untitledpoemnum}{0} \fi \beforepoemgroup \vspace*{\pregroupvspace} \renewcommand*{\ptgroup}{#1} \pagestyle{\grouppagestyle} \begin{\ptdefaultgroupenv} \@ifstar{% \@ptpoemgroupStar{#1} }{% \@ptpoemgroupNoStar{#1} } \end{\ptdefaultgroupenv} \vspace*{\postgroupvspace} \afterpoemgroup } \newcommand*{\@ptpoemgroupStar}[1]{% \section*{#1} } \newcommand*{\@ptpoemgroupNoStar}[1]{% \section{#1} \addcontentsline{top}{section}{#1} } % \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} \nopagebreak }{% \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}{part}{Index} % \PrintIndex % % \makeatletter % \renewenvironment{theglossary}{% % \glossary@prologue % \setlength\emergencystretch{5em} % \GlossaryParms \let\item\@idxitem \ignorespaces}{} % \makeatother % \clearpage % \phantomsection % \addcontentsline{toc}{part}{Change History} % \PrintChanges % \changes{1.1}{2012/07/19}{Added an example table of poems} % \renewcommand*{\toptocentrytype}{part} % \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