% \iffalse meta-comment % Copyright 2010-2014 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} % % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{thalie} %<*package> [2014/06/26 v0.6 A package to typeset drama plays] % % %<*driver> \documentclass{ltxdoc} \EnableCrossrefs \CodelineIndex \RecordChanges \usepackage{array} \usepackage{attachfile} \usepackage{enumerate} \usepackage{multirow} \usepackage{hyperref} \usepackage{thalie} \usepackage{showexpl} \lstset{language=[LaTeX]TeX, numbers=left, numberstyle=\tiny} \usepackage[francais,english]{babel} \begin{document} \DocInput{thalie.dtx} \end{document} % % \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, \@ifundefined, \\, \protect\`, \(, \)} % \DoNotIndex{\addcontentsline, \addto, \ae, \AND, \arabic} % \DoNotIndex{\begin, \bfseries, \boolean} % \DoNotIndex{\captionsenglish, \captionsfrench, \center, \centering, \ClassError, \cleardoublepage, \csname, \csundef} % \DoNotIndex{\def, \defcharcommand@with, \defcharcommand@without} % \DoNotIndex{\emph, \end, \endcsname, \equal, \expandafter} % \DoNotIndex{\framebox} % \DoNotIndex{\gappto, \gdef, \global} % \DoNotIndex{\hspace} % \DoNotIndex{\ifthenelse, \@ifpackageloaded, \indent, \isundefined} % \DoNotIndex{\LARGE, \Large, \left, \leftskip} % \DoNotIndex{\medskip, \MakeUppercase, \markboth, \markright} % \DoNotIndex{ % \@actlevel, % \@actstyle, % \@character, % \@characterstyle, % \@clearpage, % \@definecharactercommand, % \@displaytitle, % \@dramatis@clear, % \@dramatis@hook, % \@groupname, % \@interludelevel, % \@label, % \@playlevel, % \@playstyle, % \@scenelevel, % \@scenestyle, % \@short, % \@speaks, % } % \DoNotIndex{\newcommand, \newcounter, \newenvironment, \noindent, \noexpand, \NOT} % \DoNotIndex{\OR} % \DoNotIndex{\par, \pgfkeys, \ProcessPgfPackageOptions, \protect, \provideboolean, \protected@xappto} % \DoNotIndex{\refstepcounter, \renewcommand, \RequirePackage, \right, \Roman} % \DoNotIndex{\section, \setboolean, \setlength, \sffamily} % \DoNotIndex{\tabularnewline, \textrm, \textsc, \textwidth, \thispagestyle} % \DoNotIndex{\undef} % \DoNotIndex{\vspace} % \DoNotIndex{\WithSuffix} % \DoNotIndex{\xappto, \xspace} % % \title{The \textsf{thalie} package\thanks{This document % corresponds to \textsf{thalie}~\fileversion, % dated \filedate.}\\A package to typeset drama plays} % \author{Louis Paternault\\ \texttt{spalax(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 exactly\footnote{Well, not % exactly: see the wish list page \pageref{sec:wishlist}. But I do not think % |dramatist| can do this either.} 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 send me smiles, cakes or poetry, or, better, the % text of the plays you write using my package\footnote{Seriously, it would % make me \emph{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} % % All the examples are taken from Edmond Rostand's \emph{Cyrano de Bergerac} % \cite{cyrano}. The snippets are from the original (French) version of this % play, roughly translated by myself (which means that they must be of poor % quality). % % A part of this play (now in public domain), is % \textattachfile[mimetype=text/plain,color=0 0 1]{cyrano.tex}{attached to this % file}, as a working example of this package. % % \subsection{Overview} % 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, section \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. % % Implementation is given in section \ref{sec:implementation}. % % \section{Usage} % \label{sec:usage} % % \subsection{Localization} % \DescribeMacro{\playname} % \DescribeMacro{\actname} % \DescribeMacro{\scenename} % \DescribeMacro{\interludename} % \DescribeMacro{\pausename} % \DescribeMacro{\curtainname} % Language cannot be defined directly in this package. Instead, the language % currently used by the |babel| package (i.e. the language returned by % |babel|'s |\languagename| command) is used to display names. % % Package |babel|, and its languages you want to use, must be loaded % \emph{before} this package, otherwise localization will not be available. % % The effect of choosing a language or another is to translate some words. The % corresponding commands, and the words they correspond to, are listed in table % \ref{table:l10n}. % % \begin{table} % \centering % \begin{tabular}{ccc} % \hline % Command & Result (in English) & Result (in French) \\ % \hline % |\playname| & Play & Pi\`ece \\ % |\actname| & Act & Acte \\ % |\scenename| & Scene & Sc\`ene \\ % |\interludename| & Interlude & Interm\`ede \\ % |\pausename| & Pause & Pause \\ % |\curtainname| & Curtain & Rideau \\ % \hline % \end{tabular} % \caption{Localization commands} % \label{table:l10n} % \end{table} % % 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 redefine the commands listed % in table \ref{table:l10n}. For instance use % |\renewcommand{\curtainname}{Tel\`on}| for Spanish (if I am not wrong). % % \subsection{Package options} % \label{sec:options} % % \subsubsection{Summary} % % Package options are summed up in table \ref{table:packageoptions}. % % \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 % \end{tabular} % \caption{Package options summary} % \label{table:packageoptions} % \end{table} % % \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 (|\chapter|, |\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. % % \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 |\play|, |\act| and % |\scene|. Their behaviour is as close as the ``usual'' sectioning commands % (|\chapter|, |\section| and so on) as possible, i.e.: % \begin{itemize} % \item Their signature is |\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 (|\play*|, |\act*| and |\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 |\act| and |\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 |\play|, |\act| and |\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 |\play|; if % your document has several single act plays, set % |playlevel=section,scenelevel=subsection| and ignore |\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 % |\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 % |\curtain|, which prints the word |\curtainname| 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{#1} #2 \end{center} } \WithSuffix\newcommand\customact*[1]{\customact{}{#1}} % \end{lstlisting} % \iffalse % % \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 % |\customact|\marg{counter}\marg{title} and |\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 |\customact| is the label of the act being printed % (that is, |\theact| for an act, |\theplay| for a play, etc.), its second % argument is its title. Command |\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 |\chapter|, |\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 |\theplay|, |\theact| and |\thescene|. For example, to % have acts numbered using letters, use |\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 |\section| are provided to deal % with headers and footers. When introducing, a new play, act or % scene, % respectively, commands |\playmark|\marg{label}, |\actmark|\marg{label} and % |\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. % % \subsection{Characters} % \label{sec:characters} % This part explains how to define characters, introduce character's lines, and % build and display the dramatis person\ae{}. % % \subsubsection{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{center} % |\begin{dramatis}|\oarg{hidden} % \end{center} % Then, several commands are available to define characters, and organize % character definitions. % % \DescribeMacro{\characterspace} % Command |\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 % % \fi % \caption{Example of character definition} % \label{fig:character_example} % \end{figure} % % \DescribeMacro{\character} % To define a character, use command |\character|. % \begin{center}% % |\character|\oarg{\emph{cmd=}command,\emph{drama=}dramatis,\emph{desc=}description}\marg{name}% % \end{center} % 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 |\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\up{\ref{character:silent}} & default\up{\ref{character:default}} \\ % & & & & & hidden\up{\ref{character:hidden}}\\ % \cline{2-6} % & \multirow{2}{*}{ \meta{desc}} & description & & silent\up{\ref{character:silent}} & default\up{\ref{character:default}} \\ % & & only\up{\ref{character:description}} & & & \\ % \hline % \multirow{2}{*}{ \meta{drama}} & no \meta{desc} & silent\up{\ref{character:silent}} & & & default\up{\ref{character:default}} \\ % \cline{2-6} % & \meta{desc} & silent\up{\ref{character:silent}} & & & default\up{\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:\\|\character[drama={A ghost}, desc={the king's ghost},|\\ % | cmd={ghost}]{The ghost}| % \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:\\|\character[desc={The kings' armies}]{}| % \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:\\|\character[drama={}, cmd={postman}]{The postman}| % \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:\\|\character{A priest}| % \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|\marg{description}. For example, one can use code of figure % \ref{fig:charactergroup} to define the three sons of another character. % % \begin{figure}[p] % \centering % \iffalse %<*example> % \fi % \begin{LTXexample} \begin{dramatis} \begin{charactergroup}{Two musicians} \character[desc={Gaston Henry}]{} \character[desc={Damon}]{} \end{charactergroup} \end{dramatis} % \end{LTXexample} % \iffalse % % \fi % \caption[Defining a group of characters]{Defining a group of characters\footnotemark} % \label{fig:charactergroup} % \end{figure} % \footnotetext{ % I admit I am cheating here. As it was difficult to find a single play that % illustrates every feature of this package, this snippet, in the original % \emph{Cyrano de Bergerac}, is used to give the names of the actors playing the % two musicians, which is a bit different from the purpose of the % |charactergroup| environment. Still, you can see how it is rendered, % which is the important part here. % } % % 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. % % \paragraph{Disposable character} % \DescribeMacro{\disposablecharacter} % One can need to define characters that are used only once (or a few times). % Command |\disposablecharacter| is here to help. % \begin{center}|\disposablecharacter|\oarg{directions}\marg{name}\end{center} % 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}. % % \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 % % \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 sailor}, until we learn his real identity, which is % \emph{Liz's father}. An example is given in figure % \ref{fig:setcharactername_example}. % \begin{center}|\setcharactername|\marg{command}\marg{name}\end{center} % % 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 |\character| command, or the example in figure % \ref{fig:character_example}). % % \paragraph{Choose style} % \changes{v0.6}{2014/06/25}{Added 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|). % Note that |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}, and |arden| tries to mimick typesetting of the % Arden Shakespeare series. Default style is |simple|. % % \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} % |\speakswithoutdirection|\marg{name}\\ % |\speakswithdirection|\marg{name}\marg{direction} % \end{quote} % The first one (|\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 (|\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 % |$\formula$| and |\[\formula\]| for formulas. % The first way is the command |\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 % |\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 |\pause|, % which is a shortcut for |\did{\pausename}|. % % \section{Implementation} % \label{sec:implementation} % % \subsection{Required packages} % Loading some packages. % \begin{macrocode} \RequirePackage{ifthen} % Chapters, sections, etc \RequirePackage{etoolbox} \RequirePackage{suffix} % Dramatis person\ae{} is written using a table. Package "longtable" is used to be % able to write it on several pages. \RequirePackage{longtable} % Handling spaces after having introduces characters' lines. \RequirePackage{xspace} % \end{macrocode} % % \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=\def\@characterstyle{bold}, characterstyle/center/.code=\def\@characterstyle{center}, characterstyle/margin/.code=\def\@characterstyle{margin}, characterstyle/simple/.code=\def\@characterstyle{simple}, characterstyle/arden/.code=\def\@characterstyle{arden}, characterstyle/imprimerie-verse/.code=\def\@characterstyle{imprimerie-verse}, characterstyle/imprimerie-prose/.code=\def\@characterstyle{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, } \ProcessPgfPackageOptions{/THALIE} % \end{macrocode} % % \subsection{Localization} % \begin{macro}{\playname} % \begin{macro}{\actname} % \begin{macro}{\scenename} % \begin{macro}{\interludename} % \begin{macro}{\curtainname} % \begin{macro}{\pausename} % Definition of the commands used for localization. The \emph{only} way to % choose the language to use is by loading the |babel| package before loading % this one. % \begin{macrocode} \newcommand{\playname}{Play} \newcommand{\actname}{Act} \newcommand{\scenename}{Scene} \newcommand{\interludename}{Interlude} \newcommand{\curtainname}{Curtain} \newcommand{\pausename}{Pause} \@ifpackageloaded{babel}{ \addto\captionsfrench{% \renewcommand{\playname}{Pi\`ece} \renewcommand{\actname}{Acte} \renewcommand{\scenename}{Sc\`ene} \renewcommand{\interludename}{Interm\`ede} \renewcommand{\curtainname}{Rideau} \renewcommand{\pausename}{Pause} } \addto\captionsenglish{% % Useless: these are the default... } }{} % \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 |\playmark|, |\actmark| and |\scenemark|, which are involved % in headers and footers definition. % \begin{macrocode} \newcommand{\playmark}[1]{% \markboth{\MakeUppercase{#1}}{}% } \newcommand{\actmark}[1]{% \markright{\MakeUppercase{#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 % (|\theplay|, |\theact|, |\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 |\@displaytitle| is later used by commands % |\play|, |\act| and |\scene| (and their starred version) to typeset the % title. % \begin{macrocode} \newcommand{\@displaytitle}[3]{ % Arguments: % - Style % - Label (none = not in toc) % - Title \ifthenelse{\equal{#1}{center}}{ \begin{center} \textsc{#2} #3 \end{center} }{\ifthenelse{\equal{#1}{bigcenter}}{ \begin{center} \Large \textsc{#2} #3 \end{center} }{\ifthenelse{\equal{#1}{box}}{ \begin{center} \framebox{\begin{minipage}{0.7\textwidth} \begin{center} \Large \bfseries \vspace{0.5em} #2 \ifthenelse{\equal{#3}{} \OR \equal{#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 \ifthenelse{\equal{#1}{part} \OR \equal{#1}{chapter}}{ \cleardoublepage \thispagestyle{empty} }{} } % \end{macrocode} % % \begin{macro}{\play} % \begin{macro}{\play*} % Define sectioning commands to introduce plays. As for |\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} \ifthenelse{\equal{#1}{}}{ \def\@short{#2} }{ \def\@short{#1} } \@clearpage{\@playlevel} \playmark{\@short} \addcontentsline{toc}{\@playlevel}{\@short} \ifthenelse{\equal{\@playstyle}{custom}}{ \customplay{\theplay}{#2} }{ \@displaytitle{\@playstyle}{}{#2} } } \WithSuffix\newcommand\play*[1]{% \@clearpage{\@playlevel} \ifthenelse{\equal{\@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} \ifthenelse{\equal{#1}{}}{ \def\@short{#2} }{ \def\@short{#1} } \ifthenelse{\equal{\@short}{}}{ \def\@label{\actname{} \theact{}} }{ \def\@label{\actname{} \theact{}\xspace: } } \@clearpage{\@actlevel} \actmark{\@label\@short} \addcontentsline{toc}{\@actlevel}{\@label\@short} \ifthenelse{\equal{\@actstyle}{custom}}{ \customact{\theact}{#2} }{ \@displaytitle{\@actstyle}{\actname{} \theact}{#2} } } \WithSuffix\newcommand\act*[1]{% \@clearpage{\@actlevel} \ifthenelse{\equal{\@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} \ifthenelse{\equal{#1}{}}{ \def\@short{#2} }{ \def\@short{#1} } \ifthenelse{\equal{\@short}{}}{ \def\@label{\scenename{} \thescene{}} }{ \def\@label{\scenename{} \thescene{}\xspace: } } \@clearpage{\@scenelevel} \scenemark{\@label\@short} \addcontentsline{toc}{\@scenelevel}{\@label\@short} \ifthenelse{\equal{\@scenestyle}{custom}}{ \customscene{\thescene}{#2} }{ \@displaytitle{\@scenestyle}{\scenename{} \thescene}{#2} } } \WithSuffix\newcommand\scene*[1]{% \@clearpage{\@scenelevel} \ifthenelse{\equal{\@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][]{% \ifthenelse{\equal{#1}{}}{ \def\@short{#2} }{ \def\@short{#1} } \ifthenelse{\equal{\@short}{}}{ \def\@label{\interludename{}} }{ \def\@label{\interludename{}\xspace: } } \ifthenelse{\equal{\@interludelevel}{play}}{ \@clearpage{\@playlevel} \playmark{\@label\@short} \addcontentsline{toc}{\@playlevel}{\@label\@short} \@displaytitle{\@playstyle}{\interludename}{#2} }{\ifthenelse{\equal{\@interludelevel}{act}}{ \@clearpage{\@actlevel} \actmark{\@label\@short} \addcontentsline{toc}{\@actlevel}{\@label\@short} \@displaytitle{\@actstyle}{\interludename}{#2} }{% \@interludelevel is scene \@clearpage{\@scenelevel} \scenemark{\@label\@short} \addcontentsline{toc}{\@scenelevel}{\@label\@short} \@displaytitle{\@scenestyle}{\interludename}{#2} }} } \WithSuffix\newcommand\interlude*[1]{% \ifthenelse{\equal{\@interludelevel}{play}}{ \@clearpage{\@playlevel} \@displaytitle{\@playstyle}{\interludename}{#1} }{\ifthenelse{\equal{\@interludelevel}{act}}{ \@clearpage{\@actlevel} \@displaytitle{\@actstyle}{\interludename}{#1} }{% \@interludelevel is scene \@clearpage{\@scenelevel} \@displaytitle{\@scenestyle}{\interludename}{#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} \sffamily\LARGE\bfseries \textsc{\curtainname} \end{center} } % \end{macrocode} % \end{macro} % % \subsection{Characters} % % \subsubsection{Characters' line} % % Define the command |\@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][]{% \ifthenelse{\equal{#1}{}}{% \speakswithoutdirection{#2}% }{% \speakswithdirection{#2}{#1}% }\xspace% } % \end{macrocode} % % \begin{macro}{\speakswithdirection} % \begin{macro}{\speakswithoutdirection} % Definition of styles for introducing characters' lines. These % commands can be overloaded by user. % \begin{macrocode} \ifthenelse{\equal{\@characterstyle}{bold}}{% % Bold style \newcommand\speakswithdirection[2]{% \noindent% {\bfseries\sffamily #1} \emph{(#2)}\xspace:% } \newcommand\speakswithoutdirection[1]{% \noindent% {\bfseries\sffamily #1\xspace:}% }% }{}% \ifthenelse{\equal{\@characterstyle}{center}}{% % Center style \newcommand\speakswithdirection[2]{% \begin{center}% \textsc{#1},\\\emph{#2}% \end{center}% }% \newcommand\speakswithoutdirection[1]{% \begin{center}% \textsc{#1}% \end{center}% }% }{}% \ifthenelse{\equal{\@characterstyle}{imprimerie-verse}}{% % Style for verse plays defined by the French Imprimerie nationale \newcommand\speakswithdirection[2]{% \begin{center}% \textsc{#1}, \emph{#2}% \end{center}% }% \newcommand\speakswithoutdirection[1]{% \begin{center}% \textsc{#1}% \end{center}% }% }{}% \ifthenelse{\equal{\@characterstyle}{imprimerie-prose}}{% % Style for prose plays defined by the French Imprimerie nationale \newcommand\speakswithdirection[2]{% \noindent\hspace*{-\parindent}\textsc{#1}, \emph{#2}\xspace:% }% \newcommand\speakswithoutdirection[1]{% \noindent\hspace*{-\parindent}\textsc{#1}\xspace:% }% }{}% \ifthenelse{\equal{\@characterstyle}{arden}}{% \newcommand\speakswithdirection[2]{% \noindent\hspace*{-\parindent}\textsc{\MakeLowercase{#1}} [\emph{#2}]\quad% }% \newcommand\speakswithoutdirection[1]{% \noindent\hspace*{-\parindent}\textsc{\MakeLowercase{#1}}\quad% }% }{}% \ifthenelse{\equal{\@characterstyle}{simple}}{% % Simple style \newcommand\speakswithdirection[2]{% \indent\textsc{#1}, \emph{#2}\xspace:% }% \newcommand\speakswithoutdirection[1]{% \indent\textsc{#1}\xspace:% }% }{}% \ifthenelse{\equal{\@characterstyle}{margin}}{% % Margin style \setlength{\leftskip}{3cm} \newcommand\speakswithdirection[2]{% \hspace{-3cm} #1 #2 } \newcommand\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}{} \provideboolean{@dramatis@hidden} \newenvironment{dramatis}[1][]{ \@dramatis@clear{} \undef{\@dramatis@clear} \undef{\@dramatis@hook} \newcommand{\@dramatis@hook}{} \ifthenelse{\equal{#1}{hidden}}{ \setboolean{@dramatis@hidden}{true} }{\ifthenelse{\equal{#1}{}}{ \setboolean{@dramatis@hidden}{false} \gappto{\@dramatis@hook}{\begin{longtable}{l}} }{ \ClassError{thalie}{% Environment dramatis does not accept option #1.% }{ } } } }{% \ifthenelse{\boolean{@dramatis@hidden}}{% }{% \gappto{\@dramatis@hook}{\end{longtable}} \@dramatis@hook{}% } } % \end{macrocode} % \end{environment} % % Generic character output % \begin{macrocode} \newcommand{\@character}[2]{% \ifthenelse{\( \equal{#1}{} \) \AND \( \equal{#2}{} \)}{% ~% }{}% \ifthenelse{\( \NOT \equal{#1}{} \) \AND \( \equal{#2}{} \)}{% #1% }{}% \ifthenelse{\( \equal{#1}{} \) \AND \( \NOT \equal{#2}{} \)}{% #2% }{}% \ifthenelse{\( \NOT \equal{#1}{} \) \AND \( \NOT \equal{#2}{} \)}{% #1, #2% }{}% \tabularnewline } % \end{macrocode} % % \begin{macro}{\characterspace} % Add space in the dramatis person\ae{}. % \begin{macrocode} \newcommand{\characterspace}{% \gappto{\@dramatis@hook}{\@character{}{~}} } % \end{macrocode} % \end{macro} % % \begin{environment}{charactergroup} % \changes{v0.6}{2013/11/02}{Groups of characters are now aligned with other caracters.} % Gathers definition of characters that share the same description. % \begin{macrocode} \newenvironment{charactergroup}[1]{% \gdef\@groupname{#1} \gappto{\@dramatis@hook}{ \hspace{-7.2pt}\begin{math}\left. \begin{tabular}{ll} } }{% \gappto{\@dramatis@hook}{ \end{tabular} \right\} \end{math} } \protected@xappto{\@dramatis@hook}{\@groupname} \gappto{\@dramatis@hook}{\tabularnewline} } % \end{macrocode} % \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\xspace% }% \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]{% \@ifundefined{#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.% }% }% \@ifundefined{#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 /CHARACTER/.is family, /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{/CHARACTER, #1}% % Forbidden combinations \ifthenelse{ \( \( \NOT \isundefined{\@cmd} \) \AND \equal{#2}{} \) \OR \( \equal{#2}{} \AND \isundefined{\@cmd} \AND \isundefined{\@desc} \AND \isundefined{\@drama} \) \OR \( \isundefined{\@cmd} \AND \( \NOT \equal{#2}{} \) \AND \( \NOT \isundefined{\@drama} \) \) }{ \ClassError{thalie}{Invalid character definition.}{All combination of omitted arguments are not allowed. See the documentation for more information} }{ % Defining character command \ifthenelse{\( \NOT \isundefined{\@cmd} \) \AND \( \NOT \equal{#2}{} \)}{ \@definecharactercommand{\@cmd}{#2} }{ } \ifthenelse{ \( \NOT \equal{#2}{} \) \AND \( \NOT \isundefined{\@cmd} \) \AND \( \NOT \isundefined{\@drama} \) \AND \isundefined{\@desc} }{ \ifthenelse{\equal{\@drama}{}}{ % Hidden character. Nothing added to dramatis personae }{ % Populating dramatis personae \protected@xappto{\@dramatis@hook}{\noexpand\@character{\@drama}{}} } }{ % Populating dramatis personae \@ifundefined{@desc}{\def\@desc{}}{} \@ifundefined{@drama}{\def\@drama{#2}}{} \protected@xappto{\@dramatis@hook}{\noexpand\@character{\@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 |\did{\pausename}|. % \begin{macrocode} \newcommand\pause{\did{\pausename}} % \end{macrocode} % \end{macro} % % \changes{v0.5}{2013/06/08}{First published version.} % % \addcontentsline{toc}{section}{Change History} % \PrintChanges % % \section*{Wish list} % \label{sec:wishlist} % \addcontentsline{toc}{section}{Wish list} % % \subsubsection*{Verse} % I would like to be able to render drama plays in verse, where a verse can be % continued on the next line if relevant (as shown on figure \ref{fig:verse}). % But I could not find a way to do this, which would not be too complicated for % the user, and which I am able to implement. % % \begin{figure} % \centering % \fbox{\begin{minipage}{1\linewidth} % \small % \begin{otherlanguage}{francais} % \begin{dramatis}[hidden] % \character[cmd=cyrano]{Cyrano} % \character[cmd=vicomte]{Le vicomte} % \end{dramatis} % \renewcommand{\speakswithoutdirection}[1]{ % \begin{center}% % \textsc{#1}% % \end{center}% % } % \renewcommand{\speakswithdirection}[2]{ % \begin{center}% % \textsc{#1},\\\emph{#2}% % \end{center}% % } % \newlength{\currentverselength} % \begin{verse} % \vicomte % Vous\ldots vous avez un nez\ldots heu\ldots un nez\ldots tr\`es grand. % \settowidth{\currentverselength}{Vous\ldots vous avez un nez\ldots heu\ldots un nez\ldots tr\`es grand.} % % \cyrano[gravement] % \hspace{\currentverselength} Tr\`es. % % \vicomte[riant] % Ha ! % \settowidth{\currentverselength}{Ha !} % % \cyrano[imperturbable] % \hspace{\currentverselength} C'est tout ? \ldots % \settowidth{\currentverselength}{\hspace{\currentverselength} C'est tout ? \ldots} % % \vicomte % \hspace{\currentverselength} Mais\ldots % \settowidth{\currentverselength}{\hspace{\currentverselength} Mais\ldots} % % \cyrano % \hspace{\currentverselength} Ah ! non ! c'est un peu court, jeune homme !\\ % On pouvait dire\ldots Oh ! Dieu ! \ldots bien des choses en somme\ldots\\ % En variant le ton, --- par exemple, tenez :\\ % Agressif : \og Moi, monsieur, si j'avais un tel nez,\\ % Il faudrait sur-le-champ que je me l'amputasse ! \fg % \end{verse} % \end{otherlanguage} % \end{minipage}} % % \medskip % From \emph{Cyrano de Bergerac}, by Edmond Rostand (act I, scene 4). % \caption{Wished verse rendering} % \label{fig:verse} % \end{figure} % % \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{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 screen­plays}, % 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