581 lines
14 KiB
TeX
581 lines
14 KiB
TeX
%%
|
|
%% This file contains the main style commands
|
|
%%
|
|
%% Some options can be set by changing the \loaddefaults command
|
|
%%
|
|
|
|
\usepackage{color}
|
|
\usepackage{marginnote}
|
|
|
|
\def\loaddefaults{
|
|
\sectionstrue
|
|
\subseqcountfalse
|
|
\def\seqskip{\vskip1.5cm}
|
|
\def\subseqskip{\vskip1cm}
|
|
\resetpointattheofalse
|
|
\parindent=0pt
|
|
\def\indent{\hskip20pt}
|
|
}
|
|
|
|
% false if there are no sections
|
|
\newif\ifsections
|
|
% true if equation numbers should include the subsection number
|
|
\newif\ifsubseqcount
|
|
% true if there is a table of contents
|
|
\newif\iftoc
|
|
% true if point counting should reset at each theorem
|
|
\newif\ifresetpointattheo
|
|
|
|
% a prefix to put before the section number, e.g. A for appendices
|
|
\def\sectionprefix{}
|
|
|
|
% file to write refs to
|
|
\newwrite\refout
|
|
|
|
\loaddefaults
|
|
|
|
%% style for the equation number
|
|
\def\eqnumstyle{}
|
|
|
|
%% correct vertical alignment at the end of a document
|
|
\AtEndDocument{
|
|
\vfill
|
|
\eject
|
|
}
|
|
|
|
%% prevent page breaks
|
|
\newcount\prevpostdisplaypenalty
|
|
\def\nopagebreakaftereq{
|
|
\prevpostdisplaypenalty=\postdisplaypenalty
|
|
\postdisplaypenalty=10000
|
|
}
|
|
\def\restorepagebreakaftereq{
|
|
\postdisplaypenalty=\prevpostdisplaypenalty
|
|
}
|
|
|
|
%% hyperlinks
|
|
% hyperlinkcounter
|
|
\newcounter{lncount}
|
|
% hyperref anchor
|
|
\def\hrefanchor{%
|
|
\stepcounter{lncount}%
|
|
\hypertarget{ln.\thelncount}{}%
|
|
}
|
|
|
|
%% define a command and write it to aux file
|
|
\def\outdef#1#2{%
|
|
% define command
|
|
\expandafter\xdef\csname #1\endcsname{#2}%
|
|
% hyperlink number
|
|
\expandafter\xdef\csname #1@hl\endcsname{\thelncount}%
|
|
% write command to aux
|
|
\immediate\write\@auxout{\noexpand\expandafter\noexpand\gdef\noexpand\csname #1\endcsname{\csname #1\endcsname}}%
|
|
\immediate\write\@auxout{\noexpand\expandafter\noexpand\gdef\noexpand\csname #1@hl\endcsname{\thelncount}}%
|
|
}
|
|
|
|
|
|
%% define a label for the latest tag
|
|
%% label defines a command containing the string stored in \tag
|
|
\AtBeginDocument{
|
|
\def\label#1{\expandafter\outdef{label@#1}{\safe\tag}}
|
|
|
|
%% make a custom link at any given location in the document
|
|
\def\makelink#1#2{
|
|
\hrefanchor
|
|
\outdef{label@#1}{#2}
|
|
}
|
|
|
|
\def\ref#1{%
|
|
% check whether the label is defined (hyperlink runs into errors if this check is ommitted)
|
|
\ifcsname label@#1@hl\endcsname%
|
|
\hyperlink{ln.\csname label@#1@hl\endcsname}{{\color{blue}\safe\csname label@#1\endcsname}}%
|
|
\else%
|
|
\ifcsname label@#1\endcsname%
|
|
{\color{blue}\csname label@#1\endcsname}%
|
|
\else%
|
|
{\bf ??}%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
}
|
|
|
|
%% counters
|
|
\newcounter{partcount}
|
|
\newcounter{sectioncount}
|
|
\newcounter{subsectioncount}
|
|
\newcounter{pointcount}
|
|
\newcounter{subpointcount}
|
|
\newcounter{subsubpointcount}
|
|
\newcounter{seqcount}
|
|
\newcounter{figcount}
|
|
\newcounter{Theocount}
|
|
\newcounter{tocpartcount}
|
|
\newcounter{tocsectioncount}
|
|
\newcounter{tocsubsectioncount}
|
|
|
|
%% part command
|
|
\def\part#1{%
|
|
\partnocount{#1}{Part \Roman{partcount}}{\Roman{partcount}}%
|
|
}
|
|
|
|
%% no number
|
|
\def\partnocount#1#2#3{%
|
|
% reset counters
|
|
\stepcounter{partcount}%
|
|
\setcounter{sectioncount}{0}%
|
|
\setcounter{subsectioncount}{0}%
|
|
\setcounter{pointcount}{0}%
|
|
\setcounter{subpointcount}{0}%
|
|
\setcounter{subsubpointcount}{0}%
|
|
\setcounter{figcount}{0}%
|
|
\setcounter{Theocount}{0}%
|
|
\setcounter{seqcount}{0}%
|
|
% set section prefix
|
|
\ifnum\thepartcount>0%
|
|
\edef\sectionprefix{\Roman{partcount}.}%
|
|
\else%
|
|
\edef\sectionprefix{\thepartcount.}%
|
|
\fi%
|
|
% hyperref anchor
|
|
\hrefanchor%
|
|
% define tag (for \label)
|
|
\xdef\tag{#3}%
|
|
% print name
|
|
\hfil\vrule width0.5\textwidth height0.5pt\par%
|
|
\hugeskip%
|
|
{\bf\LARGE\hfil #2\par%
|
|
\hfil\vrule width50pt height0.5pt\par%
|
|
\vskip1em%
|
|
\hfil #1}\par%
|
|
\hugeskip%
|
|
\hfil\vrule width0.5\textwidth height0.5pt\par%
|
|
\seqskip%
|
|
% write to table of contents
|
|
\iftoc%
|
|
% save lncount in aux variable which is written to toc
|
|
\immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@part.\thepartcount\endcsname{\thelncount}}%
|
|
\write\tocoutput{\noexpand\tocpart{#1}{#2}{\thepartcount}{\thepage}}%
|
|
\fi%
|
|
% citeref file
|
|
\ifnum\thepartcount>0%
|
|
\immediate\closeout\refout%
|
|
\fi%
|
|
\immediate\openout\refout=citeref-\thepartcount.aux%
|
|
\par\penalty10000%
|
|
\bigskip\penalty10000%
|
|
}
|
|
|
|
%% section command
|
|
\newlength\secnumwidth
|
|
\newlength\sectitlewidth
|
|
\def\section#1{%
|
|
% reset counters
|
|
\stepcounter{sectioncount}%
|
|
\setcounter{subsectioncount}{0}%
|
|
\setcounter{pointcount}{0}%
|
|
\setcounter{subpointcount}{0}%
|
|
\setcounter{subsubpointcount}{0}%
|
|
\setcounter{figcount}{0}%
|
|
\setcounter{Theocount}{0}%
|
|
\setcounter{seqcount}{0}%
|
|
% space before section
|
|
\seqskip%
|
|
% hyperref anchor
|
|
\hrefanchor%
|
|
% define tag (for \label)
|
|
\xdef\tag{\sectionprefix\thesectioncount}%
|
|
% get widths
|
|
\def\@secnum{{\bf\Large\sectionprefix\thesectioncount.\hskip10pt}}%
|
|
\settowidth\secnumwidth{\@secnum}%
|
|
\setlength\sectitlewidth\textwidth%
|
|
\addtolength\sectitlewidth{-\secnumwidth}%
|
|
% print name
|
|
\parbox{\textwidth}{%
|
|
\@secnum%
|
|
\parbox[t]{\sectitlewidth}{\Large\bf #1}}%
|
|
% write to table of contents
|
|
\iftoc%
|
|
% save lncount in aux variable which is written to toc
|
|
\immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@sec.\thesectioncount\endcsname{\thelncount}}%
|
|
\write\tocoutput{\noexpand\tocsection{#1}{\thepage}}%
|
|
\fi%
|
|
\par\penalty10000%
|
|
\bigskip\penalty10000%
|
|
}
|
|
|
|
%% subsection
|
|
\def\subsection#1{
|
|
% counters
|
|
\stepcounter{subsectioncount}%
|
|
\setcounter{pointcount}{0}%
|
|
\setcounter{subpointcount}{0}%
|
|
\setcounter{subsubpointcount}{0}%
|
|
\ifsubseqcount%
|
|
\setcounter{seqcount}0%
|
|
\fi%
|
|
% space before subsection
|
|
\subseqskip%
|
|
\penalty-500%
|
|
% hyperref anchor
|
|
\hrefanchor
|
|
% define tag (for \label)
|
|
\xdef\tag{\sectionprefix\thesectioncount.\thesubsectioncount}%
|
|
% get widths
|
|
\def\@secnum{{\bf\large\hskip.5cm\sectionprefix\thesectioncount.\thesubsectioncount.\hskip5pt}}%
|
|
\settowidth\secnumwidth{\@secnum}%
|
|
\setlength\sectitlewidth\textwidth%
|
|
\addtolength\sectitlewidth{-\secnumwidth}%
|
|
% print name
|
|
\parbox{\textwidth}{%
|
|
\@secnum%
|
|
\parbox[t]{\sectitlewidth}{\large\bf #1}}%
|
|
% write to table of contents
|
|
\iftoc%
|
|
% save lncount in aux variable which is written to toc
|
|
\immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@subsec.\thesectioncount.\thesubsectioncount\endcsname{\thelncount}}%
|
|
\write\tocoutput{\noexpand\tocsubsection{#1}{\thepage}}%
|
|
\fi%
|
|
\par\penalty10000%
|
|
\medskip\penalty10000%
|
|
}
|
|
|
|
%% itemize
|
|
\newlength\itemizeskip
|
|
% left margin for items
|
|
\setlength\itemizeskip{20pt}
|
|
% item symbol
|
|
\def\itemizept{\textbullet}
|
|
\newlength\itemizeseparator
|
|
% space between the item symbol and the text
|
|
\setlength\itemizeseparator{5pt}
|
|
% penalty preceding an itemize
|
|
\def\itemizepenalty{0}
|
|
|
|
\newlength\current@itemizeskip
|
|
\setlength\current@itemizeskip{0pt}
|
|
\def\itemize{
|
|
\par\penalty\itemizepenalty\medskip\penalty\itemizepenalty
|
|
\addtolength\current@itemizeskip{\itemizeskip}
|
|
\leftskip\current@itemizeskip
|
|
}
|
|
\def\enditemize{
|
|
\addtolength\current@itemizeskip{-\itemizeskip}
|
|
\par\leftskip\current@itemizeskip
|
|
\medskip
|
|
}
|
|
\newlength\itempt@total
|
|
\def\item{
|
|
\settowidth\itempt@total{\itemizept}
|
|
\addtolength\itempt@total{\itemizeseparator}
|
|
\par
|
|
\medskip
|
|
\hskip-\itempt@total\itemizept\hskip\itemizeseparator
|
|
}
|
|
|
|
%% enumerate
|
|
\newcounter{enumerate@count}
|
|
\def\enumerate{
|
|
\setcounter{enumerate@count}0
|
|
\let\olditem\item
|
|
\let\olditemizept\itemizept
|
|
\def\item{
|
|
% counter
|
|
\stepcounter{enumerate@count}
|
|
% set header
|
|
\def\itemizept{\theenumerate@count.}
|
|
% hyperref anchor
|
|
\hrefanchor
|
|
% define tag (for \label)
|
|
\xdef\tag{\theenumerate@count}
|
|
\olditem
|
|
}
|
|
\itemize
|
|
}
|
|
\def\endenumerate{
|
|
\enditemize
|
|
\let\item\olditem
|
|
\let\itemizept\olditemizept
|
|
}
|
|
|
|
%% points
|
|
\def\point{
|
|
\stepcounter{pointcount}
|
|
\setcounter{subpointcount}{0}
|
|
% hyperref anchor
|
|
\hrefanchor
|
|
\indent{\bf \thepointcount\ - }
|
|
% define tag (for \label)
|
|
\xdef\tag{\thepointcount}
|
|
}
|
|
\def\subpoint{
|
|
\stepcounter{subpointcount}
|
|
\setcounter{subsubpointcount}0
|
|
% hyperref anchor
|
|
\hrefanchor
|
|
\indent\hskip.5cm{\bf \thepointcount-\thesubpointcount\ - }
|
|
% define tag (for \label)
|
|
\xdef\tag{\thepointcount-\thesubpointcount}
|
|
}
|
|
\def\subsubpoint{
|
|
\stepcounter{subsubpointcount}
|
|
% hyperref anchor
|
|
\hrefanchor
|
|
\indent\hskip1cm{\bf \thepointcount-\thesubpointcount-\thesubsubpointcount\ - }
|
|
% define tag (for \label)
|
|
\xdef\tag{\thepointcount-\thesubpointcount-\thesubsubpointcount}
|
|
}
|
|
\def\pspoint{
|
|
\stepcounter{pointcount}
|
|
\stepcounter{subpointcount}
|
|
\setcounter{subsubpointcount}0
|
|
% hyperref anchor
|
|
\hrefanchor
|
|
\indent\hskip.5cm{\bf \thepointcount-\thesubpointcount\ - }
|
|
% define tag (for \label)
|
|
\xdef\tag{\thepointcount-\thesubpointcount}
|
|
}
|
|
|
|
% reset points
|
|
\def\resetpointcounter{
|
|
\setcounter{pointcount}{0}
|
|
\setcounter{subpointcount}{0}
|
|
\setcounter{subsubpointcount}{0}
|
|
}
|
|
|
|
%% equation numbering
|
|
\def\seqcount{
|
|
\stepcounter{seqcount}
|
|
% the output
|
|
\edef\seqformat{\theseqcount}
|
|
% add subsection number
|
|
\ifsubseqcount
|
|
\let\tmp\seqformat
|
|
\edef\seqformat{\thesubsectioncount.\tmp}
|
|
\fi
|
|
% add section number
|
|
\ifsections
|
|
\let\tmp\seqformat
|
|
\edef\seqformat{\sectionprefix\thesectioncount.\tmp}
|
|
\fi
|
|
% define tag (for \label)
|
|
\xdef\tag{\seqformat}
|
|
% write number
|
|
\marginnote{\eqnumstyle\hfill(\seqformat)}
|
|
}
|
|
%% equation environment compatibility
|
|
\def\equation{\hrefanchor$$\seqcount}
|
|
\def\endequation{$$\@ignoretrue}
|
|
|
|
%% figures
|
|
\newlength\figwidth
|
|
\setlength\figwidth\textwidth
|
|
\addtolength\figwidth{-2.5cm}
|
|
|
|
\def\caption#1{%
|
|
\stepcounter{figcount}%
|
|
% hyperref anchor
|
|
\hrefanchor%
|
|
% the number of the figure
|
|
\edef\figformat{\thefigcount}%
|
|
% add section number
|
|
\ifsections%
|
|
\let\tmp\figformat%
|
|
\edef\figformat{\sectionprefix\thesectioncount.\tmp}%
|
|
\fi%
|
|
% define tag (for \label)
|
|
\xdef\tag{\figformat}%
|
|
% write
|
|
\hfil fig \figformat: \parbox[t]{\figwidth}{\leavevmode\small#1}%
|
|
\par\bigskip%
|
|
}
|
|
%% short caption: centered
|
|
\def\captionshort#1{%
|
|
\stepcounter{figcount}%
|
|
% hyperref anchor
|
|
\hrefanchor%
|
|
% the number of the figure
|
|
\edef\figformat{\thefigcount}%
|
|
% add section number
|
|
\ifsections%
|
|
\let\tmp\figformat%
|
|
\edef\figformat{\sectionprefix\thesectioncount.\tmp}%
|
|
\fi%
|
|
% define tag (for \label)
|
|
\xdef\tag{\figformat}%
|
|
% write
|
|
\hfil fig \figformat: {\small#1}%
|
|
\par\bigskip%
|
|
}
|
|
|
|
%% environment
|
|
\def\figure{
|
|
\par\penalty-500
|
|
}
|
|
\def\endfigure{
|
|
\par\penalty-1000
|
|
}
|
|
|
|
%% delimiters
|
|
\def\delimtitle#1{\par%
|
|
\leavevmode%
|
|
\raise.3em\hbox to\hsize{%
|
|
\lower0.3em\hbox{\vrule height0.3em}%
|
|
\hrulefill%
|
|
\ \lower.3em\hbox{#1}\ %
|
|
\hrulefill%
|
|
\lower0.3em\hbox{\vrule height0.3em}%
|
|
}\par\penalty10000}
|
|
|
|
%% callable by ref
|
|
\def\delimtitleref#1{\par%
|
|
% hyperref anchor
|
|
\hrefanchor%
|
|
% define tag (for \label)
|
|
\xdef\tag{#1}%
|
|
\leavevmode%
|
|
\raise.3em\hbox to\hsize{%
|
|
\lower0.3em\hbox{\vrule height0.3em}%
|
|
\hrulefill%
|
|
\ \lower.3em\hbox{\bf #1}\ %
|
|
\hrulefill%
|
|
\lower0.3em\hbox{\vrule height0.3em}%
|
|
}\par\penalty10000}
|
|
|
|
%% no title
|
|
\def\delim{\par%
|
|
\leavevmode\raise.3em\hbox to\hsize{%
|
|
\lower0.3em\hbox{\vrule height0.3em}%
|
|
\hrulefill%
|
|
\lower0.3em\hbox{\vrule height0.3em}%
|
|
}\par\penalty10000}
|
|
|
|
%% end delim
|
|
\def\enddelim{\par\penalty10000%
|
|
\leavevmode%
|
|
\raise.3em\hbox to\hsize{%
|
|
\vrule height0.3em\hrulefill\vrule height0.3em%
|
|
}\par}
|
|
|
|
\def\delim{\par\leavevmode\raise.3em\hbox to\hsize{\vrule height0.3em\hrulefill\vrule height0.3em}\par\penalty10000}
|
|
\def\enddelim{\par\penalty10000\leavevmode\raise.3em\hbox to\hsize{\vrule height0.3em\hrulefill\vrule height0.3em}\par}
|
|
|
|
%% theorem headers
|
|
\def\theo#1{
|
|
\stepcounter{Theocount}
|
|
% reset points
|
|
\ifresetpointattheo\resetpointcounter\fi
|
|
% hyperref anchor
|
|
\hrefanchor
|
|
% the number
|
|
\def\formattheo{\theTheocount}
|
|
% add section number
|
|
\ifsections
|
|
\let\tmp\formattheo
|
|
\edef\formattheo{\sectionprefix\thesectioncount.\tmp}
|
|
\fi
|
|
% define tag (for \label)
|
|
\xdef\tag{\formattheo}
|
|
% write
|
|
\delimtitle{\bf #1 \formattheo}
|
|
}
|
|
\let\endtheo\enddelim
|
|
%% theorem headers with name
|
|
\def\theoname#1#2{
|
|
\theo{#1}\hfil({\it #2})\par\penalty10000\medskip%
|
|
}
|
|
|
|
%% start appendices
|
|
\def\appendix{%
|
|
\vfill
|
|
\pagebreak
|
|
% counter
|
|
\setcounter{sectioncount}0%
|
|
% prefix
|
|
\edef\sectionprefix{\sectionprefix A}%
|
|
% write
|
|
{\bf \LARGE Appendices}\par\penalty10000\bigskip\penalty10000%
|
|
% add a mention in the table of contents
|
|
\iftoc%
|
|
\immediate\write\tocoutput{\noexpand\tocappendices}\penalty10000%
|
|
\fi%
|
|
%% uncomment for new page for each appendix
|
|
%\def\seqskip{\vfill\pagebreak}
|
|
}
|
|
|
|
%% start references
|
|
\def\references{%
|
|
\hrefanchor%
|
|
% write
|
|
{\bf \LARGE References}\par\penalty10000\bigskip\penalty10000%
|
|
% add a mention in the table of contents
|
|
\iftoc%
|
|
% save lncount in aux variable which is written to toc
|
|
\immediate\write\tocoutput{\noexpand\expandafter\noexpand\edef\noexpand\csname toc@references\endcsname{\thelncount}}%
|
|
\write\tocoutput{\noexpand\tocreferences{\thepage}}\penalty10000%
|
|
\fi%
|
|
}
|
|
|
|
|
|
%% table of contents
|
|
\newif\iftocopen
|
|
\def\tableofcontents{
|
|
{\bf \large Table of contents:}\par\penalty10000\bigskip\penalty10000%
|
|
% copy content from file
|
|
\IfFileExists{\jobname.toc}{\input{\jobname.toc}}{{\tt error: table of contents missing}}
|
|
% open new toc
|
|
\newwrite\tocoutput
|
|
\immediate\openout\tocoutput=\jobname.toc
|
|
\toctrue
|
|
}
|
|
%% close file
|
|
\AtEndDocument{
|
|
% close toc
|
|
\iftoc
|
|
\immediate\closeout\tocoutput
|
|
\fi
|
|
}
|
|
|
|
|
|
%% fill line with dots
|
|
\def\leaderfill{\leaders\hbox to 1em {\hss. \hss}\hfill}
|
|
|
|
%% same as sectionprefix
|
|
\def\tocsectionprefix{}
|
|
|
|
%% toc formats
|
|
\def\tocpart #1#2#3#4{
|
|
\setcounter{tocpartcount}{#3}
|
|
\setcounter{tocsectioncount}{0}
|
|
\setcounter{tocsubsectioncount}{0}
|
|
% write
|
|
\medskip\hyperlink{ln.\csname toc@part.#3\endcsname}{{\bf #2}.\hskip5pt {\color{blue}\bf#1}\leaderfill#4}\par
|
|
\ifnum\thetocpartcount>0
|
|
\edef\tocsectionprefix{\Roman{tocpartcount}.}
|
|
\else
|
|
\edef\tocsectionprefix{\thetocpartcount.}
|
|
\fi
|
|
}
|
|
\def\tocsection #1#2{
|
|
\stepcounter{tocsectioncount}
|
|
\setcounter{tocsubsectioncount}{0}
|
|
% write
|
|
\smallskip\hskip10pt\hyperlink{ln.\csname toc@sec.\thetocsectioncount\endcsname}{{\bf \tocsectionprefix\thetocsectioncount}.\hskip5pt {\color{blue}#1}\leaderfill#2}\par
|
|
}
|
|
\def\tocsubsection #1#2{
|
|
\stepcounter{tocsubsectioncount}
|
|
% write
|
|
{\hskip10pt\hyperlink{ln.\csname toc@subsec.\thetocsectioncount.\thetocsubsectioncount\endcsname}{{\bf \tocsectionprefix\thetocsectioncount.\thetocsubsectioncount}.\hskip5pt {\color{blue}\small #1}\leaderfill#2}}\par
|
|
}
|
|
\def\tocappendices{
|
|
\medskip
|
|
\setcounter{tocsectioncount}0
|
|
\hskip10pt{\bf Appendices}\par
|
|
\smallskip
|
|
\edef\tocsectionprefix{\tocsectionprefix A}
|
|
}
|
|
\def\tocreferences#1{
|
|
\medskip
|
|
\hskip10pt{\hyperlink{ln.\csname toc@references\endcsname}{{\color{blue}\bf References}\leaderfill#1}}\par
|
|
\smallskip
|
|
}
|