summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/thalie
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/thalie
Initial commit
Diffstat (limited to 'macros/latex/contrib/thalie')
-rw-r--r--macros/latex/contrib/thalie/CHANGELOG.md77
-rw-r--r--macros/latex/contrib/thalie/LICENSE.txt416
-rw-r--r--macros/latex/contrib/thalie/README.md26
-rw-r--r--macros/latex/contrib/thalie/dicts/thalie-english.trsl26
-rw-r--r--macros/latex/contrib/thalie/dicts/thalie-fallback.trsl45
-rw-r--r--macros/latex/contrib/thalie/dicts/thalie-french.trsl26
-rw-r--r--macros/latex/contrib/thalie/dicts/thalie-german.trsl26
-rw-r--r--macros/latex/contrib/thalie/thalie.dtx2163
-rw-r--r--macros/latex/contrib/thalie/thalie.ins59
-rw-r--r--macros/latex/contrib/thalie/thalie.pdfbin0 -> 422776 bytes
10 files changed, 2864 insertions, 0 deletions
diff --git a/macros/latex/contrib/thalie/CHANGELOG.md b/macros/latex/contrib/thalie/CHANGELOG.md
new file mode 100644
index 0000000000..e95a5af9e5
--- /dev/null
+++ b/macros/latex/contrib/thalie/CHANGELOG.md
@@ -0,0 +1,77 @@
+* thalie 0.10b (2019-07-31)
+
+ * Minor fixes and updates of examples.
+
+ -- Louis Paternault <spalax+ctan@gresille.org>
+
+* thalie 0.10a (2019-02-24)
+
+ * New translation: German (thanks Ekkart Kleinod).
+ * Minor documentation updates.
+
+ -- Louis Paternault <spalax+ctan@gresille.org>
+
+* thalie 0.9b (2017-04-24)
+
+ * Remove blank page at the beginning of documentation.
+ * Add missing dependency.
+
+ -- Louis Paternault <spalax+ctan@gresille.org>
+
+* thalie 0.9a (2017-04-22)
+
+ * Thalie.sty
+
+ * Commands `\playmark`, `\actmark` and `\scenemark` no longer include label (e.g. "Act 1"). It is up to the user to add it or not.
+ * Display default translations, even in language environments using non-latin characters where no latin font is available (closes #24).
+ * Do not add a wrong indentation after character name in verse environment (closes #3).
+ * Package options can be redefined anywhere in the document (closes #5).
+ * Reduce vertical space around character names in style `imprimerie-verse` (closes #6).
+ * Replace package [ifthen](http://ctan.org/pkg/ifthen) with package [etoolbox](http://ctan.org/pkg/etoolbox) (closes #29).
+ * Style of ramatis personæ can be customized (closes #9 #15 #18 #19).
+ * Use [translations](http://ctan.org/pkg/translations) to translate words ("act", "scene", etc.).
+
+ * Documentation
+
+ * Add sections *Examples* and *Localization*.
+ * Add a note about non-latin characters and character style `bold` (closes #26).
+ * Fix `\customact` example.
+ * Various minor improvements.
+
+ * README
+
+ * Convert README from text to markdown.
+ * Add examples.
+
+ -- Louis Paternault <spalax+ctan@gresille.org>
+
+* thalie 0.8 (2015-12-30)
+
+ * Fix release errors in previous release.
+
+ -- Louis Paternault <spalax+ctan@gresille.org>
+
+* thalie 0.7 (2015-12-28)
+
+ * Update project URL to http://framagit.org/spalax/thalie.
+ * Add commands `\pauseverse`, `\resumeverse` and `\adjustverse`.
+ * Add package option `xspace`.
+ * Minor documentation improvements.
+
+ -- Louis Paternault <spalax+ctan@gresille.org>
+
+* thalie 0.6 (2014-06-26)
+
+ * Add character style `imprimerie-verse`, `imprimerie-prose`, and `arden`.
+ * Correct a lot of typos in documentation (thanks Per).
+ * Better alignment of groups of characters.
+ * Improve spacing (thanks Caroline).
+ * Several documentation and core improvements.
+
+ -- Louis Paternault <spalax+ctan@gresille.org>
+
+* thalie 0.5 (2013-06-08)
+
+ * Initial release.
+
+ -- Louis Paternault <spalax+ctan@gresille.org>
diff --git a/macros/latex/contrib/thalie/LICENSE.txt b/macros/latex/contrib/thalie/LICENSE.txt
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/latex/contrib/thalie/LICENSE.txt
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % 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 M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/latex/contrib/thalie/README.md b/macros/latex/contrib/thalie/README.md
new file mode 100644
index 0000000000..a9a4bcec86
--- /dev/null
+++ b/macros/latex/contrib/thalie/README.md
@@ -0,0 +1,26 @@
+Thalie 🎭 A LaTeX package providing tools to typeset drama plays
+===============================================================
+
+It defines commands to introduce characters' lines, to render stage direction,
+to divide a play into acts and scenes, to automatically build the dramatis
+personae, etc.
+
+- Version 0.10b (2019-07-31)
+- Usage and installation instruction are available in the [documentation](http://mirrors.ctan.org/macros/latex/contrib/thalie/thalie.pdf).
+- Examples
+ - [French play, in verse](https://framagit.org/spalax/thalie/raw/v0.10b/examples/cyrano.pdf) ([source](https://framagit.org/spalax/thalie/raw/v0.10b/examples/cyrano.tex))
+ - [French play, in prose](https://framagit.org/spalax/thalie/raw/v0.10b/examples/domjuan.pdf) ([source](https://framagit.org/spalax/thalie/raw/v0.10b/examples/domjuan.tex))
+ - [English play, in prose](https://framagit.org/spalax/thalie/raw/v0.10b/examples/hamlet.pdf) ([source](https://framagit.org/spalax/thalie/raw/v0.10b/examples/hamlet.tex))
+
+License
+-------
+
+*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.
diff --git a/macros/latex/contrib/thalie/dicts/thalie-english.trsl b/macros/latex/contrib/thalie/dicts/thalie-english.trsl
new file mode 100644
index 0000000000..f1f76492f5
--- /dev/null
+++ b/macros/latex/contrib/thalie/dicts/thalie-english.trsl
@@ -0,0 +1,26 @@
+\ProvideDictionaryFor{English}{thalie}
+
+\ProvideDictTranslation{play}{play}
+\ProvideDictTranslation{plays}{plays}
+\ProvideDictTranslation{Play}{Play}
+\ProvideDictTranslation{Plays}{Plays}
+\ProvideDictTranslation{act}{acte}
+\ProvideDictTranslation{acts}{acts}
+\ProvideDictTranslation{Act}{Act}
+\ProvideDictTranslation{Acts}{Acts}
+\ProvideDictTranslation{scene}{scene}
+\ProvideDictTranslation{scenes}{scenes}
+\ProvideDictTranslation{Scene}{Scene}
+\ProvideDictTranslation{Scenes}{Scenes}
+\ProvideDictTranslation{interlude}{interlude}
+\ProvideDictTranslation{interludes}{interludes}
+\ProvideDictTranslation{Interlude}{Interlude}
+\ProvideDictTranslation{Interludes}{Interludes}
+\ProvideDictTranslation{curtain}{curtain}
+\ProvideDictTranslation{curtains}{curtains}
+\ProvideDictTranslation{Curtain}{Curtain}
+\ProvideDictTranslation{Curtains}{Curtains}
+\ProvideDictTranslation{pause}{pause}
+\ProvideDictTranslation{pauses}{pauses}
+\ProvideDictTranslation{Pause}{Pause}
+\ProvideDictTranslation{Pauses}{Pauses}
diff --git a/macros/latex/contrib/thalie/dicts/thalie-fallback.trsl b/macros/latex/contrib/thalie/dicts/thalie-fallback.trsl
new file mode 100644
index 0000000000..2f29486715
--- /dev/null
+++ b/macros/latex/contrib/thalie/dicts/thalie-fallback.trsl
@@ -0,0 +1,45 @@
+\ProvideDictionaryFor{fallback}{thalie}
+
+\makeatletter
+
+\newcommand{\@latin}[1]{%
+ % Try hard to display argument, even in an environment that uses non-latin characters.
+ \ifdefined\normalfontlatin%
+ {\normalfontlatin#1}%
+ \else%
+ {%
+ \ifdefined\ensureascii%
+ {\ensureascii{#1}}%
+ \else%
+ {#1}%
+ \fi%
+ }%
+ \fi%
+}
+
+\ProvideTranslationFallback{play}{\@latin{play}}
+\ProvideTranslationFallback{plays}{\@latin{plays}}
+\ProvideTranslationFallback{Play}{\@latin{Play}}
+\ProvideTranslationFallback{Plays}{\@latin{Plays}}
+\ProvideTranslationFallback{act}{\@latin{acte}}
+\ProvideTranslationFallback{acts}{\@latin{acts}}
+\ProvideTranslationFallback{Act}{\@latin{Act}}
+\ProvideTranslationFallback{Acts}{\@latin{Acts}}
+\ProvideTranslationFallback{scene}{\@latin{scene}}
+\ProvideTranslationFallback{scenes}{\@latin{scenes}}
+\ProvideTranslationFallback{Scene}{\@latin{Scene}}
+\ProvideTranslationFallback{Scenes}{\@latin{Scenes}}
+\ProvideTranslationFallback{interlude}{\@latin{interlude}}
+\ProvideTranslationFallback{interludes}{\@latin{interludes}}
+\ProvideTranslationFallback{Interlude}{\@latin{Interlude}}
+\ProvideTranslationFallback{Interludes}{\@latin{Interludes}}
+\ProvideTranslationFallback{curtain}{\@latin{curtain}}
+\ProvideTranslationFallback{curtains}{\@latin{curtains}}
+\ProvideTranslationFallback{Curtain}{\@latin{Curtain}}
+\ProvideTranslationFallback{Curtains}{\@latin{Curtains}}
+\ProvideTranslationFallback{pause}{\@latin{pause}}
+\ProvideTranslationFallback{pauses}{\@latin{pauses}}
+\ProvideTranslationFallback{Pause}{\@latin{Pause}}
+\ProvideTranslationFallback{Pauses}{\@latin{Pauses}}
+
+\makeatother
diff --git a/macros/latex/contrib/thalie/dicts/thalie-french.trsl b/macros/latex/contrib/thalie/dicts/thalie-french.trsl
new file mode 100644
index 0000000000..abc058f11f
--- /dev/null
+++ b/macros/latex/contrib/thalie/dicts/thalie-french.trsl
@@ -0,0 +1,26 @@
+\ProvideDictionaryFor{French}{thalie}
+
+\ProvideDictTranslation{play}{pi\`ece}
+\ProvideDictTranslation{plays}{pi\`eces}
+\ProvideDictTranslation{Play}{Pi\`ece}
+\ProvideDictTranslation{Plays}{Pi\`eces}
+\ProvideDictTranslation{act}{acte}
+\ProvideDictTranslation{acts}{actes}
+\ProvideDictTranslation{Act}{Acte}
+\ProvideDictTranslation{Acts}{Actes}
+\ProvideDictTranslation{scene}{sc\`ene}
+\ProvideDictTranslation{scenes}{sc\`enes}
+\ProvideDictTranslation{Scene}{Sc\`ene}
+\ProvideDictTranslation{Scenes}{Sc\`enes}
+\ProvideDictTranslation{interlude}{interm\`ede}
+\ProvideDictTranslation{interludes}{interm\`edes}
+\ProvideDictTranslation{Interlude}{Interm\`ede}
+\ProvideDictTranslation{Interludes}{Interm\`edes}
+\ProvideDictTranslation{curtain}{rideau}
+\ProvideDictTranslation{curtains}{rideaux}
+\ProvideDictTranslation{Curtain}{Rideau}
+\ProvideDictTranslation{Curtains}{Rideaux}
+\ProvideDictTranslation{pause}{pause}
+\ProvideDictTranslation{pauses}{pauses}
+\ProvideDictTranslation{Pause}{Pause}
+\ProvideDictTranslation{Pauses}{Pauses}
diff --git a/macros/latex/contrib/thalie/dicts/thalie-german.trsl b/macros/latex/contrib/thalie/dicts/thalie-german.trsl
new file mode 100644
index 0000000000..30f1b76d8c
--- /dev/null
+++ b/macros/latex/contrib/thalie/dicts/thalie-german.trsl
@@ -0,0 +1,26 @@
+\ProvideDictionaryFor{German}{thalie}
+
+\ProvideDictTranslation{play}{St{\"u}ck}
+\ProvideDictTranslation{plays}{St{\"u}cke}
+\ProvideDictTranslation{Play}{St{\"u}ck}
+\ProvideDictTranslation{Plays}{St{\"u}cke}
+\ProvideDictTranslation{act}{Akt}
+\ProvideDictTranslation{acts}{Akte}
+\ProvideDictTranslation{Act}{Akt}
+\ProvideDictTranslation{Acts}{Akte}
+\ProvideDictTranslation{scene}{Szene}
+\ProvideDictTranslation{scenes}{Szenen}
+\ProvideDictTranslation{Scene}{Szene}
+\ProvideDictTranslation{Scenes}{Szenen}
+\ProvideDictTranslation{interlude}{Zwischenspiel}
+\ProvideDictTranslation{interludes}{Zwischenspiele}
+\ProvideDictTranslation{Interlude}{Zwischenspiel}
+\ProvideDictTranslation{Interludes}{Zwischenspiele}
+\ProvideDictTranslation{curtain}{Vorhang}
+\ProvideDictTranslation{curtains}{Vorh{\"a}nge}
+\ProvideDictTranslation{Curtain}{Vorhang}
+\ProvideDictTranslation{Curtains}{Vorh{\"a}nge}
+\ProvideDictTranslation{pause}{Pause}
+\ProvideDictTranslation{pauses}{Pausen}
+\ProvideDictTranslation{Pause}{Pause}
+\ProvideDictTranslation{Pauses}{Pausen}
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 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
diff --git a/macros/latex/contrib/thalie/thalie.ins b/macros/latex/contrib/thalie/thalie.ins
new file mode 100644
index 0000000000..d8fc52f615
--- /dev/null
+++ b/macros/latex/contrib/thalie/thalie.ins
@@ -0,0 +1,59 @@
+%% 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.
+
+\input{docstrip}
+
+\keepsilent
+\usedir{tex/latex/thalie}
+
+\preamble
+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.
+\endpreamble
+
+\generate{\file{thalie.sty}{\from{thalie.dtx}{package}}}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* thalie.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* thalie.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/thalie/thalie.pdf b/macros/latex/contrib/thalie/thalie.pdf
new file mode 100644
index 0000000000..c7105caaec
--- /dev/null
+++ b/macros/latex/contrib/thalie/thalie.pdf
Binary files differ