Initial commit
This commit is contained in:
		
							
								
								
									
										673
									
								
								libs/ian.cls
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										673
									
								
								libs/ian.cls
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,673 @@ | ||||
| %% | ||||
| %% 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% | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| %% 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 (adapted from latex.ltx) | ||||
| % @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\@citea\@empty% | ||||
|   % format | ||||
|   \@cite{% | ||||
|     % loop over ',' separated list | ||||
|     \@for\@citeb:=#2\do{% | ||||
|       % text to add at each iteration of the loop (separator between citations) | ||||
|       \@citea\def\@citea{,\ }% | ||||
|       % add entry to citelist | ||||
|       \@writecitation{\@citeb}% | ||||
|       \ref{cite\@citeb}% | ||||
|     }% | ||||
|   }% | ||||
|   % 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 \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 \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 | ||||
							
								
								
									
										162
									
								
								libs/iantheo.sty
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								libs/iantheo.sty
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,162 @@ | ||||
| %% | ||||
| %% iantheorem package: | ||||
| %%   Ian's customized theorem command | ||||
| %% | ||||
|  | ||||
| %% boolean to signal that this package was loaded | ||||
| \newif\ifiantheo | ||||
|  | ||||
| %% TeX format | ||||
| \NeedsTeXFormat{LaTeX2e}[1995/12/01] | ||||
|  | ||||
| %% package name | ||||
| \ProvidesPackage{iantheo}[2016/11/10] | ||||
|  | ||||
| %% options | ||||
| \newif\ifsectionintheo | ||||
| \DeclareOption{section_in_theo}{\sectionintheotrue} | ||||
| \DeclareOption{no_section_in_theo}{\sectionintheofalse} | ||||
| \newif\ifsubsectionintheo | ||||
| \DeclareOption{subsection_in_theo}{\subsectionintheotrue} | ||||
| \DeclareOption{no_subsection_in_theo}{\subsectionintheofalse} | ||||
|  | ||||
| \def\iantheo@defaultoptions{ | ||||
|   \ExecuteOptions{section_in_theo, no_subsection_in_theo} | ||||
|   \ProcessOptions | ||||
|  | ||||
|   %%% reset at every new section | ||||
|   \ifsectionintheo | ||||
|     \let\iantheo@oldsection\section | ||||
|     \gdef\section{\setcounter{theocount}{0}\iantheo@oldsection} | ||||
|   \fi | ||||
|  | ||||
|   %% reset at every new subsection | ||||
|   \ifsubsectionintheo | ||||
|     \let\iantheo@oldsubsection\subsection | ||||
|     \gdef\subsection{\setcounter{theocount}{0}\iantheo@oldsubsection} | ||||
|   \fi | ||||
| } | ||||
|  | ||||
|  | ||||
| %% 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% | ||||
| % | ||||
|   \ifdefined\ianclass% | ||||
|     % hyperref anchor% | ||||
|     \hrefanchor% | ||||
|     % define tag (for \label)% | ||||
|     \xdef\tag{#1}% | ||||
|   \fi% | ||||
| % | ||||
|   \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 | ||||
| % counter | ||||
| \newcounter{theocount} | ||||
| % booleans (write section or subsection in equation number) | ||||
| \def\theo#1{ | ||||
|   \stepcounter{theocount} | ||||
|   \ifdefined\ianclass | ||||
|     % hyperref anchor | ||||
|     \hrefanchor | ||||
|   \fi | ||||
|   % the number | ||||
|   \def\formattheo{\thetheocount} | ||||
|   % add subsection number | ||||
|   \ifsubsectionintheo | ||||
|     \let\tmp\formattheo | ||||
|     \edef\formattheo{\thesubsectioncount.\tmp} | ||||
|   \fi | ||||
|   % add section number | ||||
|   \ifsectionintheo | ||||
|     \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% | ||||
| } | ||||
|  | ||||
|  | ||||
| %% qed symbol | ||||
| \def\qedsymbol{$\square$} | ||||
| \def\qed{\penalty10000\hfill\penalty10000\qedsymbol} | ||||
|  | ||||
|  | ||||
| %% compatibility with article class | ||||
| \ifdefined\ianclasstrue | ||||
|   \relax | ||||
| \else | ||||
|   \def\thesectioncount{\thesection} | ||||
|   \def\thesubsectioncount{\thesubsection} | ||||
|   \def\sectionprefix{} | ||||
| \fi | ||||
|  | ||||
|  | ||||
| %% prevent page breaks after displayed equations | ||||
| \newcount\prevpostdisplaypenalty | ||||
| \def\nopagebreakaftereq{ | ||||
|   \prevpostdisplaypenalty=\postdisplaypenalty | ||||
|   \postdisplaypenalty=10000 | ||||
| } | ||||
| %% back to previous value | ||||
| \def\restorepagebreakaftereq{ | ||||
|   \postdisplaypenalty=\prevpostdisplaypenalty | ||||
| } | ||||
|  | ||||
|  | ||||
| %% end | ||||
| \iantheo@defaultoptions | ||||
| \endinput | ||||
							
								
								
									
										106
									
								
								libs/point.sty
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								libs/point.sty
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| %% | ||||
| %% Points package: | ||||
| %%   \point commands | ||||
| %% | ||||
|  | ||||
| %% TeX format | ||||
| \NeedsTeXFormat{LaTeX2e}[1995/12/01] | ||||
|  | ||||
| %% package name | ||||
| \ProvidesPackage{point}[2017/06/13] | ||||
|  | ||||
| %% options | ||||
| \newif\ifresetatsection | ||||
| \DeclareOption{reset_at_section}{\resetatsectiontrue} | ||||
| \DeclareOption{no_reset_at_section}{\resetatsectionfalse} | ||||
| \newif\ifresetatsubsection | ||||
| \DeclareOption{reset_at_subsection}{\resetatsubsectiontrue} | ||||
| \DeclareOption{no_reset_at_subsection}{\resetatsubsectionfalse} | ||||
| \newif\ifresetattheo | ||||
| \DeclareOption{reset_at_theo}{\resetattheotrue} | ||||
| \DeclareOption{no_reset_at_theo}{\resetattheofalse} | ||||
|  | ||||
| \def\point@defaultoptions{ | ||||
|   \ExecuteOptions{reset_at_section, reset_at_subsection, no_reset_at_theo} | ||||
|   \ProcessOptions | ||||
|  | ||||
|   %% reset at every new section | ||||
|   \ifresetatsection | ||||
|     \let\point@oldsection\section | ||||
|     \gdef\section{\resetpointcounter\point@oldsection} | ||||
|   \fi | ||||
|   %% reset at every new subsection | ||||
|   \ifresetatsubsection | ||||
|     \let\point@oldsubsection\subsection | ||||
|     \gdef\subsection{\resetpointcounter\point@oldsubsection} | ||||
|   \fi | ||||
|  | ||||
|   %% reset at every new theorem | ||||
|   \ifresetattheo | ||||
|     \ifdefined\iantheotrue | ||||
|       \let\point@oldtheo\theo | ||||
|       \gdef\theo{\resetpointcounter\point@oldtheo} | ||||
|     \fi | ||||
|   \fi | ||||
| } | ||||
|  | ||||
|  | ||||
| %% point | ||||
| % counter | ||||
| \newcounter{pointcount} | ||||
| \def\point{ | ||||
|   \stepcounter{pointcount} | ||||
|   \setcounter{subpointcount}{0} | ||||
|   % hyperref anchor (only if the class is 'ian') | ||||
|   \ifdefined\ifianclass | ||||
|     \hrefanchor | ||||
|     % define tag (for \label) | ||||
|     \xdef\tag{\thepointcount} | ||||
|   \fi | ||||
|   % header | ||||
|   \indent{\bf \thepointcount\ - } | ||||
| } | ||||
|  | ||||
| %% subpoint | ||||
| % counter | ||||
| \newcounter{subpointcount} | ||||
| \def\subpoint{ | ||||
|   \stepcounter{subpointcount} | ||||
|   \setcounter{subsubpointcount}0 | ||||
|   % hyperref anchor (only if the class is 'ian') | ||||
|   \ifdefined\ifianclass | ||||
|     \hrefanchor | ||||
|     % define tag (for \label) | ||||
|     \xdef\tag{\thepointcount-\thesubpointcount} | ||||
|   \fi | ||||
|   % header | ||||
|   \indent\hskip.5cm{\bf \thepointcount-\thesubpointcount\ - } | ||||
| } | ||||
|  | ||||
| %% subsubpoint | ||||
| % counter | ||||
| \newcounter{subsubpointcount} | ||||
| \def\subsubpoint{ | ||||
|   \stepcounter{subsubpointcount} | ||||
|   % hyperref anchor (only if the class is 'ian') | ||||
|   \ifdefined\ifianclass | ||||
|     \hrefanchor | ||||
|     % define tag (for \label) | ||||
|     \xdef\tag{\thepointcount-\thesubpointcount-\thesubsubpointcount} | ||||
|   \fi | ||||
|   \indent\hskip1cm{\bf \thepointcount-\thesubpointcount-\thesubsubpointcount\ - } | ||||
| } | ||||
|  | ||||
|  | ||||
| %% reset point counters | ||||
| \def\resetpointcounter{ | ||||
|   \setcounter{pointcount}{0} | ||||
|   \setcounter{subpointcount}{0} | ||||
|   \setcounter{subsubpointcount}{0} | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| %% end | ||||
| \point@defaultoptions | ||||
| \endinput | ||||
		Reference in New Issue
	
	Block a user