summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/novel/novel-ChapterScene.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/latex/novel/novel-ChapterScene.sty')
-rw-r--r--macros/luatex/latex/novel/novel-ChapterScene.sty406
1 files changed, 406 insertions, 0 deletions
diff --git a/macros/luatex/latex/novel/novel-ChapterScene.sty b/macros/luatex/latex/novel/novel-ChapterScene.sty
new file mode 100644
index 0000000000..e297eeacd3
--- /dev/null
+++ b/macros/luatex/latex/novel/novel-ChapterScene.sty
@@ -0,0 +1,406 @@
+%%
+%% This is file `novel-ChapterScene.sty', part of `novel' document class.
+%% Copyright 2017-2018 Robert Allgeyer.
+%%
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% 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.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%%
+\ProvidesFile{novel-ChapterScene.sty}%
+[2018/04/26 v1.52 LaTeX file (chapter and scene macros)]
+%%
+
+
+% Each new chapter generally has its own header/footer style. This allows a
+% default setting when chapters begin with ChapterStart environment:
+\gdef\SetChapterStartStyle#1{% from v. 1.40.3
+ \@tempTFfalse%
+ \ifthenelse{\equal{#1}{fancy}}{\@tempTFtrue}{}%
+ \ifthenelse{\equal{#1}{empty}}{\@tempTFtrue}{}%
+ \ifthenelse{\equal{#1}{plain} %
+ \OR \equal{#1}{fancyplain} \OR \equal{#1}{footer}}{%
+ \@tempTFtrue%
+ }{}%
+ \ifthenelse{\equal{#1}{forcenumber}}{\@tempTFtrue}{}%
+ \ifthenelse{\equal{#1}{dropfolioinside} %
+ \OR \equal{#1}{dropfolio} \OR \equal{#1}{dropfoliolater}}{%
+ \@tempTFtrue%
+ }{}%
+ \ifthenelse{\equal{#1}{dropfoliobeneath}}{\@tempTFtrue}{}%
+ \if@tempTF%
+ \gdef\@setchapterstart{#1}%
+ \else%
+ \ClassError{novel}{Invalid choice for \string\SetChapterStartStyle}%
+ {Choose: fancy, empty, plain, footer, forcenumber, %
+ dropfolioinside, dropfoliobeneath.}%
+ \fi%
+}
+\let\SetChapterStart\SetChapterStartStyle\relax % deprecated from v1.40.3.
+\SetChapterStartStyle{footer} % default
+% New in version 1.40.2:
+\gdef\SetChapterStartHeight#1{%
+ \FPifint{#1}\else%
+ \ClassError{novel}{\string\SetChapterStartHeight\space integer >= 4}%
+ {Height of ChapterStart must be integer, greater than or equal to 4.}%
+ \fi%
+ \FPiflt{#1}{4}%
+ \ClassError{novel}{\string\SetChapterStartHeight\space integer >= 4}%
+ {Height of ChapterStart must be integer, greater than or equal to 4.}%
+ \else\fi%
+ \gdef\@setchapterstartheight{#1}%
+}
+\SetChapterStartHeight{10} % default
+% See novel.cls for the accompanying AtBeginDocument routine.
+% Scene breaks:
+% \SetScenebreakIndent controls whether line after \scenebreak, \sceneline,
+% or \scenestars will be indented. Set true or false, default false.
+%% End reserve space for header/footer and set default ChapterStart
+\newif\if@IndentAfterScenebreak
+\newcommand\SetScenebreakIndent[1]{% true or false, default false.
+ \@tempTFfalse
+ \ifthenelse{\equal{#1}{true}}{%
+ \@tempTFtrue
+ \global\@IndentAfterScenebreaktrue
+ }{}%
+ \ifthenelse{\equal{#1}{false}}{%
+ \@tempTFtrue
+ \global\@IndentAfterScenebreakfalse
+ }{}%
+ \if@tempTF\else%
+ \ClassError{novel}{Bad argument for \string\SetScenebreakIndent\space}%
+ {\string\SetScenebreakIndent\space argument must be true or false.}%
+ \fi%
+}
+\SetScenebreakIndent{false} % default
+% Deprected from v. 1.40.3:
+\newcommand\IndentAfterScenebreak{\global\@IndentAfterScenebreaktrue}
+
+
+
+%% SCENE CHANGES
+%% ----------------------------------------------------------------------------
+% \scenebreak \sceneline \scenestars
+% Use anywhere in document body.
+% These commands skip a line.
+% \scenebreak leaves the gap empty.
+% \sceneline centers a line, about 1/3 textwidth.
+% \scenestars centers three widely-spaced asterisks.
+% Default behavior is \noindent for following paragraph.
+% Use \SetScenebreakIndent{true or false} in Preamble to change globally.
+% Either way, local behavior changed using \forceindent or \backindent.
+% \newcommand\scenebreak{\null}
+%
+\newcommand\scenebreak{% revised in version 1.52.
+ \leavevmode\getBreakpos{scenebreak}~\par
+}
+%
+\newcommand\sceneline{%
+ \noindent\getBreakpos{sceneline}\hfil%
+ \raisebox{0.2em}{\rule{0.35\textwidth}{.4pt}}\hfil\par%
+}
+%
+\newcommand\scenestars{%
+ \noindent\getBreakpos{scenestars}\hfil%
+ \raisebox{-.3em}{*\quad\quad*\quad\quad*}\hfil\par%
+}
+%
+\gdef\getBreakpos#1{%
+ \begingroup%
+ \savepos%
+ \protected@write\@auxout{}{%
+ \protect\@getBreakpos{\noexpand\number\lastypos}{\thepage}{#1}%
+ }%
+ \endgroup%
+}
+%
+\newlength\CurrentBreakpos
+\gdef\@getBreakpos#1#2#3{} % nothing, when reading aux at beginning
+\gdef\@RedefineBreakpos{ % called by `novel.cls' \AtBeginDocument
+ \gdef\@getBreakpos##1##2##3{% numerical position sp, page, break type
+ \gsetlength\CurrentBreakpos{##1sp}% measured up from very bottom of page.
+ \FPsub{\@BreakLines}{\strip@pt\TotalYpos}{\strip@pt\CurrentBreakpos}
+ \FPdiv{\@BreakLines}{\@BreakLines}{\strip@pt\nbs}%
+ \FPround{\@BreakLines}{\@BreakLines}{0}% integer lines from text top
+ \ifthenelse{\equal{##3}{scenebreak}}{%
+ \xdef\thisline{\@BreakLines}%
+ \ifnum\@BreakLines=1%
+ \ClassWarning{novel}{Replace \string\scenebreak\space at top of ^^J%
+ page ##2 with \string\sceneline\space or \string\scenestars.}%
+ \fi%
+ \ifnum\@BreakLines=\@LinesPerPage%
+ \ClassWarning{novel}{Replace \string\scenebreak\space at bottom of ^^J%
+ page ##2 with \string\sceneline\space or \string\scenestars.}%
+ \fi%
+ }{}%
+ \FPsub{\@nearthebottom}{\@LinesPerPage}{1}%
+ \ifnum\@BreakLines=2%
+ \ClassWarning{novel}{\string\ ##3 too close to top of page ##2.}%
+ \fi%
+ \ifnum\@BreakLines=\@nearthebottom%
+ \ClassWarning{novel}{\string\ ##3 too close to bottom of page ##2.}%
+ \fi%
+ }%
+} % end @RedefineBreakpos
+%%
+
+
+%% Repair \FirstLine{} command from `magaz' package.
+% Problem: Conflict with \noindent\nov@AfterGroup as used in ChapterStart.
+% The \noindent is carried past \FirstLine to the following paragraph.
+% Solution: After FirstLine completes, back up one line vertically, then insert
+% and empty line to restore grid and absorb the noindent.
+% Starred version uses the original \FirstLine definition, just in case
+% the following paragraph has some exotic feature.
+% Thanks to user `egreg' at tex.stackexchange.com for assistance.
+\let\oldFirstLine\FirstLine
+\def\FirstLine{\@ifstar\FirstLineFoo\@FirstLineFoo} % improved
+\def\FirstLineFoo#1{\oldFirstLine{#1}} % starred restores original def.
+\def\@FirstLineFoo#1{%
+ \oldFirstLine{#1}\par\vspace{-\nbs}\strut\par%
+}
+%%
+
+
+%% Chapter number count. New in version 1.44. See documentation.
+%% Do NOT use for "chapter-like" sections, only numbered chapters.
+\newcounter{novelcn}
+\setcounter{novelcn}{1}
+%%
+
+%% ChapterStart environment.
+% The most useful way to start a new chapter. Occupies a fixed amount of
+% vertical space. Also self-adjust when used with dropfolio. Automatically
+% calls \thispagestyle if set for all chapter displays.
+% This environment is not restricted to chapters. It is also used for
+% chapter-like sections in front matter or main matter,
+% as long as they are styled like a chapter.
+\newcounter{@linequarter}
+
+%
+% The argument is the number of normal baselineskips high.
+\newif\if@WithinChapterStart
+\DeclareDocumentEnvironment {ChapterStart} %
+{ O{\@setchapterstartheight} O{\@setchapterstart} }{%
+ \if@ThisPageStyle\else%
+ \gdef\@thiscsstyle{#2}%
+ \thispagestyle{\@thiscsstyle}%
+ \fi%
+ \global\@WithinChapterStarttrue%
+ \suppressfloats[t]% ensures that a floated image does not go on top
+ \gsetlength\parindent{0pt}% within environment
+ \ResetFootnoteSymbol% resets symbolic markers, but not numerical markers
+ \IfStrEq{#1}{*}{%
+ \gdef\@thiscsheight{\@setchapterstartheight}%
+ }{%
+ \gdef\@thiscsheight{#1}%
+ }%
+ \FPsub{\@fixlines}{\@thiscsheight}{2}%
+ \FPsub{\@fixlines}{\@fixlines}{0.001}% fudge to avoid rounding problems
+ \FPround{\@thiscsheight}{\@thiscsheight}{0}%
+ \FPiflt{\@thiscsheight}{4}%
+ \def\@smcserr{%
+ \ClassError{novel}{ChapterStart height insufficient for thispagestyle}%
+ {With your choice for thispagestyle, the height must be at least 4.}%
+ }%
+ \IfStrEq{\@thiscsstyle}{dropfolioinside}{\@smcserr}{}%j
+ \IfStrEq{\@thiscsstyle}{plain}{\@smcserr}{}%
+ \IfStrEq{\@thiscsstyle}{fancyplain}{\@smcserr}{}%
+ \else\fi%
+ \FPiflt{\@thiscsheight}{3}%
+ \ClassError{novel}{ChapterStart height must be at least 3}%
+ {If you need height less than 3, consider \string\QuickChapter.}%
+ \else\fi%
+ \null% always a line above the first thing to appear within the environment
+ \setcounter{@linequarter}{0}%
+ \begin{textblock*}{\textwidth}[0,0](0pt,0pt)%
+}{% close the environment:
+ \ifthenelse{%
+ \equal{\value{@linequarter}}{1} \OR \equal{\value{@linequarter}}{5}%
+ \OR \equal{\value{@linequarter}}{9} \OR \equal{\value{@linequarter}}{13}%
+ }{\vspace{0.75\nbs}}{}%
+ \ifthenelse{%
+ \equal{\value{@linequarter}}{2} \OR \equal{\value{@linequarter}}{6}%
+ \OR \equal{\value{@linequarter}}{10} \OR \equal{\value{@linequarter}}{14}%
+ }{\vspace{0.5\nbs}}{}%
+ \ifthenelse{%
+ \equal{\value{@linequarter}}{3} \OR \equal{\value{@linequarter}}{7}%
+ \OR \equal{\value{@linequarter}}{11} \OR \equal{\value{@linequarter}}{15}%
+ }{\vspace{0.25\nbs}}{}%
+ \end{textblock*}%
+ \vspace{\@fixlines\nbs}%
+ \if@DeleteCSline\else\null\fi% adjusts when dropfolioinside
+ \global\@WithinChapterStartfalse%
+ \vspace{0.1pt plus 0pt minus 0.2pt}% caulk
+ \gsetlength\parindent{\normalparindent}% restored
+ \nov@AfterGroup\NoIndentAfterThis% etextools and noindentafter
+}
+% end ChapterStart environment
+
+
+%%
+\LetLtxMacro\ChapterDisplay\ChapterStart\relax % deprecated
+\LetLtxMacro\endChapterDisplay\endChapterStart\relax % deprecated
+%
+\newcommand\ChapterTitle[2][c]{% optional alignment l, c, r
+ \ignorespaces%
+ \vspace{0.5\nbs}\addtocounter{@linequarter}{2}%
+ \@tempTFfalse%
+ \ifthenelse{\equal{#1}{l}}{\let\@csalign\relax\@tempTFtrue}{}%
+ \ifthenelse{\equal{#1}{c}}{\let\@csalign\centering\relax\@tempTFtrue}{}%
+ \ifthenelse{\equal{#1}{r}}{\let\@csalign\hfill\relax\@tempTFtrue}{}%
+ \if@tempTF\else%
+ \ClassError{novel}{Chapter Title, Deco, Subtitle align must be l, c, or r}%
+ {On page \thepage you wrote a Chapter command with alignment ^^J%
+ other than the allowed l, c, or r.}%
+ \fi%
+ {\@csalign\stake\smash{{\chapterfont{}#2}}\par}%
+}
+%
+\newcommand\ChapterSubtitle[2][c]{% optional alignment l, c, r
+ \vspace{0.25\nbs}\addtocounter{@linequarter}{1}
+ \@tempTFfalse%
+ \ifthenelse{\equal{#1}{l}}{\let\@csalign\relax\@tempTFtrue}{}
+ \ifthenelse{\equal{#1}{c}}{\let\@csalign\centering\relax\@tempTFtrue}{}
+ \ifthenelse{\equal{#1}{r}}{\let\@csalign\hfill\relax\@tempTFtrue}{}
+ \if@tempTF\else%
+ \ClassError{novel}{Chapter Title, Deco, Subtitle align must be l, c, or r}%
+ {On page \thepage you wrote a Chapter command with alignment ^^J%
+ other than the allowed l, c, or r.}%
+ \fi%
+ {\@csalign{\stake\smash{\subchfont #2}}\par}%
+}
+% In ChapterDeco, a trick is used. Instead of two optional arguments, and
+% instead of using expl3 syntax to create different argument delimiters,
+% the arguments for alignment and scale are passed as a single option.
+% This works because one is a letter, and the other is a number.
+% So it is easy to separte them by parsing.
+\newcommand\ChapterDeco[2][c1]{% optional alignment and scale, either order
+ \@tempTFfalse
+ \StrDel{#1}{ }[\temp@cds]% may use space separator
+ \StrDel{\temp@cds}{,}[\temp@cd]% may use comma separator
+ \IfSubStr{#1}{l}{% left align
+ \let\@csalign\relax\@tempTFtrue%
+ \StrDel{\temp@cd}{l}[\temp@cd]%
+ }{}%
+ \IfSubStr{#1}{c}{% centered
+ \let\@csalign\centering\relax\@tempTFtrue%
+ \StrDel{\temp@cd}{c}[\temp@cd]%
+ }{}%
+ \IfSubStr{#1}{r}{% right align
+ \let\@csalign\hfill\relax\@tempTFtrue%
+ \StrDel{\temp@cd}{r}[\temp@cd]%
+ }{}%
+ \if@tempTF\else%
+ \let\@csalign\centering\relax\@tempTFtrue%
+ \fi%
+ % Now for scaling, with adjusted vertical position:
+ \IfEndWith{\temp@cd}{.}{\StrSubstitute{\temp@cd}{.}{.0}[\temp@cd]}{}%
+ \IfBeginWith{\temp@cd}{.}{\StrSubstitute{\temp@cd}{.}{1.}[\temp@cd]}{}%
+ \IfDecimal{\temp@cd}{\def\@thisScale{\temp@cd}}{\def\@thisScale{1}}%
+ {\@csalign\charscale[\@thisScale,0pt,0.2\nbs]{#2}\par}%
+}
+%
+%%
+
+
+%% \Epigraph[align,scale,width]{text} OBSOLETE IN CODE VERSION 1.2
+
+
+%% \QuickChapter[line style]{text} intended for a story consisting of numerous
+% short chapters without page breaks. Two blank lines are inserted. In the gap
+% is the text, using subchfont. Optional line follows using \bigemdash style.
+% If option is empty, no line. If a length, then the line is that length.
+% If option * then the line fills to end of text line.
+\newcommand\QuickChapter[2][]{%
+ \null%
+ \noindent{\subchfont\charscale[1,0pt,0.3em]{#2}%
+ \gsetlength\@tempLength{\heightof{x}}% height of x in subchfont
+ }% end subchfont
+ \FPdiv{\@qclineth}{\strip@pt\@tempLength}{\strip@pt\normalxheight}% fontscale
+ \FPmul{\@howthick}{\@qclineth}{0.049}% typical emdash thickness, em.
+ \FPmul{\@howraise}{0.23}{\@qclineth}% typical emdash height em raised.
+ \ifthenelse{\equal{#1}{} \OR \equal{#1}{ }}{}{% no line, else:
+ \ifthenelse{\equal{#1}{*}}{% line fills:
+ ~\leaders%
+ \hbox{\smash{\rule[\@howraise em]{1pt}{\@howthick em}}}%
+ \hfill\stake\par%
+ }{% else line at specific length:
+ ~\makebox[#1][l]{%
+ \leaders\hbox{\smash{\rule[\@howraise em]{1pt}{\@howthick em}}}\hfill%
+ }%
+ }%
+ }%
+ \NoIndentAfterThis%
+} % end \QuickChapter
+%%
+
+
+%% New in version 1.40: \cleartorecto and \cleartoend
+% \cleartorecto works same as \clearpage when next page is recto.
+% If next page would be verso, a blank verso is inserted,
+% so that the following material is recto.
+% \cleartoend is used at very end of book.
+% It adds a blank page. If the blank is verso, end of book.
+% But if that blank is recto, it adds a second blank page, end of book.
+% So, the book always ends with a blank verso.
+\gdef\cleartorecto{
+ \clearpage
+ \ifodd\c@page
+ \else
+ \thispagestyle{empty}
+ \null
+ \clearpage
+ \fi
+}
+\newif \if@cleartoend
+\gdef\cleartoend{
+ \if@cleartoend\else
+ \clearpage
+ \ifodd\c@page
+ \thispagestyle{empty}
+ \null
+ \clearpage
+ \fi
+ \thispagestyle{empty}
+ \null
+ \clearpage
+ \fi
+ \global\@cleartoendtrue
+}
+%
+
+
+%%
+\gdef\@ActivateChapterScene{% called by `novel.cls' \AtBeginDocument
+ % Activate user choice of whether or not to indent after scenebreak commands:
+ \if@IndentAfterScenebreak\else
+ \NoIndentAfterCmd{\scenebreak}
+ \NoIndentAfterCmd{\sceneline}
+ \NoIndentAfterCmd{\scenestars}
+ \fi
+}% end \@ActivateChapterScene
+%%
+
+
+%% Neutralize settings commands:
+\gdef\@DisableChapterSceneSettings{% called by `novel.cls' \AtBeginDocument
+ \LetLtxMacro\SetHeadFootStyle\relax
+ \LetLtxMacro\IndentAfterScenebreak\relax
+ \LetLtxMacro\SetScenebreakIndent\relax
+}% end \@DisableChapterSceneSettings
+%%
+
+
+
+%%
+\endinput
+%%
+%% End of file `novel-ChapterScene.sty'.
+
+