summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/frankenstein/unsupported/drama.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/frankenstein/unsupported/drama.sty')
-rw-r--r--Master/texmf-dist/doc/latex/frankenstein/unsupported/drama.sty488
1 files changed, 488 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/frankenstein/unsupported/drama.sty b/Master/texmf-dist/doc/latex/frankenstein/unsupported/drama.sty
new file mode 100644
index 00000000000..b74e90f9742
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/frankenstein/unsupported/drama.sty
@@ -0,0 +1,488 @@
+%^^A* legal notices
+% \iffalse
+%
+% This program is part of the Frankenstein bundle for LaTeX.
+%
+% Copyright 1995-2001 Matt Swift <swift@alum.mit.edu>.
+%
+% This file contains both the code and documentation for the
+% drama LaTeX package. It will work ONLY if it is placed in a
+% proper directory. Files called README, INSTALL, drama.tex
+% and drama.ins should have also been distributed to you
+% with this file. See them for more information on how to typeset
+% the documentation with LaTeX and how to generate a version of this
+% file that will work faster than this one.
+%
+% This program is free software; you may redistribute it and/or
+% modify it under the conditions of the LaTeX Project Public
+% License, either version 1.2 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.2 or later is
+% part of all distributions of LaTeX version 1999/12/01 or later.
+%
+% This program is distributed in the hope that it will be useful,
+% but without any warranty; without even the implied warranty of
+% merchantability or fitness for a particular purpose. See the
+% LaTeX Project Public License for more details.
+%
+% \fi
+%
+%^^A* checks
+%
+%^^A NOTE: The character table, with two %'s, will get written to all files.
+%% \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 \~}
+%
+% \CheckSum{314}
+%
+%^^A** abstract
+% \begin{abstract}
+% Defines macros for typesetting a basic production-style stage script.
+%
+% This package is useful but may have problems and is unsupported.
+% \end{abstract}
+% \tableofcontents
+%
+% \part{Discussion}
+%
+% I am close to handling the insertion of a ``continued'' message at the top
+% of the page when a speech is broken across the page. But it's not there
+% yet.
+%
+% \DescribeEnv{script}
+% This is the only environment so far, for a basic production-style stage
+% script. It is implemented as a bitstyle: see the \package{bits} package
+% for details of use. I think you only need to issue an
+% \cs\author\marg{author's name} and \cs\date\marg{date} command. Also,
+% create an empty file called \file{bits.cfg} on your system (or put the
+% \cs\author declaration in it).
+%
+% Options come in pairs (boldface is default):
+% \begin{description}
+% \item[\textmd{oneact}/multiact] Multiact scripts use act numbers; oneacts
+% just have scenes.
+% \end{description}
+%
+% \DescribeMacro\character
+% \cs\character\marg{full description}\marg{name}\marg{csname} defines a new
+% character. \meta{full description} is used in the dramatis personae
+% listing. \meta{name} is the name to use to refer to the character in stage
+% directions, and to introduce their speeches. \cs\character defines a
+% command |\|\meta{csname} which prints \meta{name} in the font given in
+% \cs\DirectStyle. Use this in stage directions. It is an abbreviation
+% macro of category \cat{Character}; following spacing is handled
+% automatically for you. See the \package{abbrevs} package for details. Also
+% defined is the command
+% \DescribeMacro\SpeakAppend
+% |\|\meta{csname}|says|, which is used to introduce the character's
+% speeches. The suffix ``says'' can be changed by redefining \cs\SpeakAppend
+% before using \cs\character. You can also define it before loading the
+% \package{drama} package.
+%
+% \DescribeMacro\scene
+% \DescribeMacro\act
+% Use \cs\scene and \cs\act to start acts and scenes.
+%
+% \DescribeMacro\direct
+% \DescribeMacro\setstage
+% \cs\direct\marg{stage directions}. Use \cs\setstage\marg{stage directions}
+% at the beginning of scenes and acts.
+%
+% \StopEventually{}
+%
+% \part{Implementation}
+%
+% \section{Version control}
+%
+% \begin{macro}{\fileinfo}
+% \begin{macro}{\DoXUsepackagE}
+% \begin{macro}{\HaveECitationS}
+% \begin{macro}{\fileversion}
+% \begin{macro}{\filedate}
+% \begin{macro}{\docdate}
+% \begin{macro}{\PPOptArg}
+% These definitions must be the first ones in the file.
+% \begin{macrocode}
+\def\fileinfo{drama package (Frankenstein's heart)}
+\def\DoXPackageS {}
+\def\initelyHavECitationS {}
+\def\fileversion{v0.2}
+\def\filedate{1996/05/05}
+\def\docdate{1996/05/05}
+\edef\PPOptArg {%
+ \filedate\space \fileversion\space \fileinfo
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% If we're loading this file from a \cs\ProcessDTXFile command (see the
+% \package{compsci} package), then \cs\JusTLoaDInformatioN will be defined;
+% othewise we assume it is not (that's why the FunkY NamE).
+%
+% If we're loading from \cs\ProcessDTXFile, we want to load the packages listed
+% in \cs\DoXPackageS (needed to typeset the documentation for this file) and
+% then bail out. Otherwise, we're using this file in a normal way as a
+% package, so do nothing. \cs\DoXPackageS, if there are any, are declared in
+% the \ext{dtx} file, and, if you're reading the typeset documentation of this
+% package, would appear just above. (It's OK to call \cs\usepackage with an
+% empty argument or \cs\relax, by the way.)
+% \begin{macrocode}
+\makeatletter% A special comment to help create bst files. Don't change!
+\@ifundefined{JusTLoaDInformatioN} {%
+ }{% ELSE (we know the compsci package is already loaded, too)
+ \UndefineCS\JusTLoaDInformatioN
+ \SaveDoXVarS
+ \eExpand\csname DoXPackageS\endcsname\In {%use \csname in case it's undefined
+ \usepackage{#1}%
+ }%
+ \RestoreDoXVarS
+ \makeatother
+ \endinput
+}% A special comment to help create bst files. Don't change!
+% \end{macrocode}
+%
+% Now we check for \LaTeX2e and declare the LaTeX package.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{drama}[\PPOptArg]
+% \end{macrocode}^^A special comment to help create bst files. Don't change!
+%
+% ^^A NOTE: We have to compensate for the above backslashes, which are not
+% ^^A actually in the .dtx file the author works on, by adding to the
+% ^^A CheckSum.
+%%
+% \AddToCheckSum{17}^^A `dtx-update-checksum' automatically handles this.
+% \AddToCheckSum{7}^^A The half a macrocode env. at the top is missed, however...
+% \AddToCheckSum{10}^^A ... and so are the 5 \defs from the .dtx file
+% ^^A that precede it.
+% \IfCitations {%
+% \AddToCheckSum{2}^^A When \initelyHavECitationS is defined in
+% } ^^A the .dtx file, we need 2 more in the CheckSum.
+%
+%
+% \begin{macrocode}
+\RequirePackage{abbrevs,bits,dialogue,moredefs,relsize}
+%\RequirePackage{xmark}
+\let\sc@mark\Gobble
+\VerboseErrors
+
+\DeclareBooleanOptions{oneact}{multiact}
+\ProcessOptions
+% \end{macrocode}
+%
+% \section{characters}
+%
+% \begin{macro}{\SpeakAppend}
+% \begin{macro}{\sc@cast}
+% \begin{macro}{\character}
+%
+% \begin{macrocode}
+\providecommand\SpeakAppend {says}
+\ReserveCS\sc@cast
+\NewUserAbbrevDefiner\NewCharacterAbbrev{Character}
+\let\TMFontCharacter\scshape
+\newcommand*\character [3] {% args: dramper name csname
+ \expandafter\NewCharacterAbbrev\csname #3\endcsname{#2}%
+ \NewName* {#3\SpeakAppend} {} {%
+ \speak{#2}%
+ }%
+ \addto@macro\sc@cast{,#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% The |\@cdr| gets rid of the first silly comma.
+% \begin{macrocode}
+\newcommand\DramPer {%
+ \ifx\sc@cast\LongEmpty\else
+ {\larger\scshape Cast}%
+ \relax\begin{verse}
+ \edef\sc@t@a{\E@cdr\sc@cast\@nil}%
+ \@for\sc@t@b:=\sc@t@a \do {%
+ \sc@t@b\\%
+ }%
+ \relax\end{verse}%
+% \end{macrocode}
+% Prepare for another set of characters.
+% \begin{macrocode}
+ \InitCS\sc@cast
+ \bigbreak
+ \fi
+}
+% \end{macrocode}
+%
+% \subsubsection{sectioning}
+%
+% \begin{macro}{\sc@toks@saved@output}
+% We pull some fancy stuff with the output routine here. The algorithm is a
+% simpler version of Knuth's \cite[260ff]{knuth:texbook}.
+% \begin{macrocode}
+\newtokens\sc@toks@saved@output
+\sc@toks@saved@output=\output
+% \end{macrocode}
+% \end{macro}
+%
+% The |\sc@botmark|, if not empty, will contain text to be inserted at the top
+% of the next page. It must contain vertical not horizontal material.
+%
+% We actually need to communicate the boolean |sc@directing| via the mark,
+% because only the information in the marks is guaranteed to reflect the state
+% at the end of the page, and not several lines later.
+% \begin{macrocode}
+\providelength\sc@len
+
+\newcommand\sc@outputwrapper {%
+ \setlength{\sc@len}{\dp255}%
+ \the\sc@toks@saved@output
+ \def\sc@t@b {%
+ \sc@botmark
+ \addtolength{\sc@len}{-\prevdepth}%
+ \kern\sc@len
+ }%
+ \InitCS\sc@t@a
+ \ifx\sc@botmark\ShortEmpty
+ \let\sc@t@a\sc@t@b
+ \else
+ \ifsc@directing
+ \let\sc@t@a\sc@t@b
+ \fi
+ \fi
+ \sc@t@a
+}
+\newcommand\script {%
+ \MakeDirectTakeArg
+ \relax\begin{Script}%
+}
+\NewName{endscript} {} {%
+ \relax\end{Script}%
+}
+\NewName{script*} {} {%
+ \MakeDirectTakeNoArg
+ \relax\begin{Script}%
+}
+\NewName{endscript*} {} {%
+ \relax\end{Script}%
+}
+\newcommand\sc@make@begin@bit@D [2] {% args: bitstyle copystyle
+ \DefName{sc@begin@bit@#1@#2}{##1##2} {%
+ \def\BitStyle{#1}%
+ \sc@begin@bit@common{##1}{##2}%
+ \PreBitAll
+%
+% \ClaimXMarkTwo
+% \FrankenInfo{drama}{The script environment is changing \protect\output.}%
+% \output={\sc@outputwrapper}%
+% \let\maxdepth\maxdimen
+% \let\@maxdepth\maxdimen
+ \if@oneact@
+ \def\thepage {%
+ \arabic{bitbitbit}\hspace{\@ne em}\arabic{page}%
+ }%
+ \else
+ \def\thepage {%
+ \arabic{bitbit}--\arabic{bitbitbit}\hspace{\@ne em}\arabic{page}%
+ }%
+ \fi
+ \DramPer
+%
+ \@nameuse{PreBit#1}%
+ }%
+}
+\newcommand\sc@make@end@bit@D [2] {% args: bitstyle copystyle
+ \DefName{sc@end@bit@#1@#2}{##1} {%
+ \sc@possiblyfinishdirecting
+ \TheEnd
+ \FrankenInfo{drama}{\protect\output is back to normal now.}%
+ }%
+}
+\NewBitstyle{Script}
+\PromulgateComponentAcrossCopystyles{end@bit}{D}{Script}
+\PromulgateComponentAcrossCopystyles{begin@bit}{D}{Script}
+
+\newcommand\act {%
+ \sc@possiblyfinishdirecting
+ \sc@mark{\ShortEmpty}%
+ \stepcounter{bitbit}%
+ \pagebreak[3]%
+ \bigskip
+ \centerline{\relsize{2}Act \thebitbit}%
+ \par
+ \nobreak
+ \smallskip
+}
+\newcommand\scene {%
+ \sc@possiblyfinishdirecting
+ \sc@mark{\ShortEmpty}%
+ \stepcounter{bitbitbit}%
+ \pagebreak[3]%
+ \bigskip
+ \centerline{\relsize{1}Scene \thebitbitbit}%
+ \par
+ \nobreak
+ \smallskip
+}
+% \end{macrocode}
+%
+% \subsubsection{speakers and stage directions}
+%
+% \begin{macrocode}
+\newlength{\halfacross}
+ \setlength{\halfacross}{\textwidth}
+ \divide\halfacross by 2
+\newlength{\quarteracross}
+ \setlength{\quarteracross}{\textwidth}
+ \divide\quarteracross by 4
+
+\newenvironment{DramaTab} [1] {%
+ \relax\begin{list}{} {%
+ \setlength{\leftmargin}{#1}%
+ \setlength{\listparindent}{\z@}%
+ \sloppy
+ }%
+ \item\relax
+ }{%
+ \relax\end{list}%
+}
+\newcommand\setstage [1] {%
+ \relax\begin{DramaTab}{\halfacross}%
+ \DirectStyle
+ \DirectOpen
+ \ignorespaces
+ #1%
+ \unskip
+ \DirectClose
+ \relax\end{DramaTab}%
+}
+% \end{macrocode}
+%
+% It is a question of style whether to announce the speaker's name a second
+% time, if his speech continues after a stage direction in a paragraph by
+% itself. If the page breaks immediately before the stage direction, or
+% duringit, no continuation message will be given. If it breaks after the
+% stage direction, and before the next speaker is announced with the |\speak|
+% command, a continuation message appropriate to the speaker \emph{before} the
+% stage direction is given. Of course, sectioning commands will cancel any
+% continuation messages.
+%
+% Communicating via the mark is giving me a problem. I need to solve this
+% problem and replace @sc@bool with mark information.
+%
+% Also, when using the no-argument form on a source with arguments, you cannot
+% swallow the spaces with |\ignorespaces|, because the open brace shields them.
+%
+% There are problems with certain combinations of taking arguments and
+% reannouncing speakers after a stage direction. I should draw a chart, and
+% see how I can handle things.
+% \begin{macro}{\DirectOpen}
+% \begin{macro}{\DirectClose}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\DirectOpen {\textrm{(}}
+\newcommand\DirectClose {\textrm{)}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\newboolean{sc@directing}
+
+\newcommand*\DirectNoArg {%
+ \sc@noargs@finishdirecting
+ \sc@direct
+}
+\newcommand\DirectWithArg [1] {%
+ \sc@args@finishdirecting
+ \sc@direct
+ #1%
+ \sc@really@finishdirecting
+}
+\newcommand\sc@direct {%
+ \global\let\sc@lastmark\sc@themark
+ \sc@mark{\ShortEmpty}%
+ \sc@directingtrue
+ \pagebreak[0]% mild encouragement
+ \relax\begin{DramaTab}{\quarteracross}%
+ \DirectStyle
+ \DirectOpen
+ \ignorespaces
+}
+\newcommand\sc@really@finishdirecting {%
+ \unskip
+ \DirectClose
+ \relax\end{DramaTab}
+ \sc@directingfalse
+% \sc@mark\expandafter{\sc@lastmark}% FIXME:
+}
+% \end{macrocode}
+% Looks like args version is null.
+% \begin{macrocode}
+\ReserveCS\sc@args@finishdirecting
+\newcommand\sc@noargs@finishdirecting {%
+ \ifsc@directing
+ \sc@really@finishdirecting
+ \fi
+}
+\ReserveCS\sc@possiblyfinishdirecting
+\newcommand\MakeDirectTakeArg {%
+ \let\sc@possiblyfinishdirecting\sc@args@finishdirecting
+ \let\direct\DirectWithArg
+}
+\newcommand\MakeDirectTakeNoArg {%
+ \let\sc@possiblyfinishdirecting\sc@noargs@finishdirecting
+ \let\direct\DirectNoArg
+}
+% \end{macrocode}
+%
+% \todo{Do penalties better?}
+%
+% \begin{macro}{\GiveSpeaker}
+% \begin{macrocode}
+\newcommand\GiveSpeaker [1] {%
+ \par
+ \centerline{\textsc{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GiveSpeakerContinued}
+% The space is explicit for clarity.
+% \begin{macrocode}
+\newcommand\GiveSpeakerContinued [1] {%
+ \GiveSpeaker{#1\space\rlap{\textsl{(continued)}}}%
+}
+\newcommand\speak [1] {%
+ \sc@possiblyfinishdirecting
+ \sc@mark{\ShortEmpty}%
+ \pagebreak[2]%
+ \smallskip
+ \sc@mark{\GiveSpeakerContinued{#1}}%
+ \GiveSpeaker{#1}%
+ \par
+ \nopagebreak
+ \noindent
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale