|
- %
- % AUTH report class
- %
- % note: Requires compilation with XeLaTeX or LuaTeX
- %
- % author: Christos Choutouridis <cchoutou@ece.auth.gr>
- %
- \NeedsTeXFormat{LaTeX2e}
- \ProvidesClass{AUThReport}[2024-12-07 AUTh Report document class]
-
- % Pre-option packages
- \RequirePackage{iftex}
- \RequirePackage{xkeyval}
-
- % Options
- % ===============================================
-
- % Default options
- \newcommand{\auth@mainlanguage}{english} % Default main language
- \newcommand{\auth@languages}{none} % Default list of additional languages
- \def\auth@short{no} % Default value for the "short" option
-
- \newcommand{\none}{none} % For comparison checks
-
- % Language append tool for option process
- \newcommand{\authSetupLanguageOption}[1]{%
- \ifx\auth@languages\none
- \gdef\auth@languages{#1}%
- \else
- \edef\auth@languages{\auth@languages, #1}%
- \fi
- }
-
-
- %
- % Set the default language of the document which affects:
- % - hyphenations
- % - Localization (section, dates, etc...)
- %
- % Usage: mainlang=<language>
- % Default: english
- %
- % example: \documentclass[mainlang=greek]{AUThReport}
- %
- \DeclareOptionX{mainlang}{
- \def\auth@mainlanguage{#1}
- }
-
- \ProcessOptionsX\relax
-
- %
- % Add hyphenation and typesetting support for other languages
- % Currently supports: english, greek, german, french
- %
- % Usage: <language>
- %
- % example: \documentclass[english, greek]{AUThReport}
- %
- \DeclareOption{english}{\authSetupLanguageOption{english}}
- \DeclareOption{greek}{\authSetupLanguageOption{greek}}
- \DeclareOption{french}{\authSetupLanguageOption{french}}
- \DeclareOption{german}{\authSetupLanguageOption{german}}
-
- %
- % Requests a shorter title for the document
- %
- % Usage: short
- % Default: no short
- %
- % example: \documentclass[short]{AUThReport}
- %
- \DeclareOption{short}{\def\auth@short{yes}}
-
-
- % Pass all other options to article
- \DeclareOption*{%
- \PassOptionsToClass{\CurrentOption}{article}%
- }
- \ProcessOptions\relax
-
- \LoadClass{article}
-
-
-
- % Requirements
- % ===============================================
-
- % Font packages
- \ifPDFTeX
- \RequirePackage[LGR, T1]{fontenc} % ToDo: find a way to dynamicaly select encoding based on languages
- \RequirePackage[utf8]{inputenc}
- \RequirePackage{lmodern}
- \else
- \RequirePackage{fontspec}
- \fi
-
- % Language packages
- \ifPDFTeX
- % Postponed to Pre-Begin hook
- % \usepackage{babel}
- \else
- \RequirePackage{polyglossia}%
- \fi
-
- \RequirePackage{xargs} % Commands
-
- \RequirePackage{geometry} % Layout
- \RequirePackage{fancyhdr}
-
- \RequirePackage{graphicx} % Figures
- \RequirePackage{tikz}
-
- % Format packages
- \RequirePackage[hang, small,labelfont=bf,up,textfont=it,up]{caption} % Custom captions under/above floats in tables or figures
- %\RequirePackage{caption}
- \RequirePackage[nobottomtitles]{titlesec}
- \RequirePackage{titling}
- \RequirePackage[bottom]{footmisc} % Place footnotes always as much to the bottom as possible.
-
- \RequirePackage{hyperref} % Various
- \RequirePackage[ddmmyyyy]{datetime}
- \RequirePackage{enumitem}
- \RequirePackage{multicol}
-
- % Local Tools
- % ===============================================
-
- % Tool to check equality
- \newcommand{\isequal}[2]{ \pdf@strcmp{#1}{#2} }
-
- % syntactic suggar for horizaontal rule
- \newcommand{\Hrule}[1]{ \rule{\linewidth}{#1} }
-
- % Dispatch between the right author(s) caption text for document title
- \newcommand{\authAuthorTitleText}{%
- \ifnum \isequal{\auth@mainlanguage}{greek}=0
- \ifdefined \auth@coauthorName Συντάκτες\else Συντάκτης\fi
- \else
- \ifdefined \auth@coauthorName Authors\else Author\fi
- \fi
- }
-
- % Dispatch between the right instructor(s) caption text for document title
- \newcommand{\authInstructorTitleText}{%
- \ifnum \isequal{\auth@mainlanguage}{greek}=0
- \ifdefined \auth@coinstructorName Διδάσκοντες\else Διδάσκων\fi
- \else
- \ifdefined \auth@coinstructorName Instructors\else Instructor\fi
- \fi
- }
-
- % Handle the language command for email href for document title
- \newcommand{\authMailText}[1]{%
- \ifnum \isequal{\auth@mainlanguage}{greek}=0
- \href{mailto:#1}{\eng{#1}}
- \else
- \href{mailto:#1}{#1}
- \fi
- }
-
-
- % Language
- % ===============================================
-
- %
- % Language setup functionality to use at the end of class.
- %
- % It uses either babel to register the languages(pdflatex) or
- % polyglossia (already included) to setup default and other languages
- %
- \newcommand{\authSetupLanguageEnv}{%
- \ifPDFTeX
- \ifnum \isequal{\auth@languages}{none}=0
- \usepackage[\auth@mainlanguage]{babel}
- \else
- \usepackage[\auth@languages, main=\auth@mainlanguage]{babel}
- \fi
- \else
- % Set main language
- \setdefaultlanguage{\auth@mainlanguage}%
- % Set other languages
- \@for\auth@lang:=\auth@languages\do{%
- \setotherlanguage{\auth@lang}
- }%
- \fi
- }
-
- % Theme
- % ===============================================
-
- % Layout
- % =====================================================
-
- % Page core layout settings (include head and foot)
- % A4 will result to:
- % Top margin: 12mm
- % Bottom margin: 11mm
- % Head hight: 14mm
- % Foot skip: 15mm
- % Left margin: 15mm
- % Right margin: 12mm
- \newcommand{\authTopMargin}{12mm}
- \newcommand{\authBottomMargin}{12mm}
- \newcommand{\authHeadHeight}{10mm}
- \newcommand{\authFootSkip}{10mm}
- \newcommand{\authLeftMargin}{15mm}
- \newcommand{\authRightMargin}{15mm}
-
-
- %
- % Sets page layout. (include head and foot)
- \newcommand*{\authSetPageLayout}{%
- \newgeometry{%
- includeheadfoot,
- top= \authTopMargin,
- bottom= \authBottomMargin,
- headheight= \authHeadHeight,
- footskip= \authFootSkip,
- lmargin= \authLeftMargin,
- rmargin= \authRightMargin
- }
- }
-
- % Fonts
- % =====================================================
-
- %
- % Setup fonts (computer modern)
- %
- \newcommand{\authSetupFontEnv}{%
- \ifPDFTeX
- % PDFLaTeX fonts
- \else
- % \setmainfont{CMU-Serif-Roman}[%
- %% Path=~/texmf/tex/latex/local/AUThReport/cmu/,
- % ItalicFont = CMU-Serif-Italic,
- % BoldFont = CMU-Serif-Bold,
- % BoldItalicFont= CMU-Serif-BoldItalic
- % ]
- % \setsansfont{CMU-Sans-Medium}[%
- %% Path=~/texmf/tex/latex/local/AUThReport/cmu/,
- % ItalicFont = CMU-Sans-Oblique,
- % BoldFont = CMU-Sans-Bold,
- % BoldItalicFont= CMU-Sans-BoldOblique
- % ]
- % %\setsansfont{CMU-Concrete-Roman}[%
- % % Path=~/texmf/tex/latex/local/AUThReport/cmu/,
- % % ItalicFont = CMU-Concrete-Italic,
- % % BoldFont = CMU-Concrete-Bold,
- % % BoldItalicFont= CMU-Concrete-BoldItalic
- % %]
- % \setmonofont{CMU-Typewriter-Regular}[%
- %% Path=~/texmf/tex/latex/local/AUThReport/cmu/,
- % ItalicFont = CMU-Typewriter-Oblique,
- % BoldFont = CMU-Typewriter-Bold,
- % BoldItalicFont= CMU-Typewriter-Oblique
- % ]
- % \typeout{[DEBUG] set fonts}
- \setmainfont{CMU Serif}
- \setsansfont{CMU Sans Serif}
- \setmonofont{CMU Typewriter Text}
- % \setmonofont{Courier New}
- \fi
-
- }
-
-
- % Header and Footer
- % =====================================================
-
- %
- % Clear footer command
- %
- \newcommand*{\authSetFooterEmpty}{%
- % Clear styles
- \fancyfoot{}
- \renewcommand{\footrulewidth}{0pt}
- }
-
- %
- % Setup footer according to theme
- %
- \newcommand*{\authSetFooter}{%
- % Clear styles
- \fancyfoot{}
- \fancyfoot[C]{\thepage}
- \renewcommand{\footrulewidth}{0pt}
- \pagenumbering{arabic}
- }
-
- %
- % Clear header command
- %
- \newcommand{\authSetHeaderEmpty}{
- % Clear styles
- \fancyhead{}
- \renewcommand{\headrulewidth}{0pt}
- }
-
- %
- % Setup header according to theme
- %
- \newcommand{\authSetHeader}{
- % Clear styles
- \fancyhead{}
- \fancyhead[L]{\auth@className}
- \fancyhead[R]{\auth@docTitle}
- \renewcommand{\headrulewidth}{0.5pt}
- }
-
-
- %
- % Page styles
- %
-
- % Plain: the main style of the document (including TOC if any)
- \fancypagestyle{plain}{%
- \authSetFooter
- \authSetHeader
- }
-
- % authTitlePageStyle: The style for the title page
- \fancypagestyle{authTitlePageStyle}{%
- % Style for Title page
- \authSetHeaderEmpty
- \ifnum \isequal{\auth@short}{no}=0
- \authSetFooterEmpty
- \else
- \authSetFooter
- \fi
- }
-
-
- % Page content look and feel style
- \newcommand{\authPageStyle}{%
-
- \renewcommand{\bottomtitlespace}{0.12\textheight}
-
- % Change the look of the section and subsection titles
- \titleformat{\section}[block]{\large\scshape}{\thesection.}{1em}{}
- \titleformat{\subsection}[block]{\large}{\thesubsection.}{1em}{}
- \titleformat{\subsubsection}[block]{\normalsize}{\thesubsubsection.}{1em}{}
-
- %\setlist[itemize]{noitemsep} % Make itemize lists more compact
- \setlist[itemize]{topsep=6pt, partopsep=0pt, itemsep=3pt, parsep=3pt}
-
- % Set paragraph identation and skip
- \setlength{\parindent}{0pt}
- \setlength{\parskip}{0.3em}
-
- }
-
- % Setup theme
- % =====================================================
-
- \AtEndOfClass{%
- \hypersetup{
- colorlinks=true,
- linkcolor=red, % Internal links, those generated by cross-referenced elements
- filecolor=blue, % Links to local files
- urlcolor=blue % Links to web sites
- }
-
- % Language and fonts
- \ifPDFTeX
- \authSetupLanguageEnv % Before fonts
- \authSetupFontEnv
- \else
- \authSetupFontEnv
- \authSetupLanguageEnv % After fonts
- \fi
-
- \typeout{[AUThReport] Main language: \auth@mainlanguage}
- \typeout{[AUThReport] Other languages: \auth@languages}
- \typeout{[AUThReport] Short title: \auth@short}
- }
-
- \AtBeginDocument{%
- % Page layout (check above for the geometry setup)
- \authSetPageLayout
-
- %hyphenation settiongs
- \lefthyphenmin=2 % minimum characters before
- \righthyphenmin=2 % minimum characters after
-
- % ToDo:
- % Something wrong is going on with fancy header for LaTeX
- % In greek (main) the text are in the wrong language configurations
- % Header - Footer
- \pagestyle{plain}
- \thispagestyle{authTitlePageStyle}
-
- % Page styles and formating
- \authPageStyle
-
- \normalsize
- } % End \AtBeginDocument
-
-
-
- % Public environments/commands
- % =====================================================
-
- % Common fields
- % =====================================================
- \newcommand*{\AuthorName}[1]{\def\auth@authorName{#1}}
- \newcommand*{\AuthorMail}[1]{\def\auth@authorMail{#1}}
- \newcommand*{\AuthorAEM}[1]{\def\auth@authorAEM{#1}}
-
- \newcommand*{\CoAuthorName}[1]{\def\auth@coauthorName{#1}}
- \newcommand*{\CoAuthorMail}[1]{\def\auth@coauthorMail{#1}}
- \newcommand*{\CoAuthorAEM}[1]{\def\auth@coauthorAEM{#1}}
-
- \newcommand*{\WorkGroup}[1]{\def\auth@workGroup{#1}}
-
- \newcommand*{\DocTitle}[1]{\def\auth@docTitle{#1}}
- \newcommand*{\DocSubTitle}[1]{\def\auth@docSubTitle{#1}}
- \newcommand*{\Department}[1]{\def\auth@department{#1}}
- \newcommand*{\ClassName}[1]{\def\auth@className{#1}}
-
- \newcommand*{\InstructorName}[1]{\def\auth@instructorName{#1}}
- \newcommand*{\InstructorMail}[1]{\def\auth@instructorMail{#1}}
- \newcommand*{\CoInstructorName}[1]{\def\auth@coinstructorName{#1}}
- \newcommand*{\CoInstructorMail}[1]{\def\auth@coinstructorMail{#1}}
-
- \newcommand*{\CurrentDate}[1]{\def\auth@date{#1}}
-
-
- % Language manipulation commands
- % =====================================================
-
- % \eng{}
- % syntactic suggar for english text inside greek
- % example \eng{A quick brown fox jumpedover the lazy dog}
- \newcommand{\eng}[1]{%
- \ifPDFTeX
- \foreignlanguage{english}{#1}
- \else
- #1
- \fi
- }
-
- % \gr{}
- % syntactic suggar for greek text inside english
- % example \gr{Άσπρη πέτρα ξέξασπρη κι απτον ήλιο ξεξασπρότερη}
- \newcommand{\gr}[1]{%
- \ifPDFTeX
- \foreignlanguage{greek}{#1}
- \else
- #1
- \fi
- }
-
- % \setEnglish
- % Selects english for the rest of the text
- \newcommand{\setEnglish}{%
- \ifPDFTeX \selectlanguage{english} \fi
- }
-
- % \setGreek
- % Selects greek for the rest of the text
- \newcommand{\setGreek}{%
- \ifPDFTeX \selectlanguage{greek} \fi
- }
-
-
- % Content commands
- % =====================================================
-
- %
- %
- %
- \newcommand{\authInsertAuthsInstructors}{%
- \center
- \noindent
- % Authors
- \hspace*{0.05\textwidth}
- \begin{minipage}[t]{0.35\textwidth}
- \begin{flushleft}
- \large
- \ifdefined \auth@workGroup \emph{\textsc{\auth@workGroup}} \\[2ex]\fi
- \emph{\authAuthorTitleText:} \\
- \auth@authorName\hspace{1ex}[\auth@authorAEM] \\[0.35ex]
- \normalsize \authMailText{\auth@authorMail} \\[2ex]
- \large
- \ifdefined \auth@coauthorName
- \auth@coauthorName\hspace{1ex}[\auth@coauthorAEM] \\[0.35ex]
- \normalsize \authMailText{\auth@coauthorMail} \\[2ex]
- \fi
- \end{flushleft}
- \end{minipage}
- \hfill
- % Instructors
- \begin{minipage}[t]{0.35\textwidth}
- \begin{flushright}
- \large
- \emph{\authInstructorTitleText:} \\
- \auth@instructorName \\[0.35ex]
- \normalsize \authMailText{\auth@instructorMail} \\[2ex]
- \large
- \ifdefined \auth@coinstructorName
- \auth@coinstructorName \\[0.35ex]
- \normalsize \authMailText{\auth@coinstructorMail} \\[2ex]
- \fi
- \end{flushright}
- \end{minipage}
- \hspace*{0.05\textwidth}
- }
-
- % \FirstPage
- \newcommand{\authTitlePage}[3]{%
- \begin{titlepage}
- % Logo
- \begin{figure}
- \begin{flushleft}
- \vspace{-1cm}
- \includegraphics[width=5cm]{img/auth_logogr.png}
- \end{flushleft}
- \end{figure}
- \ifnum \isequal{#1}{none}=0 \else
- \begin{tikzpicture}[remember picture, overlay]
- \node[anchor=center, opacity=0.25] at ([yshift=#3] current page.center) {
- \includegraphics[width=#2]{#1}
- };
- \end{tikzpicture}
- \fi
- % Titles
- \center
- \textbf{} \\[1cm] % vertical space
- \textsc{\Large \auth@department} \\[0.5cm] % Department
- \textsc{\Large \auth@className} \\[4.0cm] % Class/Course name
- \begin{flushleft}
- {\huge \bfseries \auth@docTitle} \\[0.4cm] % Document/Assignement Title
- {\LARGE \bfseries \auth@docSubTitle} \\[0.1cm] % Document/Assignement Sub-Title
- \Hrule{0.2mm} \\ % -------
- \end{flushleft}
-
- \vfill
- % Authors-Instructors
- \authInsertAuthsInstructors \\
- \vspace{1.5cm}
- {\large \auth@date} \\ % date
- \end{titlepage}
- \newpage
- }
-
- % \TitleHeader
- \newcommand{\authTitleHeader}{%
- \begin{center} % Center everything on the page
- % Logo
- \noindent
- \begin{figure}
- \vspace{-1.5cm}
- \center
- \includegraphics[width=5cm]{img/auth_logogr.png}
- \end{figure}
- % Titles
- \textsc{\Large \auth@department} \\[0.4cm] % Department
- \textsc{\Large \auth@className} \\[0.8cm] % Class/Course name
- {\Large \bfseries \auth@docTitle} \\[0.2cm] % Document/Assignement Title
- {\large \bfseries \auth@docSubTitle} \\[0.2cm] % Document/Assignement Sub-Title
- {\large \auth@date} \\[0.4cm] % date
- % Authors-Instructors
- \authInsertAuthsInstructors
- \end{center}
- }
-
- %
- % Inserts titles, author(s), instructor(s) as a first page or header
- %
- % [1]: Optional background image
- % [2]: Optional width of the image (if argument 1 is used)
- % [3]: Optional y shift for image positioning (if argument 1 is used)
- %
- % examples:
- % - \InsertFigure
- % - \InsertFigure[myBackgroung]
- % - \InsertFigure[myBackgroung][0.9\textwidth][2cm]
- %
- \newcommandx{\InsertTitle}[3][1=none, 2=\textwidth, 3=0mm]{%
- \ifnum \isequal{\auth@short}{no}=0
- \authTitlePage{#1}{#2}{#3}
- \else
- \authTitleHeader
- \fi
- }
-
- %
- % \InsertFigure{}{}{}{}{}
- %
- % [1]: Position specifier
- % [2]: scale
- % [3]: Label
- % [4]: Figure file
- % [5]: Caption text
- % example: \InsertFigure{!h}{0.8}{fig:lala}{lala.png}{\eng{Makes lala}}
- %
- % ToDo:
- % Something iswrong with InserFigures in general. In LaTeX the combination
- % titlepage and begin{figure} creates problems.
- %
- \newcommand{\InsertFigure}[5]{
- \begin{figure}[#1]
- \captionsetup{
- format=plain, % Plain format
- labelfont={bf,up}, % Bold and upright for label
- textfont={it,up}, % Italic and upright for text
- justification=centering,
- singlelinecheck=false
- }
- \centering
- \includegraphics[width=#2\textwidth]{#4}
- \caption{#5}
- \label{#3}
- \end{figure}
- }
-
- %
- % \WrapFigure{}{}{}{}
- %
- % [1]: scale
- % [2]: place left or right r,l,R,L
- % [3]: Label
- % [4]: Figure file
- % [5]: Caption text
- % example: \WrapFigure{0.8}{r}{fig:lala}{lala.png}{\eng{Makes lala}}
- \newcommand{\WrapFigure}[5]{
- \begin{wrapfigure}{#2}{#1\textwidth}
- \vspace{-20pt}
- \begin{center}
- \captionsetup{
- format=plain, % Plain format
- labelfont={bf,up}, % Bold and upright for label
- textfont={it,up}, % Italic and upright for text
- justification=centering,
- singlelinecheck=false
- }
- \includegraphics[width=#1\textwidth]{#4}
- \caption{#5}
- \label{#3}
- \end{center}
- \vspace{-20pt}
- \end{wrapfigure}
- }
|