% % AUTH report class % % note: Requires compilation with XeLaTeX or LuaTeX % % author: Christos Choutouridis % \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= % 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: % % 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} }