summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/frankenstein/blkcntrl.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/frankenstein/blkcntrl.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/frankenstein/blkcntrl.sty')
-rw-r--r--macros/latex/contrib/frankenstein/blkcntrl.sty298
1 files changed, 298 insertions, 0 deletions
diff --git a/macros/latex/contrib/frankenstein/blkcntrl.sty b/macros/latex/contrib/frankenstein/blkcntrl.sty
new file mode 100644
index 0000000000..b313925e20
--- /dev/null
+++ b/macros/latex/contrib/frankenstein/blkcntrl.sty
@@ -0,0 +1,298 @@
+%^^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
+% blkcntrl LaTeX package. It will work ONLY if it is placed in a
+% proper directory. Files called README, INSTALL, blkcntrl.tex
+% and blkcntrl.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{97}
+%
+%^^A** abstract
+% \begin{abstract}
+% Inserts hooks into certain block elements and footnotes. Also provides a
+% command to set block quotations one size smaller than the main text.
+% \end{abstract}
+% \tableofcontents
+%
+% \part{Discussion}
+%
+% \section{General}
+%
+% This package has two purposes. First, it inserts several hooks into
+% constructs in the standard document classes so that other packages can use
+% the hooks. The \package{achicago}, \package{attrib}, \package{dialogue}, and
+% \package{bits} packages in the \Frankenstein bundle require
+% \package{blkcntrl}. Second, \package{blkcntrl} offers one option itself that
+% uses the hooks. The \option{smallblocks} option has the same effect as using
+% \cs\smallblocks in the preamble, for which see below. The
+% \option{normalblocks} option means no \cs\smallblocks, and is there simply
+% for completeness.
+%
+%% FIX; using smallblocks option gives option clash when other packages require
+% blkcntrl. Do thorough review of option passing.
+%
+% \DescribeMacro\smallblocks
+% When \cs\smallblocks is declared in the preamble, footnotes and the block
+% elements \env{quote}, \env{quotation}, and \env{verse} are set one size
+% smaller (i.e., \code{\relsize{-1}}).
+%
+% \DescribeMacro\normalblocks
+%
+% \section{Programmers' interface}
+%
+% \DescribeMacro\PreChunk
+%
+% \DescribeMacro\PreQuote
+%
+% \DescribeMacro\PreQuotation
+%
+% \DescribeMacro\PreVerse
+%
+% \DescribeMacro\PreFootnote
+%
+% \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{block control}
+\def\DoXPackageS {}
+\def\fileversion{v1.2}
+\def\filedate{2001/08/31}
+\def\docdate{2001/08/31}
+\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{blkcntrl}[\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.
+%
+%
+% \section{Requirements}
+%
+% \begin{macrocode}
+\RequirePackage{moredefs,relsize}
+% \end{macrocode}
+%
+% \section{Options}
+%
+% \begin{macro}{\normalblocks}
+% \begin{macro}{\smallblocks}
+% \begin{macro}{\if@smallblocks@}
+% \begin{macro}{\@smallblocks@true}
+% \begin{macro}{\@smallblocks@false}
+% \mbox{}
+% \begin{macrocode}
+\DeclareBooleanUserOptions{smallblocks}{normalblocks}
+\@onlypreamble\smallblocks
+\@onlypreamble\normalblocks
+\ExecuteOptions{normalblocks}
+\ProcessOptions
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{General get-control hook hacks}
+%
+% \begin{macro}{\if@in@footnote@}
+% \begin{macro}{\@in@footnote@true}
+% \begin{macro}{\@in@footnote@false}
+% \begin{macro}{\PreFootnote}
+% \begin{macro}{\PreChunk}
+% \begin{macro}{\PreQuote}
+% \begin{macro}{\PreQuotation}
+% \begin{macro}{\PreVerse}
+% Additions to these hooks should be made with \cname{\addto@macro}.
+% Deletions should be accomplished by scoping.
+%
+% I think macros are much more convenient as hooks than tokens. I use the
+% prefixes |Pre| or |Post|. We want to add a hook to the usual definition
+% here, to gain some control over relative sizing in footnotes.
+% \begin{macrocode}
+\newboolean{@in@footnote@}
+\newcommand\PreFootnote {%
+ \@in@footnote@true
+}
+\ReserveCS\PreChunk
+\newcommand\PreQuote {%
+ \PreChunk
+}
+\newcommand\PreQuotation {%
+ \PreChunk
+}
+\newcommand\PreVerse {%
+ \PreChunk
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@makefntext}
+% All we're doing is adding the \cs\PreFootnote hook.
+% \begin{macrocode}
+\defcommand\@makefntext [1] {%
+ \setlength\parindent{\@ne em}%
+ \noindent
+ \hb@xt@ 1.8em{\hss\@makefnmark}%
+ {\PreFootnote #1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{verse}
+% \begin{environment}{quotation}
+% \begin{environment}{quote}
+% Again all we're doing to these environments is adding the hooks.
+%
+% The hook cannot be put into the second argument, which is called before the
+% paragraph preceding the environment has been ended (unless the environment
+% started a new one).
+% \begin{macrocode}
+\renewenvironment{verse}
+ {\let\\\@centercr
+ \relax\list{}{\setlength{\itemsep}{\z@}%
+ \setlength{\itemindent}{-1.5em}%
+ \setlength{\listparindent}{\itemindent}%
+ \setlength{\rightmargin}{\leftmargin}%
+ \addtolength{\leftmargin}{1.5em}}%
+ \item\relax\PreVerse\relax}
+ {\endlist}
+\renewenvironment{quotation}
+ {\list{}{\setlength{\listparindent}{1.5em}%
+ \setlength{\itemindent}{\listparindent}%
+ \setlength{\rightmargin}{\leftmargin}%
+ \setlength{\parsep}{\z@ \@plus\p@}}%
+ \item\relax\PreQuotation\relax}
+ {\endlist}
+\renewenvironment{quote}
+ {\list{}{\setlength{\rightmargin}{\leftmargin}}%
+ \item\relax\PreQuote\relax}
+ {\endlist}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \begin{macrocode}
+\AtBeginDocument {%
+ \if@smallblocks@
+ \addto@macro\PreChunk {%
+ \if@in@footnote@
+ \else
+ \relsize{-1}%
+ \fi
+ }%
+ \fi
+}
+% \end{macrocode}
+%
+% \Finale