summaryrefslogtreecommitdiff
path: root/macros/scripttex/scrnplay.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/scripttex/scrnplay.tex')
-rw-r--r--macros/scripttex/scrnplay.tex458
1 files changed, 458 insertions, 0 deletions
diff --git a/macros/scripttex/scrnplay.tex b/macros/scripttex/scrnplay.tex
new file mode 100644
index 0000000000..d9383f3910
--- /dev/null
+++ b/macros/scripttex/scrnplay.tex
@@ -0,0 +1,458 @@
+% ScriptTeX screenplay macros -- typed manuscript version
+% Copyright 1991-2002 Adrian McCarthy. See documentation for re-distribution info.
+\def\banner{ScriptTeX 1.04, 10-MAR-2002, typed screenplay format}%version
+\immediate\write16{\banner}
+%
+% These macros will produce a manuscript that looks as though it were typed.
+%
+% With the fixed pitch font and narrow dialog paragraphs, I've set the
+% penalties and such to be extremely tolerant of TeX's concept of badness.
+% These are probably more extreme than they have to be, but they can be
+% tuned later.
+%
+\font\mainfont=cmpica % Don Hosek's pica fonts. Use cmtt12 if not available.
+\font\emfont=cmpicati % Change to underlined \mainfont if not available.
+\mainfont
+\pretolerance=500 % acceptable "badness" before trying to hyphenate
+\tolerance=10000 % acceptable "badness" of a line
+\linepenalty=0 % penalty for each line in a paragraph
+\adjdemerits=0 % demerits for adjacent tight and loose line juxtapositions
+\finalhyphendemerits=0 % demerits for hyphenating the penultimate line
+\doublehyphendemerits=0 % demerits for hyphenating consecutive lines
+\hbadness=10000 % avoid useless underfull hbox messages
+%
+% General page layout:
+%
+\newdimen\lineskip \lineskip=12bp % 6 lines per inch
+\newdimen\charwid {\setbox0=\hbox{\mainfont M} \global\charwid=\wd0}
+\baselineskip=\lineskip % 2\lineskip for sitcoms
+\spaceskip=\charwid % for true typewriter spacing (redundant in cmtt)
+\xspaceskip=2\charwid % for two spaces after a sentence (redundant in cmtt)
+\voffset=-4\lineskip % 1 blank line from top
+\hoffset=0.5truein % extra room for hole punch
+\vsize=58\lineskip
+\hsize=60\charwid
+\parindent 0pt
+\parskip\baselineskip
+\splittopskip=\topskip
+\splitmaxdepth=\maxdepth
+\newdimen\rightmar
+\def\hotzone{8\charwid} % right margin hotzone
+\def\margins#1#2{%
+ \leftskip=#1
+ \rightmar=\hsize \advance\rightmar by -\leftskip \advance\rightmar by -#2
+ \rightskip=\rightmar plus \hotzone
+}
+%
+% My first output routine. Marks have six parts: act/scene header,
+% previous scene continued, dialog continued, \nukeline for (MORE),
+% continuing dialog (MORE), \nukeline for continuing scene, and
+% continuing scene. The seventh part is reserved for rev pages.
+% I realize that I use \splitbotmark before a \vsplit is ever done, but
+% this is correct. \topmark has the wrong value if I put back lines back
+% during the previous \output run.
+%
+\output={%
+ \dimen0=\ht255
+ \ifx\LR\empty \else
+ \if L\LR \hoffset=0.0truein \global\def\LR{R}
+ \else \hoffset=0.5truein \global\def\LR{L}
+ \fi
+ \fi%x
+ \shipout\vbox to 62\lineskip{%
+ \boxmaxdepth=\maxdepth%
+ \makeheadline%
+ \pagebody%
+ \makefootline%
+ }
+ \unvbox255 \penalty\outputpenalty % put back unused text
+ \advancepageno
+}
+\def\makeheadline{% Act/scene header and page number
+ \line{%
+ \mainfont%
+ \ifcase1\expandafter\relax\splitbotmark\fi%
+ \ifnum\pageno>0 \hss \folio\rlap{.}\fi}
+ \vskip\lineskip
+}
+\def\pagebody{%
+ \ifcase2\expandafter\relax\splitbotmark\fi % So-and-so (CONT'D) \nukeline
+ \ifcase3\expandafter\relax\botmark\fi % \nukeline for (MORE)
+ \ifcase5\expandafter\relax\botmark\fi % \nukelines for CONTINUED
+ {%
+ \vbadness=10000
+ \setbox0=\vsplit255 to \dimen0 % split to new height
+ \unvbox0 % put page into output
+ }%
+ \ifcase4\expandafter\relax\splitbotmark\fi % (MORE)
+ \ifcase6\expandafter\relax\splitbotmark\fi % CONTINUED
+ \kern-\dimen0 \vfil % kern keeps \vfil from being discarded
+}
+\def\makefootline{%
+ \vskip\lineskip
+ \line{\mainfont \footer}
+}
+\def\nukeline{%
+ \advance\dimen0 by -\lineskip
+}
+\def\mymark{{
+ \header \noexpand\or %
+ \contprevscene \noexpand\or %
+ \contprevdialog \noexpand\or %
+ \contdialoga \noexpand\or %
+ \contdialogb \noexpand\or %
+ \contscenea \noexpand\or %
+ \contsceneb %\noexpand\or
+% \contrev
+}}
+\def\contprevscene{}
+\def\contprevdialog{}
+\def\contdialoga{}
+\def\contdialogb{}
+\def\contscenea{}
+\def\contsceneb{}
+%\def\contrev{}
+%
+% Revision information
+%
+\def\titletext{Screenplay}
+\def\title#1{\def\titletext{#1}}
+\def\seriestext{}
+\def\series#1{\def\seriestext{#1}}
+\def\authortext{}
+\def\author#1{\def\authortext{#1}}
+\def\drafttext{}
+\def\draft#1{\def\drafttext{\uppercase{#1}}}
+\def\basedon#1{\def\basedontext{#1}}
+\def\basedontext{}
+\def\showcopyright#1{\def\copyrighttext{$\copyright$~#1}}
+\def\copyrighttext{}
+\def\address#1{\def\addresstext{\vtop{\settabs 1\columns \tabalign #1\cr}}}
+\def\\{\cr\tabalign}
+\def\addresstext{}
+\def\today{%
+ \hbox{\number\day-\ifcase\month\or JAN\or FEB\or MAR\or APR\or MAY%
+ \or JUN\or JUL\or AUG\or SEP\or OCT\or NOV\or DEC\fi%
+ -\number\year}%
+}
+\edef\datetext{\today} % \edef for efficiency; it won't change during job
+\def\date#1{\def\datetext{#1}}
+%
+% We count acts and scenes for you.
+%
+\newcount\actcnt \actcnt=0
+\def\currentact{}
+\newcount\scenecnt \scenecnt=0
+\def\resetscenecnt{\scenecnt=0}
+\def\currentscene{}
+\def\stdhang{\leavevmode\llap{\number\scenecnt.\ }}
+\def\stdhead{\ifx\currentscene\empty \else \number\scenecnt.\fi}
+\def\stdfoot{%
+ \ifx\seriestext\empty \else
+ {\emfont \seriestext} \hss
+ \fi%
+ ``\titletext'' \hss \drafttext
+}
+\def\stdxref{%
+ \ifx\currentact\empty \else%
+ \currentact; %
+ \fi%
+ \ifx\currentscene\empty \else%
+ \currentscene%
+ \fi
+}
+\def\Roman#1{\uppercase\expandafter{\romannumeral#1}}
+\def\roman#1{\romannumeral#1}
+%
+% Keep track of last speaker.
+%
+\global\def\lastspeaker{}
+%
+% Variants
+%
+\def\LR{}
+\def\twoside{\def\LR{R}}
+\def\jlbrooks{
+ \hsize=65\charwid
+ \def\hotzone{3\charwid}
+ \hfuzz=5\charwid
+}
+\def\movie{
+ \def\resetscenecnt{}
+ \def\actheadblock##1{}
+ \def\acttailblock{}
+ \def\actpgbreak{}
+ \def\stdxref{}
+}
+\def\TV{}
+\def\sitcom{\lineskip=24bp}
+\def\manuscript{
+ \def\header{}
+ \def\footer{}
+ \def\hangscene{}
+ \def\draftblock{}
+ \def\stdxref{}
+ \def\sound##1{##1}
+}
+\def\proof{
+ \ifx\drafttext\empty \draft{Working Draft}\fi
+ \def\header{\stdhead}
+ \def\footer{\stdfoot}
+ \def\hangscene{\stdhang}
+ \def\sound##1{##1}
+}
+\def\shoot{
+ \ifx\drafttext\empty \draft{Shooting Script}\fi
+ \def\header{}
+ \def\footer{}
+ \def\hangscene{\stdhang}
+}
+%
+% Breakdowns (desupported)
+%
+\def\makecastlist{\immediate\write16{Cast lists no longer supported.}}
+\def\collectcast{\immediate\write16{Cast lists no longer supported.}}
+\def\makescenelist{\immediate\write16{Scene lists no longer supported.}}
+\def\collectscenes{\immediate\write16{Scene lists no longer supported.}}
+%
+% Make a title page
+%
+\def\maketitle{%
+ \ifx\LR\empty \else \def\LR{R} \fi
+ \hbox{}
+ \vskip 2in
+ \ifx\seriestext\empty \else
+ \centerline{{\emfont \uppercase{\seriestext}}}
+ \vskip 3\baselineskip
+ \fi
+ \centerline{``\uppercase{\titletext}''}
+ \vskip\baselineskip
+ \ifx\authortext\empty \else
+ \centerline{\authortext}
+ \fi
+ \vskip\baselineskip
+ \centerline{\basedontext}
+ \vskip 3.5in
+ \line{\copyrighttext\hfill\addresstext}
+ \vskip 3\baselineskip
+ \draftblock
+ \pageno=0
+ {
+ \def\header{}
+ \def\footer{}
+ \eject
+ }
+ \pageno=1
+}
+\def\draftblock{%
+ \ifx\drafttext\empty \else
+ \rightline{{\emfont \uppercase{\drafttext}}}
+ \fi
+ \rightline{\datetext}
+}
+%
+% Standard header for acts, tags, and teasers
+%
+\def\actpgbreak{\vfill \penalty-10000}
+
+\def\actheadblock#1{
+ \vskip 2\lineskip
+ \centerline{{\emfont \uppercase{#1}}}
+ \vskip 4\lineskip
+}
+\def\acttailblock{
+ \vskip 2\lineskip
+ {\edef\tempact{end of \currentact}
+ \centerline{{\emfont \uppercase\expandafter{\tempact}}}
+ }
+}
+\def\acthead#1{%
+ \acttail
+ \advance\actcnt by 1
+ \resetscenecnt
+ \edef\currentact{#1}
+ \def\contprevscene{}
+ \def\contprevdialog{}
+ \def\contdialoga{}
+ \def\contdialogb{}
+ \def\contscenea{}
+ \def\contsceneb{}
+ \expandafter\mark\mymark
+ \actpgbreak
+ \parskip\baselineskip
+ \actheadblock{#1}
+ \immediate\write16{#1}
+}
+%
+% Standard tail for acts, tags, and teasers
+%
+\def\acttail{%
+ \penalty1000
+ \ifx\currentact\empty \else
+ \acttailblock
+ \def\currentact{}
+ \fi
+}
+%
+% Regular script constructs:
+%
+\def\act{\acthead{Act \ifcase\actcnt\or One\or Two\or Three\or Four\or
+ Five\or Six\or Seven\or Eight\or Nine\or Ten\or Eleven\or
+ Twelve\or Thirteen\or Fourteen\or Fifteen\or Sixteen\else\Roman\actcnt\fi}
+}
+\def\teaser{\acthead{Teaser}\actcnt=0}
+\def\tag{\acthead{Tag}}
+\def\prolog{\acthead{Prolog}\actcnt=0}
+\def\epilog{\acthead{Epilog}}
+\def\prologue{\acthead{Prologue}\actcnt=0}
+\def\epilogue{\acthead{Epilogue}}
+\def\theend{
+ \def\acttailblock{
+ \vskip 2\lineskip
+ \centerline{{\emfont THE END}}
+ }
+}
+
+\def\scene#1{%
+ \penalty10000
+ \def\contprevscene{}
+ \def\contprevdialog{}
+ \def\contdialoga{}
+ \def\contdialogb{}
+ \def\contscenea{}
+ \def\contsceneb{}
+ \expandafter\mark\mymark
+ \penalty-100
+ \advance\scenecnt by 1
+ \edef\currentscene{Scene \number\scenecnt}
+ \parskip\baselineskip
+ \margins{0in}{\hsize}
+ \leavevmode\hangscene\uppercase{#1}\par
+ \def\contprevscene{\hangscene CONTINUED}
+ \def\contscenea{\nukeline\nukeline}
+ \def\contsceneb{\vskip\lineskip \line{\hskip 40\charwid CONTINUED}}
+ \expandafter\mark\mymark
+ \global\def\lastspeaker{}
+ \penalty1000
+}
+\def\shot#1{\scene{#1}}
+
+\def\stage{%
+ \penalty10000
+ \def\contprevdialog{}
+ \def\contdialoga{}
+ \def\contdialogb{}
+ \expandafter\mark\mymark
+ \penalty-100
+ \margins{0in}{\hsize}
+ \parskip\baselineskip
+}
+
+\def\trans#1{%
+ \def\contprevdialog{}
+ \def\contdialoga{}
+ \def\contdialogb{}
+ \expandafter\mark\mymark
+ \parskip\baselineskip
+ \penalty100
+ {\margins{40\charwid}{20\charwid} \uppercase{#1} \par}
+ \penalty-100
+}
+
+\def\open#1{%
+ \def\contprevscene{}
+ \def\contprevdialog{}
+ \def\contdialoga{}
+ \def\contdialogb{}
+ \def\contscenea{}
+ \def\contsceneb{}
+ \expandafter\mark\mymark
+ \parskip\baselineskip
+ {\margins{0in}{\hsize} \uppercase{#1} \par}
+}
+
+\def\close#1{\open{#1}}
+
+\def\dialog#1#2\par{%
+ \penalty10000 % make sure we don't break until after the clear mark
+ \def\contprevdialog{}
+ \def\contdialoga{}
+ \def\contdialogb{}
+ \expandafter\mark\mymark
+ \penalty-100 % OK to break now
+ \parskip\lineskip
+ {\margins{24\charwid}{36\charwid} \uppercase{#1}%
+ \global\def\thisspeaker{#1}%
+ \ifx\thisspeaker\lastspeaker \ (CONT'D)\fi
+ \global\def\lastspeaker{#1}
+ \par}
+ \parskip 0pt
+ \def\contprevdialog{%
+ \nukeline%
+ \line{\hskip 24\charwid \uppercase{#1} (CONT'D)}%
+ }
+ \def\contdialoga{\nukeline}
+ \def\contdialogb{\line{\hskip 24\charwid (MORE)}}
+ \expandafter\mark\mymark
+ \margins{10\charwid}{35\charwid} % rightmar = \hsize-\leftskip-35\charwid
+ \penalty10000
+ #2\par
+ \stage
+}
+
+\def\paren#1#2\par{%
+ \par
+ \penalty10000
+ {%
+ \margins{17\charwid}{20\charwid} % rightmar = \hsize-\leftskip-20\charwid
+ (#1)%
+ \par%
+ }
+ \penalty10000
+ #2\par
+ \stage
+}
+
+\def\leadin#1{#1~\ldots\par\penalty200} % These are more exciting in the
+\def\pickup{\ldots~} % stageplay format.
+
+\def\em#1{{\emfont #1}}
+\def\extra#1{\uppercase\expandafter{#1}}
+\def\introduce#1{\uppercase\expandafter{#1}}
+\def\sound#1{\uppercase{#1}}
+\def\ldots{.~.~.} % Formal typing version. OK to use "..."
+
+\def\cleanup{%
+ \par
+ \acttail
+ \def\contdialoga{}
+ \def\contdialogb{}
+ \def\contscenea{}
+ \def\contsceneb{}
+ \expandafter\mark\mymark
+ \vfill
+ \penalty-10000
+}
+\def\bye{%
+ \cleanup
+ \end
+}
+%
+% Shortcuts:
+%
+\def\beat{\paren{beat}}
+\def\cut{\trans{cut to}}
+\let\dialogue=\dialog
+\def\dissolve{\trans{dissolve to}}
+\def\ext#1{\scene{ext.\ #1}}
+\def\fadein{\open{fade in}}
+\def\fadeout{\close{fade out}}
+\def\int#1{\scene{int.\ #1}}
+\def\os{\paren{off screen}}
+\let\shot=\scene
+\let\tv=\TV
+\def\vo{\paren{voice over}}
+%
+% Defaults
+%
+\TV\proof