% eksoppg.cls
%
% En LaTeX2e dokument klasse for eksamensoppgaver
% Skrevet av Kåre Olaussen etter eksamen.sty av Per Arne Slotte

\def\fileversion{1.0}
\def\filedate{2000/12/12}

\NeedsTeXFormat{LaTeX2e}

\ProvidesClass{eksoppg}[\filedate\space Version \fileversion\space by
  Kåre Olaussen]

\DeclareOption*{
  \PassOptionsToClass{\CurrentOption}{article}
}
\ProcessOptions

\LoadClass{article}
\RequirePackage{ifthen,a4wide,no,amsmath,isolatin1,wrapfig}

%                         *****************
%                         ** PAGE LAYOUT **
%                         *****************

\setlength{\parskip}{6pt plus 2pt minus 1pt}
\setlength{\parindent}{0pt}
\setlength{\headsep}{0.5cm}

%                         ****************
%                         **   MACROS   **
%                         ****************
% We name all internal registers and commands with the sequence \O@@...

\newcommand\O@@eksamenlarge{\@setfontsize\ntnularge\@xivpt{16}}
%\newcommand\O@@eksamensmall{\@setfontsize\ntnusmall\@ixpt{10}}
\newcommand\O@@eksamensmall{\@setfontsize\ntnusmall\@xipt{11}}

% Makroer for å sette/fjerne universitetsnavn, med default
%
\def\universitet#1{%
\renewcommand{\O@@universitet}{#1}%
\renewcommand{\O@@Duniversitet}{1}%
}
\def\nouniversitet{%
\renewcommand{\O@@universitet}{}%
\renewcommand{\O@@Duniversitet}{0}%
}
\newcommand{\O@@universitet}{Norges teknisk--naturvitenskapelige universitet\\NTNU}
\newcommand{\O@@Duniversitet}{1}

% Makroer for å sette fjerne logo, med default
%
\def\logo#1{%
\renewcommand{\O@@logo}{#1}%
\renewcommand{\O@@Dlogo}{1}%
}

\def\nologo{%
\renewcommand{\O@@logo}{}%
\renewcommand{\O@@Dlogo}{0}%
}
\newcommand{\O@@logo}{ekslogo}
\newcommand{\O@@Dlogo}{1}

% Makroer for å sette/fjerne fakultetsnavn, med default
%
\def\fakultet#1{%
\renewcommand{\O@@fakultet}{#1}%
\renewcommand{\O@@Dfakultet}{1}%
}
\def\nofakultet{%
\renewcommand{\O@@fakultet}{}%
\renewcommand{\O@@Dfakultet}{0}%
}
\newcommand{\O@@fakultet}{Fakultet for fysikk, informatikk\\og matematikk}
\newcommand{\O@@Dfakultet}{1}

% Makroer for å sette/fjerne institutt, med default
%
\def\institutt#1{%
\renewcommand{\O@@institutt}{#1}%
\renewcommand{\O@@Dinstitutt}{1}%
}
\def\noinstitutt{%
\renewcommand{\O@@institutt}{}%
\renewcommand{\O@@Dinstitutt}{0}%
}
\newcommand{\O@@institutt}{Institutt for fysikk}
\newcommand{\O@@Dinstitutt}{1}

% Makroer for å sette/fjerne fagnummer, med tom default
%
\def\fagnummer#1{%
\renewcommand{\O@@fagnummer}{#1}%
\renewcommand{\O@@Dfagnummer}{1}%
}
\def\nofagnummer{%
\renewcommand{\O@@fagnummer}{}%
\renewcommand{\O@@Dfagnummer}{0}%
}
\newcommand{\O@@fagnummer}{}
\newcommand{\O@@Dfagnummer}{0}

% Makroer for å sette/fjerne fagnavn, med tom default
%
\def\fagnavn#1{%
\renewcommand{\O@@fagnavn}{#1}%
\renewcommand{\O@@Dfagnavn}{1}%
}
\def\nofagnavn{%
\renewcommand{\O@@fagnavn}{}%
\renewcommand{\O@@Dfagnavn}{0}%
}
\newcommand{\O@@fagnavn}{}
\newcommand{\O@@Dfagnavn}{0}

% Makroer for å sette/fjerne kortversjon av fagnavn, med tom default
%
\def\kortfagnavn#1{%
\renewcommand{\O@@kortfagnavn}{#1}%
\renewcommand{\O@@Dkortfagnavn}{1}%
}
\def\nokortfagnavn{%
\renewcommand{\O@@kortfagnavn}{}%
\renewcommand{\O@@Dkortfagnavn}{0}%
}
\newcommand{\O@@kortfagnavn}{}
\newcommand{\O@@Dkortfagnavn}{0}

% Makroer for å sette/fjerne dato, med tom default
%
\def\dato#1{%
\renewcommand{\O@@dato}{#1}%
\renewcommand{\O@@Ddato}{1}%
}
\def\nodato{%
\renewcommand{\O@@dato}{}%
\renewcommand{\O@@Ddato}{0}%
}
\newcommand{\O@@dato}{}
\newcommand{\O@@Ddato}{0}

% Makroer for å sette/fjerne kortversjon av dato, med tom default
%
\def\kortdato#1{%
\renewcommand{\O@@kortdato}{#1}%
\renewcommand{\O@@Dkortdato}{1}%
}
\def\nokortdato{%
\renewcommand{\O@@kortdato}{}%
\renewcommand{\O@@Dkortdato}{0}%
}
\newcommand{\O@@kortdato}{}
\newcommand{\O@@Dkortdato}{0}

% Makroer for å sette/fjerne kontakt, med tom default
%
\def\kontakt#1{%
\renewcommand{\O@@kontakt}{#1}%
\renewcommand{\O@@Dkontakt}{1}%
}
\def\nokontakt{%
\renewcommand{\O@@kontakt}{}%
\renewcommand{\O@@Dkontakt}{0}%
}
\newcommand{\O@@kontakt}{}
\newcommand{\O@@Dkontakt}{0}

% Makroer for å sette/fjerne telefonnummer, med tom default
%
\def\telefon#1{%
\renewcommand{\O@@telefon}{#1}%
\renewcommand{\O@@Dtelefon}{1}%
}
\def\notelefon{%
\renewcommand{\O@@telefon}{}%
\renewcommand{\O@@Dtelefon}{0}%
}
\newcommand{\O@@telefon}{}
\newcommand{\O@@Dtelefon}{0}

% Makroer for å sette/fjerne eksamenstid, med tom default
%
\def\tid#1{%
\renewcommand{\O@@tid}{#1}%
\renewcommand{\O@@Dtid}{1}%
}
\def\notid{%
\renewcommand{\O@@tid}{}%
\renewcommand{\O@@Dtid}{0}%
}
\newcommand{\O@@tid}{}
\newcommand{\O@@Dtid}{0}

% Makroer for å sette/fjerne hjelpemiddelalternativ, med default
%
\def\hjelpemiddelalternativ#1{%
\renewcommand{\O@@hjelpemiddelalternativ}{#1}%
\renewcommand{\O@@Dhjelpemiddelalternativ}{1}%
}
\def\nohjelpemiddelalternativ{%
\renewcommand{\O@@hjelpemiddelalternativ}{}%
\renewcommand{\O@@Dhjelpemiddelalternativ}{0}%
}
\newcommand{\O@@hjelpemiddelalternativ}{B}
\newcommand{\O@@Dhjelpemiddelalternativ}{1}

% Makroer for å sette/fjerne hjelpemidler, med tom default
%
\def\hjelpemidler#1{%
\renewcommand{\O@@hjelpemidler}{#1}%
\renewcommand{\O@@Dhjelpemidler}{1}%
}
\def\nohjelpemidler{%
\renewcommand{\O@@hjelpemidler}{}%
\renewcommand{\O@@Dhjelpemidler}{0}%
}
\newcommand{\O@@hjelpemidler}{}
\newcommand{\O@@Dhjelpemidler}{0}

% Makroer for å sette/fjerne sensurdato, med tom default
\def\sensur#1{%
\renewcommand{\O@@sensur}{#1}%
\renewcommand{\O@@Dsensur}{1}%
}

\def\nosensur{%
\renewcommand{\O@@sensur}{}%
\renewcommand{\O@@Dsensur}{0}%
}

\newcommand{\O@@sensur}{}
\newcommand{\O@@Dsensur}{0}

% Makroer for å sette/fjerne diverse-informasjon, med tom default
\def\diverse#1{%
\renewcommand{\O@@diverse}{#1}%
\renewcommand{\O@@Ddiverse}{1}%
}

\def\nodiverse{%
\renewcommand{\O@@diverse}{}%
\renewcommand{\O@@Ddiverse}{0}%
}

\newcommand{\O@@diverse}{}
\newcommand{\O@@Ddiverse}{0}

\newcommand{\O@@harvedlegg}{0}

\newif\ifpdf
\ifx\pdfoutput\undefined
  \pdffalse
\else
  \pdfoutput=1
  \pdftrue
\fi
\ifpdf
  \usepackage[pdftex]{graphicx}
  \pdfcompresslevel=9
\else
  \usepackage{graphicx}
\fi

%
% Babelisering
%
\RequirePackage[english,nynorsk,norsk]{babel}

% Norsk bokmål
%
\addto\extrasnorsk{
  \def\O@@oppgave{Oppgave}
  \def\O@@eksamenifag{Eksamen i \O@@fagnummer\space\O@@fagnavn}
  \def\O@@eksamenifagogtid{Eksamen i \O@@fagnummer\space\O@@kortfagnavn, \O@@kortdato}
  \def\O@@tillatt{Tillatte hjelpemidler}
  \def\O@@oppgaveside{Side {\thepage} av \pageref{pg:siste-oppgaveside}}
  \def\O@@vedleggside{Vedlegg, side {\thepage} av \pageref{pg:siste-vedleggside}}
  \def\O@@kontaktinfo{Faglig kontakt under eksamen:\\\O@@kontakt}
  \def\O@@telefoninfo{Telefon: \O@@telefon}
  \def\O@@antallsider{
    \ifthenelse{\pageref{pg:siste-oppgaveside}=1}{en side}{\pageref{pg:siste-oppgaveside} sider}}
  \def\O@@plusvedlegg{%
\ifthenelse{\pageref{pg:siste-vedleggside}=0}{.}{, pluss et vedlegg på
    \ifthenelse{\pageref{pg:siste-vedleggside}=1}{en side.}{\pageref{pg:siste-oppgaveside} sider.}
    }  
  }
  \def\O@@sensurfall{Sensur:}
  \def\O@@oppgavesett{Dette oppgavesettet er på \O@@antallsider\O@@plusvedlegg}
  \def\O@@vedlegg{Vedlegg}
}

% Nynorsk
%
\addto\extrasnynorsk{
  \def\O@@oppgave{Oppgåve}
  \def\O@@eksamenifag{Eksamen i \O@@fagnummer\space\O@@fagnavn}
  \def\O@@eksamenifagogtid{Eksamen i {\O@@fagnummer} {\O@@kortfagnavn}, {\O@@kortdato}}
  \def\O@@tillatt{Tilletne hjelpemiddel}
  \def\O@@oppgaveside{Side {\thepage} av \pageref{pg:siste-oppgaveside}}
  \def\O@@vedleggside{Vedlegg, side {\thepage} av \pageref{pg:siste-vedleggside}}
  \def\O@@kontaktinfo{Fagleg kontakt under eksamen:\\ \O@@kontakt}
  \def\O@@telefoninfo{Telefon: \O@@telefon}
  \def\O@@antallsider{
    \ifthenelse{\pageref{pg:siste-oppgaveside}=1}{ein side}{\pageref{pg:siste-oppgaveside} sidar}}
  \def\O@@plusvedlegg{%
\ifthenelse{\pageref{pg:siste-vedleggside}=0}{.}{, pluss eit vedlegg på
    \ifthenelse{\pageref{pg:siste-vedleggside}=1}{ein side.}{\pageref{pg:siste-oppgaveside} sidar.}
    }  
  }
  \def\O@@oppgavesett{Dette oppgåvesettet er på \O@@antallsider\O@@plusvedlegg}
  \def\O@@sensurfall{Sensur:}
  \def\O@@vedlegg{Vedlegg}
}

% English
%
\addto\extrasenglish{
  \def\O@@oppgave{Problem}
  \def\O@@eksamenifag{Exam in \O@@fagnummer\space\O@@fagnavn}
  \def\O@@eksamenifagogtid{Exam in {\O@@fagnummer} {\O@@kortfagnavn}, {\O@@kortdato}}
  \def\O@@tillatt{Allowed help}
  \def\O@@oppgaveside{Page {\thepage} of \pageref{pg:siste-oppgaveside}}
  \def\O@@vedleggside{Appendix, page  {\thepage} of \pageref{pg:siste-vedleggside}}
  \def\O@@kontaktinfo{Contact during the exam:\\\O@@kontakt} 
  \def\O@@telefoninfo{Telephone: \O@@telefon}
  \def\O@@antallsider{
    \ifthenelse{\pageref{pg:siste-oppgaveside}=1}{one page}{\pageref{pg:siste-oppgaveside} pages}}
  \def\O@@plusvedlegg{%
\ifthenelse{\pageref{pg:siste-vedleggside}=0}{.}{, plus an Appendix of
    \ifthenelse{\pageref{pg:siste-vedleggside}=1}{one page.}{\pageref{pg:siste-oppgaveside} pages.}
    }  
  }
  \def\O@@oppgavesett{This problem set consists of \O@@antallsider\O@@plusvedlegg}
  \def\O@@sensurfall{Sensur:}
  \def\O@@vedlegg{Appendix}
}

%                         *****************
%                         **  PAGETYLES  **
%                         *****************

\def\ps@eksamensideen{\let\@mkboth\@gobbletwo
  \def\@oddfoot{}\def\@oddhead{\hfil\O@@oppgaveside}
  \def\@evenfoot{}\let\@evenhead\@oddhead
}

\def\ps@eksamen{\let\@mkboth\@gobbletwo
  \def\@oddfoot{}
  \def\@oddhead{{\small\sc\O@@eksamenifagogtid}\hfil\O@@oppgaveside}
  \def\@evenfoot{}\let\@evenhead\@oddhead
}
\pagestyle{eksamen}

\def\ps@vedlegg{\let\@mkboth\@gobbletwo
  \def\@oddfoot{}
  \def\@oddhead{{\small\sc\O@@eksamenifagogtid}\hfil\O@@vedleggside}
  \def\@evenfoot{}\let\@evenhead\@oddhead
}

%                         ******************
%                         ** ENVIRONMENTS **
%                         ******************

\newcommand{\O@@hode}{
  \parbox[t]{0.59\linewidth}{
    \ifthenelse{\O@@Duniversitet=0}{}{\O@@eksamenlarge\bf\raggedright\noindent\O@@universitet}
  }
  \hfill
  \parbox[t]{0.39\linewidth}{
    \ifthenelse{\O@@Dinstitutt=0}{}{\raggedleft\O@@eksamenlarge\bf\O@@institutt
    \ifthenelse{\O@@Dfakultet=0}{\\[0.5cm]}{\\[0.1cm]\O@@eksamensmall\bf\O@@fakultet\\[0.5cm]}
    \ifthenelse{\O@@Dlogo=0}{}{%
      \ifpdf%
\includegraphics[width=1.6cm]{\O@@logo.png}%
\else%
\includegraphics[width=1.6cm]{\O@@logo.eps}%
\fi%
}}}\par\vspace{0.0cm plus 0.3cm}
  \thispagestyle{eksamensideen}
  \ifthenelse{\O@@Dkontakt=0}{}{%
    \O@@kontaktinfo
    \ifthenelse{\O@@Dtelefon=0}{}{\\\O@@telefoninfo}
  }
  \par\vspace{0.0cm plus 0.2cm}
  \begin{center}
    {\large\bf \O@@eksamenifag}\\
    \O@@dato\\
    \O@@tid
  \end{center}
  \O@@tillatt:
  \ifthenelse{\O@@Dhjelpemiddelalternativ=0}{}{Alternativ \O@@hjelpemiddelalternativ}\\
  \hspace*{\labelwidth}\hspace*{\itemindent}
  \parbox[t]{0.9\linewidth}{\raggedright \O@@hjelpemidler}
  \par\vspace{0.0cm plus 0.2cm}
  \ifthenelse{\O@@Dsensur=0}{}{\O@@sensurfall{} \O@@sensur\par\vspace{0.0cmplus 0.2cm}}
  \ifthenelse{\O@@Ddiverse=0}{}{\O@@diverse\par\vspace{0.0cmplus 0.2cm}}
  \O@@oppgavesett
}

\newenvironment{oppgaver}{
  \O@@hode\setlength{\parskip}{0pt plus 1pt}}
{\label{pg:siste-oppgaveside}\clearpage}

\newcounter{oppgavenummer}
\newcounter{suboppgavenummer}
\def\thesuboppgavenummer{\alph{suboppgavenummer}}

\newcommand{\oppgave}{
  \addtocounter{oppgavenummer}{1}
  \par\vspace{0.5cm plus 0.2cm minus 0.2cm}
  \pagebreak[3]{\large\bf {\O@@oppgave} \theoppgavenummer\par}
}

\newenvironment{suboppgaver}{
  \begin{list}{{\bf \thesuboppgavenummer)}}%
  {\usecounter{suboppgavenummer}
  \setlength{\topsep}{0pt}}
}
{\end{list}}

\newenvironment{vedlegg}{
  \pagestyle{vedlegg}
  \renewcommand{\O@@harvedlegg}{1}
  \setcounter{page}{1}
}
{\label{pg:siste-vedleggside}\clearpage}

\AtEndDocument{
  \ifthenelse{\equal{\O@@harvedlegg}{0}}{
  \setcounter{page}{0}
  \label{pg:siste-vedleggside}
  }{}
}
