From e72af82c3ed16b81cdb5043c58abbdbb3cf02102 Mon Sep 17 00:00:00 2001 From: Ian Jauslin Date: Mon, 4 Oct 2021 11:12:34 -0400 Subject: Initial commit --- doc/libs/code.sty | 43 +++ doc/libs/dlmf.sty | 55 ++++ doc/libs/ian.cls | 682 ++++++++++++++++++++++++++++++++++++++++++++++++ doc/libs/iantheo.sty | 176 +++++++++++++ doc/libs/largearray.sty | 33 +++ doc/libs/point.sty | 128 +++++++++ 6 files changed, 1117 insertions(+) create mode 100644 doc/libs/code.sty create mode 100644 doc/libs/dlmf.sty create mode 100644 doc/libs/ian.cls create mode 100644 doc/libs/iantheo.sty create mode 100644 doc/libs/largearray.sty create mode 100644 doc/libs/point.sty (limited to 'doc/libs') diff --git a/doc/libs/code.sty b/doc/libs/code.sty new file mode 100644 index 0000000..d4f4070 --- /dev/null +++ b/doc/libs/code.sty @@ -0,0 +1,43 @@ +%% Copyright 2021 Ian Jauslin +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +%% +%% Code package: +%% commands to typeset code +%% + +%% TeX format +\NeedsTeXFormat{LaTeX2e}[1995/12/01] + +%% package name +\ProvidesPackage{code}[2021/03/15] + +%% code environment +\def\code{ + \par + \leftskip10pt + \bigskip + \tt +} +\def\endcode{ + \rm + \par + \bigskip + \leftskip0pt +} + + +%% end +\endinput + diff --git a/doc/libs/dlmf.sty b/doc/libs/dlmf.sty new file mode 100644 index 0000000..f435e96 --- /dev/null +++ b/doc/libs/dlmf.sty @@ -0,0 +1,55 @@ +%% Copyright 2021 Ian Jauslin +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +%% +%% DLMF package: +%% cite equations from DLMF +%% + +%% TeX format +\NeedsTeXFormat{LaTeX2e}[1995/12/01] + +%% package name +\ProvidesPackage{dlmf}[2020/05/01] + +%% dependencies +\RequirePackage{color} +\RequirePackage{hyperref} + +% get the first two numbers in (a.b.c); +\def\@sectionnr(#1.#2.#3){#1.#2} + +% get the last number in (a.b.c); +\def\@eqnr(#1.#2.#3){#3} + +% remove parentheses around argument +\def\@cleanparentheses(#1){#1} + +%% cite DLMF equation +\def\dlmfcite#1#2{\leavevmode% + \let\@dlmfcite@separator\@empty% + \cite[% + % loop over ',' separated list + \@for\@dlmfcite:=#1\do{% + % put commas between entries + \@dlmfcite@separator\def\@dlmfcite@separator{,\ }% + ({\color{blue}\href{https://dlmf.nist.gov/\expandafter\@sectionnr\@dlmfcite\#E\expandafter\@eqnr\@dlmfcite}{\expandafter\@cleanparentheses\@dlmfcite}})% + }% + ]{DLMF#2}% +} + +%% end +\endinput + + diff --git a/doc/libs/ian.cls b/doc/libs/ian.cls new file mode 100644 index 0000000..f29e6bd --- /dev/null +++ b/doc/libs/ian.cls @@ -0,0 +1,682 @@ +%% +%% 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 diff --git a/doc/libs/iantheo.sty b/doc/libs/iantheo.sty new file mode 100644 index 0000000..1945a5f --- /dev/null +++ b/doc/libs/iantheo.sty @@ -0,0 +1,176 @@ +%% Copyright 2021 Ian Jauslin +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +%% +%% 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 diff --git a/doc/libs/largearray.sty b/doc/libs/largearray.sty new file mode 100644 index 0000000..cf9075f --- /dev/null +++ b/doc/libs/largearray.sty @@ -0,0 +1,33 @@ +%% Copyright 2021 Ian Jauslin +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +%% +%% largearray package: +%% Array spanning the entire line +%% + +%% TeX format +\NeedsTeXFormat{LaTeX2e}[1995/12/01] + +%% package name +\ProvidesPackage{largearray}[2016/11/10] + +\RequirePackage{array} + +%% array spanning the entire line +\newlength\largearray@width +\setlength\largearray@width\textwidth +\addtolength\largearray@width{-10pt} +\def\largearray{\begin{array}{@{}>{\displaystyle}l@{}}\hphantom{\hspace{\largearray@width}}\\[-.5cm]} +\def\endlargearray{\end{array}} diff --git a/doc/libs/point.sty b/doc/libs/point.sty new file mode 100644 index 0000000..a396d1c --- /dev/null +++ b/doc/libs/point.sty @@ -0,0 +1,128 @@ +%% Copyright 2021 Ian Jauslin +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +%% +%% 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\ifresetatsubsubsection +\DeclareOption{reset_at_subsubsection}{\resetatsubsubsectiontrue} +\DeclareOption{no_reset_at_subsubsection}{\resetatsubsubsectionfalse} +\newif\ifresetattheo +\DeclareOption{reset_at_theo}{\resetattheotrue} +\DeclareOption{no_reset_at_theo}{\resetattheofalse} + +\def\point@defaultoptions{ + \ExecuteOptions{reset_at_section, reset_at_subsection, reset_at_subsubsection, 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 subsubsection + \ifresetatsubsubsection + \let\point@oldsubsubsection\subsubsection + \gdef\subsubsection{\resetpointcounter\point@oldsubsubsection} + \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 -- cgit v1.2.3-54-g00ecf