diff options
author | Karl Berry <karl@freefriends.org> | 2024-10-01 20:00:43 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2024-10-01 20:00:43 +0000 |
commit | 53e723733df96c106cfd39d25b24a5a6762fd078 (patch) | |
tree | 55c696d4189fad516a9378d8fd27df4a9d81c5a7 | |
parent | fb0d2e7d5f76094d5c999a0c9657b5d2bc665f59 (diff) |
udiss (1oct24)
git-svn-id: svn://tug.org/texlive/trunk@72445 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/latex/udiss/README.txt | 7 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png | bin | 0 -> 66033 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/udiss/udiss-fonts-english.tex | 75 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/udiss/udiss-fonts-hindi.tex | 100 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/udiss/udiss-fonts-malayalam.tex | 94 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/udiss/udiss-fonts-marathi.tex | 126 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/udiss/udiss-style-ukerala.tex | 43 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/udiss/udiss.pdf | bin | 0 -> 471468 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/udiss/udiss.dtx | 4143 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/udiss/udiss.ins | 75 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/udiss/udiss.cls | 1868 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 2 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-publishers.tlpsrc | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/udiss.tlpsrc | 0 |
14 files changed, 6533 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/udiss/README.txt b/Master/texmf-dist/doc/latex/udiss/README.txt new file mode 100644 index 00000000000..6264a211a92 --- /dev/null +++ b/Master/texmf-dist/doc/latex/udiss/README.txt @@ -0,0 +1,7 @@ +------------------------------------------------------------ +Class: udiss +Author: TUGIndia +Description: A LaTeX bundle for typesetting dissertations +Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +Licenses: GPLv3+, GFDLv1.3+ +------------------------------------------------------------ diff --git a/Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png b/Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png Binary files differnew file mode 100644 index 00000000000..9e2dd34afb0 --- /dev/null +++ b/Master/texmf-dist/doc/latex/udiss/logos/udiss-logo-ukerala.png diff --git a/Master/texmf-dist/doc/latex/udiss/udiss-fonts-english.tex b/Master/texmf-dist/doc/latex/udiss/udiss-fonts-english.tex new file mode 100644 index 00000000000..0e0a084278c --- /dev/null +++ b/Master/texmf-dist/doc/latex/udiss/udiss-fonts-english.tex @@ -0,0 +1,75 @@ +%% +%% This is file `udiss-fonts-english.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% udiss.dtx (with options: `babel-en') +%% --------------------------------------------------------- +%% Bundle: udiss +%% Version: v0.1 (October 1, 2024) +%% Author: Indian TeX Users Group +%% Description: A LaTeX bundle for typesetting dissertations +%% Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +%% Licenses: GPLv3+, GFDLv1.3+ +%% --------------------------------------------------------- +%% +%% The LaTeX bundle udiss v0.1 +%% Copyright © 2024 Indian TeX Users Group +%% +%% This program is free software: you can redistribute it +%% and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software +%% Foundation, either version 3 of the License, or (at your +%% option) any later version. +%% +%% This program is distributed in the hope that it will be +%% useful, but WITHOUT ANY WARRANTY; without even the +%% implied warranty of MERCHANTABILITY or FITNESS FOR A +%% PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. +%% +%% You should have received a copy of the GNU General Public +%% License along with this program. If not, see +%% <https://www.gnu.org/licenses/>. +%% --------------------------------------------------------- +\babelfont[english]{rm}[% + IgnoreFontspecFile,% + Extension = {.otf},% + ItalicFont = {NewCM10-BookItalic},% + BoldFont = {NewCM10-Bold},% + BoldItalicFont = {NewCM10-BoldItalic},% + SlantedFont = {NewCM10-Book},% + BoldSlantedFont = {NewCM10-Bold},% + Numbers = {OldStyle},% + CharacterVariant = {6},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi +]{NewCM10-Book} +\babelfont[english]{sf}[% + IgnoreFontspecFile,% + Extension = {.otf},% + ItalicFont = {NewCMSans10-BookOblique},% + BoldFont = {NewCMSans10-Bold},% + BoldItalicFont = {NewCMSans10-BoldOblique},% + SlantedFont = {NewCMSans10-Book},% + BoldSlantedFont = {NewCMSans10-Bold},% + Numbers = {OldStyle},% + CharacterVariant = {6},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi +]{NewCMSans10-Book} +\babelfont[english]{tt}[% + IgnoreFontspecFile,% + Extension = {.otf},% + BoldFont = {NewCMMono10-Bold},% + ItalicFont = {NewCMMono10-Italic},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi +]{NewCMMono10-Book} +\endinput +%% +%% End of file `udiss-fonts-english.tex'. diff --git a/Master/texmf-dist/doc/latex/udiss/udiss-fonts-hindi.tex b/Master/texmf-dist/doc/latex/udiss/udiss-fonts-hindi.tex new file mode 100644 index 00000000000..61caabaad8d --- /dev/null +++ b/Master/texmf-dist/doc/latex/udiss/udiss-fonts-hindi.tex @@ -0,0 +1,100 @@ +%% +%% This is file `udiss-fonts-hindi.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% udiss.dtx (with options: `babel-hi') +%% --------------------------------------------------------- +%% Bundle: udiss +%% Version: v0.1 (October 1, 2024) +%% Author: Indian TeX Users Group +%% Description: A LaTeX bundle for typesetting dissertations +%% Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +%% Licenses: GPLv3+, GFDLv1.3+ +%% --------------------------------------------------------- +%% +%% The LaTeX bundle udiss v0.1 +%% Copyright © 2024 Indian TeX Users Group +%% +%% This program is free software: you can redistribute it +%% and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software +%% Foundation, either version 3 of the License, or (at your +%% option) any later version. +%% +%% This program is distributed in the hope that it will be +%% useful, but WITHOUT ANY WARRANTY; without even the +%% implied warranty of MERCHANTABILITY or FITNESS FOR A +%% PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. +%% +%% You should have received a copy of the GNU General Public +%% License along with this program. If not, see +%% <https://www.gnu.org/licenses/>. +%% --------------------------------------------------------- +\IfLanguageName{hindi}{% + \ekvset{udiss}{% + rmfont = {Mukta-Regular.ttf},% + rmitfont = {Mukta-Regular.ttf},% + rmbffont = {Mukta-Bold.ttf},% + rmbfitfont = {Mukta-Bold.ttf},% + rmfeatures = {% + Script = {Devanagari}% + },% + sffont = {Mukta-Regular.ttf},% + sfitfont = {Mukta-Regular.ttf},% + sfbffont = {Mukta-Bold.ttf},% + sfbfitfont = {Mukta-Bold.ttf},% + sffeatures = {% + Script = {Devanagari}% + },% + ttfont = {Mukta-Regular.ttf},% + ttitfont = {Mukta-Regular.ttf},% + ttbffont = {Mukta-Bold.ttf},% + ttbfitfont = {Mukta-Bold.ttf},% + sffeatures = {% + Script = {Devanagari}% + }% + }% +}{% + \babelfont[hindi]{rm}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Hindi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} + \babelfont[hindi]{sf}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Hindi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} + \babelfont[hindi]{tt}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Hindi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} +} +\endinput +%% +%% End of file `udiss-fonts-hindi.tex'. diff --git a/Master/texmf-dist/doc/latex/udiss/udiss-fonts-malayalam.tex b/Master/texmf-dist/doc/latex/udiss/udiss-fonts-malayalam.tex new file mode 100644 index 00000000000..e16c181c0a8 --- /dev/null +++ b/Master/texmf-dist/doc/latex/udiss/udiss-fonts-malayalam.tex @@ -0,0 +1,94 @@ +%% +%% This is file `udiss-fonts-malayalam.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% udiss.dtx (with options: `babel-ml') +%% --------------------------------------------------------- +%% Bundle: udiss +%% Version: v0.1 (October 1, 2024) +%% Author: Indian TeX Users Group +%% Description: A LaTeX bundle for typesetting dissertations +%% Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +%% Licenses: GPLv3+, GFDLv1.3+ +%% --------------------------------------------------------- +%% +%% The LaTeX bundle udiss v0.1 +%% Copyright © 2024 Indian TeX Users Group +%% +%% This program is free software: you can redistribute it +%% and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software +%% Foundation, either version 3 of the License, or (at your +%% option) any later version. +%% +%% This program is distributed in the hope that it will be +%% useful, but WITHOUT ANY WARRANTY; without even the +%% implied warranty of MERCHANTABILITY or FITNESS FOR A +%% PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. +%% +%% You should have received a copy of the GNU General Public +%% License along with this program. If not, see +%% <https://www.gnu.org/licenses/>. +%% --------------------------------------------------------- +\IfLanguageName{malayalam}{% + \ekvset{udiss}{% + rmfont = {RIT-Rachana-Regular.ttf},% + rmitfont = {RIT-Rachana-Italic.ttf},% + rmbffont = {RIT-Rachana-Bold.ttf},% + rmbfitfont = {RIT-Rachana-BoldItalic.ttf},% + rmfeatures = {% + Script = {Malayalam}% + },% + sffont = {RIT-MeeraNew.ttf},% + sfitfont = {RIT-MeeraNew.ttf},% + sfbffont = {RIT-tnjoy-bold.ttf},% + sfbfitfont = {RIT-tnjoy-bold.ttf},% + sffeatures = {% + Script = {Malayalam}% + },% + ttfont = {RIT-MeeraNew.ttf},% + ttitfont = {RIT-MeeraNew.ttf},% + ttbffont = {RIT-tnjoy-bold.ttf},% + ttbfitfont = {RIT-tnjoy-bold.ttf},% + sffeatures = {% + Script = {Malayalam}% + }% + }% +}{% + \babelfont[malayalam]{rm}[% + IgnoreFontspecFile,% + Script = {Malayalam},% + ItalicFont = {RIT-Rachana-Italic.ttf},% + BoldFont = {RIT-Rachana-Bold.ttf},% + BoldItalicFont = {RIT-Rachana-BoldItalic.ttf},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{RIT-Rachana-Regular.ttf} + \babelfont[malayalam]{sf}[% + IgnoreFontspecFile,% + Script = {Malayalam},% + ItalicFont = {RIT-tnjoy-regular.ttf},% + BoldFont = {RIT-tnjoy-bold.ttf},% + BoldItalicFont = {RIT-tnjoy-bold.ttf},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{RIT-tnjoy-regular.ttf} + \babelfont[malayalam]{tt}[% + IgnoreFontspecFile,% + Script = {Malayalam},% + ItalicFont = {RIT-tnjoy-regular.ttf},% + BoldFont = {RIT-tnjoy-bold.ttf},% + BoldItalicFont = {RIT-tnjoy-bold.ttf},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{RIT-tnjoy-regular.ttf}% +} +\endinput +%% +%% End of file `udiss-fonts-malayalam.tex'. diff --git a/Master/texmf-dist/doc/latex/udiss/udiss-fonts-marathi.tex b/Master/texmf-dist/doc/latex/udiss/udiss-fonts-marathi.tex new file mode 100644 index 00000000000..00e6f33dca8 --- /dev/null +++ b/Master/texmf-dist/doc/latex/udiss/udiss-fonts-marathi.tex @@ -0,0 +1,126 @@ +%% +%% This is file `udiss-fonts-marathi.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% udiss.dtx (with options: `babel-mr') +%% --------------------------------------------------------- +%% Bundle: udiss +%% Version: v0.1 (October 1, 2024) +%% Author: Indian TeX Users Group +%% Description: A LaTeX bundle for typesetting dissertations +%% Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +%% Licenses: GPLv3+, GFDLv1.3+ +%% --------------------------------------------------------- +%% +%% The LaTeX bundle udiss v0.1 +%% Copyright © 2024 Indian TeX Users Group +%% +%% This program is free software: you can redistribute it +%% and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software +%% Foundation, either version 3 of the License, or (at your +%% option) any later version. +%% +%% This program is distributed in the hope that it will be +%% useful, but WITHOUT ANY WARRANTY; without even the +%% implied warranty of MERCHANTABILITY or FITNESS FOR A +%% PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. +%% +%% You should have received a copy of the GNU General Public +%% License along with this program. If not, see +%% <https://www.gnu.org/licenses/>. +%% --------------------------------------------------------- +\babelprovide[% + mapdigits,% + counters/स्वर = अ आ इ ई उ ऊ ए ऐ ओ औ अं अः ॲ ऋ ऌ ऑ,% + counters/अंक = एक दोन तीन चार पाच सहा सात आठ नऊ दहा अकरा + बारा तेरा चौदा पंधरा सोळा सतरा अठरा एकोणीस वीस एकवीस बावीस + तेवीस चोवीस पंचवीस सव्वीस सत्तावीस अठ्ठावीस एकोणतीस तीस एकतीस + बत्तीस तेहतीस चौतीस पस्तीस छत्तीस सदतीस अडतीस एकोणचाळीस चाळीस + एकेचाळीस बेचाळीस त्रेचाळीस चव्वेचाळीस पंचेचाळीस शेहेचाळीस सत्तेचाळीस + अठ्ठेचाळीस एकोणपन्नास पन्नास एकावन्न बावन्न त्रेपन्न चौपन्न पंचावन्न + छप्पन्न सत्तावन्न अठ्ठावन्न एकोणसाठ साठ एकसष्ट बासष्ट त्रेसष्ट चौसष्ट + पासष्ट सहासष्ट सदुष्ट अडुसष्ट एकोणसत्तर सत्तर एकाहत्तर बाहत्तर + त्र्याहत्तर चौऱ्याहत्तर पंचाहत्तर शाहत्तर सत्त्याहत्तर अठ्ठ्याहत्तर + एकोणऐंशी ऐंशी एक्याऐंशी ब्याऐंशी त्र्याऐंशी चौऱ्याऐंशी पंच्याऐंशी श्याऐंशी + सत्त्याऐंशी अठ्ठ्याऐंशी एकोणनव्वद नव्वद एक्याण्णव ब्याण्णव त्र्याण्णव + चौऱ्याण्णव पंचाण्णव शहाण्णव सत्त्याण्णव अठ्याण्णव नव्याण्णव शंभर,% + counters/व्यंजन = क ख ग घ ङ% + च छ ज झ ञ% + ट ठ ड ढ ण% + त थ द ध न% + प फ ब भ म% + य र ल व श ष स ह ळ,% + Alph = अंक,% + alph = स्वर% +]{marathi} +\def\theenumiii{\localecounter{व्यंजन}{enumiii}} +\def\theenumiv{\localecounter{अंक}{enumiii}} +\IfLanguageName{marathi}{% + \ekvset{udiss}{% + rmfont = {Mukta-Regular.ttf},% + rmitfont = {Mukta-Regular.ttf},% + rmbffont = {Mukta-Bold.ttf},% + rmbfitfont = {Mukta-Bold.ttf},% + rmfeatures = {% + Script = {Devanagari}% + },% + sffont = {Mukta-Regular.ttf},% + sfitfont = {Mukta-Regular.ttf},% + sfbffont = {Mukta-Bold.ttf},% + sfbfitfont = {Mukta-Bold.ttf},% + sffeatures = {% + Script = {Devanagari}% + },% + ttfont = {Mukta-Regular.ttf},% + ttitfont = {Mukta-Regular.ttf},% + ttbffont = {Mukta-Bold.ttf},% + ttbfitfont = {Mukta-Bold.ttf},% + sffeatures = {% + Script = {Devanagari}% + }% + }% +}{% + \babelfont[marathi]{rm}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Marathi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} + \babelfont[marathi]{sf}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Marathi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} + \babelfont[marathi]{tt}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Marathi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf}% +} +\endinput +%% +%% End of file `udiss-fonts-marathi.tex'. diff --git a/Master/texmf-dist/doc/latex/udiss/udiss-style-ukerala.tex b/Master/texmf-dist/doc/latex/udiss/udiss-style-ukerala.tex new file mode 100644 index 00000000000..bb9aa134ec6 --- /dev/null +++ b/Master/texmf-dist/doc/latex/udiss/udiss-style-ukerala.tex @@ -0,0 +1,43 @@ +%% +%% This is file `udiss-style-ukerala.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% udiss.dtx (with options: `ukerala') +%% --------------------------------------------------------- +%% Bundle: udiss +%% Version: v0.1 (October 1, 2024) +%% Author: Indian TeX Users Group +%% Description: A LaTeX bundle for typesetting dissertations +%% Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +%% Licenses: GPLv3+, GFDLv1.3+ +%% --------------------------------------------------------- +%% +%% The LaTeX bundle udiss v0.1 +%% Copyright © 2024 Indian TeX Users Group +%% +%% This program is free software: you can redistribute it +%% and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software +%% Foundation, either version 3 of the License, or (at your +%% option) any later version. +%% +%% This program is distributed in the hope that it will be +%% useful, but WITHOUT ANY WARRANTY; without even the +%% implied warranty of MERCHANTABILITY or FITNESS FOR A +%% PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. +%% +%% You should have received a copy of the GNU General Public +%% License along with this program. If not, see +%% <https://www.gnu.org/licenses/>. +%% --------------------------------------------------------- +\ekvset{udiss}{% + university = {University of Kerala},% + logo = {udiss-logo-ukerala.png},% + logoheight = {0.11}% +} +\endinput +%% +%% End of file `udiss-style-ukerala.tex'. diff --git a/Master/texmf-dist/doc/latex/udiss/udiss.pdf b/Master/texmf-dist/doc/latex/udiss/udiss.pdf Binary files differnew file mode 100644 index 00000000000..7d616591ba2 --- /dev/null +++ b/Master/texmf-dist/doc/latex/udiss/udiss.pdf diff --git a/Master/texmf-dist/source/latex/udiss/udiss.dtx b/Master/texmf-dist/source/latex/udiss/udiss.dtx new file mode 100644 index 00000000000..32dc9595604 --- /dev/null +++ b/Master/texmf-dist/source/latex/udiss/udiss.dtx @@ -0,0 +1,4143 @@ +% \iffalse meta-comment +% +% File: udiss.dtx +% ---------------------------------------------------------- +% Bundle: udiss +% Version: v0.1 (October 1, 2024) +% Author: TUGIndia +% Description: A LaTeX bundle for typesetting dissertations +% Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +% Licenses: GPLv3+, GFDLv1.3+ +% ---------------------------------------------------------- +% The LaTeX bundle udiss v0.1 +% Copyright © 2024 TUGIndia +% +% This program is free software: you can redistribute it +% and/or modify it under the terms of the GNU General Public +% License as published by the Free Software Foundation, +% either version 3 of the License, or (at your option) any +% later version. +% +% This program is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied +% warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +% PURPOSE. See the GNU General Public License for more +% details. +% +% You should have received a copy of the GNU General Public +% License along with this program. If not, see +% <https://www.gnu.org/licenses/>. +% ---------------------------------------------------------- +% arara: lualatex +% arara: lualatex +% arara: clean: { +% arara: --> extensions: [ +% arara: --> log,aux,glo,idx,ist, +% arara: --> out,toc,hd +% arara: --> ] +% arara: --> } +% ---------------------------------------------------------- +% \fi +% \iffalse +%<*internal> +\iffalse +%</internal> +%<*readme> +------------------------------------------------------------ +Class: udiss +Author: TUGIndia +Description: A LaTeX bundle for typesetting dissertations +Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +Licenses: GPLv3+, GFDLv1.3+ +------------------------------------------------------------ +%</readme> +%<*internal> +\fi +%</internal> +%<*driver> +\documentclass{l3doc} +\usepackage[provide*=*]{babel} +\babelprovide[import,main]{english} +\babelprovide[import,onchar={ids fonts}]{marathi} +\usepackage[svgnames]{xcolor} +\usepackage{fontawesome5} +\usepackage{gfdl} +\usepackage{microtype} +\usepackage{unicode-math} +\usepackage{hologo} +\babelfont{rm}[% + IgnoreFontspecFile,% + Extension = {.otf},% + ItalicFont = {NewCM10-BookItalic},% + BoldFont = {NewCM10-Bold},% + BoldItalicFont = {NewCM10-BoldItalic},% + SlantedFont = {NewCM10-Book},% + BoldSlantedFont = {NewCM10-Bold},% + Numbers = {OldStyle},% + CharacterVariant = {6}% +]{NewCM10-Book} +\babelfont{sf}[% + IgnoreFontspecFile,% + Extension = {.otf},% + ItalicFont = {NewCMSans10-BookOblique},% + BoldFont = {NewCMSans10-Bold},% + BoldItalicFont = {NewCMSans10-BoldOblique},% + SlantedFont = {NewCMSans10-Book},% + BoldSlantedFont = {NewCMSans10-Bold},% + Numbers = {OldStyle},% + CharacterVariant = {6}% +]{NewCMSans10-Book} +\babelfont{tt}[% + IgnoreFontspecFile,% + Extension = {.otf},% + BoldFont = {NewCMMono10-Bold},% + ItalicFont = {NewCMMono10-Italic}% +]{NewCMMono10-Book} +\setmathfont[% + IgnoreFontspecFile,% + Extension = {.otf},% + CharacterVariant = {1}% +]{NewCMMath-Book} +\newfontfamily\newcmnewnum[% + IgnoreFontspecFile,% + Extension = {.otf}% +]{NewCM10-Book} +\newfontfamily\newcmnewone[% + IgnoreFontspecFile,% + Extension = {.otf},% + Numbers = {OldStyle}% +]{NewCM10-Book} +\newfontfamily\expkvkp[% + BoldFont = {KpRoman-Bold.otf}% +]{KpRoman-Regular.otf} +\babelfont[marathi]{tt}[% + IgnoreFontspecFile,% + Script = {Devanagari},% + Language = {Marathi},% + Renderer = {HarfBuzz},% + ItalicFont = {NewCMMono10-Book.otf}% +]{Mukta-Regular.ttf} +\colorlet{udisslink}{red!60!black} +\colorlet{udissurl}{blue!60!black} +\colorlet{udisscite}{green!60!black} +\hypersetup{% + unicode,% + colorlinks,% + linkcolor = {udisslink},% + citecolor = {udisscite},% + urlcolor = {udissurl},% + pdftitle = {The udiss bundle},% + pdfauthor = {TUGIndia},% + pdfcreator = {TUGIndia},% + pdfsubject = {% + A LaTeX bundle for typesetting dissertations% + },% + pdfkeywords = {% + LaTeX, dissertations, thesis, bundle, academia% + }% +} +\gfdlcopyrightholders{% + \texorpdfstring{% + \TUGIndia + }{% + TUGIndia% + }% +} +\gfdlcopyrightdescription{% + \texorpdfstring{The \cls{udiss} bundle}% + {The udiss bundle}% +} +\gfdlcopyrightableyears{2024} +\usepackage{cleveref} +\usepackage{stackengine} +\setquotestyle{british} +\def\udisstval{% + \hfill + \begingroup + \ttfamily + \textcolor{udisslink}{true}\,\textbar\,false% + \endgroup +} +\def\udissfval{% + \hfill + \begingroup + \ttfamily + true\,\textbar\,\textcolor{udisslink}{false}% + \endgroup +} +\def\udisscolorred{% + \hfill + \begingroup + \ttfamily + \color{udisslink}% + udisslink% + \endgroup +} +\def\udisscolorblue{% + \hfill + \begingroup + \ttfamily + \color{udisslink}% + udissurl% + \endgroup +} +\def\udisscolorgreen{% + \hfill + \begingroup + \ttfamily + \color{udisslink}% + udisscite% + \endgroup +} +\def\udissarr{% + \hfill + \begingroup + \ttfamily + \color{udisslink}% + all-rights-reserved% + \endgroup +} +\makeatletter +% Adapted from manfnt.sty (LPPL v1.0+) +\DeclareFontFamily{U}{manfnt}{} +\DeclareFontShape{U}{manfnt}{m}{n}{ <-> manfnt }{} +\def\manfntsymbol#1{% + \begingroup + \fontencoding{U} + \fontfamily{manfnt}\selectfont + \symbol{#1}% + \endgroup +} +\def\dbend{% + \manfntsymbol{127}% + \hspace*{0.5em}% +} +\def\ddbend{% + \manfntsymbol{127}% + \manfntsymbol{127}% + \hspace*{0.5em}% +} +\makeatother +\ExplSyntaxOn +%% Answer on TopAnswers by Udi Fogiel (LPPL v1.3c+) +%% URL: https://topanswers.xyz/tex?q=8033 +\NewDocumentCommand \textfunction { v }{ + \__codedoc_function_index:n { #1 } + \__codedoc_function_label:nN { #1 } \c_false_bool + \texttt{#1} +} +\ExplSyntaxOff +\def\TUGIndia{\textsc{tugindia}} +\def\babelurl{% + https://latex3.github.io/babel/guides/% + which-method-for-which-language.html% +} +\definecolor{ekvred}{HTML}{9F393D} +\colorlet{ekvgrey}{black!75} +\NewDocumentCommand\expkvlogo{ m }{% + %% Stolen from Jonathan's sources: preamble-logos.tex + %% LPPL 1.3c+ + %% /texmf-dist/doc/latex/expkv-bundle/preamble-logos.tex + \begingroup + \expkvkp + \bfseries + {% + \color{ekvgrey}e% + \kern-.05em x\kern-.05em% + }% + \lower.493ex\hbox{% + {\color{ekvgrey}P}% + \kern-.1em{\color{ekvred}k}}% + \kern-.18em{\color{ekvred}v}% + \IfBlankF{#1}{% + \begingroup + \color{ekvgrey}% + \kern.05em\rule[-.1ex]{.08em}{1.2ex}% + \kern.05em\textsc{#1}% + \endgroup + }% + \endgroup +} + +\begin{document} +\DocInput{udiss.dtx} +\end{document} +%</driver> +% \fi +% \title{The \cls{udiss} bundle} +% \author{\TUGIndia} +% \date{^^A +% Version 0.1---October 1, 2024\\[1ex]^^A +% {^^A +% \small\faIcon{link}\quad +% \url{https://ctan.org/pkg/udiss}^^A +% }\\^^A +% {^^A +% \small\faIcon{bug}\quad +% \url{https://puszcza.gnu.org.ua/bugs/?group=udiss}^^A +% }^^A +% } +% +% \maketitle +% +% \tableofcontents +% +% \DoNotIndex{% +% \@empty,\@percentchar,\AddToHook,\ClassError, +% \ClassWarningNoLine,\IfBlankTF,\IfBooleanTF, +% \IfFileExists,\IfLanguageName,\LoadClass, +% \MessageBreak,\NewDocumentCommand,\PassOptionsToClass, +% \PassOptionsToPackage,\ProcessList,\ProvidesClass, +% \RenewDocumentCommand,\RequirePackage,\RequireTUTeX, +% \SplitList,\addcontentsline,\addfontfeature, +% \addtocounter,\alph,\babelfont,\babelprovide,\begin, +% \begingroup,\bfseries,\bigskip,\clearpage,\color, +% \colorlet,\def,\definecolor,\dimexpr,\docLicenseThis, +% \documentclass,\edef,\ekvdefinekeys, +% \ekvoProcessGlobalOptions,\ekvoProcessLocalOptions, +% \ekvset,\else,\empty,\end,\endcsname,\endgroup,\enquote, +% \expandafter,\expanded,\fbox,\fboxsep,\fi, +% \fontspec,\hrule,\hspace,\hypersetup,\ifLuaTeX, +% \ifnum,\ifx,\includegraphics,\input,\itshap, +% \udiss@lgbbl,\let,\linewidth,\loop,\medskip, +% \newcounter,\newif,\newpage,\noindent,\normalfont, +% \numexpr,\pagestyle,\parindent,\protected,\relax, +% \repeat,\setlength,\setmathfont,\space,\stepcounter, +% \stretch,\string,\tableofcontents,\textLF, +% \textheight,\the,\thispagestyle,\unexpanded,\vfill, +% \vspace,\year,\itshape,\csname,\fboxrule,\flushleft, +% \flushright,\LARGE,\listoffigures,\listoftables, +% \localecounter,\makeatletter,\makeatother,\normalsize, +% \Require,\theenumiii,\theenumiv^^A +% } +% +% \begin{documentation} +% \section{Introduction} +% \label{int} +% +% The \cls{udiss} bundle is a \LaTeX-class-file developed to +% assist students in typesetting their \emph{u}niversity +% \emph{diss}ertations. It is a collection of multiple +% support files. This is the first experimental version. We +% need feedback and comments from the community to make it +% better. Currently, nothing should be considered +% \enquote{stable}. Soon after getting comments and reviews +% from the community, we will move towards a stable version. +% +% Universities often have strict requirements regarding the +% formatting of the dissertations/theses submitted to them. +% This bundle pre-supplies a generic style +% (university-agnostic) for creating dissertations. It can +% be loaded simply with: +% +% \begin{verbatim} +% \documentclass{udiss} +% \end{verbatim} +% +% But, apart from the generic style, it also supplies +% university or department specific files for some selected +% institutions. Each specialised class file comes +% with an identifier. E.g., if you want to use the template +% for the Kerala university, you may use the |ukerala| tag +% and load its template like in the following: +% +% \begin{verbatim} +% \documentclass{udiss} +% \dissertationstyle{ukerala} +% \end{verbatim} +% +% We are willing to expand. If you want your institution to +% be supported by us, please have a look at the instructions +% given in \cref{req}. If you want to develop your own +% style, please have a look at the developer's instruction +% given in \cref{dev}. If you want to get your class +% published under this bundle, please have a look at the +% contribution guidelines given in \cref{con}. +% +% This document explains the user interface as well as the +% implementation of the class. It has three major parts. +% The first one contains the documentation of the class +% (\cref{doc}), the second one contains the developer's +% manual (\cref{dev}) and the third one contains the +% implementation of it (\cref{imp}). +% +% Before getting started with the documentation, just a +% brief note about our approach. As of version 0.1, we are +% planning to have a radically all-modern and +% backwards-blind approach. This is a Unicode-only package, +% meaning, it won't work with the classic PDF\LaTeX. We load +% the modern, well maintaned and inclusive implementation of +% the Latin Modern family, i.e., the New Computer Modern +% family (\url{ctan.org/pkg/newcm}). For using/testing the +% class, please use the latest \TeX\ Live (all packages +% updated, as of 2024-09-27). Both \hologo{XeLaTeX} and +% Lua\LaTeX\ supported, but the latter is recommended as it +% identifies scripts without markup. +% +% \section{Documentation} +% \label{doc} +% +% This part of the document describes everything that a +% normal user of this class should know. It enlists all the +% features of the class. +% +% \subsection{User manual} +% +% Since this is a class that typesets dissertations, it +% requires some basic information which is provided using +% the following macros. +% +% We provide the usual \LaTeX-like macros for the +% convenience, but these macros have +% \emph{key-value}-equivalents as well. +% +% \begin{function}{\title,\author,\pronouns} +% \begin{syntax} +% \cs{title}\marg{the-title-of-the-dissertation}^^A +% \ignorespaces\hfill^^A +% {\footnotesize\faIcon{exclamation-triangle}} +% \cs{author}\marg{name-of-the-author}^^A +% \ignorespaces\hfill^^A +% {\footnotesize\faIcon{exclamation-triangle}} +% \cs{pronouns}\marg{the-pronouns-of-the-author} +% \end{syntax} +% Like in most standard \LaTeX\ classes, |\title| +% command saves the title of the dissertation from its +% argument. This is one of the commands which we mark as +% \emph{strict}. In the manual, all such commands are +% marked with a +% {\footnotesize\faIcon{exclamation-triangle}} symbol at +% the right end. If such commands (or their parametric +% equivalents as shown in the following paragraph) are not +% provided, the compilation is interrupted with an error. +% The |\author| command doesn't return any error if the +% class option |blind| is loaded. Since the |blind| option +% is used for anonymous submissions, the author +% information is irrelevant anyways and hence, is ignored. +% +% These macros are available as class options too. One +% just has to use |title=|\marg{title} in the optional +% argument of the |\documentclass| command. Similarly, +% |author| and |pronouns| also are available. +% \end{function} +% +% \begin{function}{\subtitle,\shorttitle} +% \begin{syntax} +% \cs{subtitle}\marg{the-subtitle-of-the-dissertation} +% \cs{shorttitle}\marg{a-short-title-for-headers} +% \end{syntax} +% Dissertations often have a subtitle too, but it is not +% an absolute requirement, so optionally, one may want to +% use |\subtitle| command. Sometimes the title and the +% subtitle are too long for the running header. One may +% provide a short title with |\shorttitle| for this +% purpose. Depending on the selected template and options, +% it will be printed. +% +% These commands are also available as class options +% |subtitle| and |shorttitle|. +% \end{function} +% +% \begin{function}{\stream,\discipline,\degree} +% \begin{syntax} +% \cs{stream}\marg{the-name-of-the-stream}^^A +% \ignorespaces\hfill^^A +% {\footnotesize\faIcon{exclamation-triangle}} +% \cs{discipline}\marg{the-name-of-the-discipline}^^A +% \ignorespaces\hfill^^A +% {\footnotesize\faIcon{exclamation-triangle}} +% \cs{degree}\marg{the-name-of-the-degree}^^A +% \ignorespaces\hfill^^A +% {\footnotesize\faIcon{exclamation-triangle}} +% \end{syntax} +% These details are used at several places in the class. +% E.g., the declaration, the \enquote{fulfilment} +% statement printed on the first page. Like most other +% macros, these too have straight forward +% \emph{key-value}-equivalents |stream|, |discipline| and +% |degree|. +% \end{function} +% +% \begin{function}{\supervisor,\university,\department} +% \begin{syntax} +% \cs{supervisor}\marg{name-of-the-supervisor}^^A +% \ignorespaces\hfill^^A +% {\footnotesize\faIcon{exclamation-triangle}} +% \cs{university}\marg{name-of-the-university}^^A +% \ignorespaces\hfill^^A +% {\footnotesize\faIcon{exclamation-triangle}} +% \cs{department}\marg{name-of-the-department}^^A +% \ignorespaces\hfill^^A +% {\footnotesize\faIcon{exclamation-triangle}} +% \end{syntax} +% These commands are not seen in other standard +% \LaTeX-classes, but \cls{udiss} requires them +% obligatorily (only except in the |blind| mode). +% +% |supervisor|, |university| and |department| are the +% \emph{key-value}-equivalents. +% \end{function} +% +% \begin{function}{\logo,\logo*} +% \begin{syntax} +% \cs{logo}\marg{file-name} +% \cs{logo*}\marg{\TeX-code} +% \end{syntax} +% Some departments mandate printing the university logos +% in the dissertation. If this command is used, the logo +% is printed. The location of the logo can be customised +% as per the requirement. The class provides options for +% that. +% +% If you are mad about \TeX\ and have a code for printing +% the logo of your institute, use this command with a star +% and in its argument, paste your code to get it printed +% at an appropriate place. +% +% We have |logo| and |logo*| as the +% \emph{key-value}-equivalents. +% \end{function} +% +% \begin{function}{language,ldfbabel,nofontwarning} +% \begin{syntax} +% |language|=\marg{babel-language-names} +% |ldfbabel|=\marg{babel-ldf-language-names} +% |nofontwarning|=\marg{truth-value}\udissfval +% \end{syntax} +% The \pkg{babel} package has a complex mechanism for +% loading languages. The complex design has its own +% advantages, especially with regards to backwards +% compatibility. For detailed explanation, it's best to go +% through the user manual of \pkg{babel}, or its official +% online documentation, especially the web-page at: +% \url{\babelurl}. +% +% To help those who are completely at sea, we briefly will +% have a look at the two mechanisms \pkg{babel} provides. +% One is the original method of loading the +% language-name(s) as class option(s), so something like: +% +% \begin{verbatim} +% \usepackage[italian,hindi,english]{babel} +% \end{verbatim} +% +% The last one from the list is understood as the +% \enquote{main} language of the document. These languages +% are defined using the so-called |.ldf|-files. A lot of +% support for some languages is available using this +% mechanism. For some European languages, e.g., French, +% the difference between the two mechanisms is too sharp +% and it has been found that a lot of native speakers +% still prefer the old, stable way of using |.ldf|-files. +% If you are one of them and you are used to loading +% language-names as options to package \pkg{babel}, you +% should use the |ldfbabel| option of \cls{udiss}. But we +% advise against it. +% +% The second approach provided by \pkg{babel} for loading +% languages is as follows: +% +% \bigskip +% |\babelprovide|\marg{language-name} +% \bigskip +% +% This method follows and uses the Unicode Common Locale +% Data Repository (CLDR) for creating the resources. This +% data is saved in |.ini| files. This is a more modern +% approach, in our opinion. But it may cost us a little +% bit of inconvenience since it doesn't support the common +% short-hands which are provided by the |.ldf| files. But +% short-hands make the input more and more \TeX-dependent +% and thus less productive, so we don't endorse it. That +% is why the more intuitive name for language-options in +% this class is for the |.ini|-based approach. We load the +% |english| language by default if no other is loaded. For +% this too, we go with the |.ini| file developed for +% English. +% +% The syntax of both these options is exactly like the one +% provided by \pkg{babel}. One may provide a +% comma-separated list and the last one of them will be +% set as the main language of the document. Have a look at +% \cref{dev} for more details regarding this. +% +% We also provide some auxiliary \TeX\ files with the +% class for setting the font-families as well as the +% language-specifics as required by \pkg{babel}. If a file +% like that it is not found, we issue a warning. If the +% users want that warning to be silent, they can use the +% option |nofontwarning|. +% \end{function} +% +% \begin{function}{license,copyright-yrs,localcopyright} +% \begin{syntax} +% |license|=\marg{all-rights-reserved/CC-BY-SA/GFDL}^^A +% \udissarr +% |copyright-yrs|=\marg{copyrightable-years}\hfill^^A +% {\color{udisslink}|\the\year|} +% |localcopyright|=\marg{the-word-for-copyright}^^A +% \hfill{\color{udisslink}|Copyright|} +% \end{syntax} +% This is an option to set a license for the dissertation. +% We encourage users to use free culture licenses. +% Currently we support two popular licenses, i.e., +% \enquote{CC-BY-SA 4.0+ International} and \enquote{GFDL +% v1.3+}. We don't set any license by default as we +% believe making a work \enquote{free} (as in freedom) +% should be the decision of the author and hence +% \enquote{all rights are reserved} by default. If you are +% not using the |blind| package option, your output will +% have a copyright notice with your (author's) name and +% the current year as the copyrightable year in the +% metadata of the PDF. If you are wondering why, the +% |blind| option is for preserving the anonymity of the +% author and the copyright-notices require a +% copyright-holder by default, thus with |blind| option, +% we have disabled choosing licenses. If you want to +% change the copyrightable year(s), you may use the option +% |copyright-yrs|. Since the package is supposed to +% support multilingual typesetting, we have provided an +% option to change the word \enquote{Copyright} to the one +% in the main language of your document. +% \end{function} +% +% \begin{function}{placeholders} +% \begin{syntax} +% |placeholders| +% \end{syntax} +% If you want to see how the things so far discussed come +% together, you may just load this option. It places +% placeholders for all the options discussed for creating +% a sample document. +% \end{function} +% +% \begin{function}{^^A +% lot,lof,declaration,declarationtxt,decllocal^^A +% } +% \begin{syntax} +% |lot|=\marg{truth-value}\udissfval +% |lof|=\marg{truth-value}\udissfval +% |declaration|=\marg{truth-value}\udissfval +% \end{syntax} +% By default, the class only prints the table of contents. +% If the author requires the list of figures (|lof|) or +% tables (|lot|), they may use the respective option. +% These are boolean keys which take either |true| or +% |false| as their values. Not passing any truth-value to +% a |key| is equivalent to using |key=true|. Similarly, +% many universities require a declaration from the +% candidate regarding the originality of the work. We have +% provided a sample draft of the declaration in a +% renewable macro, but it is not enabled by default. After +% getting comments from the community, we will decide what +% should be done with it. Note that the default value for +% all these keys is |false|\footnote{^^A +% Throughout the documentation, at the right corner, we +% enlist the possible values to a key and the default +% one is marked in red.^^A +% }. Declaration text can be edited using |declarationtxt| +% option. The local word for declaration is stored in +% |decllocal| (defaulting to \enquote{Declaration}). +% \end{function} +% +% \begin{function}{blind} +% \begin{syntax} +% |blind|=\marg{truth-value}\udissfval +% \end{syntax} +% At times, anonymous submissions are required where the +% name of the author and supervisor is hidden. +% \end{function} +% +% \begin{function}{framed-title} +% \begin{syntax} +% |framed-title|=\marg{truth-value}\udissfval +% \end{syntax} +% By default the title-page is very minimal. If a user +% wants to have a frame around the title-page, they may +% use this option. +% \end{function} +% +% \begin{function}{^^A +% print,norefcolors,colorprint,udisslinkclr,^^A +% udissurlclr,udissciteclr^^A +% } +% \begin{syntax} +% |print|=\marg{truth-value}\udissfval +% |norefcolors|=\marg{truth-value}\udissfval +% |udisslinkclr|=\marg{link-colour}\udisscolorred +% |udissurlclr|=\marg{url-colour}\udisscolorblue +% |udissciteclr|=\marg{cite-colour}\udisscolorgreen +% \end{syntax} +% Many departments require the submissions to be made in +% the print form as well. For that, |print| is a boolean +% option. It creates outputs suitable for the print +% submissions. The class, by default, does not use |print| +% option. The default output of the class is suitable for +% digital submissions. The following settings are always +% turned on by the class in normal circumstances: +% +% \begin{itemize} +% \item The \pkg{hyperref} package is loaded. +% \item The \pkg{xcolor} package is loaded. Some colours +% for the internal cross-references are pre-selected. +% \end{itemize} +% +% If you don't want colours for the hyperlinks in your +% digital document, you may use the |norefcolors| +% option. If you don't like the pre-defined colour-scheme +% given by us for the digital documents, you may use the +% class options specifically developed for changing them. +% They are |udisslinkclr|, |udissurlclr| and +% |udissciteclr|. The arguments of these options are +% either the pre-defined colours by package |xcolor| or +% user-defined colours with the |\colorlet| or +% |\definecolor| commands. The default colour-scheme +% used by us is as seen in the macro explanation above. +% +% More importantly though, if a PDF with colours is given +% for printing and the printer is using the black and +% white mode, then the coloured words look faded in the +% print out. To avoid this, we load the \pkg{xcolor} +% package only when the |print| option is \emph{not} +% loaded (basically always, by default). For performance +% reasons, we don't load the |hyperref| package when +% |print| is loaded. Hyper-references make sense only in a +% digital PDF, so to optimise PDF compilation, in |print| +% mode, we don't load |hyperref|. +% \end{function} +% +% Note that if you are using the |license| option with +% |CC-BY-SA|, the \pkg{doclicense} package |\Require|d for +% printing the license automatically loads the +% \pkg{hyperref} package. We don't have any control over it +% and hence, you will see the hyperlink boxes around the +% CC-text. You can safely ignore them as the text is still +% in black colour and your objective is anyways just to +% \emph{print} the output. +% +% \begin{function}{oldstylenumoff,oldone} +% \begin{syntax} +% |oldstylenumoff|=\marg{truth-value}\udissfval +% |oldone|=\marg{truth-value}\udissfval +% \end{syntax} +% In text, the old style numbers look better. The numbers +% in the current document are old style. Lining numbers, +% on the other hand, don't have ascenders and descenders. +% +% If you prefer the lining numbers, you may turn this +% option on and all the fonts will start showing lining +% numbers. Note that printing of old style numbers also +% depends upon whether the font has old style numbers or +% not. The relevant settings are added to the font +% automatically, but while selecting the font, first make +% sure whether the old style table is present or not. +% +% Apart from that, the New Computer Modern font family +% provides an old-style shape for the number 1 (this exact +% shape!), but this shape is provided as a character +% variant and character variants cannot be loaded +% globally, since various fonts may have various variants +% at that slot, hence if someone wants this shape, they +% will have to use the |oldone| option. Without this +% option the number looks like as seen on the first line +% and that's the default style of \cls{udiss}. +% +% \begin{quote} +% {\newcmnewone 0123456789}\hfill +% \begingroup +% \ttfamily\footnotesize\color{udisslink}^^A +% Old style with default 1^^A +% \endgroup +% +% 0123456789\hfill +% \texttt{\footnotesize Old style with the old 1}^^A +% +% {\newcmnewnum 0123456789}\hfill +% \texttt{\footnotesize Lining}^^A +% \end{quote} +% \end{function} +% +% \begin{function}{fulfilment} +% \begin{syntax} +% |fulfilment|=\ignorespaces^^A +% \marg{the-titlepage-sentence-about-course-requirement} +% \end{syntax} +% The title-page prints a sentence which says: +% +% \begin{quote} +% A dissertation submitted in the partial fulfilment of +% the requirements for the |\udiss@degree|\ program +% in |\udiss@discipline|. +% \end{quote} +% +% In order to change it, one may use this package option. +% If you want to use the internal macros for univesity +% and department names, don't forget to use +% |\makeatletter| and |\makeatother|. +% \end{function} +% +% As described in the introduction (\cref{int}), the users +% can choose to load the generic style or a specialised +% style. For that, we have the following macro: +% +% \begin{function}{\dissertationstyle} +% \begin{syntax} +% \cs{dissertationstyle}\marg{style-for-dissertation} +% \end{syntax} +% With this command, you may select the institute or the +% style. It will set certain defaults. +% +% We provide limited support as of v0.1 (only for +% university of Kerala). We wish to expand more. Send us +% support requests for adding your institute to the list. +% \end{function} +% +% \subsection{Multilingual typesetting} +% +% The \cls{udiss} class aims at supporting multilingual +% typesetting by default. We load the \pkg{babel} package +% for linguistic support, \pkg{fontspec} and +% \pkg{unicode-math} package for loading fonts. It's the +% best to not load them again. For loading languages, it's +% best to use the package internal mechanism. If you find +% something missing in the mechanism, you may load +% \pkg{babel} or \pkg{fontspec} commands directly. Please +% consider reporting a missing feature so that we can +% implement it in the future versions. +% +% We will see two examples of loading languages. +% +% \subsection[Developer's manual]{^^A +% Developer's manual\marginpar{\hfill\dbend}\\[0.5ex]^^A +% \small\normalfont\itshape +% \quad Only if you sure about what you are doing^^A +% } +% \label{dev} +% +% As the section title and the double bend suggests, this +% area is for advanced customisation. Only enter it if you +% have sufficient confidence to avoid errors. +% +% +% \subsubsection{Fonts} +% +% We are a Unicode-only class, so we need to take care of +% three major font families, i.e., Roman, +% \texttt{Typewriter} and \textsf{Sans} (stylisation +% intentional, for demonstration). The \pkg{fontspec} +% package takes care of Unicode fonts in \LaTeX, but we, +% additionally, load package \pkg{unicode-math} too, to set +% math-fonts. Even though, this much is practically enough +% for font-selection, we go with the \pkg{babel}'s mechanism +% of loading language-specific fonts, so that the fonts +% don't apply globally. Our class already takes care of most +% of the requirements regarding font, but if you want to +% tinker with the defaults, you are advised to read this +% section. The following parameters are for you. +% +% \begin{function}{explicitext,ignorefsoff} +% \begin{syntax} +% |explicitext|=\marg{truth-value}\udissfval +% |ignorefsoff|=\marg{truth-value}\udisstval +% \end{syntax} +% Without this option, one cannot use the |Extension| +% parameter of package \pkg{fontspec}/\pkg{unicode-math}. +% We have some options later which set the extension for +% |rm|, |sf| and |tt| families. They are also useless if +% this key is not used. A word of caution: loading +% explicit extensions for fonts is restrictive. Suppose +% you want to use KpRoman-Regular as your normal font, +% but, say, FreeSerifBold as your bold font (please don't, +% this is solely for exemplification :P), loading an +% explicit extension will cause errors as the former is an +% OpenType font and the latter is a TrueType one. So if +% you are 200\% sure that all the fonts you need use one +% particular extension \emph{only}, then use this option. +% Otherwise, you are better off without it. +% +% The \TeX-tree contains many files having the +% |.fontspec| extension. These files contain predefined +% settings for fonts which the users may not always want. +% Thus, we ignore these files by default. If you are very +% sure that you want to load |.fontspec| files, you may +% turn our conditional off and the |.fontspec|-files, will +% be loaded correctly. +% \end{function} +% +% \begin{function}{^^A +% rmfeatures,sffeatures,ttfeatures,mathfeatures^^A +% } +% \begin{syntax} +% |rmfeatures|=\marg{font-features-for-serif-fonts} +% |sffeatures|=\marg{font-features-for-sans-fonts} +% |ttfeatures|=\marg{font-features-for-mono-fonts} +% |mathfeatures|=\marg{font-features-for-math-fonts} +% \end{syntax} +% We have |udiss|-options for most commonly used optional +% parameters of fonts, still there are a lot of them +% available which we didn't consider important for the +% purpose of this class, e.g., |Scale|, |Color|. If you +% want to use these features with your fonts, you may use +% these four options as per your need. The value of this +% key is directly injected in the font-loading commands. +% \end{function} +% +% \begin{function}{rmfntext,sffntext,ttfntext,mathfntext} +% \begin{syntax} +% |rmfntext|=\ignorespaces^^A +% \marg{font-extension-for-serif-fonts}\ignorespaces^^A +% \hfill\texttt{ttf\,\textbar\,otf} +% |sffntext|=\ignorespaces^^A +% \marg{font-extension-for-sans-fonts}\ignorespaces^^A +% \hfill\texttt{ttf\,\textbar\,otf} +% |ttfntext|=\ignorespaces^^A +% \marg{font-extension-for-mono-fonts}\ignorespaces^^A +% \hfill\texttt{ttf\,\textbar\,otf} +% |mathfntext|=\ignorespaces^^A +% \marg{font-extension-for-math-fonts}\ignorespaces^^A +% \hfill\texttt{ttf\,\textbar\,otf} +% \end{syntax} +% With these four options, one may choose either +% |ttf| or |otf| extension for a particular font family. +% As mentioned before, it applies to all the fonts loaded +% in that family. Note that these options are only used +% when the |explicitext| option is active. This is why +% there is no default value set. By default this explicit +% extension method itself is not used. +% \end{function} +% +% If you want to know the default fonts we load always with +% \cls{udiss}, you may refer to \cref{udissenfonts}. +% +% \begin{table} +% \centering +% \small +% \begin{tabular}{llll} +% \toprule +% \textfunction{rmfont} & +% \textfunction{sffont} & +% \textfunction{ttfont} \\ +% NewCM10-Book & +% NewCMSans10-Book & +% NewCMMono10-Book \\ +% \specialrule{0pt}{\aboverulesep}{\aboverulesep} +% \textfunction{rmbffont} & +% \textfunction{sfbffont} & +% \textfunction{ttbffont} \\ +% NewCM10-Bold & +% NewCMSans10-Bold & +% NewCMMono10-Bold \\ +% \specialrule{0pt}{\aboverulesep}{\aboverulesep} +% \textfunction{rmitfont} & +% \textfunction{sfitfont} & +% \textfunction{ttitfont} \\ +% NewCM10-BookItalic & +% NewCMSans10-BookItalic & +% NewCMMono10-BookItalic \\ +% \specialrule{0pt}{\aboverulesep}{\aboverulesep} +% \textfunction{rmbfitfont} & +% \textfunction{sfbfitfont} & +% \textfunction{ttbfitfont} \\ +% NewCM10-BoldItalic & +% NewCMSans10-BoldOblique & +% NewCMMono10-BoldOblique \\ +% \specialrule{0pt}{\aboverulesep}{\aboverulesep} +% \textfunction{rmslfont} & +% \textfunction{sfslfont} & +% \textfunction{ttslfont} \\ +% NewCM10-Book & +% NewCMSans10-BookOblique & +% NewCMMono10-Book \\ +% \specialrule{0pt}{\aboverulesep}{\aboverulesep} +% \textfunction{rmbfslfont} & +% \textfunction{sfbfslfont} & +% \textfunction{ttbfslfont} \\ +% NewCM10-Bold & +% NewCMSans10-BoldOblique & +% NewCMMono10-BoldOblique \\ +% \midrule +% \textfunction{mathfont} & & \\ +% NewCMMath-Book & & \\ +% \specialrule{0pt}{\aboverulesep}{\aboverulesep} +% \textfunction{mathbffont} & & \\ +% NewCMMath-Bold & & \\ +% \bottomrule +% \end{tabular} +% \caption{Default fonts for English language (all otfs)} +% \label{udissenfonts} +% \end{table} +% +% \subsubsection{Title-page customisation} +% +% The title-page prints several fields and very often +% authors are very picky about it. Most of the things we +% offer in it are customisable. One may change the following +% things for all the major fields on the title-page. +% +% \begin{enumerate} +% \item The font +% \item The font-size +% \item The font-color +% \item The font-shape (e.g., |\itshape|, |\scshape| etc.) +% \item Additional features to the font loaded +% \end{enumerate} +% +% All the parameters (along with their default values) are +% listed in \cref{titlepagetbl}. The table uses \enquote{-} +% when there is no change in the default, only the fields +% having a special value are marked. +% +% \begin{table} +% \small +% \centering +% \begin{tabular}{>{\itshape\normalsize}llllll} +% \toprule +% Title & +% - & +% |\bfseries| & +% huge & +% black & +% -\\ +% & \scriptsize\textfunction{titlefont} & +% \scriptsize\textfunction{titleshape} & +% \scriptsize\textfunction{titlesize} & +% \scriptsize\textfunction{titlecolor} & +% \scriptsize\textfunction{titleffeat}\\ +% \cmidrule{2-6} +% Subtitle & +% - & +% |\normalfont| & +% large & +% black & +% -\\ +% & \scriptsize\textfunction{subtitlefont} & +% \scriptsize\textfunction{subtitleshape} & +% \scriptsize\textfunction{subtitlesize} & +% \scriptsize\textfunction{subtitlecolor} & +% \scriptsize\textfunction{subtitleffeat}\\ +% \cmidrule{2-6} +% Author & +% - & +% |\normalfont| & +% large & +% black & +% -\\ +% & \scriptsize\textfunction{authorfont} & +% \scriptsize\textfunction{authorshape} & +% \scriptsize\textfunction{authorsize} & +% \scriptsize\textfunction{authorcolor} & +% \scriptsize\textfunction{authorffeat}\\ +% \cmidrule{2-6} +% University & +% - & +% |\normalfont| & +% |\normalsize| & +% black & +% -\\ +% & \scriptsize\textfunction{unifont} & +% \scriptsize\textfunction{unishape} & +% \scriptsize\textfunction{unisize} & +% \scriptsize\textfunction{unicolor} & +% \scriptsize\textfunction{uniffeat}\\ +% \cmidrule{2-6} +% Department & +% - & +% |\normalfont| & +% |small| & +% black & +% -\\ +% & \scriptsize\textfunction{deptfont} & +% \scriptsize\textfunction{deptshape} & +% \scriptsize\textfunction{deptsize} & +% \scriptsize\textfunction{deptcolor} & +% \scriptsize\textfunction{deptffeat}\\ +% \cmidrule{2-6} +% Fulfilment & +% - & +% |\normalfont| & +% small & +% black & +% -\\ +% & \scriptsize\textfunction{fffont} & +% \scriptsize\textfunction{ffshape} & +% \scriptsize\textfunction{ffsize} & +% \scriptsize\textfunction{ffcolor} & +% \scriptsize\textfunction{fffeat}\\ +% \bottomrule +% \end{tabular} +% \caption{Customising title-page} +% \label{titlepagetbl} +% \end{table} +% +% \begin{function}{logowidth,logoheight} +% \begin{syntax} +% |logowidth|=\marg{logo-width-proportion}\hfill^^A +% \begingroup^^A +% \ttfamily\color{udisslink}^^A +% 0.3^^A +% \endgroup +% |logoheight|=\marg{logo-height-proportion}\hfill^^A +% \begingroup^^A +% \ttfamily\color{udisslink}^^A +% 0.075^^A +% \endgroup +% \end{syntax} +% By default the width of the logo is +% 0.3$\times$|\linewidth| and 0.075$\times$|\textheight|. +% If you want to change these default numbers, you may use +% these parameters. +% \end{function} +% \subsection[^^A +% Contributing to our repository^^A +% ]{^^A +% Contributing to the bundle^^A +% \marginpar{\hfill\ddbend}\\[0.5ex]^^A +% \small\normalfont\itshape +% \quad Only if you are ready to bear with us :P^^A +% } +% \label{con} +% +% We welcome contributions to our code. Our code is hosted +% at Puszcza, a free-software-based web-space. But for +% consistency, we request our supporters to write the code +% using 60 characters per line limit. Try to adhere to the +% coding conventions. If there is a slight violation here +% and there in your patches, please don't mind us editing +% your code first and then merging it in the main branch. +% +% We release our code with GPLv3+ and the documentation with +% GFDLv1.3+. Your patches also will have to comply with the +% conditions of these licenses. +% +% If you wish to document your patches, please avoid +% gendered language. Use \emph{they/them} pronouns when +% referring to users. +% +% Apart from university-styles, we also need support for +% language and fonts. If you know free/libre Unicode fonts +% for your language, please release them on CTAN or let us +% know about them, so that we will release using our +% templates. Provide appropriate translations for the fields +% provided in class. +% +% The class comes with a test-suit. You are advised to run +% |l3build check| command before pushing a patch. This way +% we can be sure that the patch doesn't break any of the +% already existing features. If you think something was +% buggy in the original design and you got a fix for that, +% kindly run |l3build save| on the concerned test file and +% push the changed |.lvt| and |.tlg|s also. +% +% \section{Requests for new templates} +% \label{req} +% +% We are open to your support-requests too. Just let us know +% the norms and conventions of your institution. Let us know +% which fields you would like to have pre-filled in the +% style file. If you require the logo to be printed on the +% title-page, send it to us in a decent resolution. We will +% include it in our bundle. +% \end{documentation} +% +% \begin{implementation} +% \section{Implementation} +% \label{imp} +% +% In this section, we explain how this program was +% developed. We discuss the tools used by us for developing +% the features offered in this class. The features can be +% seen in the left margin hyperlinked to their respective +% place in the documentation section \cref{doc}. +% +% We first declare the tag used by the |.ins| file for +% stripping the source-code of the generic class. We will +% have several tags for generating the other class-files, +% but for the convenience of maintenance, we will have all +% the code in this central |.dtx| file. +% +% \begin{macrocode} +%<*class> +% \end{macrocode} +% +% First we declare the class with some elementary +% information. +% +% \begin{macrocode} +\ProvidesClass{udiss}[2024/10/01 v0.1 + A LaTeX bundle for typesetting dissertations (TUGIndia)] +% \end{macrocode} +% +% We develop the options for the class using +% |\ekvdefinekeys| command. This command is provided by the +% \expkvlogo{def} package, whereas for creating +% class/package options, we use the \expkvlogo{opt} +% package. For performance reasons, we don't use the entire +% \expkvlogo{bundle}. +% +% \begin{macrocode} +\RequirePackage{expkv-def,expkv-opt} +% \end{macrocode} +% +% \begin{macro}{\pronouns,pronouns} +% Mostly we have implemented the macros in the same order +% as they are documented, but the exception is of the +% first two, i.e., |\title| and |\author|. These commands +% are developed by the standard classes too and hence, +% after loading the class (\cls{memoir} in our case) their +% definitions are rewritten. Thus these two macros are +% developed a little late in the code. Rest is still in +% line with the documentation. The method of saving the +% values of the macros is an indirect one. We use internal +% macros (e.g., |\udiss@title|) for saving them. +% +% We start with the |pronouns| field. Since it is +% optional, we don't need any errors here. At each step, +% we set some if-conditionals. All of them follow the +% standard convention of prefixing the class/package name +% and the |@| symbol for internalising. Have a look at the +% following two conditionals which we use immediately +% while defining the |pronouns| field: +% +% \begin{macrocode} +\newif\ifudiss@pronouns +\newif\ifudiss@blind +% \end{macrocode} +% +% We use the \pkg{xparse}-syntax for developing user-side +% macros. First we check if the class option |blind| is +% loaded. If it is so, there is no point in saving +% |pronouns|, hence it is skipped. The following code does +% that: +% +% \begin{macrocode} +\NewDocumentCommand{ \pronouns }{ m }{% + \ifudiss@blind + \else + \def\udiss@pronouns{#1}% + \fi +} +% \end{macrocode} +% +% As mentioned before, we use \expkvlogo{def} and +% \expkvlogo{opt} packages for developing the +% \emph{key-values}. The former proives a command +% |\ekvdefinekeys| that defines all the \emph{key}s. We +% could have called it just once in the code and developed +% all the \emph{key}s at one go, but in order to keep the +% implementation in line with the documentation and for a +% generally better readable code, we segment it in several +% pieces and develop the respective options with different +% calls of |\ekvdefinekeys|. Note that the set used for +% all of them is still the same, i.e., |udiss|. Storing a +% value passed to a key in a specific macro for later use +% is quite straight-forward in \expkvlogo{def}, but since +% we need to set some macros conditionally, we will use +% the |code| \emph{type} of \expkvlogo{}. The first +% non-space-token followed by the invocation of this type +% is the name of the \emph{key}. Its argument is an +% arbitrary \TeX-code where we can use have the usual +% \TeX-argument-call, i.e., |#1|. +% +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + code pronouns = {% + \ifudiss@blind + \else + \def\udiss@pronouns{(#1)}% + \fi + \udiss@pronounstrue + }% +} +% \end{macrocode} +% \end{macro} +% +% The |\ifudiss@blind| conditional was developed in order to +% conditionally save (and print) some information which +% identifies the author. If a user loads the option |blind|, +% they don't need that information to be printed and since +% it is not supposed to be printed, why to even save it? +% Thus we save it only when needed. +% +% \begin{macro}{title,author} +% +% Since we don't allow blank arguments for \emph{strict} +% commands/parameters, we check their existence there and +% there and generate an error if found blank. Since we +% need to error twice (once with the macro, once with the +% parameter, we save the code for generating the error in +% a handy internal macro. Let's have a look at one +% developed for the |title| field. +% +% \begin{macrocode} +\newif\ifudiss@title +\def\udiss@blank@title@err{% + \ClassError{udiss}{% + The `title' field cannot be blank% + }{% + You have provided an empty argument to the `title' + field. This is not\MessageBreak permitted by the class.% + }% +} +% \end{macrocode} +% +% We use the same method for all the other \emph{strict} +% commands too. +% +% \begin{macrocode}\newif\ifudiss@author +\def\udiss@blank@author@err{% + \ClassError{udiss}{% + The `author' field cannot be blank% + }{% + You have provided an empty argument to the `author' + field. This is not\MessageBreak permitted by the class.% + }% +} +% \end{macrocode} +% +% Now we start developing the code for the |title| and +% |author| parameters. In order to check whether a macro +% is empty or not, we need to use the +% |\ifx\macro|$_{1}$|\macro|$_{2}$ construct. But since +% we have an argument and not a ready macro for +% comparison, we first we develop an internal macro with +% the argument as its value. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + code title = {% + \def\udiss@tmp@title{#1}% +% \end{macrocode} +% +% The true branch of this conditional, i.e., everything +% till either |\else| or |\fi| is found, defines the +% actual macro to be used while typesetting, i.e., +% |\udiss@title|, but since the user has provided a blank +% macro, we give a cryptic value to the macro, e.g., +% |-NoValidTitle-|. Note that this gets printed in the +% document even though the user gets an error. Since we +% use this regularly, a user may search for |-NoValid| in +% the output to find out all the values they missed +% providing. +% +% \begin{macrocode} + \ifx\udiss@tmp@title\empty + \def\udiss@title{-NoValidTitle-}% +% \end{macrocode} +% +% After this, we print the error for the blank argument. +% In the |\else| branch (which means the user did +% \emph{not} pass a blank argument, but provided a +% legit value), we define the command with the actual +% user-given-value. This is the most ideal condition. +% +% \begin{macrocode} + \udiss@blank@title@err + \else + \def\udiss@title{#1}% + \fi + },% +% \end{macrocode} +% +% We repeat the same pattern for the \emph{strict} commands +% now. Here is the code for |author|. +% +% \begin{macrocode} + code author = {% + \def\udiss@tmp@author{#1}% + \ifx\udiss@tmp@author\empty + \def\udiss@author{-NoValidAuthor-}% + \udiss@blank@author@err + \else + \def\udiss@author{#1}% + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{subtitle,\subtitle,shorttitle,\shorttitle} +% Here is the code for the |subtitle| and |shorttitle| +% fields. As they aren't \emph{strict}, no errors needed +% for them. We need a conditional though. We set it to +% true so that it is understood that this field was not +% forgotten by the author. Only if their value is true, we +% print them later. +% +% \begin{macrocode} +\newif\ifudiss@subtitle +\newif\ifudiss@shorttitle +\ekvdefinekeys{udiss}{% + code subtitle = {% + \IfBlankTF{#1}{% + \def\udiss@subtitle{-NoValidSubtitle-}% + \udiss@subtitletrue + }{% + \def\udiss@subtitle{#1}% + \udiss@subtitletrue + }% + },% + code shorttitle = {% + \IfBlankTF{#1}{% + \def\udiss@shorttitle{-NoValidSubtitle-}% + \udiss@shorttitletrue + }{% + \def\udiss@shorttitle{#1}% + \udiss@shorttitletrue + }% + }% +} +\NewDocumentCommand{ \subtitle }{ m }{% + \def\udiss@subtitle{#1}% + \udiss@subtitletrue +} +\NewDocumentCommand{ \shorttitle }{ m }{% + \def\udiss@shorttitle{#1}% + \udiss@shorttitletrue +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{^^A +% stream,\stream,discipline,\discipline,^^A +% degree,\degree^^A +% } +% Again some compulsory fields, so we develop the errors, +% then the \emph{key}s and then the macros. +% +% \begin{macrocode} +\newif\ifudiss@stream +\def\udiss@blank@stream@err{% + \ClassError{udiss}{% + The `stream' field cannot be blank% + }{% + You have provided an empty argument to the `stream' + field. This is not\MessageBreak permitted by the class.% + }% +} +\newif\ifudiss@discipline +\def\udiss@blank@discipline@err{% + \ClassError{udiss}{% + The `discipline' field cannot be blank% + }{% + You have provided an empty argument to the `discipline' + field. This is not\MessageBreak permitted by the class.% + }% +} +\newif\ifudiss@degree +\def\udiss@blank@degree@err{% + \ClassError{udiss}{% + The `degree' field cannot be blank% + }{% + You have provided an empty argument to the `degree' + field. This is not\MessageBreak permitted by the class.% + }% +} +\ekvdefinekeys{udiss}{% + code stream = {% + \def\udiss@tmp@stream{#1}% + \ifx\udiss@tmp@stream\empty + \def\udiss@stream{-NoValidStream-}% + \udiss@blank@stream@err + \else + \def\udiss@stream{#1}% + \fi + },% + code discipline = {% + \def\udiss@tmp@discipline{#1}% + \ifx\udiss@tmp@discipline\empty + \def\udiss@discipline{-NoValidDiscipline-}% + \udiss@blank@discipline@err + \else + \def\udiss@discipline{#1}% + \fi + },% + code degree = {% + \def\udiss@tmp@degree{#1}% + \ifx\udiss@tmp@degree\empty + \def\udiss@degree{-NoValidDegree-}% + \udiss@blank@degree@err + \else + \def\udiss@degree{#1}% + \fi + }% +} +\NewDocumentCommand{ \stream }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@stream@err + \def\udiss@stream{-NoValidStream-}% + }{% + \def\udiss@stream{#1}% + }% + \IfBlankTF{#1}{% + \udiss@streamtrue + }{% + \def\udiss@stream{#1}% + \udiss@streamtrue + }% +} +\NewDocumentCommand{ \discipline }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@discipline@err + \def\udiss@discipline{-NoValidDiscipline-}% + }{% + \def\udiss@discipline{#1}% + }% + \IfBlankTF{#1}{% + \udiss@disciplinetrue + }{% + \def\udiss@discipline{#1}% + \udiss@disciplinetrue + }% +} +\NewDocumentCommand{ \degree }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@degree@err + \def\udiss@degree{-NoValidDegree-}% + }{% + \def\udiss@degree{#1}% + }% + \IfBlankTF{#1}{% + \udiss@degreetrue + }{% + \def\udiss@degree{#1}% + \udiss@degreetrue + }% +} +% \end{macrocode} +% \end{macro} +% +% We then develop the last set of \emph{strict} macros which +% are used in the declaration and some on the title-page +% too. The method is no different. +% +% \begin{macro}{^^A +% supervisor,\supervisor,university,\university,^^A +% department,\department^^A +% } +% \begin{macrocode} +\newif\ifudiss@supervisor +\newif\ifudiss@university +\newif\ifudiss@department +\def\udiss@blank@supervisor@err{% + \ClassError{udiss}{% + The `supervisor' field cannot be blank% + }{% + You have provided an empty argument to the `supervisor' + field. This is not\MessageBreak permitted by the class.% + }% +} +\def\udiss@blank@university@err{% + \ClassError{udiss}{% + The `university' field cannot be blank% + }{% + You have provided an empty argument to the `university' + field. This is not\MessageBreak permitted by the class.% + }% +} +\def\udiss@blank@department@err{% + \ClassError{udiss}{% + The `department' field cannot be blank% + }{% + You have provided an empty argument to the `department' + field. This is not\MessageBreak permitted by the class.% + }% +} +\ekvdefinekeys{udiss}{% + code supervisor = {% + \def\udiss@tmp@supervisor{#1}% + \ifx\udiss@tmp@supervisor\empty + \def\udiss@supervisor{-NoValidSupervisor-}% + \udiss@blank@supervisor@err + \else + \def\udiss@supervisor{#1}% + \fi + },% + code university = {% + \def\udiss@tmp@university{#1}% + \ifx\udiss@tmp@university\empty + \def\udiss@university{-NoValidUniversity-}% + \udiss@blank@university@err + \else + \def\udiss@university{#1}% + \fi + },% + code department = {% + \def\udiss@tmp@department{#1}% + \ifx\udiss@tmp@department\empty + \def\udiss@department{-NoValidDepartment-}% + \udiss@blank@department@err + \else + \def\udiss@department{#1}% + \fi + }% +} +\NewDocumentCommand{ \supervisor }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@supervisor@err + \def\udiss@supervisor{-NoValidSupervisor-}% + }{% + \def\udiss@supervisor{#1}% + }% + \IfBlankTF{#1}{% + \udiss@supervisortrue + }{% + \def\udiss@supervisor{#1}% + \udiss@supervisortrue + }% +} +\NewDocumentCommand{ \university }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@university@err + \def\udiss@author{-NoValidUniversity-}% + }{% + \def\udiss@university{#1}% + }% + \IfBlankTF{#1}{% + \udiss@universitytrue + }{% + \def\udiss@university{#1}% + \udiss@universitytrue + }% +} +\NewDocumentCommand{ \department }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@department@err + \def\udiss@author{-NoValidDepartment-}% + }{% + \def\udiss@department{#1}% + }% + \IfBlankTF{#1}{% + \udiss@departmenttrue + }{% + \def\udiss@department{#1}% + \udiss@departmenttrue + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{ \logo,\logo* } +% We develop the |\logo| command with a starred variant +% using the intuitive \pkg{xparse} trickery. Notice the +% use of two different conditionals |\ifudiss@logo| and +% |\ifudiss@texlogo|. +% +% \begin{macrocode} +\newif\ifudiss@logo +\newif\ifudiss@texlogo +\NewDocumentCommand{ \logo }{ s +m }{% + \IfBooleanTF{#1}{% + \def\udiss@texlogo{#2}% + \udiss@texlogotrue + }{% + \def\udiss@logo{#2}% + }% + \udiss@logotrue +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{logo,logo*} +% \expkvlogo{} doesn't have a way to have starred +% variants of the keys, but we can always create a +% different key with an additional star. That's what we do +% here. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + code logo = {% + \def\udiss@logo{#1}% + \udiss@logotrue + },% + code logo* = {% + \def\udiss@texlogo{#1}% + \udiss@logotrue + \udiss@texlogotrue + }% +} +% \end{macrocode} +% \end{macro} +% +% Now we move to the complicated task of developing the +% mechanism for loading languages. In order to imitate the +% syntax of |babel|, we need a parser which inteprets +% comma-separated language-names. We develop a new counter +% called |udiss@langbabel| and use it with |\alph| inside +% |\csname| in order to produce an ordered sequence of +% macros that store the different language-names. After +% parsing, the language macros should look like +% |\udiss@langbabel@a|, |\udiss@langbabel@a| etc. The +% following code does that. The |\udiss@lgbbl| macro is the +% internal parser for the language-names. +% +% \begin{macrocode} +\newcounter{udiss@langbabel} +\stepcounter{udiss@langbabel} +\def\udiss@int@langbabel#1{% + \expandafter\edef + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname{#1}% + \stepcounter{udiss@langbabel}% +} +\NewDocumentCommand\udiss@lgbbl{ >{ \SplitList{,} } m }{% + \ProcessList{#1}{\udiss@int@langbabel}% +} +% \end{macrocode} +% +% \begin{macro}{language,ldfbabel,nofontwarning} +% We first create the if-conditionals required for this +% job. +% +% \begin{macrocode} +\newif\ifudiss@lg@used +\newif\ifudiss@ldfbabel +% \end{macrocode} +% +% The |language| key takes the comma-separated list as its +% argument and passes the list to the |\udiss@lgbbl| +% macro which we just saw. So whenever we pass multiple +% languages to the option |language|, it is parsed by +% |\udiss@lgbbl|. We then turn the |\ifudiss@lg@used| +% conditional on, so that when neither of these options +% are used by the user, we can do something. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + code language = {% + \udiss@lgbbl{#1}% + \udiss@lg@usedtrue + },% +% \end{macrocode} +% +% On the other hand though, the process is quite simple +% and straight forward. We need to store the list of the +% |.ldf|-languages in a macro and later pass it to the +% \pkg{babel} package as \pkg{babel} already understands +% how to parse it. We store the list in the +% |\udiss@ldfbabel@list| macro. With this option, we have +% to turn an additional conditional on, i.e., +% |\ifudiss@ldfbabel|. Usually we don't use the |.ldf| +% mechanism at all as mentioned in \cref{doc}. +% +% \begin{macrocode} + code ldfbabel = {% + \def\udiss@ldfbabel@list{#1}% + \udiss@lg@usedtrue + \udiss@ldfbabeltrue + },% +% \end{macrocode} +% +% The |nofontwarning| option is developed using the +% |invbool| \emph{type} which creates (or uses, if present) +% a conditional and sets it to true. In this case, it is +% |\ifudiss@font@warning|. Unless the option |nofontwarning| +% is used, the aforementioned condition is true. +% +% \begin{macrocode} + invbool nofontwarning = {\ifudiss@font@warning}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{license,copyright-yrs,localcopyright} +% Now we develop the options for setting a license with +% the legit copyrightable years. As usual, we first +% develop the required conditionals. +% +% \begin{macrocode} +\newif\ifudiss@free@culture +\newif\ifudiss@ccbysa +\newif\ifudiss@gfdl +% \end{macrocode} +% +% We use a new \expkvlogo{} \emph{type}s for license which +% is |choice|. It takes a definite list of |choice|s that +% run some arbitrary code. We define an internal macro +% |\udiss@license@notice| which holds the notice text of +% the selected licenses. We set the +% |\ifudiss@free@culture| conditional to true if the +% user's |choice| is |CC-BY-SA| or |GFDL|. Why we do this +% is because if the choice is |all-rights-reserved|, it +% need not be explicitly mentioned. It is always assumed. +% Also, it is seen in PDF's metadata. For this, we enable +% the conditional. Using the |initial| \emph{prefix} of +% \expkvlogo{}, we set the |all-rights-reserved| as the +% default choice of users. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + choice license = {% + all-rights-reserved = {% + \def\udiss@license@notice{% + All rights reserved.\textLF + }% + },% + CC-BY-SA = {% + \def\udiss@license@notice{% + This work is available under the "Creative Commons + Attribution ShareAlike 4.0 International" license.% + }% + \def\udiss@free@license@url{% + https://creativecommons.org/licenses/% + by-sa/4.0/legalcode.txt% + }% + \udiss@free@culturetrue + \udiss@ccbysatrue + },% + GFDL = {% + \def\udiss@license@notice{% + Permission is granted to copy, distribute and/or + modify this document under the terms of the GNU Free + Documentation License, Version 1.3 or any later + version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, + and no Back-Cover Texts. A copy of the license is + included in the section entitled “GNU Free + Documentation License”.% + }% + \def\udiss@free@license@url{% + https://www.gnu.org/licenses/fdl-1.3.txt% + }% + \udiss@free@culturetrue + \udiss@gfdltrue + },% + },% + initial license = {all-rights-reserved},% +% \end{macrocode} +% +% Then we use the |store| \emph{type} which, as the name +% suggests, |store|s the value given by the user in a +% macro. Again, with the |initial| \emph{prefix}, we set +% the initial values for the two options. +% +% \begin{macrocode} + store copyright-yrs = {\udiss@copyrightable@years},% + initial copyright-yrs = {\the\year},% + store localcopyright = {\udiss@local@copyright},% + initial localcopyright = {Copyright},% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{placeholders} +% This option pre-fills all the necessary fields with some +% random (and rather delusional :P) values. We use the +% |nmeta| \emph{type} of \expkvlogo{} for this. This type +% uses the already developed keys with some values. When +% the key developed with |nmeta| is used by the user, it +% behaves as if the user has passed the keys inside it +% with the corresponding values. +% +% \begin{macrocode} + nmeta placeholders = {% + title = {% + A groundbreaking dissertation% + },% + author = {% + Jane Doe% + },% + pronouns = {She/her},% + subtitle = {% + A milestone study on a longstanding question + in a discipline% + },% + shorttitle = {A Milestone study},% + stream = {intriguing stream},% + discipline = {rigorous discipline}, + degree = {enriching degree},% + supervisor = {A kind supervisor},% + university = {An ideal university},% + department = {A homely department},% + license = {CC-BY-SA},% + copyright-yrs = {2022, 2023, 2024}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{^^A +% lot,lof,declaration,declarationtxt,decllocal^^A +% } +% The list of tables and figures are conditionals +% developed with the |bool| \emph{type} of \expkvlogo{} +% which creates (or uses, if already present) a boolean. +% It is by default set to the false value. The declaration +% also is a |bool|ean as it is turned off by default. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + bool lot = {\ifudiss@lot},% + bool lof = {\ifudiss@lof},% + bool declaration = {\ifudiss@declaration},% +% \end{macrocode} +% +% The |declarationtxt| \emph{key} contains text which has +% paragraphs inside it and the default \emph{key-value}s +% of \expkvlogo{} are |\def| type (meaning, they don't +% accept |\par| tokens). So in order to have the effect of +% |\long\def|, we need to use |long| \emph{prefix} of +% \expkvlogo{}. We set an initial value for this too. Then +% we store the value for the local word for declaration. +% +% \begin{macrocode} + long + store declarationtxt = {\udiss@declaration},% + initial declarationtxt = {% + \noindent As required by the university regulations, I + wish to state that the work embodied in this thesis + titled \enquote{\udiss@title: \udiss@subtitle} forms + my own contribution to the research work carried out + under the guidance of \udiss@supervisor\ at the + \udiss@university, \udiss@department. + + This work has not been submitted for any other degree + of this or any other university. Whenever references + have been made to previous works of others, it has + been clearly indicated as such and included in the + bibliography. + + \bigskip + \flushright{% + Date: \today + + \vspace{4em}% + + Name: \udiss@author + }% + + \bigskip\bigskip + \flushleft{% + Certified by:% + + \vspace{4em}% + + \udiss@supervisor + }% + },% + store decllocal = {\udiss@decllocal},% + initial decllocal = {Declaration}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{^^A +% print,norefcolors,udisslinkclr,^^A +% udissurlclr,udissciteclr^^A +% } +% The |print| key is created using the |bool| \emph{type}. +% The |norefcolors| option, on the other hand, uses the +% |invbool| \emph{type}. For |udisslinkclr|, |udissurlclr| +% and |udissciteclr| we use the |store| \emph{type} along +% with some |initial| values. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + bool print = {\ifudiss@print},% + invbool norefcolors = {\ifudiss@colors},% + store udisslinkclr = {\udiss@int@link@color},% + initial udisslinkclr = {udisslink},% + store udissurlclr = {\udiss@int@url@color},% + initial udissurlclr = {udissurl},% + store udissciteclr = {\udiss@int@cite@color},% + initial udissciteclr = {udisscite}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{blind} +% The next boolean is for printing blind documents. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + bool blind = {\ifudiss@blind}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{framed-title} +% We provide a conditional for producing a framed +% title-page. The conditional will be used later while +% typesetting. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + bool framed-title = {\ifudiss@ftitle}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{oldone,oldstylenumoff} +% We set the old style numerals as the default for +% typesetting. We provide an inverse boolean for setting +% the old style numbers off. The special shape for number +% one is enabled only with the boolean key |oldone|. We +% develop it here. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + invbool oldstylenumoff = {\ifudiss@oldstylenum},% + bool oldone = {\ifudiss@oldone}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{explicitext,ignorefsoff} +% To turn on the explicit extension mechanism of the +% font-loading packages, we provide a conditional. It is +% disabled by default and hence is of the |bool| type. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + bool explicitext = {\ifudiss@explicitext},% + invbool ignorefsoff = {\ifudiss@ignorefontspec}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{fulfilment} +% In order to store the sentence written on the +% title-page, we again use the common |store| and +% |initial store| pair. +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + store fulfilment = {\udiss@fulfilment},% + initial fulfilment = {% + A dissertation submitted in the partial fulfilment of + the requirements for the \udiss@degree\ program in + \udiss@discipline.% + }% +} +% \end{macrocode} +% \end{macro} +% +% All of the upcoming \emph{key}s are font-selection keys. +% We set their defaults as explained in \cref{udissenfonts}. +% +% \begin{macro}{^^A +% rmfont,rmbffont,rmitfont,rmbfitfont,^^A +% rmslfont,rmbfslfont^^A +% } +% The following sets the default text font for the +% document. We are using NewCM family as the default +% font-family. But as of now, the NewCM fonts don't have +% all the variants. E.g., it lacks slanted/oblique shapes +% in the natural weight, but we provide the regular ones +% in place of them. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + store rmfont = {\udiss@rmfont},% + initial rmfont = {NewCM10-Book.otf},% + store rmbffont = {\udiss@rmbffont},% + initial rmbffont = {NewCM10-Bold.otf},% + store rmitfont = {\udiss@rmitfont},% + initial rmitfont = {NewCM10-BookItalic.otf},% + store rmbfitfont = {\udiss@rmbfitfont},% + initial rmbfitfont = {NewCM10-BoldItalic.otf},% + store rmslfont = {\udiss@rmslfont},% + initial rmslfont = {NewCM10-Book.otf},% + store rmbfslfont = {\udiss@rmbfslfont},% + initial rmbfslfont = {NewCM10-Bold.otf},% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{^^A +% sffont,sfbffont,sfitfont,sfbfitfont,^^A +% sfslfont,sfbfslfont^^A +% } +% +% Similarly, we store values for the sans fonts too. NewCM +% lacks certain variants in sans, but again, the options +% are set font-agnostically and hence they are more in +% number than the actually available variants. The sans +% fonts in NewCM, don't have an Italic design. We have +% used the oblique version of the fonts there instead. +% Note that the same designs are used for the slanted +% fonts too. +% +% \begin{macrocode} + store sffont = {\udiss@sffont},% + initial sffont = {NewCMSans10-Book.otf},% + store sfbffont = {\udiss@sfbffont},% + initial sfbffont = {NewCMSans10-Bold.otf},% + store sfitfont = {\udiss@sfitfont}, + initial sfitfont = {NewCMSans10-BookOblique.otf},% + store sfbfitfont = {\udiss@sfbfitfont},% + initial sfbfitfont = {NewCMSans10-BoldOblique.otf},% + store sfslfont = {\udiss@sfslfont},% + initial sfslfont = {NewCMSans10-BookOblique.otf},% + store sfbfslfont = {\udiss@sfbfslfont},% + initial sfbfslfont = {NewCMSans10-BoldOblique.otf},% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{^^A +% ttfont,ttbffont,ttitfont,ttbfitfont,^^A +% ttslfont,ttbfslfont^^A +% } +% The settings for typewriter fonts are loaded in the below +% code. We have a strange situation here. NewCM provides +% |BookItalic|, but doesn't have a |BoldItalic|. We instead +% have |BoldOblique|. Thus we set the |BookItalic| as the +% |ttitfont| and |BoldOblique| as the |ttbfit| font. The +% same pair for |ttslfont| and |ttbfslfont|. +% +% \begin{macrocode} + store ttfont = {\udiss@ttfont},% + initial ttfont = {NewCMMono10-Book.otf},% + store ttbffont = {\udiss@ttbffont}, + initial ttbffont = {NewCMMono10-Bold.otf},% + store ttitfont = {\udiss@ttitfont},% + initial ttitfont = {NewCMMono10-BookItalic.otf},% + store ttbfitfont = {\udiss@ttbfitfont},% + initial ttbfitfont = {NewCMMono10-BoldOblique.otf},% + store ttslfont = {\udiss@ttslfont},% + initial ttslfont = {NewCM10-Book.otf},% + store ttbfslfont = {\udiss@ttbfslfont},% + initial ttbfslfont = {NewCMMono10-BoldOblique.otf},% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{mathfont,mathbffont} +% Maths fonts have very little variation, so we just have +% two parameters for selecting the fonts and two of the +% usual parameters for features and extensions. +% +% \begin{macrocode} + store mathfont = {\udiss@mathfont},% + initial mathfont = {NewCMMath-Book.otf},% + store mathbffont = {\udiss@mathbffont},% + initial mathbffont = {NewCMMath-Bold.otf},% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{^^A +% rmfeatures,rmfntext,sffeatures,sffntext,^^A +% ttfeatures,ttfntext,mathfeatures,mathfntext^^A +% } +% If the user wants to add features to the selected fonts, +% they are allowed to use these commands and if they use +% the |explicitext| option, they can choose the font +% extensions too using the \emph{key}s specifically +% developed for that. We use |store| and |choice| +% \emph{type}s for this. +% +% \begin{macrocode} + store rmfeatures = {\udiss@rmfeatures},% + choice rmfntext = {% + ttf = {% + \ifudiss@explicitext + \def\udiss@rmfntext{ttf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `rmfntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + FreeSerif, you may choose one of the + following two methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + rmfont = {FreeSerif.ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + rmfont = {FreeSerif},\@percentchar + \MessageBreak + \space\space\space\space\space + rmfntext = {ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------8<----% + }% + \fi + },% + otf = {% + \ifudiss@explicitext + \def\udiss@rmfntext{otf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `rmfntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + KpRoman-Regular.otf, you may choose one of + the following two\MessageBreak + methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + rmfont = {KpRoman-Regular.otf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + rmfont = {KpRoman-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + rmfntext = {otf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------------8<----% + }% + \fi + }% + },% + store sffeatures = {\udiss@sffeatures},% + choice sffntext = {% + ttf = {% + \ifudiss@explicitext + \def\udiss@sffntext{ttf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `sffntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + FreeSans, you may choose one of the + following two methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + sffont = {FreeSans.ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + sffont = {FreeSans},\@percentchar + \MessageBreak + \space\space\space\space\space + sffntext = {ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------8<----% + }% + \fi + },% + otf = {% + \ifudiss@explicitext + \def\udiss@sffntext{otf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `sffntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + KpSans-Regular.otf, you may choose one of + the following two\MessageBreak + methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + sffont = {KpSans-Regular.otf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + sffont = {KpSans-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + sffntext = {otf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------------8<----% + }% + \fi + }% + },% + store ttfeatures = {\udiss@ttfeatures},% + choice ttfntext = {% + ttf = {% + \ifudiss@explicitext + \def\udiss@ttfntext{ttf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `ttfntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + FreeMono, you may choose one of the + following two methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + ttfont = {FreeMono.ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + ttfont = {FreeMono},\@percentchar + \MessageBreak + \space\space\space\space\space + ttfntext = {ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------8<----% + }% + \fi + },% + otf = {% + \ifudiss@explicitext + \def\udiss@ttfntext{otf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `ttfntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + KpMono-Regular.otf, you may choose one of + the following two\MessageBreak + methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + ttfont = {KpMono-Regular.otf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + ttfont = {KpMono-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + ttfntext = {otf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------------8<----% + }% + \fi + }% + },% + store mathfeatures = {\udiss@mathfeatures},% + choice mathfntext = {% + ttf = {% + \ifudiss@explicitext + \def\udiss@mathfntext{ttf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `mathfntext' + to add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + NotoSansMath-Regular, you may choose one + of the following two\MessageBreak + methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<----------------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + mathfont = {NotoSansMath-Regular.ttf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<----------------------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<-------------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + mathfont = {NotoSansMath-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + mathfntext = {ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<-------------------------8<----% + }% + \fi + },% + otf = {% + \ifudiss@explicitext + \def\udiss@mathfntext{otf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `mathfntext' + to add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + XITSMath-Regular, you may choose one of + the following two\MessageBreak methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<----------------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + mathfont = {XITSMath-Regular.otf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<----------------------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<-------------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + mathfont = {XITSMath-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + mathfntext = {otf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<-------------------------8<----% + }% + \fi + }% + },% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{^^A +% titleshape,titlefont,titleffeat,titlesize,titlecolor^^A +% } +% We store various variables in these keys for customising +% the layout of the title-page. The following are the keys +% specifically developed for customising the title. The +% sizing is done with internal macros specifically +% designed for consistent size-changing. We use +% \pkg{fontspec}-scaling for that. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + store titleshape = {\udiss@title@shape},% + initial titleshape = {\bfseries},% + store titlefont = {\udiss@title@font},% + store titlesize = {\udiss@title@size},% + initial titlesize = {\udiss@int@huge},% + store titlecolor = {\udiss@title@color},% + initial titlecolor = {black},% + store titleffeat = {\udiss@title@fontfeats},% + initial titleffeat = {}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{^^A +% subtitleshape,subtitlefont,subtitleffeat,^^A +% subtitlesize,subtitlecolor^^A +% } +% The same logic is applied for subtitles and these +% variables are created. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + store subtitleshape = {\udiss@subtitle@shape},% + initial subtitleshape = {\normalfont},% + store subtitlefont = {\udiss@subtitle@font},% + store subtitlesize = {\udiss@subtitle@size},% + initial subtitlesize = {\udiss@int@large},% + store subtitlecolor = {\udiss@subtitle@color},% + initial subtitlecolor = {black},% + store subtitleffeat = {\udiss@subtitle@fontfeats},% + initial subtitleffeat = {}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{^^A +% authorshape,authorfont,authorsize,authorcolor,^^A +% authorffeat^^A +% } +% Similarly, we have the following keys for author. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + store authorshape = {\udiss@author@shape},% + initial authorshape = {\normalfont},% + store authorfont = {\udiss@author@font},% + store authorsize = {\udiss@author@size},% + initial authorsize = {\udiss@int@large},% + store authorcolor = {\udiss@author@color},% + initial authorcolor = {black},% + store authorffeat = {\udiss@author@fontfeats},% + initial authorffeat = {}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{^^A +% unishape,unifont,unisize,unicolor,uniffeat^^A +% } +% The same pattern for printing the university name. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + store unishape = {\udiss@uni@shape},% + initial unishape = {\itshape},% + store unifont = {\udiss@uni@font},% + store unisize = {\udiss@uni@size},% + initial unisize = {\normalsize},% + store unicolor = {\udiss@uni@color},% + initial unicolor = {black},% + store uniffeat = {\udiss@uni@fontfeats}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{^^A +% deptshape,deptfont,deptsize,deptcolor,deptffeat^^A +% } +% The following keys for the department. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + store deptshape = {\udiss@dept@shape},% + initial deptshape = {\normalfont},% + store deptfont = {\udiss@dept@font},% + store deptsize = {\udiss@dept@size},% + initial deptsize = {\udiss@int@small},% + store deptcolor = {\udiss@dept@color},% + initial deptcolor = {black},% + store deptffeat = {\udiss@dept@fontfeats},% + initial deptffeat = {}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{^^A +% ffshape,fffont,ffsize,ffcolor,ffffeat^^A +% } +% These are for the fulfilment-text. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + store ffshape = {\udiss@fulfilment@shape},% + initial ffshape = {\normalfont},% + store fffont = {\udiss@fulfilment@font},% + store ffsize = {\udiss@fulfilment@size},% + initial ffsize = {\udiss@int@small},% + store ffcolor = {\udiss@fulfilment@color},% + initial ffcolor = {black},% + store fffeat = {\udiss@fulfilment@fontfeats},% + initial fffeat = {}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{^^A +% logowidth,logoheight^^A +% } +% The following parameters save the values for the +% logo-height and the logo-width. These are the last +% options after which we |\Process| our options. +% +% \begin{macrocode} +\ekvdefinekeys{udiss}{% + store logowidth = {\udiss@logo@width},% + initial logowidth = {0.3},% + store logoheight = {\udiss@logo@hght},% + initial logoheight = {0.075}% +} +\ekvoProcessGlobalOptions{udiss} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dissertationstyle} +% We develop the command for loading custom styles. It +% just inputs files starting with |udiss-style-| followed +% by the designated tag, e.g., |ukerala| for the +% university of Kerala. +% +% \begin{macrocode} +\NewDocumentCommand{ \dissertationstyle }{ m }{% + \AddToHook{begindocument/before}{% + \input{udiss-style-#1}% + }% +} +% \end{macrocode} +% \end{macro} +% +% To minimise loading a lot of packages, we use the +% \cls{memoir} class which provides many features useful for +% document-creation. But we also need to set print and +% digital versions of the dissertations. For that we use our +% conditional. +% +% \begin{macrocode} +\ifudiss@print +\else + \PassOptionsToClass{oneside}{memoir}% +\fi +\LoadClass{memoir} +% \end{macrocode} +% +% \begin{macro}{\title,\author} +% We defined most other commands as per the flow of the +% documentation, but as mentioned before, we had kept +% |\title| and |\author| aside. As mentioned before, we +% did so because these commands are defined by the +% \cls{memoir} class. If we had defined it before loading +% the memoir class (which we just loaded), the commands +% would have got renewed after loading the class and thus +% our internal macros would have failed. On the other +% hand, we could not have loaded the memoir class in the +% beginning, because we use the |\ifudiss@print| +% conditional, i.e., developed with the help of +% \expkvlogo{def} package. Even if we had separated the +% code of |print| key, it would have been necessary to +% process the keys using |\ekvoProcessGlobalOptions|, but +% we could not have done that since there were a lot of +% other options pending. This is why, we develop the +% |\title| and |\author| commands now. +% +% \begin{macrocode} +\RenewDocumentCommand{ \title }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@title@err + \def\udiss@title{-NoValidTitle-}% + }{% + \def\udiss@title{#1}% + }% +} +\RenewDocumentCommand{ \author }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@author@err + \def\udiss@author{-NoValidAuthor-}% + }{% + \def\udiss@author{#1}% + }% +} +% \end{macrocode} +% \end{macro} +% +% We are using OpenType fonts for better accessibility. They +% are incompatible with the classic PDF\LaTeX\ and require +% either Lua\LaTeX\ or \hologo{XeLaTeX} for compilation. To +% ensure that one of these two is loaded, we load the +% \pkg{iftex} package and mandate a Unicode engine with the +% |\RequireTUTeX| command. +% +% \begin{macrocode} +\RequirePackage{iftex} +\RequireTUTeX +% \end{macrocode} +% +% We used custom \cls{udiss} size commands. They are +% developed with \pkg{fontspec}-scaling as follows: +% +% \begin{macrocode} +\def\udiss@int@HUGE{% + \addfontfeature{Scale={2.5}}% +} +\def\udiss@int@Huge{% + \addfontfeature{Scale={2}}% +} +\def\udiss@int@huge{% + \addfontfeature{Scale={1.7}}% +} +\def\udiss@int@LARGE{% + \addfontfeature{Scale={1.4}}% +} +\def\udiss@int@Large{% + \addfontfeature{Scale={1.2}}% +} +\def\udiss@int@large{% + \addfontfeature{Scale={1.1}}% +} +\def\udiss@int@small{% + \addfontfeature{Scale={0.9}}% +} +\def\udiss@int@footnotesize{% + \addfontfeature{Scale={0.8}}% +} +\def\udiss@int@scriptsize{% + \addfontfeature{Scale={0.7}}% +} +\def\udiss@int@tiny{% + \addfontfeature{Scale={0.6}}% +} +\def\udiss@int@miniscule{% + \addfontfeature{Scale={0.5}}% +} +% \end{macrocode} +% +% We require the \pkg{babel} package for loading the +% language settings. We have the following three situations +% with loading languages in \cls{udiss}: +% +% \begin{enumerate} +% \item Users don't load any of the language options at all. +% \item Users load languages with option |ldfbabel|. +% \item Users load languages with option |language|. +% \end{enumerate} +% +% If a user has used |ldfbabel|, then the macro which stores +% the language-list is directly passed to the package using +% |\PassOptionsToPackage|. +% +% \begin{macrocode} +\ifudiss@lg@used + \ifudiss@ldfbabel + \PassOptionsToPackage{% + \udiss@ldfbabel@list + }{babel}% + \fi +% \end{macrocode} +% +% If user hasn't loaded any language options, we assume that +% they have no intent to load languages that require |.ldf| +% files and hence we mandate loading |.ini| files for all +% the languages. In addition to that, we load |english| as +% the main language. This takes care of the first two +% situations. +% +% \begin{macrocode} +\else + \PassOptionsToPackage{english,provide*=*}{babel}% +\fi +\RequirePackage{babel} +% \end{macrocode} +% +% We also load package \pkg{iflang} for testing +% language-names. +% +% \begin{macrocode} +\RequirePackage{iflang} +% \end{macrocode} +% +% First we check if the user has loaded |ldf| languages. We +% ignore that branch completely. If it is not loaded and +% they have loaded exactly one language, then we set that +% language as the main language. Note that when user uses +% one language, the value of the counter is 2 as it is +% increased by the counter each time. +% +% \begin{macrocode} +\newcounter{udiss@tmp@langcnt} +\ifudiss@ldfbabel +\else + \ifudiss@lg@used + \ifnum\theudiss@langbabel=2\relax + \addtocounter{udiss@langbabel}{-1}% + \ifLuaTeX + \babelprovide[% + main,% + import,% + onchar ={ids fonts}% + ]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \else + \babelprovide[main,import]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \fi + \fi +% \end{macrocode}% +% +% When users use multiple languages, the situation is a bit +% more complicated. Because the parser parses and increases +% the counter each time. Suppose, the user provided 5 +% languages, the parser will create 5 macros \emph{and} +% increase the counter for one last time resulting in the +% value 6. In order to stop processing when the number of +% actually used languages is reached, we need to store the +% current number \emph{minus one} because of this. We have +% to start a loop from value 1 till it reaches the last +% value. For this, we reset the counter. In order % to stop +% when all the languages are parsed, we need to remember the +% actual value of the counter somewhere. Hence we create a +% temporary counter for this and equate it with the value of +% our actual counter minus 1. Note that we escape +% |\ifudiss@ldfbabel| too. Now we start the calculation when +% the counter's value is 3 or more, basically the author has +% to use at least two languages in order to activate the +% loop ahead. +% +% \begin{macrocode} + \ifnum\theudiss@langbabel>2\relax + \setcounter{udiss@tmp@langcnt}{% + \numexpr\theudiss@langbabel -1\relax + }% +% \end{macrocode} +% +% We now can safely manipulate our actual counter. Starting +% from the first language, we load all of them with the +% |\babelprovide| command. We reset the counter to 1: +% +% \begin{macrocode} + \setcounter{udiss@langbabel}{1}% +% \end{macrocode} +% +% Now we start a loop. +% +% \begin{macrocode} + \loop +% \end{macrocode} +% +% Only Lua\LaTeX\ supports the |ids fonts| parameter with +% |\babelprovide| for applying fonts to the input text with +% respect to their Unicode slots. That is why we start the +% |\ifLuaTeX| conditional and load the |onchar| option. +% Loading a conditional inside |\babelprovide| wasn't +% permitted because of expansion, hence we load the entire +% command in the else branch. Notice that there is no space +% after the |=| sign of the |onchar| option. To know why, +% you may want to read this wonderful answer by Jonathan P. +% Spratte: \url{https://topanswers.xyz/tex?q=8039#a7652}. +% +% \begin{macrocode} + \ifLuaTeX + \babelprovide[% + import,% + onchar ={ids fonts}% + ]{% +% \end{macrocode} +% +% Now we pass |\udiss@langbabel@a| as an argument to +% |\babelprovide| command (the value of the counter is as of +% now 1). +% +% \begin{macrocode} + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% +% \end{macrocode} +% +% We start the |\else| branch and use the same thing again, +% just without the |onchar| option . +% +% \begin{macrocode} + \else + \babelprovide[import]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \fi +% \end{macrocode} +% +% Woohoo! We loaded the first language successfully. Now, we +% increment the counter, but there is another situation +% which we have to take into account. What if the user just +% loaded a single language with the |language| option? The +% loop will run into trouble, that's why we only run the +% loop if the value of the total number of languages is more +% than one. We had saved it in a temporary counter. +% +% \begin{macrocode} + \ifnum\theudiss@tmp@langcnt=1\relax + \else + \addtocounter{udiss@langbabel}{1}% + \fi +% \end{macrocode} +% +% Now the value of the counter is 2 which means the second +% language. We need to again load the same settings for it, +% but we can't keep doing this manually since 1) we are lazy +% (the most important) 2) we have no idea how many languages +% the user has loaded, so now we actually activate the +% |\loop| that we had started with the |\repeat| command. It +% runs all the commands seen after the |\loop| command (this +% includes the one used for increasing the counter too) till +% the value of the counter is less than the value of +% |udiss@tmp@langcnt|. Remember we had already set it to the +% value of the original counter (before setting it to 1) +% \emph{minus one}. Now the next command will stop at one +% number even lesser than it as we have used the |<| +% relation while comparing. Also, here we will close the +% if-conditional that checked if more than one languages +% were used or not. +% +% \begin{macrocode} + \ifnum\theudiss@langbabel<\theudiss@tmp@langcnt + \relax + \repeat + \fi +% \end{macrocode} +% +% Are you wondering why we did this? Because we want to set +% the \emph{exact} last language as the |main| language! The +% current value of our counter at this point has that +% language. But remember we are out of the loop as well as +% the if-conditional. Thus we have to again consider the +% situation where user just passed one language. So far what +% we have done is load all the languages except the last one +% with |\babelprovide|. This includes the single-language +% case. Thus we need no further processing in that case. So +% we only parse the last pending language if the user had +% passed multiple languages. We start an if-conditional and +% keep its |if|-branch empty and write the rest in the +% |else|-branch. +% +% \begin{macrocode} + \ifnum\theudiss@langbabel=1\relax +% \end{macrocode} +% +% We again use |\babelprovide|, but this time with |main| +% option. Load the last language successfully. +% +% \begin{macrocode} + \else + \ifLuaTeX + \babelprovide[% + main,% + import,% + onchar ={ids fonts}% + ]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \else + \babelprovide[main,import]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \fi + \fi +% \end{macrocode} +% +% Now it's the time to load language support files. We need +% to load all the language support files and here we don't +% have the constraint to treat the last language specially. +% Therefore we add 1 to the temporary counter (the one that +% was decreased before). +% +% \begin{macrocode} + \setcounter{udiss@tmp@langcnt}{% + \numexpr\theudiss@langbabel + 1\relax + }% +% \end{macrocode} +% +% We again start from the first language. If the support +% file exists for that language, we |\input| it. +% +% \begin{macrocode} + \setcounter{udiss@langbabel}{1}% + \loop + \IfFileExists{% + udiss-fonts-\csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }{% + \input{% + udiss-fonts-\csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% +% \end{macrocode} +% +% Otherwise, we check if the warning option is true. By +% default it is always true, but if the user has used +% |nofontwarning| option to turn them off, this conditional +% should do its job. +% +% \begin{macrocode} + }{% + \ifudiss@font@warning + \ClassWarningNoLine{udiss}{% + We don't support \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname\space yet.% + \MessageBreak + It requires a font-setup. You may add the fonts + directly\MessageBreak to your preamble using:% + \MessageBreak\MessageBreak + \space\space\string\babelfont[% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + ]{rm}{main font}% + \MessageBreak + \space\space\string\babelfont[% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + ]{sf}{sans font}% + \MessageBreak + \space\space\string\babelfont[% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + ]{tt}{mono font}% + \MessageBreak\MessageBreak + Read more about this in the documentation of + `udiss' in a\MessageBreak section called + `multilingual typesetting'. Consider% + \MessageBreak contacting us with a support + request and let us know some\MessageBreak + suitable free (libre) fonts for this + language. If you\MessageBreak don't wish to see + this warning again, use the option% + \MessageBreak `nofontwarning' to suppress it% + }% + \fi + }% +% \end{macrocode} +% +% Like before, we increment the counter and start the loop +% till this is repeated for all the languages. +% +% \begin{macrocode} + \addtocounter{udiss@langbabel}{1}% + \ifnum\theudiss@langbabel<\theudiss@tmp@langcnt\relax + \repeat + \fi +\fi +% \end{macrocode} +% +% After all this processing, we load the Roman, +% \texttt{Typewriter} and \textsf{Sans} fonts stored in the +% variables set by \emph{key}s. +% +% \begin{macrocode} +\babelfont{rm}[% + \ifudiss@ignorefontspec + IgnoreFontspecFile,% + \fi + \ifudiss@explicitext + Extension = {.\udiss@rmfntext},% + \fi + BoldFont = {\udiss@rmbffont},% + ItalicFont = {\udiss@rmitfont},% + BoldItalicFont = {\udiss@rmbfitfont},% + SlantedFont = {\udiss@rmslfont},% + BoldSlantedFont = {\udiss@rmbfslfont},% + \ifudiss@oldstylenum + Numbers = {OldStyle},% + \ifudiss@oldone + CharacterVariant = {6},% + \fi + \fi + \ifLuaTeX + Renderer = {HarfBuzz},% + \fi + \udiss@rmfeatures +]{\udiss@rmfont} +\babelfont{sf}[% + \ifudiss@ignorefontspec + IgnoreFontspecFile,% + \fi + \ifudiss@explicitext + Extension = {.\udiss@sffntext},% + \fi + BoldFont = {\udiss@sfbffont},% + ItalicFont = {\udiss@sfitfont},% + BoldItalicFont = {\udiss@sfbfitfont},% + SlantedFont = {\udiss@sfslfont},% + BoldSlantedFont = {\udiss@sfbfslfont},% + \ifudiss@oldstylenum + Numbers = {OldStyle},% + \ifudiss@oldone + CharacterVariant = {6},% + \fi + \fi + \ifLuaTeX + Renderer = {HarfBuzz},% + \fi + \udiss@sffeatures +]{\udiss@sffont} +\babelfont{tt}[% + \ifudiss@ignorefontspec + IgnoreFontspecFile,% + \fi + \ifudiss@explicitext + Extension = {.\udiss@ttfntext},% + \fi + BoldFont = {\udiss@ttbffont},% + ItalicFont = {\udiss@ttitfont},% + BoldItalicFont = {\udiss@ttbfitfont},% + SlantedFont = {\udiss@ttslfont},% + BoldSlantedFont = {\udiss@ttbfslfont},% + \ifLuaTeX + Renderer = {HarfBuzz},% + \fi + \udiss@ttfeatures +]{\udiss@ttfont} +% \end{macrocode} +% +% We load the \pkg{unicode-math} here for loading the math +% fonts. After that, inside |\expanded|, we load the +% |\setmathfont| command. +% +% \begin{macrocode} +\RequirePackage{unicode-math} +\expanded{% + \setmathfont[% + \ifudiss@ignorefontspec% + IgnoreFontspecFile,% + \fi% + \ifudiss@explicitext + Extension = {.\udiss@mathfntext},% + \fi + BoldFont = {\udiss@mathbffont},% + SlantedFont = {\udiss@mathfont},% + BoldSlantedFont = {\udiss@mathbffont},% + \udiss@mathfeatures% + ]{\udiss@mathfont}% +} +% \end{macrocode} +% +% Now we load a few last packages. +% +% \begin{macrocode} +\RequirePackage{graphicx} +\RequirePackage{xcolor} +\RequirePackage{csquotes} +% \end{macrocode} +% +% For Creative Commons license, we use the \pkg{doclicense} +% package with appropriate settings. +% +% \begin{macrocode} +\ifudiss@ccbysa + \RequirePackage[% + hyperxmp = {false},% + type = {CC},% + modifier = {by-sa},% + version = {4.0}% + ]{doclicense} +\fi +% \end{macrocode} +% +% We set the \cls{udiss}-specific-colours with the following +% commands, but we set them conditionally. If the colours +% are disabled, we set the same colours to |black| value. +% \begin{macrocode} +\ifudiss@colors + \colorlet{udisslink}{red!60!black} + \colorlet{udissurl}{blue!60!black} + \colorlet{udisscite}{green!60!black} +\else + \colorlet{udisslink}{black} + \colorlet{udissurl}{black} + \colorlet{udisscite}{black} +\fi +% \end{macrocode} +% +% We start the hook |begindocument/before| and check if +% author did not provide any of the \emph{strict} fields +% and if they have done so, we generate errors. +% +% \begin{macrocode} +\AddToHook{begindocument/before}{% + \ifdefined\udiss@title + \else + \def\udiss@title{\textbf{-NoValidTitle-}}% + \ClassError{udiss}{% + Title not given% + }{% + `title' is a compulsory field. Provide it in the + preamble like in the following:% + \MessageBreak + \MessageBreak + ----8<-----------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\title{title-of-the-dissertation}% + \MessageBreak\MessageBreak + ----8<-----------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@author + \else + \def\udiss@author{\textbf{-NoValidAuthor-}}% + \ClassError{udiss}{% + No author given in a normal (non-blind) document% + }{% + Do you want a blind document? If yes, then use the + package option `blind' like\MessageBreak in the + following:% + \MessageBreak + ----8<------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\documentclass[blind]{udiss}% + \MessageBreak\MessageBreak + ----8<------------------8<----% + \MessageBreak + Otherwise, `author' is a compulsory field. Provide it + in the preamble like in\MessageBreak the following:% + \MessageBreak + ----8<-------------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\author{author-name}% + \MessageBreak\MessageBreak + ----8<-------------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@stream + \else + \def\udiss@stream{\textbf{-NoValidStream-}}% + \ClassError{udiss}{% + Stream not given% + }{% + `stream' is a compulsory field. Provide it in the + preamble like in the following:% + \MessageBreak + \MessageBreak + ----8<-----------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\stream{stream-of-the-candidate}% + \MessageBreak\MessageBreak + ----8<-----------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@discipline + \else + \def\udiss@discipline{\textbf{-NoValidDiscipline-}}% + \ClassError{udiss}{% + Discipline not given% + }{% + `discipline' is a compulsory field. Provide it in the + preamble like in the following:% + \MessageBreak + \MessageBreak + ----8<-----------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\discipline% + {discipline-of-the-candidate}% + \MessageBreak\MessageBreak + ----8<-----------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@degree + \else + \def\udiss@degree{\textbf{-NoValidDegree-}}% + \ClassError{udiss}{% + Degree not given% + }{% + `degree' is a compulsory field. Provide it in the + preamble like in the following:% + \MessageBreak + \MessageBreak + ----8<-----------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\degree{degree-of-the-candidate}% + \MessageBreak\MessageBreak + ----8<-----------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@supervisor + \else + \def\udiss@title{\textbf{-NoValidTitle-}}% + \ClassError{udiss}{% + No supervisor given in a normal (non-blind) document% + }{% + Do you want a blind document? If yes, then use the + package option `blind' like\MessageBreak in the + following:% + \MessageBreak + ----8<------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\documentclass[blind]{udiss}% + \MessageBreak\MessageBreak + ----8<------------------8<----% + \MessageBreak + Otherwise, `supervisor' is a compulsory field. Provide + it in the preamble like\MessageBreak in the + following:% + \MessageBreak + ----8<-------------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\supervisor{supervisor's-name}% + \MessageBreak\MessageBreak + ----8<-------------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@university + \else + \def\udiss@university{\textbf{-NoValidUniversity-}}% + \ClassError{udiss}{% + No university given in a normal (non-blind) document% + }{% + Do you want a blind document? If yes, then use the + package option `blind' like\MessageBreak in the + following:% + \MessageBreak + ----8<------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\documentclass[blind]{udiss}% + \MessageBreak\MessageBreak + ----8<------------------8<----% + \MessageBreak + Otherwise, `university' is a compulsory field. Provide + it in the preamble like\MessageBreak in the + following:% + \MessageBreak + ----8<-------------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\university{university-name}% + \MessageBreak\MessageBreak + ----8<-------------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@department + \else + \def\udiss@department{\textbf{-NoValidDepartment-}}% + \ClassError{udiss}{% + No department given in a normal (non-blind) document% + }{% + Do you want a blind document? If yes, then use the + package option `blind' like\MessageBreak in the + following:% + \MessageBreak + ----8<------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\documentclass[blind]{udiss}% + \MessageBreak\MessageBreak + ----8<------------------8<----% + \MessageBreak + Otherwise, `department'\space is a compulsory field. + Provide it in the preamble like in\MessageBreak the + following:% + \MessageBreak + ----8<-------------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\department{department-name}% + \MessageBreak\MessageBreak + ----8<-------------------------8<----% + \MessageBreak + }% + \fi +% \end{macrocode} +% +% For printing, \pkg{hyperref} and \pkg{hyperxmp} are +% irrelevant, so we load them only when the documents are +% digital. +% +% \begin{macrocode} + \ifudiss@print + \else + \RequirePackage{hyperref}% + \RequirePackage{hyperxmp}% +% \end{macrocode} +% +% We set the metadata here using |\hypersetup| command. +% +% \begin{macrocode} + \hypersetup{% + unicode,% + colorlinks,% + pdftitle = {\udiss@title}% + }% + \ifudiss@subtitle + \hypersetup{% + pdfsubject = {\udiss@subtitle}% + }% + \fi +% \end{macrocode} +% +% We don't set author's name if the user has used the +% |blind| option as it defeats the whole purpose. If it is +% not used, we set the copyright information and the +% license-url. All-rights-reserved doesn't have a specific +% license-url, so it is used only if the user uses a free +% culture license. +% +% \begin{macrocode} + \ifudiss@blind + \else + \hypersetup{% + pdfauthor = {\udiss@author},% + pdfcopyright = {% + \udiss@title\textLF + \udiss@local@copyright\ + © + \udiss@copyrightable@years\ + \udiss@author\textLF + \udiss@license@notice + },% + }% + \ifudiss@free@culture + \hypersetup{% + pdflicenseurl = {% + \udiss@free@license@url + }% + }% + \fi + \fi +% \end{macrocode} +% +% If the color option is not disabled, we load the color +% variables with |\hypersetup|. +% +% \begin{macrocode} + \ifudiss@colors + \hypersetup{% + linkcolor = {\udiss@int@link@color},% + urlcolor = {\udiss@int@url@color},% + citecolor = {\udiss@int@cite@color}% + }% +% \end{macrocode} +% +% Otherwise, we use the |hidelinks| option of \pkg{hyperref} +% which creates links, but without colors. +% +% \begin{macrocode} + \else + \hypersetup{% + hidelinks% + }% + \fi + \fi +} +% \end{macrocode} +% +% Now, after setting everything, we typeset the front matter +% including title-page, table of contents, optionally list +% of figures/tables and declaration with the following code. +% +% \begin{macrocode} +\AddToHook{begindocument/end}{% + \begingroup + \thispagestyle{titlingpage}% + \ifudiss@ftitle + \setlength{\fboxsep}{25pt}% + \noindent\fbox{% + \begin{minipage}% + [c][\dimexpr\textheight-2\fboxsep-2\fboxrule]% + [c]{\dimexpr\linewidth-2\fboxsep-2\fboxrule}% + \fi + \hspace{0pt}% + \vspace{3em}% + \begin{center} + \begingroup + \udiss@title@shape + \ifx\udiss@title@font\empty + \else + \fontspec[\udiss@title@fontfeats]% + {\udiss@title@font}% + \fi + \udiss@title@size + \color{\udiss@title@color}% + \udiss@title + \endgroup + + \medskip + + \ifudiss@subtitle + \begingroup + \udiss@subtitle@shape + \ifx\udiss@subtitle@font\empty + \else + \fontspec[\udiss@subtitle@fontfeats]% + {\udiss@subtitle@font}% + \fi + \udiss@subtitle@size + \color{\udiss@subtitle@color}% + \udiss@subtitle + \endgroup + \fi + + \vfill + + \ifudiss@blind + \else + \begingroup + \udiss@author@shape + \ifx\udiss@author@font\empty + \else + \fontspec[\udiss@author@fontfeats]% + {\udiss@author@font}% + \fi + \udiss@author@size + \color{\udiss@author@color}% + \udiss@author + \ifudiss@pronouns + \begingroup + \space + \addfontfeature{Scale={0.6}}% + \udiss@pronouns + \endgroup + \fi + \endgroup + + \vspace{2em}% + \fi + + \begingroup + \udiss@fulfilment@shape + \ifx\udiss@fulfilment@font\empty + \else + \fontspec[\udiss@fulfilment@fontfeats]% + {\udiss@fulfilment@font}% + \fi + \udiss@fulfilment@size + \color{\udiss@fulfilment@color}% + \udiss@fulfilment + \endgroup + + \vfill + + \begingroup + \udiss@uni@shape + \ifx\udiss@uni@font\empty + \else + \fontspec[\udiss@university@fontfeats]% + {\udiss@uni@font}% + \fi + \udiss@uni@size + \color{\udiss@uni@color}% + \udiss@university + \endgroup + + \vspace{0.5em}% + + \begingroup + \udiss@dept@shape + \ifx\udiss@dept@font\empty + \else + \fontspec[\udiss@dept@fontfeats]% + {\udiss@dept@font}% + \fi + \udiss@dept@size + \color{\udiss@dept@color}% + \udiss@department + \endgroup + + \ifudiss@logo + \bigskip + \ifudiss@texlogo + \udiss@texlogo + \fi + \includegraphics[% + width = {% + \udiss@logo@width\linewidth + },% + height = {% + \udiss@logo@hght\textheight + }% + ]{% + \udiss@logo + }% + \fi + \end{center} + \ifudiss@ftitle + \end{minipage}% + }% + \fi + + \newpage + + \ifudiss@blind + \else + \ifudiss@free@culture + \thispagestyle{titlingpage}% + \vspace*{\stretch{1}} + \begin{quote} + \setlength{\parindent}{0pt}% + \begingroup + \begin{minipage}{\linewidth} + \bfseries + \udiss@title + + \udiss@local@copyright\ + © + \udiss@copyrightable@years\ + \udiss@author + + \medskip + \noindent\hrule \linewidth 0.4pt\relax + \end{minipage} + \endgroup + + \ifudiss@gfdl + Permission is granted to copy, distribute and/or + modify this document under the terms of the GNU + Free Documentation License, Version 1.3 or any + later version published by the Free Software + Foundation; with no Invariant Sections, no + Front-Cover Texts, and no Back-Cover Texts. A copy + of the license is included in the section entitled + \enquote{GNU Free Documentation License}.% + \fi + \ifudiss@ccbysa + \begin{minipage}{\linewidth} + \doclicenseThis + \end{minipage} + \fi + \vspace{\stretch{3}} + \end{quote} + \newpage + \fi + \fi + + \tableofcontents* + + \newpage + + \ifudiss@blind + \else + \ifudiss@declaration + \thispagestyle{empty}% + \begin{center}% + {% + \LARGE\bfseries + \udiss@decllocal + }% + \end{center}% + + \udiss@declaration + \fi + \fi + + \newpage + + \ifudiss@lot + \listoftables + \fi + + \newpage + + \ifudiss@lof + \listoffigures + \fi + \endgroup +}% +% \end{macrocode} +% +% The following code adds the GFDL v1.3+ notice at the end +% of the document if that option was used. +% +% \begin{macrocode} +\ifudiss@blind +\else + \ifudiss@gfdl + \AddToHook{enddocument}{% + \newpage + \begingroup + \pagestyle{plain}% + \addcontentsline{toc}% + {chapter}% + {GNU Free Documentation License}% + \input{gfdl-tex-1p3}% + \clearpage + \endgroup + }% + \fi +\fi +%</class> +% \end{macrocode} +% +% Our class ended here. Now we start creating the +% language-support files. The first is the Malayalam +% language. We use fonts provided at: +% \url{https://ctan.org/pkg/rit-fonts}. Notice that this is +% done conditionally. If the language is loaded as the main +% language, the fonts are set as the default fonts using +% class options, else |malayalam| is passed as the optional +% argument to |\babelfont|. +% +% \begin{macrocode} +%<*babel-ml> +\IfLanguageName{malayalam}{% + \ekvset{udiss}{% + rmfont = {RIT-Rachana-Regular.ttf},% + rmitfont = {RIT-Rachana-Italic.ttf},% + rmbffont = {RIT-Rachana-Bold.ttf},% + rmbfitfont = {RIT-Rachana-BoldItalic.ttf},% + rmfeatures = {% + Script = {Malayalam}% + },% + sffont = {RIT-MeeraNew.ttf},% + sfitfont = {RIT-MeeraNew.ttf},% + sfbffont = {RIT-tnjoy-bold.ttf},% + sfbfitfont = {RIT-tnjoy-bold.ttf},% + sffeatures = {% + Script = {Malayalam}% + },% + ttfont = {RIT-MeeraNew.ttf},% + ttitfont = {RIT-MeeraNew.ttf},% + ttbffont = {RIT-tnjoy-bold.ttf},% + ttbfitfont = {RIT-tnjoy-bold.ttf},% + sffeatures = {% + Script = {Malayalam}% + }% + }% +}{% + \babelfont[malayalam]{rm}[% + IgnoreFontspecFile,% + Script = {Malayalam},% + ItalicFont = {RIT-Rachana-Italic.ttf},% + BoldFont = {RIT-Rachana-Bold.ttf},% + BoldItalicFont = {RIT-Rachana-BoldItalic.ttf},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{RIT-Rachana-Regular.ttf} + \babelfont[malayalam]{sf}[% + IgnoreFontspecFile,% + Script = {Malayalam},% + ItalicFont = {RIT-tnjoy-regular.ttf},% + BoldFont = {RIT-tnjoy-bold.ttf},% + BoldItalicFont = {RIT-tnjoy-bold.ttf},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{RIT-tnjoy-regular.ttf} + \babelfont[malayalam]{tt}[% + IgnoreFontspecFile,% + Script = {Malayalam},% + ItalicFont = {RIT-tnjoy-regular.ttf},% + BoldFont = {RIT-tnjoy-bold.ttf},% + BoldItalicFont = {RIT-tnjoy-bold.ttf},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{RIT-tnjoy-regular.ttf}% +} +%</babel-ml> +% \end{macrocode} +% +% Marathi requires local numerals and local counters. We +% provide that here and set Mukta as the default font +% provided in: \url{https://ctan.org/pkg/EkType-Tanka}. +% +% \begin{macrocode} +%<*babel-mr> +\babelprovide[% + mapdigits,% + counters/स्वर = अ आ इ ई उ ऊ ए ऐ ओ औ अं अः ॲ ऋ ऌ ऑ,% + counters/अंक = एक दोन तीन चार पाच सहा सात आठ नऊ दहा अकरा + बारा तेरा चौदा पंधरा सोळा सतरा अठरा एकोणीस वीस एकवीस बावीस + तेवीस चोवीस पंचवीस सव्वीस सत्तावीस अठ्ठावीस एकोणतीस तीस एकतीस + बत्तीस तेहतीस चौतीस पस्तीस छत्तीस सदतीस अडतीस एकोणचाळीस चाळीस + एकेचाळीस बेचाळीस त्रेचाळीस चव्वेचाळीस पंचेचाळीस शेहेचाळीस सत्तेचाळीस + अठ्ठेचाळीस एकोणपन्नास पन्नास एकावन्न बावन्न त्रेपन्न चौपन्न पंचावन्न + छप्पन्न सत्तावन्न अठ्ठावन्न एकोणसाठ साठ एकसष्ट बासष्ट त्रेसष्ट चौसष्ट + पासष्ट सहासष्ट सदुष्ट अडुसष्ट एकोणसत्तर सत्तर एकाहत्तर बाहत्तर + त्र्याहत्तर चौऱ्याहत्तर पंचाहत्तर शाहत्तर सत्त्याहत्तर अठ्ठ्याहत्तर + एकोणऐंशी ऐंशी एक्याऐंशी ब्याऐंशी त्र्याऐंशी चौऱ्याऐंशी पंच्याऐंशी श्याऐंशी + सत्त्याऐंशी अठ्ठ्याऐंशी एकोणनव्वद नव्वद एक्याण्णव ब्याण्णव त्र्याण्णव + चौऱ्याण्णव पंचाण्णव शहाण्णव सत्त्याण्णव अठ्याण्णव नव्याण्णव शंभर,% + counters/व्यंजन = क ख ग घ ङ% + च छ ज झ ञ% + ट ठ ड ढ ण% + त थ द ध न% + प फ ब भ म% + य र ल व श ष स ह ळ,% + Alph = अंक,% + alph = स्वर% +]{marathi} +\def\theenumiii{\localecounter{व्यंजन}{enumiii}} +\def\theenumiv{\localecounter{अंक}{enumiii}} +\IfLanguageName{marathi}{% + \ekvset{udiss}{% + rmfont = {Mukta-Regular.ttf},% + rmitfont = {Mukta-Regular.ttf},% + rmbffont = {Mukta-Bold.ttf},% + rmbfitfont = {Mukta-Bold.ttf},% + rmfeatures = {% + Script = {Devanagari}% + },% + sffont = {Mukta-Regular.ttf},% + sfitfont = {Mukta-Regular.ttf},% + sfbffont = {Mukta-Bold.ttf},% + sfbfitfont = {Mukta-Bold.ttf},% + sffeatures = {% + Script = {Devanagari}% + },% + ttfont = {Mukta-Regular.ttf},% + ttitfont = {Mukta-Regular.ttf},% + ttbffont = {Mukta-Bold.ttf},% + ttbfitfont = {Mukta-Bold.ttf},% + sffeatures = {% + Script = {Devanagari}% + }% + }% +}{% + \babelfont[marathi]{rm}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Marathi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} + \babelfont[marathi]{sf}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Marathi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} + \babelfont[marathi]{tt}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Marathi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf}% +} +%</babel-mr> +% \end{macrocode} +% +% \begin{macrocode} +%<*babel-en> +\babelfont[english]{rm}[% + IgnoreFontspecFile,% + Extension = {.otf},% + ItalicFont = {NewCM10-BookItalic},% + BoldFont = {NewCM10-Bold},% + BoldItalicFont = {NewCM10-BoldItalic},% + SlantedFont = {NewCM10-Book},% + BoldSlantedFont = {NewCM10-Bold},% + Numbers = {OldStyle},% + CharacterVariant = {6},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi +]{NewCM10-Book} +\babelfont[english]{sf}[% + IgnoreFontspecFile,% + Extension = {.otf},% + ItalicFont = {NewCMSans10-BookOblique},% + BoldFont = {NewCMSans10-Bold},% + BoldItalicFont = {NewCMSans10-BoldOblique},% + SlantedFont = {NewCMSans10-Book},% + BoldSlantedFont = {NewCMSans10-Bold},% + Numbers = {OldStyle},% + CharacterVariant = {6},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi +]{NewCMSans10-Book} +\babelfont[english]{tt}[% + IgnoreFontspecFile,% + Extension = {.otf},% + BoldFont = {NewCMMono10-Bold},% + ItalicFont = {NewCMMono10-Italic},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi +]{NewCMMono10-Book} +%</babel-en> +% \end{macrocode} +% +% Hindi and Marathi share the script, but the language +% variants Marathi needs are not required by Hindi. So we +% use the same font, but with a little different settings +% for Hindi. +% +% \begin{macrocode} +%<*babel-hi> +\IfLanguageName{hindi}{% + \ekvset{udiss}{% + rmfont = {Mukta-Regular.ttf},% + rmitfont = {Mukta-Regular.ttf},% + rmbffont = {Mukta-Bold.ttf},% + rmbfitfont = {Mukta-Bold.ttf},% + rmfeatures = {% + Script = {Devanagari}% + },% + sffont = {Mukta-Regular.ttf},% + sfitfont = {Mukta-Regular.ttf},% + sfbffont = {Mukta-Bold.ttf},% + sfbfitfont = {Mukta-Bold.ttf},% + sffeatures = {% + Script = {Devanagari}% + },% + ttfont = {Mukta-Regular.ttf},% + ttitfont = {Mukta-Regular.ttf},% + ttbffont = {Mukta-Bold.ttf},% + ttbfitfont = {Mukta-Bold.ttf},% + sffeatures = {% + Script = {Devanagari}% + }% + }% +}{% + \babelfont[hindi]{rm}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Hindi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} + \babelfont[hindi]{sf}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Hindi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} + \babelfont[hindi]{tt}[% + IgnoreFontspecFile,% + ItalicFont = {Mukta-Regular.ttf},% + BoldFont = {Mukta-Bold.ttf},% + BoldItalicFont = {Mukta-Bold.ttf},% + Language = {Hindi},% + Script = {Devanagari},% + Numbers = {OldStyle},% + \ifLuaTeX + Renderer = {HarfBuzz}% + \fi + ]{Mukta-Regular.ttf} +} +%</babel-hi> +% \end{macrocode} +% +% In this tag, we set three main variables for the |ukerala| +% dissertation-style. This is just a sample. These style +% files can contain much more than this. In the experimental +% release, we start with a small sample. We will be +% expanding this more. +% +% \begin{macrocode} +%<*ukerala> +\ekvset{udiss}{% + university = {University of Kerala},% + logo = {udiss-logo-ukerala.png},% + logoheight = {0.11}% +} +%</ukerala> +% \end{macrocode} +% \end{implementation} +% \PrintIndex +% \Finale diff --git a/Master/texmf-dist/source/latex/udiss/udiss.ins b/Master/texmf-dist/source/latex/udiss/udiss.ins new file mode 100644 index 00000000000..3a3023dbb14 --- /dev/null +++ b/Master/texmf-dist/source/latex/udiss/udiss.ins @@ -0,0 +1,75 @@ +% File: udiss.ins +\input l3docstrip.tex + +\keepsilent +\askforoverwritefalse + +\preamble +--------------------------------------------------------- +Bundle: udiss +Version: v0.1 (October 1, 2024) +Author: Indian TeX Users Group +Description: A LaTeX bundle for typesetting dissertations +Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +Licenses: GPLv3+, GFDLv1.3+ +--------------------------------------------------------- + +The LaTeX bundle udiss v0.1 +Copyright © 2024 Indian TeX Users Group + +This program is free software: you can redistribute it +and/or modify it under the terms of the GNU General +Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your +option) any later version. + +This program is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public +License along with this program. If not, see +<https://www.gnu.org/licenses/>. +--------------------------------------------------------- +\endpreamble +\usedir{tex/latex/\jobname} +\generate{% + \file{\jobname.cls}{\from{\jobname.dtx}{class}}% +} +% ---------------------------------------------------------- +% BEGIN GENERATING UDISS BABEL FILES +\generate{% + \file{\jobname-fonts-malayalam.tex}{% + \from{\jobname.dtx}{babel-ml}% + }% +} +\generate{% + \file{\jobname-fonts-marathi.tex}{% + \from{\jobname.dtx}{babel-mr}% + }% +} +\generate{% + \file{\jobname-fonts-english.tex}{% + \from{\jobname.dtx}{babel-en}% + }% +} +\generate{% + \file{\jobname-fonts-hindi.tex}{% + \from{\jobname.dtx}{babel-hi}% + }% +} +\generate{% + \file{\jobname-style-ukerala.tex}{% + \from{\jobname.dtx}{ukerala}% + }% +} +% END GENERATING UDISS BABEL FILES +% ---------------------------------------------------------- +\nopreamble\nopostamble +\usedir{doc/latex/\jobname} +\generate{% + \file{README.txt}{\from{\jobname.dtx}{readme}}% +} +\endbatchfile diff --git a/Master/texmf-dist/tex/latex/udiss/udiss.cls b/Master/texmf-dist/tex/latex/udiss/udiss.cls new file mode 100644 index 00000000000..52567f5923c --- /dev/null +++ b/Master/texmf-dist/tex/latex/udiss/udiss.cls @@ -0,0 +1,1868 @@ +%% +%% This is file `udiss.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% udiss.dtx (with options: `class') +%% --------------------------------------------------------- +%% Bundle: udiss +%% Version: v0.1 (October 1, 2024) +%% Author: Indian TeX Users Group +%% Description: A LaTeX bundle for typesetting dissertations +%% Bugs: puszcza.gnu.org.ua/bugs/?group=udiss +%% Licenses: GPLv3+, GFDLv1.3+ +%% --------------------------------------------------------- +%% +%% The LaTeX bundle udiss v0.1 +%% Copyright © 2024 Indian TeX Users Group +%% +%% This program is free software: you can redistribute it +%% and/or modify it under the terms of the GNU General +%% Public License as published by the Free Software +%% Foundation, either version 3 of the License, or (at your +%% option) any later version. +%% +%% This program is distributed in the hope that it will be +%% useful, but WITHOUT ANY WARRANTY; without even the +%% implied warranty of MERCHANTABILITY or FITNESS FOR A +%% PARTICULAR PURPOSE. See the GNU General Public License +%% for more details. +%% +%% You should have received a copy of the GNU General Public +%% License along with this program. If not, see +%% <https://www.gnu.org/licenses/>. +%% --------------------------------------------------------- +\ProvidesClass{udiss}[2024/10/01 v0.1 + A LaTeX bundle for typesetting dissertations (TUGIndia)] +\RequirePackage{expkv-def,expkv-opt} +\newif\ifudiss@pronouns +\newif\ifudiss@blind +\NewDocumentCommand{ \pronouns }{ m }{% + \ifudiss@blind + \else + \def\udiss@pronouns{#1}% + \fi +} +\ekvdefinekeys{udiss}{% + code pronouns = {% + \ifudiss@blind + \else + \def\udiss@pronouns{(#1)}% + \fi + \udiss@pronounstrue + }% +} +\newif\ifudiss@title +\def\udiss@blank@title@err{% + \ClassError{udiss}{% + The `title' field cannot be blank% + }{% + You have provided an empty argument to the `title' + field. This is not\MessageBreak permitted by the class.% + }% +} +\def\udiss@blank@author@err{% + \ClassError{udiss}{% + The `author' field cannot be blank% + }{% + You have provided an empty argument to the `author' + field. This is not\MessageBreak permitted by the class.% + }% +} +\ekvdefinekeys{udiss}{% + code title = {% + \def\udiss@tmp@title{#1}% + \ifx\udiss@tmp@title\empty + \def\udiss@title{-NoValidTitle-}% + \udiss@blank@title@err + \else + \def\udiss@title{#1}% + \fi + },% + code author = {% + \def\udiss@tmp@author{#1}% + \ifx\udiss@tmp@author\empty + \def\udiss@author{-NoValidAuthor-}% + \udiss@blank@author@err + \else + \def\udiss@author{#1}% + \fi + }% +} +\newif\ifudiss@subtitle +\newif\ifudiss@shorttitle +\ekvdefinekeys{udiss}{% + code subtitle = {% + \IfBlankTF{#1}{% + \def\udiss@subtitle{-NoValidSubtitle-}% + \udiss@subtitletrue + }{% + \def\udiss@subtitle{#1}% + \udiss@subtitletrue + }% + },% + code shorttitle = {% + \IfBlankTF{#1}{% + \def\udiss@shorttitle{-NoValidSubtitle-}% + \udiss@shorttitletrue + }{% + \def\udiss@shorttitle{#1}% + \udiss@shorttitletrue + }% + }% +} +\NewDocumentCommand{ \subtitle }{ m }{% + \def\udiss@subtitle{#1}% + \udiss@subtitletrue +} +\NewDocumentCommand{ \shorttitle }{ m }{% + \def\udiss@shorttitle{#1}% + \udiss@shorttitletrue +} +\newif\ifudiss@stream +\def\udiss@blank@stream@err{% + \ClassError{udiss}{% + The `stream' field cannot be blank% + }{% + You have provided an empty argument to the `stream' + field. This is not\MessageBreak permitted by the class.% + }% +} +\newif\ifudiss@discipline +\def\udiss@blank@discipline@err{% + \ClassError{udiss}{% + The `discipline' field cannot be blank% + }{% + You have provided an empty argument to the `discipline' + field. This is not\MessageBreak permitted by the class.% + }% +} +\newif\ifudiss@degree +\def\udiss@blank@degree@err{% + \ClassError{udiss}{% + The `degree' field cannot be blank% + }{% + You have provided an empty argument to the `degree' + field. This is not\MessageBreak permitted by the class.% + }% +} +\ekvdefinekeys{udiss}{% + code stream = {% + \def\udiss@tmp@stream{#1}% + \ifx\udiss@tmp@stream\empty + \def\udiss@stream{-NoValidStream-}% + \udiss@blank@stream@err + \else + \def\udiss@stream{#1}% + \fi + },% + code discipline = {% + \def\udiss@tmp@discipline{#1}% + \ifx\udiss@tmp@discipline\empty + \def\udiss@discipline{-NoValidDiscipline-}% + \udiss@blank@discipline@err + \else + \def\udiss@discipline{#1}% + \fi + },% + code degree = {% + \def\udiss@tmp@degree{#1}% + \ifx\udiss@tmp@degree\empty + \def\udiss@degree{-NoValidDegree-}% + \udiss@blank@degree@err + \else + \def\udiss@degree{#1}% + \fi + }% +} +\NewDocumentCommand{ \stream }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@stream@err + \def\udiss@stream{-NoValidStream-}% + }{% + \def\udiss@stream{#1}% + }% + \IfBlankTF{#1}{% + \udiss@streamtrue + }{% + \def\udiss@stream{#1}% + \udiss@streamtrue + }% +} +\NewDocumentCommand{ \discipline }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@discipline@err + \def\udiss@discipline{-NoValidDiscipline-}% + }{% + \def\udiss@discipline{#1}% + }% + \IfBlankTF{#1}{% + \udiss@disciplinetrue + }{% + \def\udiss@discipline{#1}% + \udiss@disciplinetrue + }% +} +\NewDocumentCommand{ \degree }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@degree@err + \def\udiss@degree{-NoValidDegree-}% + }{% + \def\udiss@degree{#1}% + }% + \IfBlankTF{#1}{% + \udiss@degreetrue + }{% + \def\udiss@degree{#1}% + \udiss@degreetrue + }% +} +\newif\ifudiss@supervisor +\newif\ifudiss@university +\newif\ifudiss@department +\def\udiss@blank@supervisor@err{% + \ClassError{udiss}{% + The `supervisor' field cannot be blank% + }{% + You have provided an empty argument to the `supervisor' + field. This is not\MessageBreak permitted by the class.% + }% +} +\def\udiss@blank@university@err{% + \ClassError{udiss}{% + The `university' field cannot be blank% + }{% + You have provided an empty argument to the `university' + field. This is not\MessageBreak permitted by the class.% + }% +} +\def\udiss@blank@department@err{% + \ClassError{udiss}{% + The `department' field cannot be blank% + }{% + You have provided an empty argument to the `department' + field. This is not\MessageBreak permitted by the class.% + }% +} +\ekvdefinekeys{udiss}{% + code supervisor = {% + \def\udiss@tmp@supervisor{#1}% + \ifx\udiss@tmp@supervisor\empty + \def\udiss@supervisor{-NoValidSupervisor-}% + \udiss@blank@supervisor@err + \else + \def\udiss@supervisor{#1}% + \fi + },% + code university = {% + \def\udiss@tmp@university{#1}% + \ifx\udiss@tmp@university\empty + \def\udiss@university{-NoValidUniversity-}% + \udiss@blank@university@err + \else + \def\udiss@university{#1}% + \fi + },% + code department = {% + \def\udiss@tmp@department{#1}% + \ifx\udiss@tmp@department\empty + \def\udiss@department{-NoValidDepartment-}% + \udiss@blank@department@err + \else + \def\udiss@department{#1}% + \fi + }% +} +\NewDocumentCommand{ \supervisor }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@supervisor@err + \def\udiss@supervisor{-NoValidSupervisor-}% + }{% + \def\udiss@supervisor{#1}% + }% + \IfBlankTF{#1}{% + \udiss@supervisortrue + }{% + \def\udiss@supervisor{#1}% + \udiss@supervisortrue + }% +} +\NewDocumentCommand{ \university }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@university@err + \def\udiss@author{-NoValidUniversity-}% + }{% + \def\udiss@university{#1}% + }% + \IfBlankTF{#1}{% + \udiss@universitytrue + }{% + \def\udiss@university{#1}% + \udiss@universitytrue + }% +} +\NewDocumentCommand{ \department }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@department@err + \def\udiss@author{-NoValidDepartment-}% + }{% + \def\udiss@department{#1}% + }% + \IfBlankTF{#1}{% + \udiss@departmenttrue + }{% + \def\udiss@department{#1}% + \udiss@departmenttrue + }% +} +\newif\ifudiss@logo +\newif\ifudiss@texlogo +\NewDocumentCommand{ \logo }{ s +m }{% + \IfBooleanTF{#1}{% + \def\udiss@texlogo{#2}% + \udiss@texlogotrue + }{% + \def\udiss@logo{#2}% + }% + \udiss@logotrue +} +\ekvdefinekeys{udiss}{% + code logo = {% + \def\udiss@logo{#1}% + \udiss@logotrue + },% + code logo* = {% + \def\udiss@texlogo{#1}% + \udiss@logotrue + \udiss@texlogotrue + }% +} +\newcounter{udiss@langbabel} +\stepcounter{udiss@langbabel} +\def\udiss@int@langbabel#1{% + \expandafter\edef + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname{#1}% + \stepcounter{udiss@langbabel}% +} +\NewDocumentCommand\udiss@lgbbl{ >{ \SplitList{,} } m }{% + \ProcessList{#1}{\udiss@int@langbabel}% +} +\newif\ifudiss@lg@used +\newif\ifudiss@ldfbabel +\ekvdefinekeys{udiss}{% + code language = {% + \udiss@lgbbl{#1}% + \udiss@lg@usedtrue + },% + code ldfbabel = {% + \def\udiss@ldfbabel@list{#1}% + \udiss@lg@usedtrue + \udiss@ldfbabeltrue + },% + invbool nofontwarning = {\ifudiss@font@warning}% +} +\newif\ifudiss@free@culture +\newif\ifudiss@ccbysa +\newif\ifudiss@gfdl +\ekvdefinekeys{udiss}{% + choice license = {% + all-rights-reserved = {% + \def\udiss@license@notice{% + All rights reserved.\textLF + }% + },% + CC-BY-SA = {% + \def\udiss@license@notice{% + This work is available under the "Creative Commons + Attribution ShareAlike 4.0 International" license.% + }% + \def\udiss@free@license@url{% + https://creativecommons.org/licenses/% + by-sa/4.0/legalcode.txt% + }% + \udiss@free@culturetrue + \udiss@ccbysatrue + },% + GFDL = {% + \def\udiss@license@notice{% + Permission is granted to copy, distribute and/or + modify this document under the terms of the GNU Free + Documentation License, Version 1.3 or any later + version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, + and no Back-Cover Texts. A copy of the license is + included in the section entitled “GNU Free + Documentation License”.% + }% + \def\udiss@free@license@url{% + https://www.gnu.org/licenses/fdl-1.3.txt% + }% + \udiss@free@culturetrue + \udiss@gfdltrue + },% + },% + initial license = {all-rights-reserved},% + store copyright-yrs = {\udiss@copyrightable@years},% + initial copyright-yrs = {\the\year},% + store localcopyright = {\udiss@local@copyright},% + initial localcopyright = {Copyright},% + nmeta placeholders = {% + title = {% + A groundbreaking dissertation% + },% + author = {% + Jane Doe% + },% + pronouns = {She/her},% + subtitle = {% + A milestone study on a longstanding question + in a discipline% + },% + shorttitle = {A Milestone study},% + stream = {intriguing stream},% + discipline = {rigorous discipline}, + degree = {enriching degree},% + supervisor = {A kind supervisor},% + university = {An ideal university},% + department = {A homely department},% + license = {CC-BY-SA},% + copyright-yrs = {2022, 2023, 2024}% + }% +} +\ekvdefinekeys{udiss}{% + bool lot = {\ifudiss@lot},% + bool lof = {\ifudiss@lof},% + bool declaration = {\ifudiss@declaration},% + long + store declarationtxt = {\udiss@declaration},% + initial declarationtxt = {% + \noindent As required by the university regulations, I + wish to state that the work embodied in this thesis + titled \enquote{\udiss@title: \udiss@subtitle} forms + my own contribution to the research work carried out + under the guidance of \udiss@supervisor\ at the + \udiss@university, \udiss@department. + + This work has not been submitted for any other degree + of this or any other university. Whenever references + have been made to previous works of others, it has + been clearly indicated as such and included in the + bibliography. + + \bigskip + \flushright{% + Date: \today + + \vspace{4em}% + + Name: \udiss@author + }% + + \bigskip\bigskip + \flushleft{% + Certified by:% + + \vspace{4em}% + + \udiss@supervisor + }% + },% + store decllocal = {\udiss@decllocal},% + initial decllocal = {Declaration}% +} +\ekvdefinekeys{udiss}{% + bool print = {\ifudiss@print},% + invbool norefcolors = {\ifudiss@colors},% + store udisslinkclr = {\udiss@int@link@color},% + initial udisslinkclr = {udisslink},% + store udissurlclr = {\udiss@int@url@color},% + initial udissurlclr = {udissurl},% + store udissciteclr = {\udiss@int@cite@color},% + initial udissciteclr = {udisscite}% +} +\ekvdefinekeys{udiss}{% + bool blind = {\ifudiss@blind}% +} +\ekvdefinekeys{udiss}{% + bool framed-title = {\ifudiss@ftitle}% +} +\ekvdefinekeys{udiss}{% + invbool oldstylenumoff = {\ifudiss@oldstylenum},% + bool oldone = {\ifudiss@oldone}% +} +\ekvdefinekeys{udiss}{% + bool explicitext = {\ifudiss@explicitext},% + invbool ignorefsoff = {\ifudiss@ignorefontspec}% +} +\ekvdefinekeys{udiss}{% + store fulfilment = {\udiss@fulfilment},% + initial fulfilment = {% + A dissertation submitted in the partial fulfilment of + the requirements for the \udiss@degree\ program in + \udiss@discipline.% + }% +} +\ekvdefinekeys{udiss}{% + store rmfont = {\udiss@rmfont},% + initial rmfont = {NewCM10-Book.otf},% + store rmbffont = {\udiss@rmbffont},% + initial rmbffont = {NewCM10-Bold.otf},% + store rmitfont = {\udiss@rmitfont},% + initial rmitfont = {NewCM10-BookItalic.otf},% + store rmbfitfont = {\udiss@rmbfitfont},% + initial rmbfitfont = {NewCM10-BoldItalic.otf},% + store rmslfont = {\udiss@rmslfont},% + initial rmslfont = {NewCM10-Book.otf},% + store rmbfslfont = {\udiss@rmbfslfont},% + initial rmbfslfont = {NewCM10-Bold.otf},% + store sffont = {\udiss@sffont},% + initial sffont = {NewCMSans10-Book.otf},% + store sfbffont = {\udiss@sfbffont},% + initial sfbffont = {NewCMSans10-Bold.otf},% + store sfitfont = {\udiss@sfitfont}, + initial sfitfont = {NewCMSans10-BookOblique.otf},% + store sfbfitfont = {\udiss@sfbfitfont},% + initial sfbfitfont = {NewCMSans10-BoldOblique.otf},% + store sfslfont = {\udiss@sfslfont},% + initial sfslfont = {NewCMSans10-BookOblique.otf},% + store sfbfslfont = {\udiss@sfbfslfont},% + initial sfbfslfont = {NewCMSans10-BoldOblique.otf},% + store ttfont = {\udiss@ttfont},% + initial ttfont = {NewCMMono10-Book.otf},% + store ttbffont = {\udiss@ttbffont}, + initial ttbffont = {NewCMMono10-Bold.otf},% + store ttitfont = {\udiss@ttitfont},% + initial ttitfont = {NewCMMono10-BookItalic.otf},% + store ttbfitfont = {\udiss@ttbfitfont},% + initial ttbfitfont = {NewCMMono10-BoldOblique.otf},% + store ttslfont = {\udiss@ttslfont},% + initial ttslfont = {NewCM10-Book.otf},% + store ttbfslfont = {\udiss@ttbfslfont},% + initial ttbfslfont = {NewCMMono10-BoldOblique.otf},% + store mathfont = {\udiss@mathfont},% + initial mathfont = {NewCMMath-Book.otf},% + store mathbffont = {\udiss@mathbffont},% + initial mathbffont = {NewCMMath-Bold.otf},% + store rmfeatures = {\udiss@rmfeatures},% + choice rmfntext = {% + ttf = {% + \ifudiss@explicitext + \def\udiss@rmfntext{ttf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `rmfntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + FreeSerif, you may choose one of the + following two methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + rmfont = {FreeSerif.ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + rmfont = {FreeSerif},\@percentchar + \MessageBreak + \space\space\space\space\space + rmfntext = {ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------8<----% + }% + \fi + },% + otf = {% + \ifudiss@explicitext + \def\udiss@rmfntext{otf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `rmfntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + KpRoman-Regular.otf, you may choose one of + the following two\MessageBreak + methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + rmfont = {KpRoman-Regular.otf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + rmfont = {KpRoman-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + rmfntext = {otf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------------8<----% + }% + \fi + }% + },% + store sffeatures = {\udiss@sffeatures},% + choice sffntext = {% + ttf = {% + \ifudiss@explicitext + \def\udiss@sffntext{ttf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `sffntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + FreeSans, you may choose one of the + following two methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + sffont = {FreeSans.ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + sffont = {FreeSans},\@percentchar + \MessageBreak + \space\space\space\space\space + sffntext = {ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------8<----% + }% + \fi + },% + otf = {% + \ifudiss@explicitext + \def\udiss@sffntext{otf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `sffntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + KpSans-Regular.otf, you may choose one of + the following two\MessageBreak + methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + sffont = {KpSans-Regular.otf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + sffont = {KpSans-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + sffntext = {otf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------------8<----% + }% + \fi + }% + },% + store ttfeatures = {\udiss@ttfeatures},% + choice ttfntext = {% + ttf = {% + \ifudiss@explicitext + \def\udiss@ttfntext{ttf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `ttfntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + FreeMono, you may choose one of the + following two methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + ttfont = {FreeMono.ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + ttfont = {FreeMono},\@percentchar + \MessageBreak + \space\space\space\space\space + ttfntext = {ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------8<----% + }% + \fi + },% + otf = {% + \ifudiss@explicitext + \def\udiss@ttfntext{otf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `ttfntext' to + add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + KpMono-Regular.otf, you may choose one of + the following two\MessageBreak + methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + ttfont = {KpMono-Regular.otf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<---------------------8<----% + \MessageBreak + \MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + ttfont = {KpMono-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + ttfntext = {otf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<------------------8<----% + }% + \fi + }% + },% + store mathfeatures = {\udiss@mathfeatures},% + choice mathfntext = {% + ttf = {% + \ifudiss@explicitext + \def\udiss@mathfntext{ttf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `mathfntext' + to add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + NotoSansMath-Regular, you may choose one + of the following two\MessageBreak + methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<----------------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + mathfont = {NotoSansMath-Regular.ttf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<----------------------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<-------------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + mathfont = {NotoSansMath-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + mathfntext = {ttf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<-------------------------8<----% + }% + \fi + },% + otf = {% + \ifudiss@explicitext + \def\udiss@mathfntext{otf}% + \else + \ClassError{udiss}{% + Option `explicitext' is needed for adding + font extensions% + }{% + You have loaded font-option `mathfntext' + to add extension to font-names. + This\MessageBreak option is supposed to be + used only with the `explicitext' option. + E.g., for\MessageBreak loading, say, + XITSMath-Regular, you may choose one of + the following two\MessageBreak methods:% + \MessageBreak\MessageBreak + 1. The recommended method:% + \MessageBreak + \space\space\space + ----8<----------------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + mathfont = {XITSMath-Regular.otf}% + \@percentchar + \MessageBreak + \space\space\space + ]{udiss}\MessageBreak + \space\space\space + ----8<----------------------------8<----% + \MessageBreak\MessageBreak + 2. The alternative:% + \MessageBreak + \space\space\space + ----8<-------------------------8<----% + \MessageBreak + \space\space\space + \string\documentclass[\@percentchar + \MessageBreak + \space\space\space\space\space + explicitext,\@percentchar + \MessageBreak + \space\space\space\space\space + mathfont = {XITSMath-Regular},% + \@percentchar + \MessageBreak + \space\space\space\space\space + mathfntext = {otf}\@percentchar + \MessageBreak + \space\space\space + ]{udiss}% + \MessageBreak + \space\space\space + ----8<-------------------------8<----% + }% + \fi + }% + },% +} +\ekvdefinekeys{udiss}{% + store titleshape = {\udiss@title@shape},% + initial titleshape = {\bfseries},% + store titlefont = {\udiss@title@font},% + store titlesize = {\udiss@title@size},% + initial titlesize = {\udiss@int@huge},% + store titlecolor = {\udiss@title@color},% + initial titlecolor = {black},% + store titleffeat = {\udiss@title@fontfeats},% + initial titleffeat = {}% +} +\ekvdefinekeys{udiss}{% + store subtitleshape = {\udiss@subtitle@shape},% + initial subtitleshape = {\normalfont},% + store subtitlefont = {\udiss@subtitle@font},% + store subtitlesize = {\udiss@subtitle@size},% + initial subtitlesize = {\udiss@int@large},% + store subtitlecolor = {\udiss@subtitle@color},% + initial subtitlecolor = {black},% + store subtitleffeat = {\udiss@subtitle@fontfeats},% + initial subtitleffeat = {}% +} +\ekvdefinekeys{udiss}{% + store authorshape = {\udiss@author@shape},% + initial authorshape = {\normalfont},% + store authorfont = {\udiss@author@font},% + store authorsize = {\udiss@author@size},% + initial authorsize = {\udiss@int@large},% + store authorcolor = {\udiss@author@color},% + initial authorcolor = {black},% + store authorffeat = {\udiss@author@fontfeats},% + initial authorffeat = {}% +} +\ekvdefinekeys{udiss}{% + store unishape = {\udiss@uni@shape},% + initial unishape = {\itshape},% + store unifont = {\udiss@uni@font},% + store unisize = {\udiss@uni@size},% + initial unisize = {\normalsize},% + store unicolor = {\udiss@uni@color},% + initial unicolor = {black},% + store uniffeat = {\udiss@uni@fontfeats}% +} +\ekvdefinekeys{udiss}{% + store deptshape = {\udiss@dept@shape},% + initial deptshape = {\normalfont},% + store deptfont = {\udiss@dept@font},% + store deptsize = {\udiss@dept@size},% + initial deptsize = {\udiss@int@small},% + store deptcolor = {\udiss@dept@color},% + initial deptcolor = {black},% + store deptffeat = {\udiss@dept@fontfeats},% + initial deptffeat = {}% +} +\ekvdefinekeys{udiss}{% + store ffshape = {\udiss@fulfilment@shape},% + initial ffshape = {\normalfont},% + store fffont = {\udiss@fulfilment@font},% + store ffsize = {\udiss@fulfilment@size},% + initial ffsize = {\udiss@int@small},% + store ffcolor = {\udiss@fulfilment@color},% + initial ffcolor = {black},% + store fffeat = {\udiss@fulfilment@fontfeats},% + initial fffeat = {}% +} +\ekvdefinekeys{udiss}{% + store logowidth = {\udiss@logo@width},% + initial logowidth = {0.3},% + store logoheight = {\udiss@logo@hght},% + initial logoheight = {0.075}% +} +\ekvoProcessGlobalOptions{udiss} +\NewDocumentCommand{ \dissertationstyle }{ m }{% + \AddToHook{begindocument/before}{% + \input{udiss-style-#1}% + }% +} +\ifudiss@print +\else + \PassOptionsToClass{oneside}{memoir}% +\fi +\LoadClass{memoir} +\RenewDocumentCommand{ \title }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@title@err + \def\udiss@title{-NoValidTitle-}% + }{% + \def\udiss@title{#1}% + }% +} +\RenewDocumentCommand{ \author }{ m }{% + \IfBlankTF{#1}{% + \udiss@blank@author@err + \def\udiss@author{-NoValidAuthor-}% + }{% + \def\udiss@author{#1}% + }% +} +\RequirePackage{iftex} +\RequireTUTeX +\def\udiss@int@HUGE{% + \addfontfeature{Scale={2.5}}% +} +\def\udiss@int@Huge{% + \addfontfeature{Scale={2}}% +} +\def\udiss@int@huge{% + \addfontfeature{Scale={1.7}}% +} +\def\udiss@int@LARGE{% + \addfontfeature{Scale={1.4}}% +} +\def\udiss@int@Large{% + \addfontfeature{Scale={1.2}}% +} +\def\udiss@int@large{% + \addfontfeature{Scale={1.1}}% +} +\def\udiss@int@small{% + \addfontfeature{Scale={0.9}}% +} +\def\udiss@int@footnotesize{% + \addfontfeature{Scale={0.8}}% +} +\def\udiss@int@scriptsize{% + \addfontfeature{Scale={0.7}}% +} +\def\udiss@int@tiny{% + \addfontfeature{Scale={0.6}}% +} +\def\udiss@int@miniscule{% + \addfontfeature{Scale={0.5}}% +} +\ifudiss@lg@used + \ifudiss@ldfbabel + \PassOptionsToPackage{% + \udiss@ldfbabel@list + }{babel}% + \fi +\else + \PassOptionsToPackage{english,provide*=*}{babel}% +\fi +\RequirePackage{babel} +\RequirePackage{iflang} +\newcounter{udiss@tmp@langcnt} +\ifudiss@ldfbabel +\else + \ifudiss@lg@used + \ifnum\theudiss@langbabel=2\relax + \addtocounter{udiss@langbabel}{-1}% + \ifLuaTeX + \babelprovide[% + main,% + import,% + onchar ={ids fonts}% + ]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \else + \babelprovide[main,import]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \fi + \fi + \ifnum\theudiss@langbabel>2\relax + \setcounter{udiss@tmp@langcnt}{% + \numexpr\theudiss@langbabel -1\relax + }% + \setcounter{udiss@langbabel}{1}% + \loop + \ifLuaTeX + \babelprovide[% + import,% + onchar ={ids fonts}% + ]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \else + \babelprovide[import]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \fi + \ifnum\theudiss@tmp@langcnt=1\relax + \else + \addtocounter{udiss@langbabel}{1}% + \fi + \ifnum\theudiss@langbabel<\theudiss@tmp@langcnt + \relax + \repeat + \fi + \ifnum\theudiss@langbabel=1\relax + \else + \ifLuaTeX + \babelprovide[% + main,% + import,% + onchar ={ids fonts}% + ]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \else + \babelprovide[main,import]{% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + \fi + \fi + \setcounter{udiss@tmp@langcnt}{% + \numexpr\theudiss@langbabel + 1\relax + }% + \setcounter{udiss@langbabel}{1}% + \loop + \IfFileExists{% + udiss-fonts-\csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }{% + \input{% + udiss-fonts-\csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + }% + }{% + \ifudiss@font@warning + \ClassWarningNoLine{udiss}{% + We don't support \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname\space yet.% + \MessageBreak + It requires a font-setup. You may add the fonts + directly\MessageBreak to your preamble using:% + \MessageBreak\MessageBreak + \space\space\string\babelfont[% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + ]{rm}{main font}% + \MessageBreak + \space\space\string\babelfont[% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + ]{sf}{sans font}% + \MessageBreak + \space\space\string\babelfont[% + \csname + udiss@langbabel@\alph{udiss@langbabel}% + \endcsname + ]{tt}{mono font}% + \MessageBreak\MessageBreak + Read more about this in the documentation of + `udiss' in a\MessageBreak section called + `multilingual typesetting'. Consider% + \MessageBreak contacting us with a support + request and let us know some\MessageBreak + suitable free (libre) fonts for this + language. If you\MessageBreak don't wish to see + this warning again, use the option% + \MessageBreak `nofontwarning' to suppress it% + }% + \fi + }% + \addtocounter{udiss@langbabel}{1}% + \ifnum\theudiss@langbabel<\theudiss@tmp@langcnt\relax + \repeat + \fi +\fi +\babelfont{rm}[% + \ifudiss@ignorefontspec + IgnoreFontspecFile,% + \fi + \ifudiss@explicitext + Extension = {.\udiss@rmfntext},% + \fi + BoldFont = {\udiss@rmbffont},% + ItalicFont = {\udiss@rmitfont},% + BoldItalicFont = {\udiss@rmbfitfont},% + SlantedFont = {\udiss@rmslfont},% + BoldSlantedFont = {\udiss@rmbfslfont},% + \ifudiss@oldstylenum + Numbers = {OldStyle},% + \ifudiss@oldone + CharacterVariant = {6},% + \fi + \fi + \ifLuaTeX + Renderer = {HarfBuzz},% + \fi + \udiss@rmfeatures +]{\udiss@rmfont} +\babelfont{sf}[% + \ifudiss@ignorefontspec + IgnoreFontspecFile,% + \fi + \ifudiss@explicitext + Extension = {.\udiss@sffntext},% + \fi + BoldFont = {\udiss@sfbffont},% + ItalicFont = {\udiss@sfitfont},% + BoldItalicFont = {\udiss@sfbfitfont},% + SlantedFont = {\udiss@sfslfont},% + BoldSlantedFont = {\udiss@sfbfslfont},% + \ifudiss@oldstylenum + Numbers = {OldStyle},% + \ifudiss@oldone + CharacterVariant = {6},% + \fi + \fi + \ifLuaTeX + Renderer = {HarfBuzz},% + \fi + \udiss@sffeatures +]{\udiss@sffont} +\babelfont{tt}[% + \ifudiss@ignorefontspec + IgnoreFontspecFile,% + \fi + \ifudiss@explicitext + Extension = {.\udiss@ttfntext},% + \fi + BoldFont = {\udiss@ttbffont},% + ItalicFont = {\udiss@ttitfont},% + BoldItalicFont = {\udiss@ttbfitfont},% + SlantedFont = {\udiss@ttslfont},% + BoldSlantedFont = {\udiss@ttbfslfont},% + \ifLuaTeX + Renderer = {HarfBuzz},% + \fi + \udiss@ttfeatures +]{\udiss@ttfont} +\RequirePackage{unicode-math} +\expanded{% + \setmathfont[% + \ifudiss@ignorefontspec% + IgnoreFontspecFile,% + \fi% + \ifudiss@explicitext + Extension = {.\udiss@mathfntext},% + \fi + BoldFont = {\udiss@mathbffont},% + SlantedFont = {\udiss@mathfont},% + BoldSlantedFont = {\udiss@mathbffont},% + \udiss@mathfeatures% + ]{\udiss@mathfont}% +} +\RequirePackage{graphicx} +\RequirePackage{xcolor} +\RequirePackage{csquotes} +\ifudiss@ccbysa + \RequirePackage[% + hyperxmp = {false},% + type = {CC},% + modifier = {by-sa},% + version = {4.0}% + ]{doclicense} +\fi +\ifudiss@colors + \colorlet{udisslink}{red!60!black} + \colorlet{udissurl}{blue!60!black} + \colorlet{udisscite}{green!60!black} +\else + \colorlet{udisslink}{black} + \colorlet{udissurl}{black} + \colorlet{udisscite}{black} +\fi +\AddToHook{begindocument/before}{% + \ifdefined\udiss@title + \else + \def\udiss@title{\textbf{-NoValidTitle-}}% + \ClassError{udiss}{% + Title not given% + }{% + `title' is a compulsory field. Provide it in the + preamble like in the following:% + \MessageBreak + \MessageBreak + ----8<-----------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\title{title-of-the-dissertation}% + \MessageBreak\MessageBreak + ----8<-----------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@author + \else + \def\udiss@author{\textbf{-NoValidAuthor-}}% + \ClassError{udiss}{% + No author given in a normal (non-blind) document% + }{% + Do you want a blind document? If yes, then use the + package option `blind' like\MessageBreak in the + following:% + \MessageBreak + ----8<------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\documentclass[blind]{udiss}% + \MessageBreak\MessageBreak + ----8<------------------8<----% + \MessageBreak + Otherwise, `author' is a compulsory field. Provide it + in the preamble like in\MessageBreak the following:% + \MessageBreak + ----8<-------------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\author{author-name}% + \MessageBreak\MessageBreak + ----8<-------------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@stream + \else + \def\udiss@stream{\textbf{-NoValidStream-}}% + \ClassError{udiss}{% + Stream not given% + }{% + `stream' is a compulsory field. Provide it in the + preamble like in the following:% + \MessageBreak + \MessageBreak + ----8<-----------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\stream{stream-of-the-candidate}% + \MessageBreak\MessageBreak + ----8<-----------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@discipline + \else + \def\udiss@discipline{\textbf{-NoValidDiscipline-}}% + \ClassError{udiss}{% + Discipline not given% + }{% + `discipline' is a compulsory field. Provide it in the + preamble like in the following:% + \MessageBreak + \MessageBreak + ----8<-----------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\discipline% + {discipline-of-the-candidate}% + \MessageBreak\MessageBreak + ----8<-----------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@degree + \else + \def\udiss@degree{\textbf{-NoValidDegree-}}% + \ClassError{udiss}{% + Degree not given% + }{% + `degree' is a compulsory field. Provide it in the + preamble like in the following:% + \MessageBreak + \MessageBreak + ----8<-----------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\degree{degree-of-the-candidate}% + \MessageBreak\MessageBreak + ----8<-----------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@supervisor + \else + \def\udiss@title{\textbf{-NoValidTitle-}}% + \ClassError{udiss}{% + No supervisor given in a normal (non-blind) document% + }{% + Do you want a blind document? If yes, then use the + package option `blind' like\MessageBreak in the + following:% + \MessageBreak + ----8<------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\documentclass[blind]{udiss}% + \MessageBreak\MessageBreak + ----8<------------------8<----% + \MessageBreak + Otherwise, `supervisor' is a compulsory field. Provide + it in the preamble like\MessageBreak in the + following:% + \MessageBreak + ----8<-------------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\supervisor{supervisor's-name}% + \MessageBreak\MessageBreak + ----8<-------------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@university + \else + \def\udiss@university{\textbf{-NoValidUniversity-}}% + \ClassError{udiss}{% + No university given in a normal (non-blind) document% + }{% + Do you want a blind document? If yes, then use the + package option `blind' like\MessageBreak in the + following:% + \MessageBreak + ----8<------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\documentclass[blind]{udiss}% + \MessageBreak\MessageBreak + ----8<------------------8<----% + \MessageBreak + Otherwise, `university' is a compulsory field. Provide + it in the preamble like\MessageBreak in the + following:% + \MessageBreak + ----8<-------------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\university{university-name}% + \MessageBreak\MessageBreak + ----8<-------------------------8<----% + \MessageBreak + }% + \fi + \ifdefined\udiss@department + \else + \def\udiss@department{\textbf{-NoValidDepartment-}}% + \ClassError{udiss}{% + No department given in a normal (non-blind) document% + }{% + Do you want a blind document? If yes, then use the + package option `blind' like\MessageBreak in the + following:% + \MessageBreak + ----8<------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\documentclass[blind]{udiss}% + \MessageBreak\MessageBreak + ----8<------------------8<----% + \MessageBreak + Otherwise, `department'\space is a compulsory field. + Provide it in the preamble like in\MessageBreak the + following:% + \MessageBreak + ----8<-------------------------8<----% + \MessageBreak\MessageBreak + \space\space\string\department{department-name}% + \MessageBreak\MessageBreak + ----8<-------------------------8<----% + \MessageBreak + }% + \fi + \ifudiss@print + \else + \RequirePackage{hyperref}% + \RequirePackage{hyperxmp}% + \hypersetup{% + unicode,% + colorlinks,% + pdftitle = {\udiss@title}% + }% + \ifudiss@subtitle + \hypersetup{% + pdfsubject = {\udiss@subtitle}% + }% + \fi + \ifudiss@blind + \else + \hypersetup{% + pdfauthor = {\udiss@author},% + pdfcopyright = {% + \udiss@title\textLF + \udiss@local@copyright\ + © + \udiss@copyrightable@years\ + \udiss@author\textLF + \udiss@license@notice + },% + }% + \ifudiss@free@culture + \hypersetup{% + pdflicenseurl = {% + \udiss@free@license@url + }% + }% + \fi + \fi + \ifudiss@colors + \hypersetup{% + linkcolor = {\udiss@int@link@color},% + urlcolor = {\udiss@int@url@color},% + citecolor = {\udiss@int@cite@color}% + }% + \else + \hypersetup{% + hidelinks% + }% + \fi + \fi +} +\AddToHook{begindocument/end}{% + \begingroup + \thispagestyle{titlingpage}% + \ifudiss@ftitle + \setlength{\fboxsep}{25pt}% + \noindent\fbox{% + \begin{minipage}% + [c][\dimexpr\textheight-2\fboxsep-2\fboxrule]% + [c]{\dimexpr\linewidth-2\fboxsep-2\fboxrule}% + \fi + \hspace{0pt}% + \vspace{3em}% + \begin{center} + \begingroup + \udiss@title@shape + \ifx\udiss@title@font\empty + \else + \fontspec[\udiss@title@fontfeats]% + {\udiss@title@font}% + \fi + \udiss@title@size + \color{\udiss@title@color}% + \udiss@title + \endgroup + + \medskip + + \ifudiss@subtitle + \begingroup + \udiss@subtitle@shape + \ifx\udiss@subtitle@font\empty + \else + \fontspec[\udiss@subtitle@fontfeats]% + {\udiss@subtitle@font}% + \fi + \udiss@subtitle@size + \color{\udiss@subtitle@color}% + \udiss@subtitle + \endgroup + \fi + + \vfill + + \ifudiss@blind + \else + \begingroup + \udiss@author@shape + \ifx\udiss@author@font\empty + \else + \fontspec[\udiss@author@fontfeats]% + {\udiss@author@font}% + \fi + \udiss@author@size + \color{\udiss@author@color}% + \udiss@author + \ifudiss@pronouns + \begingroup + \space + \addfontfeature{Scale={0.6}}% + \udiss@pronouns + \endgroup + \fi + \endgroup + + \vspace{2em}% + \fi + + \begingroup + \udiss@fulfilment@shape + \ifx\udiss@fulfilment@font\empty + \else + \fontspec[\udiss@fulfilment@fontfeats]% + {\udiss@fulfilment@font}% + \fi + \udiss@fulfilment@size + \color{\udiss@fulfilment@color}% + \udiss@fulfilment + \endgroup + + \vfill + + \begingroup + \udiss@uni@shape + \ifx\udiss@uni@font\empty + \else + \fontspec[\udiss@university@fontfeats]% + {\udiss@uni@font}% + \fi + \udiss@uni@size + \color{\udiss@uni@color}% + \udiss@university + \endgroup + + \vspace{0.5em}% + + \begingroup + \udiss@dept@shape + \ifx\udiss@dept@font\empty + \else + \fontspec[\udiss@dept@fontfeats]% + {\udiss@dept@font}% + \fi + \udiss@dept@size + \color{\udiss@dept@color}% + \udiss@department + \endgroup + + \ifudiss@logo + \bigskip + \ifudiss@texlogo + \udiss@texlogo + \fi + \includegraphics[% + width = {% + \udiss@logo@width\linewidth + },% + height = {% + \udiss@logo@hght\textheight + }% + ]{% + \udiss@logo + }% + \fi + \end{center} + \ifudiss@ftitle + \end{minipage}% + }% + \fi + + \newpage + + \ifudiss@blind + \else + \ifudiss@free@culture + \thispagestyle{titlingpage}% + \vspace*{\stretch{1}} + \begin{quote} + \setlength{\parindent}{0pt}% + \begingroup + \begin{minipage}{\linewidth} + \bfseries + \udiss@title + + \udiss@local@copyright\ + © + \udiss@copyrightable@years\ + \udiss@author + + \medskip + \noindent\hrule \linewidth 0.4pt\relax + \end{minipage} + \endgroup + + \ifudiss@gfdl + Permission is granted to copy, distribute and/or + modify this document under the terms of the GNU + Free Documentation License, Version 1.3 or any + later version published by the Free Software + Foundation; with no Invariant Sections, no + Front-Cover Texts, and no Back-Cover Texts. A copy + of the license is included in the section entitled + \enquote{GNU Free Documentation License}.% + \fi + \ifudiss@ccbysa + \begin{minipage}{\linewidth} + \doclicenseThis + \end{minipage} + \fi + \vspace{\stretch{3}} + \end{quote} + \newpage + \fi + \fi + + \tableofcontents* + + \newpage + + \ifudiss@blind + \else + \ifudiss@declaration + \thispagestyle{empty}% + \begin{center}% + {% + \LARGE\bfseries + \udiss@decllocal + }% + \end{center}% + + \udiss@declaration + \fi + \fi + + \newpage + + \ifudiss@lot + \listoftables + \fi + + \newpage + + \ifudiss@lof + \listoffigures + \fi + \endgroup +}% +\ifudiss@blind +\else + \ifudiss@gfdl + \AddToHook{enddocument}{% + \newpage + \begingroup + \pagestyle{plain}% + \addcontentsline{toc}% + {chapter}% + {GNU Free Documentation License}% + \input{gfdl-tex-1p3}% + \clearpage + \endgroup + }% + \fi +\fi +\endinput +%% +%% End of file `udiss.cls'. diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index e501e6c0b17..571d927e7a9 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -893,7 +893,7 @@ my @TLP_working = qw( uaclasses uafthesis uantwerpendocs uassign ucalgmthesis ucharcat ucharclasses ucbthesis ucdavisthesis ucph-revy ucs ucsmonograph - ucthesis udepcolor udes-genie-these udesoftec + ucthesis udepcolor udes-genie-these udesoftec udiss uebungsblatt uestcthesis ufrgscca uhhassignment uhrzeit uiucredborder uiucthesis ukbill ukrhyph ulem ulqda ulthese diff --git a/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc b/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc index 590da318f24..e382e095bd3 100644 --- a/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc @@ -257,6 +257,7 @@ depend ucsmonograph depend ucthesis depend udepcolor depend udes-genie-these +depend udiss depend uestcthesis depend ufrgscca depend uhhassignment diff --git a/Master/tlpkg/tlpsrc/udiss.tlpsrc b/Master/tlpkg/tlpsrc/udiss.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/udiss.tlpsrc |