diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/thalie/thalie.dtx |
Initial commit
Diffstat (limited to 'macros/latex/contrib/thalie/thalie.dtx')
-rw-r--r-- | macros/latex/contrib/thalie/thalie.dtx | 2163 |
1 files changed, 2163 insertions, 0 deletions
diff --git a/macros/latex/contrib/thalie/thalie.dtx b/macros/latex/contrib/thalie/thalie.dtx new file mode 100644 index 0000000000..53230be775 --- /dev/null +++ b/macros/latex/contrib/thalie/thalie.dtx @@ -0,0 +1,2163 @@ +% \iffalse meta-comment +% Copyright 2010-2019 Louis Paternault +% +% 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 this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Louis Paternault +% +% This work consists of the files thalie.dtx and thalie.ins +% and the derived file thalie.sty. +% \fi +% +% \iffalse +%<*driver> +\ProvidesFile{thalie.dtx} +%</driver> +% +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{thalie} +%<*package> + [2019/07/31 v0.10b A package to typeset drama plays] +%</package> +% +%<*driver> +\documentclass{ltxdoc} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\usepackage{array} +\usepackage{enumerate} +\usepackage{multirow} +\usepackage{hyperref} +\usepackage{thalie} +\usepackage{showexpl} +\usepackage{listings} +\usepackage{xcolor} +\usepackage{manfnt} +\lstset{ + language=[LaTeX]TeX, + numbers=left, + numberstyle=\tiny, + backgroundcolor=\color{yellow!20}, + basicstyle=\small\color{black}\ttfamily, + keywordstyle=\color{blue!80}\sffamily, + commentstyle=\color{olive}, + stringstyle=\color{red}, +} +\usepackage[english]{babel} +\begin{document} +\DocInput{thalie.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{0} +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \GetFileInfo{thalie.dtx} +% +% \DoNotIndex{\@backslashchar, \@ifnextchar, \protect\`} +% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ ,\!,\(,\),\,} +% \DoNotIndex{\addcontentsline, \addto, \ae, \AND, \arabic, \abovedisplayshortskip, \abovedisplayskip, \addtolength} +% \DoNotIndex{\begin, \bfseries, \boolean, \baselineskip, \belowdisplayskip, \belowdisplayshortskip, \boolfalse, \booltrue} +% \DoNotIndex{\captionsenglish, \captionsfrench, \center, \centering, \ClassError, \cleardoublepage, \csname, \csundef} +% \DoNotIndex{\def, \defcharcommand@with, \defcharcommand@without, \dimen, \dimexpr} +% \DoNotIndex{\emph, \end, \endcsname, \equal, \expandafter, \endlist, \endmath, \endminipage} +% \DoNotIndex{\framebox, \fi} +% \DoNotIndex{\gappto, \gdef, \global, \GetTranslation} +% \DoNotIndex{\hspace} +% \DoNotIndex{\@ifpackageloaded, \indent, \if@xspace, \ifbool, \ifboolexpr, \ifcsundef, \ifcsdef, \ifdef, \ifdefempty, \ifdefstring, \ifstrempty, \ifstrequal, \ifundef, \ignorespacesafterend, \item} +% \DoNotIndex{\LARGE, \Large, \left, \leftskip, \leftmargin, \list, \linewidth, \LoadDictionaryFor, \LoadDictionary} +% \DoNotIndex{\medskip, \MakeUppercase, \markboth, \markright, \MakeLowercase, \math, \minipage} +% \DoNotIndex{ +% \@actlevel, +% \@actstyle, +% \@clearpage, +% \@cmd, +% \@definecharactercommand, +% \@desc, +% \@displaytitle, +% \@drama, +% \@dramatis@clear, +% \@empty@, +% \@grouplength, +% \@groupname, +% \@interludelevel, +% \@label, +% \@maybexspace, +% \@ne, +% \@playlevel, +% \@playstyle, +% \@scenelevel, +% \@scenestyle, +% \@short, +% \@spaceaftergroup, +% \@speaks, +% \@verseadjust, +% } +% \DoNotIndex{\newcommand, \newcounter, \newenvironment, \noindent, \noexpand, \NOT, \newif, \newlength, \newline, \nopagebreak} +% \DoNotIndex{\OR} +% \DoNotIndex{\par, \pgfkeys, \ProcessPgfPackageOptions, \protect, \protected@xappto, \parindent, \parskip, \predisplaysize, \prevgraf, \providebool} +% \DoNotIndex{\quad} +% \DoNotIndex{\refstepcounter, \renewcommand, \RequirePackage, \right, \Roman, \relax, \rightmargin} +% \DoNotIndex{\section, \setboolean, \setlength, \sffamily, \smallskip} +% \DoNotIndex{\tabularnewline, \textrm, \textsc, \textwidth, \thispagestyle, \textbf, \the, \tmp} +% \DoNotIndex{\undef} +% \DoNotIndex{\vspace, \vskip} +% \DoNotIndex{\WithSuffix} +% \DoNotIndex{\xappto, \xspace, \xdef} +% \DoNotIndex{\z@} +% +% \newcommand{\bbackslash}{\symbol{92}} +% \newcommand{\danger}{\marginpar[\hfill\dbend]{\dbend\hfill}} +% +% \title{The \textsf{thalie} package\thanks{ +% This document corresponds to \textsf{thalie}~\fileversion, dated \filedate. +% Home page, bug requests, etc. at \url{http://framagit.org/spalax/thalie} +% }\\A package to typeset drama plays} +% \author{Louis Paternault\\ \texttt{spalax+ctan(at)gresille(dot)org}} +% +% \maketitle +% +% \begin{abstract} +% This package is meant to typeset drama plays using \LaTeX{}. It provides +% commands to introduce characters' lines, to render stage direction, to divide +% a play into acts and scenes, to automatically build the dramatis person\ae{}, +% etc. +% \end{abstract} +% +% \setcounter{tocdepth}{2} +% \tableofcontents +% +% \section{Introduction} +% This document introduces the \textsf{thalie} package, used to typeset drama +% plays. +% +% \subsection{Other classes and packages} +% This package is far from being the only one that can be used to render drama +% plays. If you do not like my work, you can use one of the following ones (and +% I guess there exists others): +% |drama| \cite{drama}, +% |dramatist| \cite{dramatist}, +% |play| \cite{play}, +% |screenplay| \cite{screenplay}, +% |sides| \cite{sides}. +% +% I began to write this package in 2010, and now, at the end of 2012, I must +% admit that I wonder why I started this\ldots There are already several such +% packages in +% \textsc{ctan}\footnote{\url{http://www.ctan.org/topic/drama-script}}, and the +% |dramatist| package seems really nice (I borrowed some ideas and copied some +% code from it). There are actually a few improvements in my package compared +% to |dramatist|: in my package, plays, acts and scenes appear in the table of +% contents; it is possible to include several plays in a single document; there +% are more options when building the dramatis person\ae{}; headers and footers +% are taken into account, etc. But these improvements are small; it might have +% been smarter to contribute to |dramatist| instead of starting my own package. +% The good part is that I have a package that fits my needs, and I learned how +% to write a \LaTeX{} package. +% +% Oh, yes! I know why I started this: I am a geek\ldots +% +% \subsection{License} +% 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. +% +% Further information can be found in the |.dtx| file used to build this +% document. +% +% In short (but this paragraph has no legal value), you can use this package +% freely to render your drama plays, and modify it almost freely. Nevertheless, +% if you like my work, you can invite me to the performance of the play you +% typeset using my package\footnote{You will not take a big risk, since there +% is little chance I travel half the world to see a play. But if by chance I +% can attend it, it would make me really happy.}. +% +% \subsection{Acknowledgements} +% I borrowed ideas and lines of code from the \LaTeX{} packages +% |drama|\cite{drama} and |dramatist|\cite{dramatist}. +% +% I used the following guides to package my package: \emph{How to Package Your +% \LaTeX{} Package} \cite{dtxtut}, and \emph{\LaTeXe{} for class and package +% writers} \cite{clsguide}. +% +% \subsection{Examples} +% +% Most of the examples are taken from Edmond Rostand's \emph{Cyrano de Bergerac} +% \cite{cyrano} or from William Shakespeare's \emph{A Midsummer Night's Dream} +% \cite{midsummer}. The snippets of \emph{Cyrano de Bergerac} are from the +% original (French) version of this play, roughly translated by myself (which +% means that they must be of poor quality). +% +% \subsection{Overview} +% Installation instruction are given in section \ref{sec:install}. +% Documentation about how to use this package is given in section +% \ref{sec:usage}. In particular, section \ref{sec:sectioning} explains how to +% use acts and scenes, sections \ref{sec:dramatis} and \ref{sec:characters} explains how to define +% characters, and use these definitions to introduce characters' lines, and +% section \ref{sec:directions} describes commands used to render stage +% directions. At last, specific instruction about how to use this package with +% a language other than English (or a non-latin alphabet) are given in section +% \ref{sec:i18n}. Examples are given in section \ref{sec:examples}. +% +% Implementation is given in section \ref{sec:implementation}. +% +% \section{Download and Install} +% \label{sec:install} +% +% +% \subsection{\textsc{Gnu}/Linux Distribution} +% +% If applicable, the easiest way to get |thalie| working is by installing it by your distribution package. With Debian (and Ubuntu, and surely other distributions that inherit from Debian), simply run: +% +% \begin{quote} +% |sudo apt-get install texlive-humanities| +% \end{quote} +% +% \subsection{\LaTeX{} distribution} +% +% This package is included both in \TeX{}Live and MiK\TeX{}. It can be installed by their respective package managers. +% +% \subsection{Manual installation} +% +% \begin{itemize} +% \item Download the lastest archive : +% \begin{description} +% \item[Stable version] \url{http://mirrors.ctan.org/install/macros/latex/contrib/thalie.tds.zip} +% \item[Development version] \url{https://framagit.org/spalax/thalie/repository/archive.zip?ref=master} +% \end{description} +% \item Unzip the archive. +% \item If you got the archive from CTAN (stable version), move file \texttt{tex/latex/thalie/thalie.sty} in a \LaTeX{} path. +% \item If you got the development version, |cd| to the main archive directory, and run |latex thalie.ins| to build |thalie.sty|. Move this file into a \LaTeX{} path. +% \end{itemize} +% +% \section{Usage} +% \label{sec:usage} +% +% \subsection{Localization} +% \changes{v0.9a}{2017/04/22}{Add section \emph{Localization}.} +% +% By default, commands \lstinline|\act|, \lstinline|\scene|, etc. use English words, but they are +% translated to the current language used by |babel| or +% |polyglossia|\footnote{Given that someone provided the translation. Right +% now, the only available languages are English, French, and German.}. More information +% is given in section \ref{sec:l10n}. +% +% \subsection{Package options} +% \label{sec:options} +% +% Package options are summed up in table \ref{table:packageoptions}. +% +% Note that any package option can be redefined anywhere in the document. This +% makes it possible to have several plays collected in a single document, while +% applying different styles or options to each play. See section +% \ref{sec:redefine} for more detail. +% +% \begin{table} +% \centering +% \begin{tabular}{c|c|c} +% Name & Available options & Default \tabularnewline +% \hline +% \hline +% |characterstyle| & |bold| |margin| |center| |simple| |arden| & |simple| \tabularnewline +% & |imprimerie-verse| |imprimerie-prose| & \tabularnewline +% \hline +% |playstyle| & \multirow{3}{*}{|center| |bigcenter| |box| |custom|} & |box| \tabularnewline +% |actstyle| & & |bigcenter| \tabularnewline +% |scenestyle| & & |center| \tabularnewline +% \hline +% |playlevel| & \multirow{3}{*}{|part| |chapter| |section| \ldots |subparagraph|} & |chapter| \tabularnewline +% |actlevel| & & |section| \tabularnewline +% |scenelevel| & & |subsection| \tabularnewline +% \hline +% |interludelevel| & |play| |act| |scene| & |act| \tabularnewline +% \hline +% |xspace| & |true| |false| & |true|\tabularnewline +% \end{tabular} +% \caption{Package options summary} +% \label{table:packageoptions} +% \end{table} +% +% \subsubsection{Space following character commands} +% \changes{v0.7}{2015/12/28}{New package option \texttt{xspace}.} +% As commands introducing characters' lines and displaying characters' names +% may be frequently used, it might be tempting to omit the following \lstinline|{}| For +% instance, one might prefer to write: +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\cyrano Indeed, \cyranoname is my name! +\end{lstlisting} +% \iffalse +%</example> +% \fi +% instead of: +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\cyrano{} Indeed, \cyranoname{} is my name! +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% If package option |xspace| is set (e.g. |xspace=true|), space is automatically +% added after those commands if necessary\footnote{This is done with +% the |$\backslash$xspace| command (from the |xspace| package), hence the name.}; +% otherwise, it is not. +% +% For historical reasons, the option |xspace| default is |true|, but this might +% change in some later non-backward compatible version. +% +% \subsubsection{Style} +% The way characters' lines are displayed, as well as play, act and scene +% titles, can be set when loading the options. +% To set character style, use option |characterstyle=|\meta{style}. Available +% styles, and indication to use a custom one, are described in section +% \ref{sec:lines}. +% +% Several play, act and scene title styles are defined. Choose it using options +% |playstyle|=\meta{style}, |actstyle|=\meta{style} and +% |scenestyle|=\meta{style}. Description of available styles, and how to define +% your own one, are described in section \ref{sec:sectionstyles}. +% +% \subsubsection{Sectioning levels} +% If you use a table of contents, or if you also use ``usual'' sectioning +% commands (\lstinline|\chapter|, \lstinline|\section| and so on), the relative importance of +% plays, acts and scenes is important. You can set this using options +% |playlevel=|\meta{level}, |actlevel=|\meta{level} and +% |scenelevel=|\meta{level}. The argument is the name of the corresponding +% sectioning level, i.e. one of |part|, |chapter|, |section|, |subsection|, +% |subsubsection|, |paragraph| and |subparagraph|. +% +% Setting the interlude level is slightly different. While setting it using +% |interludelevel=|\meta{level}, instead of choosing one of \LaTeX{} vanilla +% sectioning levels as the level, you may choose |play|, |act| or |scene|. It +% defines if an interlude is at the same level as a play, an act or a scene. +% +% \subsubsection{Redefining options} +% \label{sec:redefine} +% \DescribeMacro{\setthalieoptions} +% +% Packages options can be reset in the document body using command +% \lstinline|\setthalieoptions|\marg{package options}. Its only argument has the same +% syntax as the package options. +% +% For instance, if you are writing a collections of plays, some in prose, some in verses, you might want to write something like the following. +% +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\documentclass{book} +... +\usepackage{thalie} +... +\begin{document} +... +\play{First play} +\setthalieoptions{characterstyle=imprimerie-verse} +... +\play{Second play} +\setthalieoptions{characterstyle=impriemie-prose} +... +\end{document} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \subsection{Sectioning} +% \label{sec:sectioning} +% Here begin the parts explicitly relating to drama. +% \subsubsection{Levels} +% \DescribeMacro{\play} +% \DescribeMacro{\play*} +% \DescribeMacro{\act} +% \DescribeMacro{\act*} +% \DescribeMacro{\scene} +% \DescribeMacro{\scene*} +% To introduce a new play, act or scene, use commands \lstinline|\play|, \lstinline|\act| and +% \lstinline|\scene|. Their behaviour is as close as the ``usual'' sectioning commands +% (\lstinline|\chapter|, \lstinline|\section| and so on) as possible, i.e.: +% \begin{itemize} +% \item Their signature is \lstinline|\play|\oarg{short title}\marg{longtitle} (the +% optional short title is the one used in the table of content, and in headers +% and footers). +% \item A starred version (\lstinline|\play*|, \lstinline|\act*| and \lstinline|\scene*|) is provided, which +% inserts a play (or act, or scene) which is not numbered, and does not insert +% any line in the table of content. +% \item Headers and footers are changed (more information in section \ref{sec:header}). +% \end{itemize} +% +% Both commands \lstinline|\act| and \lstinline|\scene| (and their starred versions) are designed to +% deal with empty titles. Indeed, it is common not to give any name to acts and +% scenes. +% +% By default, a play is as deep (regarding to the table of contents) as a +% chapter, an act as a section, and a scene as a subsection. But this can be +% set using package options |playlevel|, |actlevel| and |scenelevel| (see +% packages options, page \pageref{sec:options}). That way, you can use in your +% document plays, acts and scenes as well as chapters, sections and so on. It +% can be useful if you want a foreword, and appendix, etc. +% +% It is not compulsory to use all three commands \lstinline|\play|, \lstinline|\act| and \lstinline|\scene|. +% The rule of thumb is: if only one element exists, skip the corresponding +% command: if your document has a single play, you should ignore \lstinline|\play|; if +% your document has several single act plays, set +% |playlevel=section,scenelevel=subsection| and ignore \lstinline|\act|; etc. +% +% \DescribeMacro{\interlude} +% \DescribeMacro{\interlude*} +% You may want to use interludes, which are acts or scenes which are not +% numbered, but which should appear in the table of content. Command +% \lstinline|\interlude|\oarg{short title}\marg{long title} has this purpose. +% +% You may choose the sectioning level an interlude is equivalent to in the +% package options. If your interludes are acts, use |interludelevel=act|; if +% they are scenes, use |interludelevel=scene|. +% +% \DescribeMacro{\curtain} +% At last, to mark the end of an act or of the play, you can use command +% \lstinline|\curtain|, which prints the word \lstinline|\GetTranslation{Curtain}| in the middle of its +% own line. +% +% \subsubsection{Title styles} +% \label{sec:sectionstyles} +% Several styles are available to render play, act and scene titles. Choose +% them using package options |playstyle|, |actstyle| and |scenestyle|. Default +% is |playstyle=box|, |actstyle=bigcenter|, |scenestyle=center|. +% +% \paragraph{Custom titles} +% Unfortunately, as play, act and scene titles are not considered (by \LaTeX{}) +% as usual sections, package +% |titlesec|\footnote{\url{http://www.ctan.org/pkg/titlesec}} cannot be used to +% use alternative section titles. Here is the way to set your own one. +% +% \begin{figure}[p] +% \centering +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\newcommand\customact[2]{ + \begin{center} + \textsc{\GetTranslation{Act} #1} + + #2 + \end{center} +} +\WithSuffix\newcommand\customact*[1]{ + \begin{center} + #1 + \end{center} +} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% \caption{Example of custom act definition} +% \label{fig:custom} +% \end{figure} +% +% \DescribeMacro{\customplay} +% \DescribeMacro{\customact} +% \DescribeMacro{\customscene} +% When loading the package, use |custom| as the style of the title you want to +% customize (e.g. |actstyle=custom|). Then, commands +% \lstinline|\customact|\marg{counter}\marg{title} and \lstinline|\customact*|\marg{title} will be +% called by this package to render titles. You \emph{must} define them. Figure +% \ref{fig:custom} gives the example of the definition of the |center| style. +% +% The first argument of \lstinline|\customact| is the label of the act being printed +% (that is, \lstinline|\theact| for an act, \lstinline|\theplay| for a play, etc.), its second +% argument is its title. Command \lstinline|\customact*| only has one argument, which is +% the act title. +% +% \subsubsection{Labels and counters} +% +% \DescribeMacro{\theplay} +% \DescribeMacro{\theact} +% \DescribeMacro{\thescene} +% Using the same tools as \lstinline|\chapter|, \lstinline|\section| and so on, it is possible to +% define the way counters of plays, acts and scenes are displayed. You can do +% this by redefining \lstinline|\theplay|, \lstinline|\theact| and \lstinline|\thescene|. For example, to +% have acts numbered using letters, use \lstinline|\renewcommand{\theact}{\Alph{act}}|. +% +% \subsubsection{Headers and footers} +% \label{sec:header} +% +% \DescribeMacro{\playmark} +% \DescribeMacro{\actmark} +% \DescribeMacro{\scenemark} +% Once again, similar tools as those used by \lstinline|\section| are provided to deal +% with headers and footers. When introducing, a new play, act or % scene, +% respectively, commands \lstinline|\playmark|\marg{label}, \lstinline|\actmark|\marg{label} and +% \lstinline|\scenemark|\marg{label} are called, so that titles can be used in headers +% and footers. If the default behaviour does not suit you (which should be the +% case if you did not choose the default option for |playlevel|, |actlevel| or +% |scenelevel|), you can redefine them. +% +% Examples are given in section \ref{sec:examples:headers}. +% +% \subsection{Dramatis person\ae} +% \label{sec:dramatis} +% This part explains how to build and display the dramatis person\ae{}. +% +% Definition of characters is done in document body. +% As it is possible to have several plays in a single documents (for a +% collection of plays or sketches), it is possible to define several +% dramatis person\ae{}. A new one disables the character commands +% defined by the previous one. +% +% \DescribeEnv{dramatis} +% Definition of characters is done inside the |dramatis| environment. If the +% |hidden| option is given, the dramatis person\ae{} is not printed (its +% only purpose is then to define the character commands). +% +% \begin{quote} +% \lstinline|\begin{dramatis}|\oarg{hidden} +% \end{quote} +% +% Then, several commands are available to define characters, and organize +% character definitions. +% +% \DescribeMacro{\characterspace} +% Command \lstinline|\characterspace| put some vertical space into the dramatis +% person\ae{}. +% +% \subsubsection{Character definition} +% \paragraph{Basic definition} +% \label{paragraph:basiccharacter} +% +% \begin{figure}[p] +% \centering +% \iffalse +%<*example> +% \fi +% \begin{LTXexample}[pos=b] +\begin{dramatis} + \character[cmd={cyrano}, drama={Cyrano de Bergerac}]{Cyrano} + \character[cmd={lebret}]{Le Bret} + \character[cmd={bellerose}]{Bellerose} +\end{dramatis} + +\bigskip + +\lebret[to \cyranoname, holding his arm] +Let's talk ! + +\cyrano +Wait for the crowd to leave. \did{To \bellerosename} Can I stay? +% \end{LTXexample} +% \iffalse +%</example> +% \fi +% \caption{Example of character definition} +% \label{fig:character_example} +% \end{figure} +% +% \DescribeMacro{\character} +% To define a character, use command \lstinline|\character|. +% \begin{quote}% +% \lstinline|\character|\oarg{\emph{cmd=}command,\emph{drama=}dramatis,\emph{desc=}description}\marg{name}% +% \end{quote} +% The mandatory argument is the name of the character, as it will appear in each of this character's line. It is later possible to redefine it using command \lstinline|\setcharactername| (see part \ref{setcharactername}). Optional arguments are: +% \begin{description} +% \item[desc] is a description of your character, appearing in the dramatis person\ae{}; +% \item[cmd] is the name of the command that will be used to introduce this character's lines in the remaining part of your document; +% \item[drama] is the name of your character, as it will appear in the dramatis person\ae{}. The name of the character (mandatory argument) is used as a default value. +% \end{description} +% +% If \emph{cmd} is defined, this command creates two new commands: |\|\meta{cmd} +% and |\|\meta{cmd}|name|. The +% first one is used to introduce a character's line. The second one prints the +% character's name. An error is raised if a command with any of these two names +% already exists. +% +% An example of the use of this command is given in figure +% \ref{fig:character_example}. +% +% \paragraph{Special character definition} +% +% Although optional arguments are not mandatory, not defining them, or leaving the mandatory argument blank, have special meaning. The combination are summed up in table \ref{table:character}. +% +% \begin{table} +% \centering +% \begin{tabular}{cc||c|c|c|c|} +% \multicolumn{2}{c||}{} & \multicolumn{2}{c|}{empty \meta{name}} & \multicolumn{2}{c|}{\meta{name}} \\ +% \multicolumn{2}{c||}{} & no \meta{cmd} & \meta{cmd} & no \meta{cmd} & \meta{cmd} \\ +% \hline +% \hline +% \multirow{4}{*}{no \meta{drama}} & \multirow{2}{*}{no \meta{desc}} & & & silent\textsuperscript{\ref{character:silent}} & default\textsuperscript{\ref{character:default}} \\ +% & & & & & hidden\textsuperscript{\ref{character:hidden}}\\ +% \cline{2-6} +% & \multirow{2}{*}{ \meta{desc}} & description & & silent\textsuperscript{\ref{character:silent}} & default\textsuperscript{\ref{character:default}} \\ +% & & only\textsuperscript{\ref{character:description}} & & & \\ +% \hline +% \multirow{2}{*}{ \meta{drama}} & no \meta{desc} & silent\textsuperscript{\ref{character:silent}} & & & default\textsuperscript{\ref{character:default}} \\ +% \cline{2-6} +% & \meta{desc} & silent\textsuperscript{\ref{character:silent}} & & & default\textsuperscript{\ref{character:default}} \\ +% \hline +% \end{tabular} +% +% An empty cell means that the corresponding combination is forbidden. The superscript number refers to the list of special character definitions (page \pageref{specialcharaclist}). +% \caption{(Not) defining arguments in character definition} +% \label{table:character} +% \end{table} +% +% \label{specialcharaclist} +% \begin{enumerate}[(i)] +% \item \label{character:default} \textbf{Default definition (\meta{name} and \meta{cmd} are given; \meta{desc} and \meta{drama} may be omitted):} The character is defined as described in \ref{paragraph:basiccharacter}. If \meta{description} is omitted, no description appear in the dramatis person\ae{}; if no \meta{drama} is given, character in the dramatis person\ae{} has the same name as it will have in the document. +% Example: +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\character[ + drama={A ghost}, + desc={the king's ghost}, + cmd={ghost}, + ]{The ghost} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% \item \label{character:description} \textbf{Description only (everything omitted but \meta{desc}):} A description is inserted in the dramatis person\ae{}. Useful to add characters such as \emph{The kings' armies}. +% Example: +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\character[desc={The kings' armies}]{} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% \item \label{character:hidden} \textbf{Hidden character (\meta{drama} is empty (defined, but empty), \meta{cmd} and \meta{name} are defined, \meta{desc} is omitted)} Definition of a character that does not appear in the dramatis person\ae{}. +% Example: +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\character[drama={}, cmd={postman}]{The postman} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% \item \label{character:silent} \textbf{Silent character (one of \meta{name} or \meta{drama} is defined; \meta{desc} may be omitted; \meta{cmd} is omitted):} The character only appear in the dramatis person\ae{}. It will not be used elsewhere in the document. An optional description may also appear in the dramatis person\ae{}. +% Example: +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\character{A priest} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% \end{enumerate} +% +% \paragraph{Group of characters} +% \DescribeEnv{charactergroup} +% It is possible to group several characters' definition if they have the same +% description. This is done with environment +% |charactergroup|\oarg{width}\marg{description}. The optional argument sets +% the group width (on the left of the brace). +% See an example on figure \ref{fig:charactergroup}. +% +% \begin{figure}[p] +% \centering +% \iffalse +%<*example> +% \fi +% \begin{LTXexample}[pos=b] +\begin{dramatis} +\begin{charactergroup}[2.5cm]{Officers} + \character[desc={a soldier}]{Marcellus} + \character[desc={a soldier}]{Bernardo} +\end{charactergroup} +\end{dramatis} +% \end{LTXexample} +% \iffalse +%</example> +% \fi +% \caption[Defining a group of characters]{Defining a group of characters} +% \label{fig:charactergroup} +% \end{figure} +% +% The effect of this code will be, in the dramatis person\ae{}, to have a +% nice brace mapping the three characters to their common description. +% +% The behaviour of nested |charactergroup| environments is +% undefined\footnote{It might work; it might not. It might work now, but stop +% working in the future; it might not work now, but work by accident in the +% future. Etc.}. +% +% \subsubsection{Customize style of dramatis person\ae} +% \DescribeEnv{dramatisenv} +% \DescribeMacro{\dramatischaracter} +% \DescribeMacro{\dramatischaractername} +% \DescribeMacro{\dramatischaracterdescription} +% +% A default style is used to display the dramatis person\ae, but is it made to +% be customized. +% The following commands can be redefined to make dramatis person\ae look +% different. They do nothing apart from displaying text (no internal +% definition, etc.). +% +% \begin{itemize} +% \item |dramatisenv|: This environment wraps the dramatis person\ae. +% \item \lstinline|\dramatischaracter|\marg{name}\marg{description} Renders the character name and description. It should take care of cases where name or descsription (but not both) is missing. +% \item \lstinline|\dramatischaractername|\marg{name} Renders the character name. +% \item \lstinline|\dramatischaracterdescription|\marg{description} Renders the character description. +% \item Environment |charactergroup|\oarg{width}\marg{description} Renders a group of characters. +% \item \lstinline|\characterspace| Adds a vertical character space. +% \end{itemize} + +% Figure \ref{fig:dramatisconversion} illustrates how those commands are used. +% +% \begin{figure}[p] +% \iffalse +%<*example> +% \fi +\begin{lstlisting} +\begin{dramatis} + \character{The queen} + \character[desc={the queen's husband.}]{The king} + \begin{charactergroup}{Lords and ladies} + \character{Lord Foo} + \character[desc={Lord Foo's sister.}]{Lady Bar} + \character[desc={Lord and Lady Baz.}]{} + \end{charactergroup} + \characterspace + \character[desc={Several servants}]{} +\end{dramatis} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% To display the dramatis person\ae{} above, the commands below are called. +% +% \iffalse +%<*example> +% \fi +\begin{lstlisting} +\begin{dramatisenv} + \dramatischaracter{The queen}{} + \dramatischaracter{The king}{the queen's husband.} + \begin{charactergroup}{Lords and ladies} + \dramatischaracter{Lord Foo}{} + \dramatischaracter{Lady Bar}{Lord Foo's sister.} + \dramatischaracter{}{Lord and Lady Baz.} + \end{charactergroup} + \characterspace + \dramatischaracter{}{Several servants} +\end{dramatisenv} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% And command \lstinline|\dramatischaracter|\marg{Name}\marg{Description} is defined as something like the following code (excepted that parts taking care of cases where there is no character name or description is omitted here). +% \iffalse +%<*example> +% \fi +\begin{lstlisting} +\newcommand{\dramatischaracter}[2]{ % + \dramatischaractername{#1}, \dramatischaracterdescription{#2}\\ +} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% \caption{Commands used to display the dramatis person\ae.} +% \label{fig:dramatisconversion} +% \end{figure} +% +% For example, to render character names in small caps, one would define : +% +% \iffalse +%<*example> +% \fi +\begin{lstlisting}[numbers=none] +\renewcommand{\dramatischaractername}[1]{\textsc{#1}} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% Or to make dramatis +% person\ae{} include a title, one can define : +% \iffalse +%<*example> +% \fi +\begin{lstlisting}[numbers=none] +\renewenvironment{dramatisenv}{% + \list{}{\rightmargin1cm\leftmargin2cm}\item[] + \act*{Dramatis person\ae}% +}{% + \endlist% +} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \subsection{Characters} +% \label{sec:characters} +% This part explains how to define characters, and introduce character's lines. +% +% It has been explained that definition of a character in the dramatis +% person\ae{} (previous subsection) also creates commands used to introduce +% lines of characters. For instance, defining a character using +% \lstinline|\character[cmd=cyrano]{Cyrano}| means than Cyrano's lines can now be +% introduced using the following code. +% \iffalse +%<*example> +% \fi +\begin{lstlisting} +\cyrano +No! It's a bit short, young man\ldots +\end{lstlisting} +% \iffalse +%</example> +% \fi +% This would display the name \emph{Cyrano} using the current character style, then +% his line. +% +% \subsubsection{Custom characters} +% +% \paragraph{Disposable character} +% \DescribeMacro{\disposablecharacter} +% One can need to define characters that are used only once (or a few times). +% Command \lstinline|\disposablecharacter| is here to help. +% \begin{quote}\lstinline|\disposablecharacter|\oarg{directions}\marg{name}\end{quote} +% This command, used in the body, introduces a line for character |name|, with optional stage +% directions. It is rendered the same way regular characters are rendered, but +% nothing is added to the dramatis person\ae{}. It is used in figure +% \ref{fig:setcharactername_example}. +% +% This command is also useful to introduce lines of characters in non standard +% ways, for instance if several characters speak at once. See examples in +% section \ref{sec:examples:characterslines}. +% +% \subsubsection{Changing character's name} +% \label{setcharactername} +% \DescribeMacro{\setcharactername} +% +% \begin{figure}[p] +% On the first scenes of Cyrano de Bergerac, the main character (Cyrano) is +% somewhere in a crowd, and only appears as \emph{a voice}. He appears as +% Cyrano in the following verses. +% +% \centering +% \iffalse +%<*example> +% \fi +% \begin{LTXexample}[pos=b] +\begin{dramatis}[hidden] + \character[desc={Cyrano de Bergerac}, cmd=cyrano]{The voice} + \character[cmd=montfleury]{Montfleury} +\end{dramatis} + +\cyrano Leave! + +\disposablecharacter{The crowd} Oh! + +\montfleury[losing his voice] ``Happy he who far away from court\ldots'' + +\setcharactername{cyrano}{Cyrano} + +\cyrano[emerging from the crowd, standing up on a chair {[}\ldots{]} with + a terrible nose] Ah! I am getting angry!\ldots +% \end{LTXexample} +% \iffalse +%</example> +% \fi +% \caption{Example of changing the name of a character} +% \label{fig:setcharactername_example} +% \end{figure} +% +% It is possible to change the name that appears to introduce character's lines +% within the text. This can be used, for example, when a character is first +% refered to as \emph{A voice}, until we learn his real identity, which is +% \emph{Cyrano}. An example is given in figure +% \ref{fig:setcharactername_example}. +% \begin{quote}\lstinline|\setcharactername|\marg{command}\marg{name}\end{quote} +% +% This command takes two mandatory arguments. The first one, |command|, is the +% command used to introduce this character's line. The second one is the name +% to display for this character. +% +% \subsubsection{Lines} +% \label{sec:lines} +% To introduce characters' lines, use the commands defined in the character +% definition (see the \lstinline|\character| command, or the example in figure +% \ref{fig:character_example}). +% +% \paragraph{Choose style} +% \changes{v0.6}{2014/06/25}{New character styles \texttt{imprimerie-verse}, \texttt{imprimerie-prose} and \texttt{arden}.} +% Several styles are available, to typeset character's name and lines in +% different ways. Change the style by loading package using option +% |characterstyle=|\marg{style} (available styles are |bold|, |center|, +% |margin|, |simple|, |imprimerie-verse|, |imprimerie-prose|). A few notes: +% \begin{itemize} +% \item Default style is |simple|. +% \item |imprimerie-verse| and |imprimerie-prose| styles are French +% \emph{de facto} standards for typesetting drama plays, respectively in verse +% and in prose, as defined by the \emph{Imprimerie nationale} +% \cite{imprimerienationale}. +% \item |arden| tries to mimick typesetting of the Arden Shakespeare series. +% \item |bold| needs a sans serif font to be defined (it should be done by +% default with latin alphabets, but must be done by hand with languages using +% non latin characters (greek, hindi, etc.)). +% \end{itemize} +% +% \paragraph{Customize style} +% \DescribeMacro{\speakswithoutdirection} +% \DescribeMacro{\speakswithdirection} +% If available styles does not fit your need, you can also define your own one. +% To do so, you can redefine the following commands. +% \begin{quote} +% \lstinline|\speakswithoutdirection|\marg{name}\\ +% \lstinline|\speakswithdirection|\marg{name}\marg{direction} +% \end{quote} +% The first one (\lstinline|\speakswithoutdirection|) is invoked to display a character's name +% to introduce its line. It takes one argument, which is the character's line. +% The second one (\lstinline|\speakswithdirection|) is also invoked to display a character's +% name to introduce its line, but it takes a second argument, which is stage +% directions to be printed together with character's name. +% +% See also section \ref{sec:directions} to see other ways to print stage +% directions. +% +% \subsection{Stage directions} +% \label{sec:directions} +% Let us begin with a warning: since we could not figure out a nice command +% name made from ``stage directions'', we used the French word +% \emph{(didascalie)} to build up command names. +% +% \DescribeMacro{\did} +% \DescribeEnv{dida} +% We define two ways to render stage directions: a short one, that is printed +% inline, and a long one, printed in its own paragraph. They act a bit like +% \lstinline|$\formula$| and \lstinline|\[\formula\]| for formulas. +% The first way is the command \lstinline|\did|\marg{directions}. The second way is the +% environment |dida|. +% +% \DescribeMacro{\onstage} +% Some stage directions are displayed centered under the scene or act +% definition (I often see it in classical drama, where the list of characters +% appearing in each scene is displayed that way). Command +% \lstinline|\onstage|\marg{directions} can be used to display such information. +% +% \DescribeMacro{\pause} +% As we often need to mark pauses in theater, we created the command \lstinline|\pause|, +% which is a shortcut for \lstinline|\did{\GetTranslation{Pause}}|. +% +% \subsection{Splitting verses} +% +% When writing verses, it is sometimes useful to split a verse between two +% characters: the first character starts it in its line, and the second one +% finishes it in a second line. Visually, the start of the second line is +% vertically aligned to the end of the first line. +% +% \begin{figure}[p] +% \centering +% \iffalse +%<*example> +% \fi +% \begin{dramatis}[hidden] +% \character[cmd={hermia}]{Hermia} +% \character[cmd={theseus}]{Theseus} +% \end{dramatis} +% \begin{LTXexample}[pos=b] +\adjustverse{-7em} + +\hermia +So is Lysander.\pauseverse + +\theseus +\resumeverse In himself he is. +% \end{LTXexample} +% \iffalse +%</example> +% \fi +% \caption{Example of commands to split verse} +% \label{fig:splitverse} +% \end{figure} +% +% \begin{figure}[p] +% \centering +% \iffalse +%<*example> +% \fi +% \begin{dramatis}[hidden] +% \character[cmd={hermia}]{Hermia} +% \character[cmd={theseus}]{Theseus} +% \end{dramatis} +% \begin{LTXexample}[pos=b] +\hermia +So is Lysander. + +\theseus +\phantom{So is Lysander.} In himself he is. +% \end{LTXexample} +% \iffalse +%</example> +% \fi +% \caption{Example of commands to split verse (using the \texttt{\bbackslash{}phantom} command)} +% \label{fig:splitverse-phantom} +% \end{figure} +% +% \danger +% Warning: I do not understand the code behind this feature. I copied-pasted code by David Carlisle\footnote{Originally written as an answer to a StackExchange question: see \url{https://tex.stackexchange.com/a/107727}.} without understanding it. There are probably bugs, but I won't be able to solve them. +% This feature can also be implemented using the \lstinline|\phantom| command (see figure \ref{fig:splitverse-phantom} for an example, page \pageref{fig:splitverse-phantom}). +% It is far less user-friendly, but it also less error prone. Choose wisely… +% +% \DescribeMacro{\pauseverse} +% \DescribeMacro{\resumeverse} +% \DescribeMacro{\adjustverse} +% +% Command \lstinline|\pauseverse| is used at the end of the verse to be continued, +% while command \lstinline|\resumeverse| is used at the beginning of the continuing +% verse. +% Let us face it: these commands are kind of a hack, and sometimes, the lines +% are not aligned the way one would expect them to. To correct this, command +% \lstinline|\adjustverse|\marg{length} can be used to add an extra (possibly negative) +% space when calling \lstinline|\resumeverse|, to get a correct alignment. +% See figure \ref{fig:splitverse}, page \pageref{fig:splitverse}, for an +% example of those three commands. +% +% When writing a play in verse, one can use a lot of those commands, which can +% be tedious because of their long names. So, defining ``shortcuts'' of those +% commands can be handy, as in the following example. +% +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\newcommand{\pv}{\pauseverse} +\newcommand{\rv}{\resumeverse} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% This is not done by default, because short command names are a scare ressource +% in \LaTeX, so, defining these commands by default might conflict with other +% packages, while most of |thalie| users will not use them. +% +% \section{Localization and Internationalization} +% \label{sec:i18n} +% +% \subsection{Localization} +% \label{sec:l10n} +% +% \changes{v0.9a}{2017/04/22}{Use package |translations| for localization.} +% +% Language cannot be defined directly in this package. Instead, the language +% currently used by |babel| or |polyglossia| is used to translate the following +% words (with or without capital letter, singular or plural): \emph{play}, +% \emph{act}, \emph{scene}, \emph{interlude}, \emph{pause}, \emph{curtain}. +% +% If the option for your language does not exist\footnote{You can also send me +% the translation for your language, to improve this package.}, or if you want +% to change the default words used here, you can set your own translation +% using command \lstinline|\DeclareTranslation| (see the |translations| package for more +% information). For instance use +% \lstinline|\DeclareTranslation{Spanish}{Curtain}{Tel\`on}| for Spanish\footnote{I may +% be wrong: I cannot speak Spanish.}. +% +% See section \ref{sec:languages} for the list of supported languages. +% +% \subsubsection{Common translations} +% \DescribeMacro{\playname} +% \DescribeMacro{\actname} +% \DescribeMacro{\scenename} +% \DescribeMacro{\interludename} +% \DescribeMacro{\pausename} +% \DescribeMacro{\curtainname} +% +% Commands defined here are shorter versions of strings commonly translated. +% +% For instance, \lstinline|\playname| is a shortcut for \lstinline|\GetTranslation{Play}|, +% \lstinline|\actname| is a shortcut for \lstinline|\GetTranslation{Act}|, and so on. +% +% \subsection{Non-latin alphabets} +% +% This package should work with languages using non-latin alphabets (greek, +% hindi, etc.). However, here are a few remarks. +% +% \begin{itemize} +% \item The |bold| character style (see section \ref{sec:lines}) can only be used if a sans serif font has been defined. For instance, for hindi, you might write in the preamble: \lstinline|\newfontfamily\hindifontsf{Noto Sans Devanagari}|. +% \end{itemize} +% +% \subsection{Language specific comments} +% \label{sec:languages} +% +% \changes{v0.10a}{2019/02/24}{New translation: German (thanks Ekkart Kleinod).} +% +% The following languages are available: +% +% \begin{itemize} +% \item English, +% \item French, +% \item German. +% \end{itemize} +% +% \subsubsection{English} +% +% \begin{itemize} +% \item The |arden| character style tries to mimick the typestting of the Arden Shakespeare series. +% \end{itemize} +% +% \subsubsection{French} +% +% \begin{itemize} +% \item The |imprimerie-verse| and |imprimerie-prose| character styles implements the French \emph{de facto} standards for typesetting drama plays, respectively in verse and in prose, as defined by the \emph{Imprimerie nationale} \cite{imprimerienationale}. +% \item The same book (\cite{imprimerienationale}) states that act numbers should be typeset in capital roman numerals (which is done by default with |thalie|), and that scene numbers should be typeset in small capital roman numerals, which is \emph{not} the default, but can be achieved by adding the following line in the preamble: \lstinline|\renewcommand{\thescene}{\textsc{\roman{scene}}}|. +% \end{itemize} +% +% \subsubsection{Other languages} +% +% I do not know anything related to other languages. If you have interesting advice for those languages that you would like to share (preferably with a reference to a reliable source), I would be happy to add them to this list! +% +% \section{Examples} +% \label{sec:examples} +% \changes{v0.9a}{2017/04/22}{Add section \emph{Examples}.} +% +% \subsection{Characters' lines} +% \label{sec:examples:characterslines} +% +% \subsubsection{Introduce lines of several characters at the same time.} +% +% Since \lstinline|\disposablecharacter| can display arbitrary text using the style of +% character names, it can be used to render a custom text when two characters +% are speaking together. +% +% \iffalse +%<*example> +% \fi +% \begin{LTXexample}[pos=b, preset={ +\begin{dramatis}[hidden] + \character[cmd=alice]{Alice} + \character[cmd=bob]{Bob} + \character[cmd=eve]{Eve} +\end{dramatis} +}] +\alice +Let's open it. + +\disposablecharacter{\bobname and \evename} +No! +% \end{LTXexample} +% \iffalse +%</example> +% \fi +% +% \subsubsection{Add a footnote on a character name} +% +% Adding a footnote on the character name introducing its line cannot be done on the character command defined by the dramatis person\ae. Instead, the \lstinline|\disposablecharacter| command can be used instead. +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\disposablecharacter{\alicename\footnote{An interesting note.}} +Hello, world! +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \subsubsection{Add a footnote in a stage direction} +% +% Footnote must be protected to be included in stage directions. +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\cyrano[clapping his hands\protect\footnote{An interesting footnote.}] +One! +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \subsection{Headers and footers} +% \label{sec:examples:headers} +% +% By default, with the |article| class, the header of the left page contains +% the play name, and the header of the right page contains the act number. +% +% \subsubsection{Act number on left, scene number on right} +% +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\renewcommand{\actmark}[1]{% + {\markboth{\MakeUppercase{\GetTranslation{Act}}\ \theact\ #1}{}}% +} +\renewcommand{\scenemark}[1]{% + {\markright{\MakeUppercase{\GetTranslation{Scene}}\ \thescene\ #1}}% +} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \subsubsection{Play name of left, act and scene name on right} +% +% \iffalse +%<*example> +% \fi +% \begin{lstlisting} +\usepackage{fancyhdr} +\pagestyle{fancy} +\fancyhf{} +\fancyhead[RO]{% + \textit{\MakeUppercase{% + \GetTranslation{Act} \theact{}, % + \GetTranslation{Scene} \thescene% + }}% +} +\fancyhead[LE]{\leftmark} +\end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \section{Implementation} +% \label{sec:implementation} +% +% \subsection{Required packages} +% Loading some packages. +% \begin{macrocode} +% Options +\RequirePackage{pgfkeys} +% Chapters, sections, etc +\RequirePackage{etoolbox} +\RequirePackage{suffix} +% Dramatis person\ae{} is written using a table. +\RequirePackage{tabularx} +% Handling spaces after having introduced characters' lines. +\RequirePackage{xspace} +% \end{macrocode} +% +% \subsection{Localization} +% +% Use |translations|. Translations are defined in the |dicts/thalie-<LANGUAGE>.trsl| files. +% \begin{macrocode} +\RequirePackage{translations} +\LoadDictionary{thalie} +\LoadDictionaryFor{fallback}{thalie} +% \end{macrocode} +% +% \subsection{Obsolete localization commands} +% +% \begin{macro}{\playname} +% \begin{macro}{\actname} +% \begin{macro}{\scenename} +% \begin{macro}{\interludename} +% \begin{macro}{\curtainname} +% \begin{macro}{\pausename} +% Shorter versions of commonly translated strings. +% \begin{macrocode} +\newcommand{\playname}{\GetTranslation{Play}} +\newcommand{\actname}{\GetTranslation{Act}} +\newcommand{\scenename}{\GetTranslation{Scene}} +\newcommand{\interludename}{\GetTranslation{Interlude}} +\newcommand{\curtainname}{\GetTranslation{Curtain}} +\newcommand{\pausename}{\GetTranslation{Pause}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Sectioning} +% \subsubsection{Headears, footers, counters, etc.} +% \begin{macro}{playmark} +% \begin{macro}{actmark} +% \begin{macro}{scenemark} +% Define commands \lstinline|\playmark|, \lstinline|\actmark| and \lstinline|\scenemark|, which are involved +% in headers and footers definition. +% \begin{macrocode} +\newcommand{\playmark}[1]{% + \markboth{\MakeUppercase{#1}}{}% +} +\newcommand{\actmark}[1]{% + \markright{\MakeUppercase{% + \GetTranslation{Act}\ \theact% + \ifdefempty{#1}{}{: #1}% + }}% +} +\newcommand{\scenemark}[1]{% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{theplay} +% \begin{macro}{theact} +% \begin{macro}{thescene} +% Defines counters for plays, acts and scenes, and the associated labels +% (\lstinline|\theplay|, \lstinline|\theact|, \lstinline|\thescene|). +% \begin{macrocode} +\newcounter{play} +\renewcommand{\theplay}{\arabic{play}} +\newcounter{act}[play] +\renewcommand{\theact}{\Roman{act}} +\newcounter{scene}[act] +\renewcommand{\thescene}{\arabic{scene}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Styles} +% Style difinition. Command \lstinline|\@displaytitle| is later used by commands +% \lstinline|\play|, \lstinline|\act| and \lstinline|\scene| (and their starred version) to typeset the +% title. +% \begin{macrocode} +\newcommand{\@displaytitle}[3]{ + % Arguments: + % - Style + % - Label (none = not in toc) + % - Title + \ifdefstring{#1}{center}{ + \begin{center} + \textsc{#2} + + #3 + \end{center} + }{\ifdefstring{#1}{bigcenter}{ + \begin{center} + \Large + \textsc{#2} + + #3 + \end{center} + }{\ifdefstring{#1}{box}{ + \begin{center} + \framebox{\begin{minipage}{0.7\textwidth} + \begin{center} + \Large \bfseries + \vspace{0.5em} + + #2 + \ifboolexpr{test{\ifstrempty{#3}} or test{\ifstrempty{#2}}}{}{---} + #3 + + \vspace{0.5em} + \end{center} + \end{minipage}} + \end{center} + \vspace{1em} + }{}}} +} +% \end{macrocode} +% +% \subsubsection{Sectioning commands} +% +% Some general commands to handle clearing pages, and table of contents. +% \begin{macrocode} +\newcommand\@clearpage[1]{% + % Clear page if necessary + \ifboolexpr{test{\ifdefstring{#1}{part}} or test{\ifdefstring{#1}{chapter}}}{ + \cleardoublepage + \thispagestyle{empty} + }{} +} + +% \end{macrocode} +% +% \begin{macro}{\play} +% \begin{macro}{\play*} +% Define sectioning commands to introduce plays. As for \lstinline|\section| (and +% other) sectioning command, the starred version does the same, excepted that +% nothing is written in the table of content. +% \begin{macrocode} +\newcommand{\play}[2][]{% + \refstepcounter{play} + \ifstrempty{#1}{ + \def\@short{#2} + }{ + \def\@short{#1} + } + \@clearpage{\@playlevel} + \playmark{\@short} + \addcontentsline{toc}{\@playlevel}{\@short} + \ifdefstring{\@playstyle}{custom}{ + \customplay{\theplay}{#2} + }{ + \@displaytitle{\@playstyle}{}{#2} + } +} +\WithSuffix\newcommand\play*[1]{% + \@clearpage{\@playlevel} + \ifdefstring{\@playstyle}{custom}{ + \customplay*{#1} + }{ + \@displaytitle{\@playstyle}{}{#1} + } +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\act} +% \begin{macro}{\act*} +% Define commands to introduce acts. +% \begin{macrocode} +\newcommand{\act}[2][]{% + \refstepcounter{act} + \ifstrempty{#1}{ + \def\@short{#2} + }{ + \def\@short{#1} + } + \ifdefempty{\@short}{ + \def\@label{\GetTranslation{Act} \theact{}} + }{ + \def\@label{\GetTranslation{Act} \theact{}\xspace: } + } + \@clearpage{\@actlevel} + \actmark{\@short} + \addcontentsline{toc}{\@actlevel}{\@label\@short} + \ifdefstring{\@actstyle}{custom}{ + \customact{\theact}{#2} + }{ + \@displaytitle{\@actstyle}{\GetTranslation{Act} \theact}{#2} + } +} +\WithSuffix\newcommand\act*[1]{% + \@clearpage{\@actlevel} + \ifdefstring{\@actstyle}{custom}{ + \customact*{#1} + }{ + \@displaytitle{\@actstyle}{}{#1} + } +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\scene} +% \begin{macro}{\scene*} +% Define commands to introduce scenes. +% \begin{macrocode} +\newcommand{\scene}[2][]{% + \refstepcounter{scene} + \ifstrempty{#1}{ + \def\@short{#2} + }{ + \def\@short{#1} + } + \ifdefempty{\@short}{ + \def\@label{\GetTranslation{Scene} \thescene{}} + }{ + \def\@label{\GetTranslation{Scene} \thescene{}\xspace: } + } + \@clearpage{\@scenelevel} + \scenemark{\@short} + \addcontentsline{toc}{\@scenelevel}{\@label\@short} + \ifdefstring{\@scenestyle}{custom}{ + \customscene{\thescene}{#2} + }{ + \@displaytitle{\@scenestyle}{\GetTranslation{Scene} \thescene}{#2} + } +} +\WithSuffix\newcommand\scene*[1]{% + \@clearpage{\@scenelevel} + \ifdefstring{\@scenestyle}{custom}{ + \customscene*{#1} + }{ + \@displaytitle{\@scenestyle}{}{#1} + } +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\interlude} +% \begin{macro}{\interlude*} +% Define commands to introduce interludes. +% \begin{macrocode} +\newcommand{\interlude}[2][]{% + \ifstrempty{#1}{ + \def\@short{#2} + }{ + \def\@short{#1} + } + \ifdefempty{\@short}{ + \def\@label{\GetTranslation{Interlude}} + }{ + \def\@label{\GetTranslation{Interlude}\xspace: } + } + \ifdefstring{\@interludelevel}{play}{ + \@clearpage{\@playlevel} + \playmark{\@short} + \addcontentsline{toc}{\@playlevel}{\@label\@short} + \@displaytitle{\@playstyle}{\GetTranslation{Interlude}}{#2} + }{\ifdefstring{\@interludelevel}{act}{ + \@clearpage{\@actlevel} + \actmark{\@short} + \addcontentsline{toc}{\@actlevel}{\@label\@short} + \@displaytitle{\@actstyle}{\GetTranslation{Interlude}}{#2} + }{% \@interludelevel is scene + \@clearpage{\@scenelevel} + \scenemark{\@short} + \addcontentsline{toc}{\@scenelevel}{\@label\@short} + \@displaytitle{\@scenestyle}{\GetTranslation{Interlude}}{#2} + }} +} +\WithSuffix\newcommand\interlude*[1]{% + \ifdefstring{\@interludelevel}{play}{ + \@clearpage{\@playlevel} + \@displaytitle{\@playstyle}{\GetTranslation{Interlude}}{#1} + }{\ifdefstring{\@interludelevel}{act}{ + \@clearpage{\@actlevel} + \@displaytitle{\@actstyle}{\GetTranslation{Interlude}}{#1} + }{% \@interludelevel is scene + \@clearpage{\@scenelevel} + \@displaytitle{\@scenestyle}{\GetTranslation{Interlude}}{#1} + }} +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Curtain} +% +% \begin{macro}{\curtain} +% Used to mark the end of an act. Prints ``curtain'' centered in its own line. +% \begin{macrocode} +% Curtain +\newcommand\curtain{ + \begin{center} + \Large\textsc{\GetTranslation{Curtain}} + \end{center} +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Characters} +% +% \subsubsection{Spacing} +% Add (or not) an |$\backslash$xspace| command at the end of character names, +% depending on the |xspace| package option. +% \begin{macrocode} +\newcommand{\@maybexspace}{% + \if@xspace% + \xspace% + \fi% +} +% \end{macrocode} +% +% \subsubsection{Characters' line} +% Define the command \lstinline|\@speaks|, wich introduce a character's line. It +% is not meant to be used by user, but will be used by further commands. It +% takes two arguments: the character's name, and optionally, a stage direction. +% \begin{macrocode} +\newcommand{\@speaks}[2][]{% + \ifstrempty{#1}{% + \speakswithoutdirection{#2}% + }{% + \speakswithdirection{#2}{#1}% + }\@maybexspace% +} +% \end{macrocode} +% +% \begin{macro}{\speakswithdirection} +% \begin{macro}{\speakswithoutdirection} +% Definition of styles for introducing characters' lines. These +% commands can be overloaded by user. +% \begin{macrocode} +\newenvironment{@smallcenter} + {\par\smallskip\centering} + {\par\nopagebreak\ignorespacesafterend} +\providecommand{\speakswithdirection}{} +\providecommand{\speakswithoutdirection}{} +\newcommand{\@setcharacterstyle}[1]{ + \ifstrequal{#1}{bold}{% + % Bold style + \renewcommand\speakswithdirection[2]{% + \noindent% + {\bfseries\sffamily ##1} \emph{(##2)}\xspace:% + } + \renewcommand\speakswithoutdirection[1]{% + \noindent% + {\bfseries\sffamily ##1\xspace:}% + }% + }{}% + \ifstrequal{#1}{center}{% + % Center style + \renewcommand\speakswithdirection[2]{% + \begin{center}% + \textsc{##1},\\\emph{##2}% + \end{center}% + \par\ignorespacesafterend% + }% + \renewcommand\speakswithoutdirection[1]{% + \begin{center}% + \textsc{##1}% + \end{center}% + \par\ignorespacesafterend% + }% + }{}% + \ifstrequal{#1}{imprimerie-verse}{% + % Style for verse plays defined by the French Imprimerie nationale + \renewcommand\speakswithdirection[2]{% + \begin{@smallcenter}% + \textsc{##1}, \emph{##2}% + \end{@smallcenter}% + }% + \renewcommand\speakswithoutdirection[1]{% + \begin{@smallcenter}% + \textsc{##1}% + \end{@smallcenter}% + }% + }{}% + \ifstrequal{#1}{imprimerie-prose}{% + % Style for prose plays defined by the French Imprimerie nationale + \renewcommand\speakswithdirection[2]{% + \noindent\hspace*{-\parindent}\textsc{##1}, \emph{##2}\xspace:% + }% + \renewcommand\speakswithoutdirection[1]{% + \noindent\hspace*{-\parindent}\textsc{##1}\xspace:% + }% + }{}% + \ifstrequal{#1}{arden}{% + \renewcommand\speakswithdirection[2]{% + \noindent\hspace*{-\parindent}\textsc{\MakeLowercase{##1}} [\emph{##2}]\quad% + }% + \renewcommand\speakswithoutdirection[1]{% + \noindent\hspace*{-\parindent}\textsc{\MakeLowercase{##1}}\quad% + }% + }{}% + \ifstrequal{#1}{simple}{% + % Simple style + \renewcommand\speakswithdirection[2]{% + \indent\textsc{##1}, \emph{##2}\xspace:% + }% + \renewcommand\speakswithoutdirection[1]{% + \indent\textsc{##1}\xspace:% + }% + }{}% + \ifstrequal{#1}{margin}{% + % Margin style + \setlength{\leftskip}{3cm} + \renewcommand\speakswithdirection[2]{% + \hspace{-3cm} ##1 ##2 + } + \renewcommand\speakswithoutdirection[1]{% + \hspace{-3cm} ##1 + }% + }{}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Dramatis person\ae{}} +% \begin{environment}{dramatis} +% In this environment are defined characters. +% \begin{macrocode} +\newcommand{\@dramatis@clear}{} +\newcommand{\@empty@}{} +\providebool{@dramatis@hidden} +\newenvironment{dramatis}[1][]{ + \@dramatis@clear{} + \undef{\@dramatis@clear} + \ifstrequal{#1}{hidden}{ + \booltrue{@dramatis@hidden} + }{\ifstrempty{#1}{ + \boolfalse{@dramatis@hidden} + \dramatisenv + }{ + \ClassError{thalie}{% + Environment dramatis does not accept option #1.% + }{ + } + } + } +}{% + \notbool{@dramatis@hidden}{% + \enddramatisenv + }{}% +} +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{dramatisenv} +% \changes{v0.9a}{2017/04/22}{It is now possible to customize style of dramatis person\ae.} +% \begin{macro}{\dramatischaracter} +% \begin{macro}{\dramatischaractername} +% \begin{macro}{\dramatischaracterdescription} +% \begin{macro}{\characterspace} +% \begin{environment}{charactergroup} +% \changes{v0.6}{2013/11/02}{Groups of characters are now aligned with other caracters.} +% Customizable commands to build dramatis person\ae. +% \begin{macrocode} +% Environment used to *display* dramatis personae. +\newenvironment{dramatisenv}{% + \list{}{\rightmargin1cm\leftmargin2cm}\item[] +}{% + \endlist% +} + +% Display character name +\newcommand{\dramatischaractername}[1]{\textbf{#1}} + +% Display character description +\newcommand{\dramatischaracterdescription}[1]{#1} + +% Adds a vertical space +\newcommand{\characterspace}{ % + \notbool{@dramatis@hidden}{% + \smallskip\newline % + }{} % +} + +% Display dramatis personae name and description +\newcommand{\dramatischaracter}[2]{ % + \hspace*{-1cm} % + \ifboolexpr{(not test {\ifdefempty{#1}}) and test {\ifdefempty{#2}}}{% + \dramatischaractername{#1} % + }{}% + \ifboolexpr{ test{\ifdefempty{#1}} and not test{\ifdefempty{#2}}}{% + \dramatischaracterdescription{#2} % + }{}% + \ifboolexpr{ (not test{\ifdefempty{#1}}) and (not test{\ifdefempty{#2}})}{% + \dramatischaractername{#1}, \dramatischaracterdescription{#2} % + }{}% + \newline % +} + +% Environment to manage groups of characters + \newlength{\@spaceaftergroup} +\newenvironment{charactergroup}[2][5cm]{% + \notbool{@dramatis@hidden}{% + \gdef\@groupname{#2} % + \gdef\@grouplength{#1} % + \hspace*{-1.3pt}\math\left. % + \minipage[c]{#1} % + \vspace*{2pt} % + }{}% +}{% + \notbool{@dramatis@hidden}{% + \vspace*{-8pt} % + \endminipage % + \right\} \endmath % + % + \setlength{\@spaceaftergroup}{\linewidth} + \addtolength\@spaceaftergroup{-\@grouplength} + \addtolength\@spaceaftergroup{-20pt} + \begin{minipage}[c]{\@spaceaftergroup} + \@groupname % + \end{minipage} + \newline % + }{}% +} +% \end{macrocode} +% \end{environment} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{environment} +% +% \subsubsection{Character definitions} +% \begin{macro}{\setcharactername} +% Set (or change) the name used to introduce the lines of a character. +% \begin{macrocode} +% The tough part of this code is to deal with optional argument. +\newcommand{\setcharactername}[2]{% + \expandafter\gdef\csname#1name\endcsname{% + #2\@maybexspace% + }% + \expandafter\gdef\csname#1\endcsname{% + \@ifnextchar[{% + \defcharcommand@with{#2}% + }{% + \defcharcommand@without{#2}% + }% + }% + \xappto{\@dramatis@clear}{% + \global\noexpand\csundef{#1}% + \global\noexpand\csundef{#1name}% + }% +} +% \end{macrocode} +% \end{macro} +% +% Define the command used to introduce a character's line. It takes two +% arguments: the first one is the name of the command to define, and the second +% one is the name of the character corresponding to this command. +% \begin{macrocode} +\newcommand{\@definecharactercommand}[2]{% + \ifcsdef{#1}{% + \ClassError{thalie}{% + A command named \@backslashchar#1 already exists. We cannot define a new + one.% + }{% + Choose another command name to introduce character #2's lines.% + }% + }{% + }% + \ifcsdef{#1name}{% + \ClassError{thalie}{% + A command named \@backslashchar#1name already exists. We cannot define a + new one.% + }{% + Choose another command name to introduce character #2's lines, such that + when a new command is defined by adding "name" to it, it does not + conflict with an existing one. + }% + }{% + }% + \setcharactername{#1}{#2}% +} +\def\defcharcommand@with#1[#2]{\@speaks[#2]{#1}} +\def\defcharcommand@without#1{\@speaks{#1}} +% \end{macrocode} +% +% \begin{macro}{\character} +% Define a character: put it in the dramatis person\ae{}, and define +% corresponding commands. +% \begin{macrocode} +\pgfkeys{ + % Character definition + /THALIE/CHARACTER/.is family, + /THALIE/CHARACTER, + cmd/.value required, + cmd/.store in=\@cmd, + drama/.value required, + drama/.store in=\@drama, + desc/.value required, + desc/.store in=\@desc, +} +\newcommand{\character}[2][]{ + \undef{\@drama} + \undef{\@cmd} + \undef{\@desc} + \pgfkeys{/THALIE/CHARACTER, #1}% + % Forbidden combinations + \ifboolexpr{ + ( test{\ifdef{\@cmd}} and test{\ifstrempty{#2}} ) or + ( test{\ifstrempty{#2}} and test{\ifundef{\@cmd}} and test{\ifundef{\@desc}} and test{\ifundef{\@drama}} ) or + ( test{\ifundef{\@cmd}} and (not test{\ifstrempty{#2}}) and test{\ifdef{\@drama}} ) + }{ + \ClassError{thalie}{Invalid character definition.}{All combination of omitted arguments are not allowed. See the documentation for more information} + }{} + % Defining character command + \ifboolexpr{ test{\ifdef{\@cmd}} and (not test{\ifstrempty{#2}}) }{% + \@definecharactercommand{\@cmd}{#2} + }{}% + \notbool{@dramatis@hidden}{% + \ifboolexpr{ (not test{\ifstrempty{#2}}) and test{\ifdef{\@cmd}} and test{\ifdef{\@drama}} and test{\ifundef{\@desc}}}{% + \ifdefempty{\@drama}{% + % Hidden character. Nothing added to dramatis personae + }{% + % Populating dramatis personae + \dramatischaracter{\@drama}{\@empty@} + }% + }{% + % Populating dramatis personae + \ifcsundef{@desc}{\gdef\@desc{}}{}% + \ifcsundef{@drama}{\gdef\@drama{#2}}{}% + \dramatischaracter{\@drama}{\@desc} + }% + }{}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\disposablecharacter} +% Disposable character (character used only a few times, defined on-the-fly, +% that does not appear in the dramatis person\ae{}). +% \begin{macrocode} +\newcommand{\disposablecharacter}[2][]{% + \@speaks[#1]{#2}% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Stage directions} +% \begin{macro}{\onstage} +% Centered stage direction. +% \begin{macrocode} +\newcommand{\onstage}[1]{{\centering \emph{#1}\par\medskip}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\did} +% Inline stage directions. +% \begin{macrocode} +\newcommand{\did}[1]{\emph{(#1)} } +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{dida} +% Bigger stage directions, in its own paragraph. +% \begin{macrocode} +\newenvironment{dida}{% + \begin{quote} + \begin{em} + }{% + \end{em} + \end{quote} +} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\pause} +% Shortcut for \lstinline|\did{\GetTranslation{Pause}}|. +% \begin{macrocode} +\newcommand\pause{\did{\GetTranslation{Pause}}} +% \end{macrocode} +% \end{macro} + +% \subsection{Splitting verses} +% \begin{macro}{\pauseverse} +% \changes{v0.7}{2015/12/28}{New commands \texttt{\bbackslash{}pauseverse}, \texttt{\bbackslash{}resumeverse}, \texttt{\bbackslash{}adjustverse}.} +% \begin{macro}{\resumeverse} +% \begin{macro}{\adjustverse} +% Commands to split a verse between several characters. +% \begin{macrocode} +% Thanks to Timothy Li for his question, and David Carlisle for his answer: +% https://tex.stackexchange.com/questions/107726/107727#107727 + +\newlength{\@verseadjust} +\setlength{\@verseadjust}{0pt} + +\newcommand{\adjustverse}[1]{\setlength{\@verseadjust}{#1}} + +\newcommand{\pauseverse}{{\abovedisplayshortskip\z@\abovedisplayskip\z@ + \belowdisplayshortskip\z@\belowdisplayskip\z@ + $$\global\dimen\@ne\predisplaysize + \xdef\tmp{% + \predisplaysize\the\predisplaysize + \prevgraf\the\prevgraf\relax}% + $$\vskip\dimexpr-\parskip-\baselineskip\relax}\tmp +} + +\newcommand{\resumeverse}{% + \hspace{\@verseadjust}\hspace{\the\dimen\@ne} +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Package options} +% Manage package options. +% \begin{macrocode} +\RequirePackage{pgfopts} + +\pgfkeys{ + % Character style + /THALIE/.cd, + characterstyle/.value required, + characterstyle/.default=simple, + characterstyle/.is choice, + characterstyle/bold/.code=\@setcharacterstyle{bold}, + characterstyle/center/.code=\@setcharacterstyle{center}, + characterstyle/margin/.code=\@setcharacterstyle{margin}, + characterstyle/simple/.code=\@setcharacterstyle{simple}, + characterstyle/arden/.code=\@setcharacterstyle{arden}, + characterstyle/imprimerie-verse/.code=\@setcharacterstyle{imprimerie-verse}, + characterstyle/imprimerie-prose/.code=\@setcharacterstyle{imprimerie-prose}, + characterstyle, +} + +\pgfkeys{ + % play style + /THALIE/.cd, + playstyle/.value required, + playstyle/.default=box, + playstyle/.is choice, + playstyle/center/.code=\def\@playstyle{center}, + playstyle/bigcenter/.code=\def\@playstyle{bigcenter}, + playstyle/box/.code=\def\@playstyle{box}, + playstyle/custom/.code=\def\@playstyle{custom}, + playstyle, +} +\pgfkeys{ + % act style + /THALIE/.cd, + actstyle/.value required, + actstyle/.default=bigcenter, + actstyle/.is choice, + actstyle/center/.code=\def\@actstyle{center}, + actstyle/bigcenter/.code=\def\@actstyle{bigcenter}, + actstyle/box/.code=\def\@actstyle{box}, + actstyle/custom/.code=\def\@actstyle{custom}, + actstyle, +} +\pgfkeys{ + % scene style + /THALIE/.cd, + scenestyle/.value required, + scenestyle/.default=center, + scenestyle/.is choice, + scenestyle/center/.code=\def\@scenestyle{center}, + scenestyle/bigcenter/.code=\def\@scenestyle{bigcenter}, + scenestyle/box/.code=\def\@scenestyle{box}, + scenestyle/custom/.code=\def\@scenestyle{custom}, + scenestyle, +} + +\pgfkeys{ + % play level + /THALIE/.cd, + playlevel/.value required, + playlevel/.default=chapter, + playlevel/.store in=\@playlevel, + playlevel, +} +\pgfkeys{ + % act level + /THALIE/.cd, + actlevel/.value required, + actlevel/.default=section, + actlevel/.store in=\@actlevel, + actlevel, +} +\pgfkeys{ + % scene level + /THALIE/.cd, + scenelevel/.value required, + scenelevel/.default=subsection, + scenelevel/.store in=\@scenelevel, + scenelevel, +} +\pgfkeys{ + % interlude level + /THALIE/.cd, + interludelevel/.value required, + interludelevel/.default=act, + interludelevel/.is choice, + interludelevel/play/.code=\def\@interludelevel{play}, + interludelevel/act/.code=\def\@interludelevel{act}, + interludelevel/scene/.code=\def\@interludelevel{scene}, + interludelevel, +} +\newif\if@xspace +\pgfkeys{ + % xspace option + /THALIE/.cd, + xspace/.value required, + xspace/.is if=@xspace, + xspace/.default=true, + xspace, +} + +\ProcessPgfPackageOptions{/THALIE} +% \end{macrocode} +% +% \begin{macro}{\setthalieoptions} +% \changes{v0.9a}{2017/04/22}{Add command \texttt{\bbackslash{}setthalieoptions}.} +% Redefine package options. +% \begin{macrocode} +\newcommand{\setthalieoptions}[1]{% + \pgfkeys{/THALIE/.cd, #1}% +} +% \end{macrocode} +% \end{macro} +% +% \changes{v0.5}{2013/06/08}{First published version.} +% +% \addcontentsline{toc}{section}{Change History} +% \PrintChanges +% +% \begin{thebibliography}{9} +% \addcontentsline{toc}{section}{References} +% \bibitem{imprimerienationale} +% {Imprimerie nationale}, +% \emph{Lexique des r\`egles typographiques en usage \`a l'Imprimerie nationale}, +% 2002, +% ISBN : 978-2-7433-0482-9 +% \bibitem{cyrano} +% {Edmond Rostand}, +% \emph{Cyrano de Bergerac}, +% 1897 +% \bibitem{midsummer} +% {William Shakespeare}, +% \emph{A Midsummer Night's Dream}, +% 1600 +% \bibitem{dtxtut} +% {Scott Pakin}, +% \emph{How to Package Your \LaTeX{} Package --- Tutorial on writing .dtx and .ins files}, +% 2004, +% \url{http://www.ctan.org/pkg/dtxtut/} +% \bibitem{clsguide} +% {The \LaTeX{} Team}, +% \emph{\LaTeXe{} for class and package writers}, +% 2006, +% \url{http://www.ctan.org/pkg/clsguide} +% \bibitem{drama} +% {Matt Swift}, +% \emph{drama --- Production-style stage script in LaTeX}, +% 2001, +% \url{http://www.ctan.org/pkg/drama} +% \bibitem{dramatist} +% {Massimiliano Dominici}, +% \emph{dramatist --- Typeset dramas, both in verse and in prose}, +% 2005, +% \url{http://www.ctan.org/pkg/dramatist} +% \bibitem{play} +% {James Kilfiger}, +% \emph{play --- Typeset drama using \LaTeX{}}, +% 2001, +% \url{http://www.ctan.org/pkg/play} +% \bibitem{screenplay} +% {John Pate}, +% \emph{screenplay --- A class file to typeset screenplays}, +% 2012, +% \url{http://www.ctan.org/pkg/screenplay} +% \bibitem{sides} +% {Wing L Mui}, +% \emph{sides --- A LaTeX class for typesetting stage plays}, +% 2005, +% \url{http://www.ctan.org/pkg/sides} +% \end{thebibliography} +% +% \StopEventually{% +% \addcontentsline{toc}{section}{Index} +% \PrintIndex +% } +% \Finale +\endinput |