diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/thalie |
Initial commit
Diffstat (limited to 'macros/latex/contrib/thalie')
-rw-r--r-- | macros/latex/contrib/thalie/CHANGELOG.md | 77 | ||||
-rw-r--r-- | macros/latex/contrib/thalie/LICENSE.txt | 416 | ||||
-rw-r--r-- | macros/latex/contrib/thalie/README.md | 26 | ||||
-rw-r--r-- | macros/latex/contrib/thalie/dicts/thalie-english.trsl | 26 | ||||
-rw-r--r-- | macros/latex/contrib/thalie/dicts/thalie-fallback.trsl | 45 | ||||
-rw-r--r-- | macros/latex/contrib/thalie/dicts/thalie-french.trsl | 26 | ||||
-rw-r--r-- | macros/latex/contrib/thalie/dicts/thalie-german.trsl | 26 | ||||
-rw-r--r-- | macros/latex/contrib/thalie/thalie.dtx | 2163 | ||||
-rw-r--r-- | macros/latex/contrib/thalie/thalie.ins | 59 | ||||
-rw-r--r-- | macros/latex/contrib/thalie/thalie.pdf | bin | 0 -> 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 screenplays}, +% 2012, +% \url{http://www.ctan.org/pkg/screenplay} +% \bibitem{sides} +% {Wing L Mui}, +% \emph{sides --- A LaTeX class for typesetting stage plays}, +% 2005, +% \url{http://www.ctan.org/pkg/sides} +% \end{thebibliography} +% +% \StopEventually{% +% \addcontentsline{toc}{section}{Index} +% \PrintIndex +% } +% \Finale +\endinput 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 Binary files differnew file mode 100644 index 0000000000..c7105caaec --- /dev/null +++ b/macros/latex/contrib/thalie/thalie.pdf |