%% %% 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} \def\subsubseqskip{\vskip0.5cm} \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{} \loaddefaults %% style for the equation number \def\eqnumstyle{} %% 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 \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 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% }% } %% counters \newcounter{sectioncount} \newcounter{subsectioncount} \newcounter{subsubsectioncount} \newcounter{pointcount} \newcounter{subpointcount} \newcounter{subsubpointcount} \newcounter{seqcount} \newcounter{figcount} \newcounter{Theocount} \newcounter{tocsectioncount} \newcounter{tocsubsectioncount} \newcounter{tocsubsubsectioncount} %% section command \newlength\secnumwidth \newlength\sectitlewidth \def\section#1{ % reset counters \stepcounter{sectioncount} \setcounter{subsectioncount}{0} \setcounter{subsubsectioncount}{0} \setcounter{pointcount}{0} \setcounter{subpointcount}{0} \setcounter{subsubpointcount}{0} \setcounter{figcount}{0} \setcounter{Theocount}{0} \setcounter{seqcount}{0} % space before section (if not first) \ifnum\thesectioncount>1 \seqskip \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 \def\subsection#1{ % counters \stepcounter{subsectioncount} \setcounter{subsubsectioncount}{0} \setcounter{pointcount}{0} \setcounter{subpointcount}{0} \setcounter{subsubpointcount}{0} \ifsubseqcount \setcounter{seqcount}0 \fi % space before subsection (if not first) \ifnum\thesubsectioncount>1 \subseqskip \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 \def\subsubsection#1{ % counters \stepcounter{subsubsectioncount} \setcounter{pointcount}{0} \setcounter{subpointcount}{0} \setcounter{subsubpointcount}{0} % space before subsubsection (if not first) \ifnum\thesubsubsectioncount>1 \subsubseqskip \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} % 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} % 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 \ifsections \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\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% } %% 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 \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} } %% 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\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 } \def\tocsubsection #1#2{ \stepcounter{tocsubsectioncount} \setcounter{tocsubsubsectioncount}{0} % write {\hskip10pt\hyperlink{ln.\csname toc@subsec.\thetocsectioncount.\thetocsubsectioncount\endcsname}{{\bf \thetocsubsectioncount}.\hskip5pt {\color{blue}\small #1}\leaderfill#2}}\par } \def\tocsubsubsection #1#2{ \stepcounter{tocsubsubsectioncount} % write {\hskip20pt\hyperlink{ln.\csname toc@subsubsec.\thetocsectioncount.\thetocsubsectioncount.\thetocsubsubsectioncount\endcsname}{{\bf \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 }