%% ----------------------------------------------------
%% Latex class ‘tiet-question-paper’
%%
%% Author: Raghav B. Venkataramaiyer
%% Email: bv.raghav -at- thapar -dot- edu
%% Email: bvraghav -at- gmail -dot- com
%% License: [MIT License](./LICENSE)
%% Version: 2024-06-22
%% ----------------------------------------------------

\NeedsTeXFormat{LaTeX2e}

\ProvidesClass%
{tiet-question-paper}%
[2024-06-22 TIET Question Paper class]

%% -----------------------------------
%% Parent Class
%% -----------------------------------
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[11pt,a4paper,onecolumn]{article}
%% -----------------------------------

%% -----------------------------------
%% Page Margins
%% -----------------------------------
\RequirePackage[%
  a4paper,%
  left=1in,%
  top=0.5in,%
  right=0.75in,%
  bottom=0.75in%
]{geometry}
%% -----------------------------------

%% -----------------------------------
%% Math package(s)
%% -----------------------------------
\RequirePackage{amsmath}
%% -----------------------------------

%% -----------------------------------
%% Lipsum for debugging
%% -----------------------------------
\RequirePackage{blindtext}
%% -----------------------------------

%% -----------------------------------
%% Check for empty argument
%% -----------------------------------
\RequirePackage{ifmtarg}
%% -----------------------------------

%% -----------------------------------
%% No paragraph indents
%% -----------------------------------
\RequirePackage{parskip}
%% -----------------------------------

%% -----------------------------------
%% Line spacing
%% -----------------------------------
% \RequirePackage{setspace}
% \doublespacing
%% -----------------------------------

%% -----------------------------------
%% Graphics
%% -----------------------------------
\RequirePackage{graphicx}
% \graphicspath{ {./images/} }
%% -----------------------------------

%% -----------------------------------
%% Compact Enumeration
%% -----------------------------------
\RequirePackage[inline,sizes]{enumitem}
% \setlist[enumerate]{itemsep=0in}
\setlist{nosep,leftmargin=*}
\setlist[enumerate,2]{label=\alph*)}
%% -----------------------------------

%% -----------------------------------
%% Extra font sizes
%% -----------------------------------
\RequirePackage{anyfontsize}
%% -----------------------------------

%% -----------------------------------
%% Automatic width computation
%% -----------------------------------
\RequirePackage{linegoal}
%% -----------------------------------

%% -----------------------------------
%% Tabularx
%% -----------------------------------
\RequirePackage{tabularx}
%% -----------------------------------

%% -----------------------------------
%% Box alignment within tables.
%%
%% valign keyword in includegraphics
%% -----------------------------------
\RequirePackage[export]{adjustbox}
%% -----------------------------------

%% -----------------------------------
%% {align} like columnar env.
%%
%% Remembers end of paragraph and starts there.
%% -----------------------------------
% \RequirePackage{paracol}
%% -----------------------------------

%% -----------------------------------
%% Customizing section font
%% -----------------------------------
\RequirePackage{sectsty}
\allsectionsfont{\sffamily}
\paragraphfont{\sffamily}
%% -----------------------------------

%% -----------------------------------
%% Class variable definitions
%% -----------------------------------

% Variable: institute
\def\tiet@institute{Thapar Institute of Engineering \&
  Technology}
\def\institute#1{\gdef\tiet@institute{#1}}

% Variable: abbrevinst
\def\tiet@abbrevinst{\textsc{tiet}}
\def\abbrevinst#1{\gdef\tiet@abbrevinst{#1}}

% Variable: instaddress
\def\tiet@instaddress{Patiala 147004}
\def\instaddress#1{\gdef\tiet@instaddress{#1}}

% Variable: instlogo
\let\tiet@instlogo\relax
\def\instlogo#1{\gdef\tiet@instlogo{#1}}

% Variable: schoolordepartment
\let\tiet@schoolordepartment\relax
\def\schoolordepartment#1{\def\tiet@schoolordepartment{#1}}

% Variable: examname
\let\tiet@examname\relax
\def\examname#1{\def\tiet@examname{#1}}

% Variable: cohort
\let\tiet@cohort\relax
\def\cohort#1{\def\tiet@cohort{#1}}

% Variable: coursecode
\let\tiet@coursecode\relax
\def\coursecode#1{\def\tiet@coursecode{#1}}

% Variable: coursename
\let\tiet@coursename\relax
\def\coursename#1{\def\tiet@coursename{#1}}

% Variable: timeduration
\let\tiet@timeduration\relax
\def\timeduration#1{\def\tiet@timeduration{#1}}

% Variable: maxmarks
\let\tiet@maxmarks\relax
\def\maxmarks#1{\def\tiet@maxmarks{#1}}

% Variable: faculty
\let\tiet@faculty\relax
\def\faculty#1{\gdef\tiet@faculty{#1}}

%% -----------------------------------

%% -----------------------------------
%% Questions Enum
%%
%% Ref: https://tex.stackexchange.com/a/164623
%% Update: Doesn’t help enough.
%% [TODO]
%% -----------------------------------
\DeclareRobustCommand%
% Horizontal rule after each question
\bvrhrule[1][0.4pt]{\rule{\linewidth}{#1}}

\DeclareRobustCommand%
% Skip line
\bvrskipline[1][]{\vspace{#1\baselineskip}}

% \newlist{qenum}{enumerate}{3}
% \setlist[qenum]{nosep,label=\arabic*.}
% % -----------------------------------------------------
% % We need a toggle to track whether the item is first
% % in the list or not
% \newif\ifbvrfirstq\bvrfirstqfalse
% \setlist*[qenum,1]{%
%   label=\arabic*.,%
%   % ---------------------------------------------------
%   % This saves the standard definition of \item and
%   % then redefines it to add the fill if the item is
%   % not first on the list; if it is the first item, it
%   % omits the fill but toggles the bvrfirstq switch so
%   % the next item will trigger it
%   first={% 
%     % -------------------------------------------------
%     % Save the standard definition of \item in a macro,
%     % \olditem
%     \let\olditem\item%
%     % -------------------------------------------------
%     % Set the toggle for first item in the list to true
%     \bvrfirstqtrue%
%     % -------------------------------------------------
%     % New, temporary defition of \item 
%     \def\item{\ifbvrfirstq\olditem\bvrfirstqfalse\else
%         \bvrhrule\bvrskipline\olditem\fi}%
%   },%
%   % ---------------------------------------------------
%   % This takes care of adding the fill for the final
%   % item on the list and just makes sure that \item is
%   % reset to its standard definition
%   after={
%     % -------------------------------------------------
%     % Fill for final item in list
%     \bvrhrule%
%     % -------------------------------------------------
%     % Restore standard definition of \item
%     \let\item\olditem%
%   }%
% }
% \setlist[qenum,2]{label=\alph*),before={},after={},first={}}
% %% -----------------------------------


%% -----------------------------------
%% Write Examination Details and Draw Logo
%% -----------------------------------

\DeclareRobustCommand%
% Write Examination Details
\writeexamdetails{
  \parbox[t][][t]{\linewidth}{\centering\large%
    {\bfseries \tiet@institute\par}

    \vspace*{0.2\baselineskip}
    {\tiet@schoolordepartment}

    \vspace*{0.2\baselineskip}
    {\MakeUppercase\tiet@examname}}  
}
\DeclareRobustCommand%
% Draw Logo
\drawinstlogo{
  \parbox[t][][t]{\linewidth}{\raggedright%
    \includegraphics[width=11.5mm,valign=t]
    {\tiet@instlogo}\par}
}



%% -----------------------------------
%% Title Page
%% -----------------------------------

% Make title
\renewcommand\maketitle{
  {\noindent Roll No. \rule{5cm}{0.4pt} \hfill
    \bfseries\@date\par}

  % \vspace*{0.5\baselineskip}
  {\noindent\large \textbf{\tiet@coursecode :
      \tiet@coursename} \hfill Time:
    \textbf{\tiet@timeduration} \hspace{0.3em}
    MM:\textbf{\tiet@maxmarks}}\\
  {\noindent Faculty: \tiet@faculty}


  \vspace*{\baselineskip}
  \ifx\tiet@instlogo\@empty
    \writeexamdetails
  \else
    \begin{tabularx}{\textwidth}{Xp{18mm}}
      \writeexamdetails & \drawinstlogo
    \end{tabularx}
  \fi

  \par\rule{\textwidth}{0.4pt}
  \par\vspace*{0.5\baselineskip}
}
%% -----------------------------------

%% -----------------------------------
%% Counterlessfootnote
%% -----------------------------------
\newcommand{\footnotenoless}[1]{%
  \let\svthefootnote\thefootnote
  \let\thefootnote\relax\footnote{#1}
  \addtocounter{footnote}{-1}\let\thefootnote\svthefootnote
}
%% -----------------------------------

%% -----------------------------------
%% Abbreviations
%% -----------------------------------
\RequirePackage{xspace}

% Add a period to the end of an abbreviation unless
% there's one already, then \xspace.
\makeatletter
\DeclareRobustCommand\onedot{\futurelet\@let@token\@onedot}
\def\@onedot{\ifx\@let@token.\else.\null\fi\xspace}

\def\eg{\emph{e.g}\onedot}
\def\Eg{\emph{E.g}\onedot}

\def\ie{\emph{i.e}\onedot}
\def\Ie{\emph{I.e}\onedot}

\def\cf{\emph{c.f}\onedot}
\def\Cf{\emph{C.f}\onedot}

\def\etc{\emph{etc}\onedot}

\def\vs{\emph{vs}\onedot}

\def\wrt{w.r.t\onedot}
\def\dof{d.o.f\onedot}

\def\etal{\emph{et al}\onedot}
\makeatother
%% -----------------------------------