683 lines
17 KiB
OpenEdge ABL
683 lines
17 KiB
OpenEdge ABL
|
%%
|
||
|
%% Ian's class file
|
||
|
%%
|
||
|
|
||
|
%% TeX format
|
||
|
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
|
||
|
|
||
|
%% class name
|
||
|
\ProvidesClass{ian}[2017/09/29]
|
||
|
|
||
|
%% boolean to signal that this class is being used
|
||
|
\newif\ifianclass
|
||
|
|
||
|
%% options
|
||
|
% no section numbering in equations
|
||
|
\DeclareOption{section_in_eq}{\sectionsineqtrue}
|
||
|
\DeclareOption{section_in_fig}{\sectionsinfigtrue}
|
||
|
\DeclareOption{section_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
|
||
|
\DeclareOption{section_in_all}{\sectionsineqtrue\sectionsinfigtrue\PassOptionsToPackage{section_in_theo}{iantheo}}
|
||
|
\DeclareOption{subsection_in_eq}{\subsectionsineqtrue}
|
||
|
\DeclareOption{subsection_in_fig}{\subsectionsinfigtrue}
|
||
|
\DeclareOption{subsection_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
|
||
|
\DeclareOption{subsection_in_all}{\subsectionsineqtrue\subsectionsinfigtrue\PassOptionsToPackage{subsection_in_theo}{iantheo}}
|
||
|
\DeclareOption{no_section_in_eq}{\sectionsineqfalse}
|
||
|
\DeclareOption{no_section_in_fig}{\sectionsinfigfalse}
|
||
|
\DeclareOption{no_section_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
|
||
|
\DeclareOption{no_section_in_all}{\sectionsineqfalse\sectionsinfigfalse\PassOptionsToPackage{no_section_in_theo}{iantheo}}
|
||
|
\DeclareOption{no_subsection_in_eq}{\subsectionsineqfalse}
|
||
|
\DeclareOption{no_subsection_in_fig}{\subsectionsinfigfalse}
|
||
|
\DeclareOption{no_subsection_in_theo}{\PassOptionsToPackage{\CurrentOption}{iantheo}}
|
||
|
\DeclareOption{no_subsection_in_all}{\subsectionsineqfalse\subsectionsinfigfalse\PassOptionsToPackage{no_subsection_in_theo}{iantheo}}
|
||
|
% reset point
|
||
|
\DeclareOption{point_reset_at_section}{\PassOptionsToPackage{reset_at_section}{point}}
|
||
|
\DeclareOption{point_no_reset_at_section}{\PassOptionsToPackage{no_reset_at_section}{point}}
|
||
|
\DeclareOption{point_reset_at_theo}{\PassOptionsToPackage{reset_at_theo}{point}}
|
||
|
\DeclareOption{point_no_reset_at_theo}{\PassOptionsToPackage{no_reset_at_theo}{point}}
|
||
|
|
||
|
\def\ian@defaultoptions{
|
||
|
\ExecuteOptions{section_in_all, no_subsection_in_all}
|
||
|
\ProcessOptions
|
||
|
|
||
|
%% required packages
|
||
|
\RequirePackage{iantheo}
|
||
|
\RequirePackage{point}
|
||
|
\RequirePackage{color}
|
||
|
\RequirePackage{marginnote}
|
||
|
\RequirePackage{amssymb}
|
||
|
\PassOptionsToPackage{hidelinks}{hyperref}
|
||
|
\RequirePackage{hyperref}
|
||
|
}
|
||
|
|
||
|
%% paper dimensions
|
||
|
\setlength\paperheight{297mm}
|
||
|
\setlength\paperwidth{210mm}
|
||
|
|
||
|
%% fonts
|
||
|
\input{size11.clo}
|
||
|
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
|
||
|
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
|
||
|
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
|
||
|
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
|
||
|
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
|
||
|
|
||
|
%% text dimensions
|
||
|
\hoffset=-50pt
|
||
|
\voffset=-72pt
|
||
|
\textwidth=460pt
|
||
|
\textheight=704pt
|
||
|
|
||
|
|
||
|
%% remove default indentation
|
||
|
\parindent=0pt
|
||
|
%% indent command
|
||
|
\def\indent{\hskip20pt}
|
||
|
|
||
|
%% something is wrong with \thepage, redefine it
|
||
|
\gdef\thepage{\the\c@page}
|
||
|
|
||
|
%% array lines (to use the array environment)
|
||
|
\setlength\arraycolsep{5\p@}
|
||
|
\setlength\arrayrulewidth{.4\p@}
|
||
|
|
||
|
|
||
|
%% correct vertical alignment at the end of a document
|
||
|
\AtEndDocument{
|
||
|
\vfill
|
||
|
\eject
|
||
|
}
|
||
|
|
||
|
|
||
|
%% 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}}%
|
||
|
}
|
||
|
|
||
|
%% can call commands even when they are not defined
|
||
|
\def\safe#1{%
|
||
|
\ifdefined#1%
|
||
|
#1%
|
||
|
\else%
|
||
|
{\color{red}\bf?}%
|
||
|
\fi%
|
||
|
}
|
||
|
|
||
|
%% define a label for the latest tag
|
||
|
%% label defines a command containing the string stored in \tag
|
||
|
\def\deflabel{
|
||
|
\def\label##1{\expandafter\outdef{label@##1}{\safe\tag}}
|
||
|
|
||
|
\def\ref##1{%
|
||
|
% check whether the label is defined (hyperlink runs into errors if this check is omitted)
|
||
|
\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 ##1\endcsname}%
|
||
|
\else%
|
||
|
{\bf ??}%
|
||
|
\fi%
|
||
|
\fi%
|
||
|
}
|
||
|
% manually specify label for ref
|
||
|
\def\refname##1##2{%
|
||
|
% check whether the label is defined (hyperlink runs into errors if this check is omitted)
|
||
|
\ifcsname label@##1@hl\endcsname%
|
||
|
\hyperlink{ln.\csname label@##1@hl\endcsname}{{\color{blue}##2}}%
|
||
|
\else%
|
||
|
??##2%
|
||
|
\fi%
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
%% make a custom link at any given location in the document
|
||
|
\def\makelink#1#2{%
|
||
|
\hrefanchor%
|
||
|
\outdef{label@#1}{#2}%
|
||
|
}
|
||
|
|
||
|
|
||
|
%% section command
|
||
|
% counter
|
||
|
\newcounter{sectioncount}
|
||
|
% space before section
|
||
|
\newlength\secskip
|
||
|
\setlength\secskip{40pt}
|
||
|
% a prefix to put before the section number, e.g. A for appendices
|
||
|
\def\sectionprefix{}
|
||
|
% define some lengths
|
||
|
\newlength\secnumwidth
|
||
|
\newlength\sectitlewidth
|
||
|
\def\section#1{
|
||
|
% reset counters
|
||
|
\stepcounter{sectioncount}
|
||
|
\setcounter{subsectioncount}{0}
|
||
|
\ifsectionsineq
|
||
|
\setcounter{seqcount}0
|
||
|
\fi
|
||
|
\ifsectionsinfig
|
||
|
\setcounter{figcount}0
|
||
|
\fi
|
||
|
|
||
|
% space before section (if not first)
|
||
|
\ifnum\thesectioncount>1
|
||
|
\vskip\secskip
|
||
|
\penalty-1000
|
||
|
\fi
|
||
|
|
||
|
% 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
|
||
|
|
||
|
%space
|
||
|
\par\penalty10000
|
||
|
\bigskip\penalty10000
|
||
|
}
|
||
|
|
||
|
%% subsection
|
||
|
% counter
|
||
|
\newcounter{subsectioncount}
|
||
|
% space before subsection
|
||
|
\newlength\subsecskip
|
||
|
\setlength\subsecskip{30pt}
|
||
|
\def\subsection#1{
|
||
|
% counters
|
||
|
\stepcounter{subsectioncount}
|
||
|
\setcounter{subsubsectioncount}{0}
|
||
|
\ifsubsectionsineq
|
||
|
\setcounter{seqcount}0
|
||
|
\fi
|
||
|
\ifsubsectionsinfig
|
||
|
\setcounter{figcount}0
|
||
|
\fi
|
||
|
|
||
|
% space before subsection (if not first)
|
||
|
\ifnum\thesubsectioncount>1
|
||
|
\vskip\subsecskip
|
||
|
\penalty-500
|
||
|
\fi
|
||
|
|
||
|
% 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
|
||
|
|
||
|
% space
|
||
|
\par\penalty10000
|
||
|
\medskip\penalty10000
|
||
|
}
|
||
|
|
||
|
%% subsubsection
|
||
|
% counter
|
||
|
\newcounter{subsubsectioncount}
|
||
|
% space before subsubsection
|
||
|
\newlength\subsubsecskip
|
||
|
\setlength\subsubsecskip{20pt}
|
||
|
\def\subsubsection#1{
|
||
|
% counters
|
||
|
\stepcounter{subsubsectioncount}
|
||
|
|
||
|
% space before subsubsection (if not first)
|
||
|
\ifnum\thesubsubsectioncount>1
|
||
|
\vskip\subsubsecskip
|
||
|
\penalty-500
|
||
|
\fi
|
||
|
|
||
|
% hyperref anchor
|
||
|
\hrefanchor
|
||
|
% define tag (for \label)
|
||
|
\xdef\tag{\sectionprefix\thesectioncount.\thesubsectioncount.\thesubsubsectioncount}
|
||
|
|
||
|
% get widths
|
||
|
\def\@secnum{{\bf\hskip1.cm\sectionprefix\thesectioncount.\thesubsectioncount.\thesubsubsectioncount.\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@subsubsec.\thesectioncount.\thesubsectioncount.\thesubsubsectioncount\endcsname{\thelncount}}
|
||
|
\write\tocoutput{\noexpand\tocsubsubsection{#1}{\thepage}}
|
||
|
\fi
|
||
|
|
||
|
% space
|
||
|
\par\penalty10000
|
||
|
\medskip\penalty10000
|
||
|
}
|
||
|
|
||
|
%% itemize
|
||
|
\newlength\itemizeskip
|
||
|
% left margin for items
|
||
|
\setlength\itemizeskip{20pt}
|
||
|
\newlength\itemizeseparator
|
||
|
% space between the item symbol and the text
|
||
|
\setlength\itemizeseparator{5pt}
|
||
|
% penalty preceding an itemize
|
||
|
\newcount\itemizepenalty
|
||
|
\itemizepenalty=0
|
||
|
% counter counting the itemize level
|
||
|
\newcounter{itemizecount}
|
||
|
|
||
|
% item symbol
|
||
|
\def\itemizept#1{
|
||
|
\ifnum#1=1
|
||
|
\textbullet
|
||
|
\else
|
||
|
$\scriptstyle\blacktriangleright$
|
||
|
\fi
|
||
|
}
|
||
|
|
||
|
|
||
|
\newlength\current@itemizeskip
|
||
|
\setlength\current@itemizeskip{0pt}
|
||
|
\def\itemize{%
|
||
|
\par\expandafter\penalty\the\itemizepenalty\medskip\expandafter\penalty\the\itemizepenalty%
|
||
|
\addtocounter{itemizecount}{1}%
|
||
|
\addtolength\current@itemizeskip{\itemizeskip}%
|
||
|
\leftskip\current@itemizeskip%
|
||
|
}
|
||
|
\def\enditemize{%
|
||
|
\addtocounter{itemizecount}{-1}%
|
||
|
\addtolength\current@itemizeskip{-\itemizeskip}%
|
||
|
\par\expandafter\penalty\the\itemizepenalty\leftskip\current@itemizeskip%
|
||
|
\medskip\expandafter\penalty\the\itemizepenalty%
|
||
|
}
|
||
|
|
||
|
% item, with optional argument to specify the item point
|
||
|
% @itemarg is set to true when there is an optional argument
|
||
|
\newif\if@itemarg
|
||
|
\def\item{%
|
||
|
% check whether there is an optional argument (if there is none, add on empty '[]')
|
||
|
\@ifnextchar [{\@itemargtrue\@itemx}{\@itemargfalse\@itemx[]}%
|
||
|
}
|
||
|
\newlength\itempt@total
|
||
|
\def\@itemx[#1]{
|
||
|
\if@itemarg
|
||
|
\settowidth\itempt@total{#1}
|
||
|
\else
|
||
|
\settowidth\itempt@total{\itemizept\theitemizecount}
|
||
|
\fi
|
||
|
\addtolength\itempt@total{\itemizeseparator}
|
||
|
\par
|
||
|
\medskip
|
||
|
\if@itemarg
|
||
|
\hskip-\itempt@total#1\hskip\itemizeseparator
|
||
|
\else
|
||
|
\hskip-\itempt@total\itemizept\theitemizecount\hskip\itemizeseparator
|
||
|
\fi
|
||
|
}
|
||
|
|
||
|
%% prevent page breaks after itemize
|
||
|
\newcount\previtemizepenalty
|
||
|
\def\nopagebreakafteritemize{
|
||
|
\previtemizepenalty=\itemizepenalty
|
||
|
\itemizepenalty=10000
|
||
|
}
|
||
|
%% back to previous value
|
||
|
\def\restorepagebreakafteritemize{
|
||
|
\itemizepenalty=\previtemizepenalty
|
||
|
}
|
||
|
|
||
|
%% 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
|
||
|
}
|
||
|
|
||
|
|
||
|
%% equation numbering
|
||
|
% counter
|
||
|
\newcounter{seqcount}
|
||
|
% booleans (write section or subsection in equation number)
|
||
|
\newif\ifsectionsineq
|
||
|
\newif\ifsubsectionsineq
|
||
|
\def\seqcount{
|
||
|
\stepcounter{seqcount}
|
||
|
% the output
|
||
|
\edef\seqformat{\theseqcount}
|
||
|
% add subsection number
|
||
|
\ifsubsectionsineq
|
||
|
\let\tmp\seqformat
|
||
|
\edef\seqformat{\thesubsectioncount.\tmp}
|
||
|
\fi
|
||
|
% add section number
|
||
|
\ifsectionsineq
|
||
|
\let\tmp\seqformat
|
||
|
\edef\seqformat{\sectionprefix\thesectioncount.\tmp}
|
||
|
\fi
|
||
|
% define tag (for \label)
|
||
|
\xdef\tag{\seqformat}
|
||
|
% write number
|
||
|
\marginnote{\hfill(\seqformat)}
|
||
|
}
|
||
|
%% equation environment compatibility
|
||
|
\def\equation{\hrefanchor$$\seqcount}
|
||
|
\def\endequation{$$\@ignoretrue}
|
||
|
|
||
|
|
||
|
%% figures
|
||
|
% counter
|
||
|
\newcounter{figcount}
|
||
|
% booleans (write section or subsection in equation number)
|
||
|
\newif\ifsectionsinfig
|
||
|
\newif\ifsubsectionsinfig
|
||
|
% width of figures
|
||
|
\newlength\figwidth
|
||
|
\setlength\figwidth\textwidth
|
||
|
\addtolength\figwidth{-2.5cm}
|
||
|
% caption
|
||
|
\def\defcaption{
|
||
|
\long\def\caption##1{
|
||
|
\stepcounter{figcount}
|
||
|
|
||
|
% hyperref anchor
|
||
|
\hrefanchor
|
||
|
|
||
|
% the number of the figure
|
||
|
\edef\figformat{\thefigcount}
|
||
|
% add subsection number
|
||
|
\ifsubsectionsinfig
|
||
|
\let\tmp\figformat
|
||
|
\edef\figformat{\thesubsectioncount.\tmp}
|
||
|
\fi
|
||
|
% add section number
|
||
|
\ifsectionsinfig
|
||
|
\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}
|
||
|
|
||
|
% space
|
||
|
\par\bigskip
|
||
|
}
|
||
|
}
|
||
|
%% short caption: centered
|
||
|
\def\captionshort#1{
|
||
|
\stepcounter{figcount}
|
||
|
|
||
|
% hyperref anchor
|
||
|
\hrefanchor
|
||
|
|
||
|
% the number of the figure
|
||
|
\edef\figformat{\thefigcount}
|
||
|
% add section number
|
||
|
\ifsectionsinfig
|
||
|
\let\tmp\figformat
|
||
|
\edef\figformat{\sectionprefix\thesectioncount.\tmp}
|
||
|
\fi
|
||
|
|
||
|
% define tag (for \label)
|
||
|
\xdef\tag{\figformat}
|
||
|
|
||
|
% write
|
||
|
\hfil fig \figformat: {\small#1}
|
||
|
|
||
|
%space
|
||
|
\par\bigskip
|
||
|
}
|
||
|
|
||
|
%% environment
|
||
|
\def\figure{
|
||
|
\par
|
||
|
\vfil\penalty100\vfilneg
|
||
|
\bigskip
|
||
|
}
|
||
|
\def\endfigure{
|
||
|
\par
|
||
|
\bigskip
|
||
|
}
|
||
|
|
||
|
|
||
|
%% start appendices
|
||
|
\def\appendix{
|
||
|
\vfill
|
||
|
\pagebreak
|
||
|
|
||
|
% counter
|
||
|
\setcounter{sectioncount}0
|
||
|
|
||
|
% prefix
|
||
|
\def\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}
|
||
|
}
|
||
|
|
||
|
|
||
|
%% bibliography
|
||
|
% size of header
|
||
|
\newlength\bibheader
|
||
|
\def\thebibliography#1{
|
||
|
\hrefanchor
|
||
|
|
||
|
% 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
|
||
|
|
||
|
% write
|
||
|
{\bf \LARGE References}\par\penalty10000\bigskip\penalty10000
|
||
|
% width of header
|
||
|
\settowidth\bibheader{[#1]}
|
||
|
\leftskip\bibheader
|
||
|
}
|
||
|
% end environment
|
||
|
\def\endthebibliography{
|
||
|
\par\leftskip0pt
|
||
|
}
|
||
|
|
||
|
%% bibitem command
|
||
|
\def\bibitem[#1]#2{%
|
||
|
\hrefanchor%
|
||
|
\outdef{label@cite#2}{#1}%
|
||
|
\hskip-\bibheader%
|
||
|
\makebox[\bibheader]{\cite{#2}\hfill}%
|
||
|
}
|
||
|
|
||
|
%% cite command
|
||
|
% @tempswa is set to true when there is an optional argument
|
||
|
\newif\@tempswa
|
||
|
\def\cite{%
|
||
|
% check whether there is an optional argument (if there is none, add on empty '[]')
|
||
|
\@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}%
|
||
|
}
|
||
|
% command with optional argument
|
||
|
\def\@citex[#1]#2{\leavevmode%
|
||
|
% initialize loop
|
||
|
\let\@cite@separator\@empty%
|
||
|
% format
|
||
|
\@cite{%
|
||
|
% loop over ',' separated list
|
||
|
\@for\@cite@:=#2\do{%
|
||
|
% text to add at each iteration of the loop (separator between citations)
|
||
|
\@cite@separator\def\@cite@separator{,\ }%
|
||
|
% add entry to citelist
|
||
|
\@writecitation{\@cite@}%
|
||
|
\ref{cite\@cite@}%
|
||
|
}%
|
||
|
}%
|
||
|
% add optional argument text (as an argument to '\@cite')
|
||
|
{#1}%
|
||
|
}
|
||
|
\def\@cite#1#2{%
|
||
|
[#1\if@tempswa , #2\fi]%
|
||
|
}
|
||
|
%% add entry to citelist after checking it has not already been added
|
||
|
\def\@writecitation#1{%
|
||
|
\ifcsname if#1cited\endcsname%
|
||
|
\else%
|
||
|
\expandafter\newif\csname if#1cited\endcsname%
|
||
|
\immediate\write\@auxout{\string\citation{#1}}%
|
||
|
\fi%
|
||
|
}
|
||
|
|
||
|
%% table of contents
|
||
|
% boolean
|
||
|
\newif\iftoc
|
||
|
\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
|
||
|
\newcounter{tocsectioncount}
|
||
|
\def\tocsection #1#2{
|
||
|
\stepcounter{tocsectioncount}
|
||
|
\setcounter{tocsubsectioncount}{0}
|
||
|
\setcounter{tocsubsubsectioncount}{0}
|
||
|
% write
|
||
|
\smallskip\hyperlink{ln.\csname toc@sec.\thetocsectioncount\endcsname}{{\bf \tocsectionprefix\thetocsectioncount}.\hskip5pt {\color{blue}#1}\leaderfill#2}\par
|
||
|
}
|
||
|
\newcounter{tocsubsectioncount}
|
||
|
\def\tocsubsection #1#2{
|
||
|
\stepcounter{tocsubsectioncount}
|
||
|
\setcounter{tocsubsubsectioncount}{0}
|
||
|
% write
|
||
|
{\hskip10pt\hyperlink{ln.\csname toc@subsec.\thetocsectioncount.\thetocsubsectioncount\endcsname}{{\bf \thetocsectioncount.\thetocsubsectioncount}.\hskip5pt {\color{blue}\small #1}\leaderfill#2}}\par
|
||
|
}
|
||
|
\newcounter{tocsubsubsectioncount}
|
||
|
\def\tocsubsubsection #1#2{
|
||
|
\stepcounter{tocsubsubsectioncount}
|
||
|
% write
|
||
|
{\hskip20pt\hyperlink{ln.\csname toc@subsubsec.\thetocsectioncount.\thetocsubsectioncount.\thetocsubsubsectioncount\endcsname}{{\bf \thetocsectioncount.\thetocsubsectioncount.\thetocsubsubsectioncount}.\hskip5pt {\color{blue}\small #1}\leaderfill#2}}\par
|
||
|
}
|
||
|
\def\tocappendices{
|
||
|
\medskip
|
||
|
\setcounter{tocsectioncount}0
|
||
|
{\bf Appendices}\par
|
||
|
\smallskip
|
||
|
\def\tocsectionprefix{A}
|
||
|
}
|
||
|
\def\tocreferences#1{
|
||
|
\medskip
|
||
|
{\hyperlink{ln.\csname toc@references\endcsname}{{\color{blue}\bf References}\leaderfill#1}}\par
|
||
|
\smallskip
|
||
|
}
|
||
|
|
||
|
|
||
|
%% definitions that must be loaded at begin document
|
||
|
\let\ian@olddocument\document
|
||
|
\def\document{
|
||
|
\ian@olddocument
|
||
|
|
||
|
\deflabel
|
||
|
\defcaption
|
||
|
}
|
||
|
|
||
|
%% end
|
||
|
\ian@defaultoptions
|
||
|
\endinput
|