% \iffalse meta-comment % % Copyright (C) 2024- TeXniCie A-Eskwadraat (voorheen HekTeX) % % 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 . % % The current maintainer of this work is Jesse Straat. % % This work consists of the main file aeskwadraat.dtx % and the derived files % aeskwadraat.sty, aes.sty, aeskwadraat.pdf, aeskwadraat.ins, aeskwadraatbrief.cls, aeskwadraatfactuur.sty, aeskwadraatnotulen.cls, % aeskwadraatnotulen.sty, aeskwadraattaal.sty, beamerthemeaeskwadraat.sty, beamerthemeaes2.sty % % Unpacking: % (a) If aeskwadraat.ins is present: % pdflatex aeskwadraat.ins % (b) If aeskwadraat.ins is absent: % pdflatex aeskwadraat.dtx % % Documentation: % pdflatex aeskwadraat.dtx % makeindex -s gind.ist -o aeskwadraat.ind aeskwadraat.idx % makeindex -s gglo.ist -o aeskwadraat.gls aeskwadraat.glo % pdflatex aeskwadraat.dtx % %<*ignore> \iffalse % % %<*readme> # A-Eskwadraat LaTeX packages v1.0.1 This is the A-Eskwadraat LaTeX package catalogue. A-Eskwadraat is the study association for mathematics and physics at Utrecht University. The catalogue includes packages for meeting notes, a beamer theme, invoices and letters. These are the official packages for the association. # Installation Run the following in the command line: 1\. If aeskwadraat.ins is present: `pdflatex aeskwadraat.ins` 2\. If aeskwadraat.ins is absent: `pdflatex aeskwadraat.dtx` Move the `logos` folder and `.sty` and `.cls` files to a folder that TeX can find. # Documentation Run the following in the command line: ``` pdflatex aeskwadraat.dtx makeindex -s gind.ist -o aeskwadraat.ind aeskwadraat.idx makeindex -s gglo.ist -o aeskwadraat.gls aeskwadraat.glo pdflatex aeskwadraat.dtx ``` This automatically unpacks the package, as well. If you are looking for comments or documentation, you won't find any in the source. These packages make use of literate programming, which means that the documentation is given in the form of a pdf file. You can probably find aeskwadraat.pdf in this folder, by running "texdoc --view aeskwadraat" in the command line, or Googling "[your distribution] how to find package documentation". If you're using MiKTeX, open MiKTeX console, go to "Documentation" and look for "aeskwadraat". If you're still unsure, contact the TeXniCie at # Logos The images in the `logos/` subfolder are not covered by the project's license. The files `aeskwadraat_BW.pdf`, `aeskwadraat_RGB.pdf` and `aeskwadraat_slinger.pdf` are property of A-Eskwadraat and are released under the [CC BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/). The file `aeskwadraat_uulogo.jpg` (if included in your distribution) depicts the Utrecht University logo, and is property of the university. It may only be used by affiliates to the university. --- © 2024- TeXniCie A-Eskwadraat License: [GNU General Public License](https://www.gnu.org/licenses/) [GitLab Repository](https://gitlab.com/iba-aes/latex-packages) % % %<*ignore> \fi \def\plainTeXstring{plain} \ifx\fmtname\plainTeXstring\else \expandafter\begingroup \fi % % %<*install> \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} \Msg{* Package: aeskwadraat 2025/06/13 v1.0.1} \Msg{************************************************************************} \keepsilent \askforoverwritefalse \preamble Copyright (c) 2024- TeXniCie A-Eskwadraat (voorheen HekTeX) 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 . The current maintainer of this work is Jesse Sraat. This work consists of the main file aeskwadraat.dtx and the derived files aeskwadraat.sty, aes.sty, aeskwadraat.pdf, aeskwadraat.ins, aeskwadraatbrief.cls, aeskwadraatfactuur.sty, aeskwadraatnotulen.cls, aeskwadraatnotulen.sty, aeskwadraattaal.sty, beamerthemeaeskwadraat.sty, beamerthemeaes2.sty If you are looking for comments or documentation, you won't find any in the source. These packages make use of literate programming, which means that the documentation is given in the form of a pdf file. You can probably find aeskwadraat.pdf in this folder, by running "texdoc --view aeskwadraat" in the command line, or Googling "[your distribution] how to find package documentation". If you're using MiKTeX, open MiKTeX console, go to "Documentation" and look for "aeskwadraat". If you're still unsure, contact the TeXniCie at \endpreamble \usedir{tex/latex/aeskwadraat} \generate{ \file{aeskwadraat.sty}{\from{\jobname.dtx}{master}} \file{aes.sty}{\from{\jobname.dtx}{masterdeprecated}} \file{aeskwadraatnotulen.sty}{\from{\jobname.dtx}{notulen}} \file{aeskwadraatnotulen.cls}{\from{\jobname.dtx}{notulencls}} \file{beamerthemeaeskwadraat.sty}{\from{\jobname.dtx}{beamer}} \file{beamerthemeaes2.sty}{\from{\jobname.dtx}{beamerdeprecated}} \file{aeskwadraatfactuur.sty}{\from{\jobname.dtx}{factuur}} \file{aeskwadraatbrief.cls}{\from{\jobname.dtx}{brief}} \file{aeskwadraattaal.sty}{\from{\jobname.dtx}{taal}} } \obeyspaces \Msg{************************************************************************} \Msg{*} \Msg{* To finish the installation you have to move the following} \Msg{* files and folders into a directory searched by TeX:} \Msg{*} \Msg{* logos/} \Msg{* aeskwadraat.sty} \Msg{* aeskwadraatbrief.cls} \Msg{* aeskwadraatfactuur.sty} \Msg{* aeskwadraatnotulen.cls} \Msg{* aeskwadraatnotulen.sty} \Msg{* aeskwadraattaal.sty} \Msg{* beamerthemeaeskwadraat.sty} \Msg{* beamerthemeaes2.sty} \Msg{*} \Msg{* To produce the documentation run the file `aeskwadraat.dtx'} \Msg{* through pdfLaTeX.} \Msg{*} \Msg{* Happy TeXing!} \Msg{*} \Msg{************************************************************************} % %\endbatchfile % %<*ignore> \usedir{source/latex/aeskwadraat} \generate{ \file{\jobname.ins}{\from{\jobname.dtx}{install}} } \nopreamble\nopostamble \usedir{doc/latex/aeskwadraat} \generate{ \file{README.md}{\from{\jobname.dtx}{readme}} } \ifx\fmtname\plainTeXstring \expandafter\endbatchfile \else \expandafter\endgroup \fi % %<*driver> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \documentclass{ltxdoc} \usepackage{aeskwadraat} \usepackage[english]{aeskwadraatnotulen} \usepackage{aeskwadraatfactuur} \usepackage[english]{babel} \usepackage[final, hyperindex=false, colorlinks, ]{hyperref} \usepackage{hologo} \usepackage{array} \usepackage{tabularx} \usepackage[a4paper,top=1in,bottom=1in,left=2in,right=1in]{geometry} \renewcommand\tabularxcolumn[1]{m{#1}} \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{\jobname.dtx} \end{document} % % \fi % % \GetFileInfo{\jobname.sty} % % \DoNotIndex{\begin,\end,\begingroup,\endgroup,\csname,\endcsname,\ifcsname,\if,\ifdim,\else,\IfFileExists,\IfValueTF,\fi} % \DoNotIndex{\@,\-,\box,\copy,\def,\dots,\emph,\epsfig,\font} % \DoNotIndex{\framebox,\hbox,\hfill,\hspace,\includegraphics} % \DoNotIndex{\kern,\let,\linethickness,\lower,\magstep,\mathcal} % \DoNotIndex{\mbox,\newcommand,\normalfont,\officialeuro,\parbox} % \DoNotIndex{\put,\raise,\raisebox,\raiselength,\relax,\RequirePackage} % \DoNotIndex{\rule,\sc,\setbox,\setlength,\sl,\sqrt,\textrm} % \DoNotIndex{\textsf,\tmpfont,\typeout,\unitlength,\wd,\xspace} % \DoNotIndex{\",\%,\',\(,\),\,,\@@,\@alph,\@arabic,\@author} % \DoNotIndex{\@auxout,\@datem,\@dottedtocline,\@ifequal} % \DoNotIndex{\@ifundefined,\@maketitle,\@minus,\@mkboth} % \DoNotIndex{\@plus,\@startsection,\@starttoc,\@title} % \DoNotIndex{\\,\ ,\addcontentsline,\addtocontents} % \DoNotIndex{\addtocounter,\advance,\ap@,\AtBeginDocument} % \DoNotIndex{\AtEndDocument,\beamer@@pause} % \DoNotIndex{\beamer@framestartpage,\beamer@ifempty} % \DoNotIndex{\beamer@notesactions,\beamer@writeslidentry} % \DoNotIndex{\beamer@writeslidentry@miniframesoff} % \DoNotIndex{\beamer@writeslidentry@miniframeson} % \DoNotIndex{\bfseries,\bigskip,\boolean,\centering} % \DoNotIndex{\cfoot,\chead,\clearpage,\color,\contentsline} % \DoNotIndex{\cs,\CurrentOption,\date,\DeclareDocumentCommand} % \DoNotIndex{\DeclareOption,\defbeamertemplate,\definecolor} % \DoNotIndex{\defs,\documentclass,\dotfill,\edef,\equal} % \DoNotIndex{\evensidemargin,\expandafter,\ExplSyntaxOn} % \DoNotIndex{\ExplSyntaxOff,\familydefault,\fboxsep} % \DoNotIndex{\fontsize,\footnote,\footnotesize,\footrulewidth} % \DoNotIndex{\footskip,\fp,\g,\gdef,\global,\headcommand} % \DoNotIndex{\headheight,\headrulewidth,\headsep,\hline} % \DoNotIndex{\hoffset,\if@filesw,\if@twoside,\ifblank} % \DoNotIndex{\IfBooleanF,\ifmeasuring@,\ifnum,\ifthenelse} % \DoNotIndex{\ifx,\immediate,\int,\isundefined,\itemsep} % \DoNotIndex{\itshape,\kladd,\languagename,\LARGE,\Large} % \DoNotIndex{\large,\leavevmode,\lengthtest,\lfoot,\lhead} % \DoNotIndex{\lineskip,\linewidth,\LoadClass,\maketitle} % \DoNotIndex{\MakeUppercase,\maxof,\medskip,\MessageBreak} % \DoNotIndex{\multilinenumbers,\multicolumn,\multiply} % \DoNotIndex{\nameshape,\NeedsTeXFormat,\newboolean} % \DoNotIndex{\newcounter,\NewDocumentCommand} % \DoNotIndex{\NewDocumentEnvironment,\newenvironment} % \DoNotIndex{\newgeometry,\newif,\newlength,\newline} % \DoNotIndex{\newpage,\next@@,\node,\noexpand,\noindent} % \DoNotIndex{\noitemsep,\normalsize,\null,\oddsidemargin} % \DoNotIndex{\onslide,\PackageError,\PackageWarning} % \DoNotIndex{\pagenumbering,\pagestyle,\paperwidth,\par} % \DoNotIndex{\paragraph,\parindent,\parskip,\PassOptionsToClass} % \DoNotIndex{\PassOptionsToPackage,\pgfdeclarehorizontalshading} % \DoNotIndex{\pgfdeclarimage,\pgfuseimage,\pgfuseshading} % \DoNotIndex{\ProcessOptions,\protect,\ProvidesClass} % \DoNotIndex{\ProvidesPackage,\renewcommand,\renewrobustcmd} % \DoNotIndex{\rfoot,\rhead,\section,\selectfont,\setbeamercolor} % \DoNotIndex{\setbeamertemplate,\setboolean,\setcounter} % \DoNotIndex{\sfdefault,\slshape,\space,\stepcounter,\string} % \DoNotIndex{\subparagraph,\subsection,\subsubsection} % \DoNotIndex{\TeX,\textbf,\textheight,\textsc,\textwidth} % \DoNotIndex{\thanks,\the,\thepage,\title,\tl,\today} % \DoNotIndex{\topmargin,\unless,\useinnertheme,\usetheme} % \DoNotIndex{\value,\voffset,\vskip,\vspace,\whiledo,\write} % \DoNotIndex{\z@,\@date,\@writefile,\@evenfoot,\@evenhead} % \DoNotIndex{\@oddfoot,\@oddhead,\`,\and,\baselineskip} % \DoNotIndex{\bfdefault,\bullet,\cleanup,\ExecuteOptions} % \DoNotIndex{\ifpdftex,\insertframenumber,\inserttotalframenumbder} % \DoNotIndex{\itdefault,\item,\itemindent,\items,\labelsep} % \DoNotIndex{\labelwidth,\leftmargin,\listparindent,\maketitle} % \DoNotIndex{\modulolinenumbers,\newsavebox,\parsep,\rmdefault} % \DoNotIndex{\savebox,\scdefault,\seriesdefault,\setmainfont} % \DoNotIndex{\setmonofont,\setsansfont,\sffamily,\shapedefault} % \DoNotIndex{\sldefault,\smash,\spaceskip,\thispagestyle} % \DoNotIndex{\tikz,\topsep,\ttdefault,\updefault,\vphantom} % \DoNotIndex{\xspaceskip,\fill,\hfuzz,\Huge,\insertauthor} % \DoNotIndex{\insertinstitute,\insertsectionhead,\insertsubsectionhead} % \DoNotIndex{\insertsubtitle,\inserttitle,\inserttitlegraphic} % \DoNotIndex{\inserttotalframenumber,\logo,\mddefault,\pgfdeclareimage} % \DoNotIndex{\provideboolean,\ps@footer,\raggedright,\randuck} % \DoNotIndex{\rightmargin,\rightskip,\scantokens,\scriptsize} % \DoNotIndex{\subject,\textcolor,\vfuzz} % \DoNotIndex{\TAALannuleringsvoorwaardentext,\TAALbetalingsvoorwaardentext} % \DoNotIndex{\aeskwadraattaal@babelselectlanguage} % % \title{^^A % The \textsf{aeskwadraat} package collection\thanks{^^A % Version \fileversion, last revised \filedate.^^A % }^^A % }^^A % \author{^^A % Jesse Straat (\TeXniCie, texnicie@a-eskwadraat.nl)^^A % } % \date{\filedate} % % \maketitle % % \begin{abstract} % \noindent This is a collection of packages used by the % \aesnaam{} study association at Utrecht University. % \end{abstract} % % \tableofcontents % % \changes{v1.0}{2024/08/24}{First release as dtx file} % \changes{v1.0.1}{2024/08/24}{README was given introduction} % \changes{v1.0.1}{2024/12/02}{Changed file names to all start with ``aeskwadraat''} % % % \StopEventually{^^A % \clearpage % \PrintChanges % \PrintIndex %} % % % % % \section{The package catalogue} % There is a large number of \aesnaam{} \LaTeX{} packages % that have been written over the years. Only a selection of % them have made it to this collection. Below you can find a short % summary of all packages provided. % \begin{center} % \begin{tabularx}{\textwidth}{| c | X |}\hline % \textbf{Package name} & \textbf{Summary}\\\hline % \textsf{aeskwadraat.sty} & Master package, providing useful macros\\\hline % \textsf{aeskwadraatnotulen.sty} & Package for generating meeting notes\\\hline % \textsf{aeskwadraatnotulen.cls} & Class that imports \textsf{aeskwadraatnotulen.sty} and makes the document pretty\\\hline % \textsf{beamerthemeaeskwadraat.sty} & Document theme for beamer\\\hline % \textsf{aeskwadraatfactuur.sty} & Package that adds invoices (with \textsf{aeskwadraatbrief.cls} support)\\\hline % \textsf{aeskwadraatbrief.cls} & Class for writing letters\\\hline % \textsf{aeskwadraattaal.sty} & Auxiliary package for language support\\\hline % \end{tabularx} % \end{center} % % \subsection{Project contributors} % The following persons have made significant contributions to the \aesnaam{} % \LaTeX{} collection: % \begin{itemize} % \item Roelof Ruules, 1995 -- 1996 % \item Jeroen Hoekstra, 1995 -- 1996 % \item Jeroen van Dijk, 1995 -- 1996 % \item Frank van Lankvelt, -- 2000 % \item Arthur van Dam, -- 2001 % \item Henk Bearda, 2000 -- 2002 % \item Bas Zoetekouw, -- 2002 % \item Theo van den Bogaart, -- 2003 % \item Jan Jitse Venselaar, 2002 -- 2008 % \item Roland Vaandrager, 2005 -- 2008 % \item Sweitse van Leeuwen, 2005 -- 2008 % \item Jeroen Leeuwestein, 2007 -- 2009 % \item Bas van Schaik, 2009 % \item Jesse Straat, 2024 % \end{itemize} % % And probably many others\dots % % % % % \section{Package \textsf{aeskwadraat}} % \changes{v1.0.1}{2024/08/28}{Changed name from \textsf{aes} to \textsf{aeskwadraat}} % \textsf{aeskwadraat} is the master package of this library. % It defines several important macros to be used in many % other packages. In particular, it defines logos and typesets % committee names.\par % The \aesnaam{} name and logo are both provided as macros. The % name is generated by \DescribeMacro{\aesnaam} |\aesnaam{}|. % This is done to ensure that potential linebreaks happen in places that are grammatically % correct. Furthermore, the argument can be used to make compounds. For example, % |\aesnaam{}| outputs \aesnaam{}, while |\aesnaam{kamer}| outputs \aesnaam{kamer}.\par % Of course, the dash in \aesnaam{} is the ``en dash'' or ``half kastlijntje''. This dash % is used to denote ranges, and since the ``A--E'' signifies a range, ``A tot E'', it should % be treated to an en dash. To replicate this in \LaTeX{}, use two dashes like so: |--|.\par % On logos, our name is typeset using blocks. The blocks can be created % using \DescribeMacro{\blokjes} |\blokjes{fontsize}|, where |fontsize| should be replaced by the desired font size. % For example, |\blokjes{2pt}| returns \blokjes{2pt} and |\blokjes{1em}| returns \blokjes{1em}.\par % To add our association's description to the right side, use either \DescribeMacro{\aes} |\aes| for the Dutch % version or \DescribeMacro{\eaes} |\eaes| for the English version.\\ % \aes\\ % \eaes\par % \vspace{1em} % Our full logo is created using \DescribeMacro{\aeslogo} |\aeslogo[width]|, e.g., |\aeslogo| % returns \aeslogo. The width is optional, \(20\) mm by default. If you prefer a black-white logo, you can use % \DescribeMacro{\aeslogogrijs} |\aeslogogrijs[width]|.\par % \DescribeMacro{\axicie}\DescribeMacro{\BBCie}\DescribeMacro{\aesroots}\DescribeMacro{\TeXniCie}\DescribeMacro{\btw}\DescribeMacro{\TbC} % Here follows a table of logos and typeset names used for different committees. % \begin{center}\begin{tabular}{| c | c |}\hline % |\axicie| & \axicie\\\hline % |\BBCie| or |\bbcie| & \BBCie\\\hline % |\aesroots| or |\aeskwadraatroots| & \aesroots\\\hline % |\TeXniCie| or |\texnicie| or |\hektex| & \TeXniCie\\\hline % |\btw| & \btw\\\hline % |\TbC| or |\tbc| & \TbC\\\hline % \end{tabular}\end{center} % We've defined a macro for inputting euros. It's \DescribeMacro{\euro}|\euro|: \euro. Surprise. % Since the package was written, \LaTeX{} has added out-of-the-box support for the euro: €. % But this looks bad, so we use |\euro|. The macro is implemented using \textsf{eurosym}. % % % % % \section{Package \textsf{aeskwadraatnotulen}} % To write meeting notes, \aesnaam{} members use % the \textsf{aeskwadraatnotulen} package. It is available % both as a package and as a class, which also provides % some visual improvements, such as a header, a nicer font % and a title command that includes people's presence.\par % By default, |aeskwadraatnotulen| is in Dutch. To instead use % the English version, use the |english| option.\par % The primary functionality of this package is to provide % macros which take note of important conclusions of the % meeting and output them into a list at the end of the document.\par % The list also contains hyperlinks to the place where % the macro is used.\par % By default, the lists also appear in a table of contents. % However, if starred, they will not.\par % Due to the implementation, it is impossible to generate % the same list twice. This is a bug and should be fixed % in a future version.\par % The first of these macros is \DescribeMacro{\besluit} |\besluit|, % which is used for decisions. For example, |\besluit{Foo.}| outputs % \besluit{Foo.} To generate the list of all decisions, use % \DescribeMacro{\besluitenlijst} |\besluitenlijst|:\besluitenlijst* % Similarly, we have the macro \DescribeMacro{\advies} |\advies| % for advices. |\advies{Foo.}| outputs \advies{Foo.} The list is % generated by |\adviezenlijst|: \adviezenlijst* % The macro for information that should be forwarded % to the board is \DescribeMacro{\ahb} |\ahb|, where % |\ahb{Foo.}| gives \ahb{Foo.} The associated list % is |\aanhetbestuur|:\aanhetbestuur* % For advice for the advisory board, use \DescribeMacro{\aar}. % |\aar{Foo.}| outputs \aar{Foo.} The corresponding list is % \DescribeMacro{\aanadviesraad} |\aanadviesraad|:\aanadviesraad* % A special macro is \DescribeMacro{\ap} |\ap|, which % is used for tasks. Its syntax is |\ap{name}{task}|. % For example, |\ap{Baz}{Foo.}| returns \ap{Baz}{Foo.} % It is possible to define macros for names using % \DescribeMacro{\korteapnaam} |\korteapnaam{macro}{name}|. % For example, |\korteapnaam{Baz}{Foobarbaz}| makes |\Baz| output % \korteapnaam{Baz}{Foobarbaz}\Baz. It shines when used % for people with long names, but is useful in all cases. % We can now use this macro to give \Baz a task: % |\ap{\Baz}{Change your name.}| returns % \ap{\Baz}{Change your name.} % There are two lists produced for tasks, \DescribeMacro{\aplijst} % |\aplijst|, which provides a simple list, and \DescribeMacro{\aplijstpp} % |\aplijstpp|, which lists tasks per person. Due to the % aforementioned impossibility of using two of the same % type of list, the two commands are incompatible. This % also means we sadly cannot showcase both in this document. % |\aplijstpp| produces \aplijstpp* % Another key functionality is being able to keep track % of the attendance of the meeting. To mark a collection % of names as present, use \DescribeMacro{\aanwezig} % |\aanwezig{naam1, naam2}|\aanwezig{naam1, naam2}. To % mark names as absent, use \DescribeMacro{\afwezig} % |\afwezig{naam3, naam4}|\afwezig{naam3, naam4}. You % can then output the list of present and absent people % using \DescribeMacro{\naamzet} |\naamzet|:\\ % \naamzet\\ % If the \textsf{aeskwadraatnotulen} class is loaded, % presence of names is also added to the |\maketitle|.\par % As for some miscellaneous macros, \DescribeMacro{\wvttk} % |\wvttk| returns \wvttk. \DescribeMacro{\opm} |\opm{comment}| % can be used to create a comment: \opm{comment}. % \DescribeMacro{\noitemsep} |\noitemsep| is used to remove % vertical spacing between items in lists, like |itemize| % or |enumerate|. For optimal usage, using it within % a |\begingroup ... \endgroup| does not influence any % lists outside the group. \DescribeMacro{\EUR} |\EUR{Foo}| % is used to generate a euro symbol \EUR{Foo}. % % % % % \section{Beamertheme \textsf{aeskwadraat}} % The |beamerthemeaeskwadraat.sty| file is used to generate % a beamer theme. To import it, use |\usetheme{aeskwadraat}| % in a beamer presentation.\par % By default, the theme uses an \aesnaam{} theme, with % red colours and the \aesnaam{} logo. To change this, % it is possible to set the colour using \DescribeMacro{\setstylecolor} % |\setstylecolor{R,G,B}|, with |R|, |G|, |B| values between % 0 and 255. Furthermore, using \DescribeMacro{\setlogo} % |\setlogo{file}|, you can use your own logo, which is % automatically made a little transparent. By leaving |file| % blank, no logo will be used.\par % If one wishes to use a Utrecht University theme, with % yellow colours and the Utrecht University logo, use % the |uu| option while loading the theme. Keep in mind % that the Utrecht University logo may only be used by % affiliates to the university (see README file). Due to % copyright reasons, your distributor may have excluded % the logo, producing a warning. To fix it, go to % \url{https://www.uu.nl/en/organisation/corporate-identity/guidelines/logo} % and download the logos with white background the file. % Rename the file |UU_logo_2021_EN_BLACK.jpg| to % |aeskwadraat_uulogo.jpg| and moved to a folder where % \LaTeX{} can find it (so either the project itself % or the |/logos/| folder of this package).\par % The theme provides a progress bar on the bottom of % the presentation. To get rid of this, use the % |noprogress| option. To add a gradient at the end, % as in the older version of the theme, use the option % |gradient|. Do note that the gradient causes some % visual bugs, depending on your pdf reader.\par % To exclude a group of slide from the progress blocks on top % of the presentation, use \DescribeMacro{\miniframesoff} |\miniframesoff|. % To reinclude them, use \DescribeMacro{\miniframeson} |\miniframeson|.\par % By default, the theme loads a ``modernised'' layout, % which is different from the famous Frankfurt theme. % It also includes section and subsection frames. To % go back to the original layout, use the |legacy| option.\par % Finally, there's the most important feature: use \DescribeMacro{\questionframe} % to produce a questions frame with a randomised duck on it.\par % It is possible to set a |\title|, |\subtitle|, |\author| and |\institute| % on the title page. Both layouts deal with these in their % own way. % % % % % \section{Package \textsf{aeskwadraatfactuur}} % \textsf{aeskwadraatfactuur.sty} allows the user to generate % invoices. It is mainly used by the SpoCie committee.\par % As part of this full release, this package was rewritten % entirely to work with \hologo{LaTeX3}. Since regular % \LaTeX2e does not support floating points, the original % implementation relied on many workarounds, and sported % several (significant) bugs. This does, however, mean % that the new implementation is less readable for the % unexperienced user.\par % \textsf{aeskwadraatfactuur.sty} also supports \textsf{aeskwadraatbrief.cls} % through the |factuurbrief| environment, which automatically % generates an accompanying letter.\par % To get started, use the \DescribeEnv{factuur} |factuur| environment, % from which we can start adding items. For example, to % add an item with a fixed amount, use \DescribeMacro{\post} % |\post{item}{value}|, and to add a percentage of the total, % use \DescribeMacro{\procent} |\procent{item}{percentage}|. To display the subtotal, use % \DescribeMacro{\subtotaal} |\subtotaal|. For example, % \begin{verbatim} %\begin{factuur} % \post{A lot of money}{12345.67} % \subtotaal % \procent{BTW}{21} % \procent{Interest}{0.06} %\end{factuur} % \end{verbatim} % produces\par % \begin{factuur} % \post{A lot of money}{12345.67} % \subtotaal % \procent{BTW}{21} % \procent{Interest}{0.06} % \end{factuur}\par % Note that thousands are automatically split using a % comma, and decimals are rounded to the nearest cent. % If \textsf{aeskwadraattaal.sty} is used to change the language % to Dutch, the comma and period swap places (as expected % in Dutch).\par % If desired, the currency can be changed to a different % one by using \DescribeMacro{\valuta} |\valuta{currency}|. % For example, the pound can be achieved by |\valuta{£}|. % Do remember to use |\$|, instead of |$|, to produce a % dollar symbol.\par % If \DescribeMacro{\meerPaginas} |\meerpaginas| is used % before the |factuur|, the invoice will automatically % split across pages. When the page is broken, a short comment % will appear to warn the reader about the next pages. It is % also possible to manually break the page using \DescribeMacro{\nieuwePagina} % |\nieuwePagina|.\par % If \textsf{aeskwadraatbrief.cls} is loaded, some additional % functionalities are available. \DescribeMacro{\ovv} |\ovv{reference}| % sets the reference of the invoice. \DescribeMacro{\herinnering} % |\herinnering| makes the invoice a reminder, while \DescribeMacro{\aanmaning} % |\aanmaning| makes an \textit{assertive} reminder. By using % \DescribeMacro{\factuurtitel} |\factuurtitel{title}|, one may % set the title of the letter. By then replacing the % |factuur| environment with \DescribeEnv{factuurbrief} % |factuurbrief|, a letter is generated. The environment takes a single argument: % the recipient's address. % % % % % \section{Class \textsf{aeskwadraatbrief}} % The \textsf{aeskwadraatbrief} class generates various letters % used by \aesnaam{}. It automatically changes some % visuals, such as the margins, and selects a font % (for both \hologo{pdfLaTeX} and \hologo{LuaLaTeX}/\hologo{XeLaTeX}).\par % To start writing a letter, the environment \DescribeEnv{brief} |brief| % should be used. The environment takes a single argument: % the recipient's address.\par % The letter requires some parameters. The first is % \DescribeMacro{\afzendernaam} |\afzendernaam{sender}|, which % sets the sender. By default, it is \aesnaam{}. \DescribeMacro{\cienaam} % |\cienaam{committee}| sets the committee that was in % charge of sending the letter.\par % \DescribeMacro{\uwk} |\uwk{reference}| and \DescribeMacro{\onsk} |\onsk{reference}| % are used to add references for invoice letters (to be % used with \textsf{aeskwadraatfactuur}).\par % To add a list of attachments, \DescribeMacro{\bijlagen} % |\bijlagen{attachments}| is to be used. The list of % of attachments should be separated by |\item|s; % otherwise, the whole argument is treated as a single % attachment.\par % \DescribeMacro{\opening} |\opening{text}| creates an opening % paragraph, together with the letter header. If, instead, % one wants the header without an opening paragraph, % \DescribeMacro{\geenopening} |\geenopening| is to be used.\par % To add a signature to the letter, \DescribeMacro{\signature} % |\signature{signature}| should be used. It is typeset % by using \DescribeMacro{\closing} |\closing|. % % % % % \section{Package \textsf{aeskwadraattaal}} % The \textsf{aeskwadraattaal} package provides (mostly) % simple internal macros. So by its nature, any % decent documentation should include almost the entire % source code. Please refer to the source code if you % would like to learn more. % % % % % \clearpage % \section{Source code} % This section contains the source code of the library. % It contains some explaining descriptions, allowing for % \href{https://https://en.wikipedia.org/wiki/Literate_programming}{literate programming}. % This is where the documentation for ``regular people'' ends. % \subsection{\textsf{aeskwadraat}} % \begin{macrocode} %<*master> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \ProvidesPackage{aeskwadraat}[2025/06/13 v1.0.1 A-Eskwadraat master package] %% Copyright (C) 1995-2015 TeXniCie A-Eskwadraat %% % \end{macrocode} % Function: This master package is used for other classes.\par % We require the 2020/10/01 release of \LaTeXe{} to ensure we % have the \textsf{xparse} package preloaded.\par % We load some packages % \begin{macrocode} \RequirePackage{xspace} \RequirePackage{graphicx} \RequirePackage{epsfig} % \end{macrocode} % \begin{macro}{\blokjes} % \begin{macro}{\aes} % \begin{macro}{\eaes} % |\blokjes[fontsize]| is used to create our beautiful blocky % logo \blokjes{3pt}. |\aes| and |\eaes| append it with a description % of our association. % \begin{macrocode} \newlength{\raiselength} \newcommand{\@aesl}[1]{% \begin{picture}(5,5) \put(0,0.5){\framebox(4.5,4.5)[b]{ \raisebox{\raiselength}{{\tmpfont #1}}} } % the box with letter \put(0.5,0){\rule{4.5\unitlength}{0.5\unitlength}} \put(4.5,0){\rule{0.5\unitlength}{4.5\unitlength}} \end{picture}} \NewDocumentCommand{\blokjes}{ m }{% \ifdim#1<6pt \setlength{\unitlength}{.5mm} \font\tmpfont=cmr5 \else \ifdim#1<7pt \setlength{\unitlength}{.6mm} \font\tmpfont=cmr6 \else \ifdim#1<8pt \setlength{\unitlength}{.7mm} \font\tmpfont=cmr7 \else \ifdim#1<9pt \setlength{\unitlength}{.8mm} \font\tmpfont=cmr8 \else \ifdim#1<10pt \setlength{\unitlength}{.9mm} \font\tmpfont=cmr9 \else \ifdim#1<11pt \setlength{\unitlength}{1mm} \font\tmpfont=cmr10 \else \ifdim#1<13pt \setlength{\unitlength}{1.2mm} \font\tmpfont=cmr12 \else \ifdim#1<15pt \setlength{\unitlength}{1.4mm} \font\tmpfont=cmr12 scaled \magstep1 \else \ifdim#1<18pt \setlength{\unitlength}{1.7mm} \font\tmpfont=cmr17 \else \ifdim#1<21pt \setlength{\unitlength}{2mm} \font\tmpfont=cmr17 scaled \magstep1 \else \setlength{\unitlength}{2.4mm} \font\tmpfont=cmr17 scaled \magstep2 \ifdim#1>24pt \typeout{Warning: largest `blokjes' dimension is 24pt, which I will use right now} \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \linethickness{.1\unitlength} \setlength{\raiselength}{.9\unitlength} \begin{minipage}{36\unitlength} \begin{picture}(35,11) \put(0,6){\@aesl{A}} \put(6,6){\@aesl{-}} % TODO: check whether this should be an en dash \put(12,6){\@aesl{E}} \put(18,6){\@aesl{s}} \put(24,6){\@aesl{k}} \put(30,6){\@aesl{w}} % \put(0,0){\@aesl{a}} \put(6,0){\@aesl{d}} \put(12,0){\@aesl{r}} \put(18,0){\@aesl{a}} \put(24,0){\@aesl{a}} \put(30,0){\@aesl{t}} \end{picture} \end{minipage}} \NewDocumentCommand{\aes}{}{\blokjes{10pt}\hfill\parbox{8cm}{% Studievereniging voor studenten in de wis-, natuur-, sterrenkunde, geofysica en informatica}} \NewDocumentCommand{\eaes}{}{\blokjes{10pt}\hfill\parbox{8cm}{% Association of students in physics, mathematics, computer science, astronomy and geophysics}} % FIXME: outdated description % TODO: Should "association of students" be "study association"? % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\euro} % The all-important |\euro|, \euro. % \begin{macrocode} \RequirePackage{eurosym} \let\euro\officialeuro % \end{macrocode} % \end{macro} % \begin{macro}{\aesnaam} % |\aesnaam{}| outputs the name of the study association, \aesnaam{}. % It can be used to create compounds, such as |\aesnaam{kamer}|, which % outputs \aesnaam{kamer}. % \begin{macrocode} \NewDocumentCommand{\aesnaam}{ m }{% \mbox{A--Es}\-kwa\-draat#1\xspace% } \let\aeskwadraat\aesnaam % \end{macrocode} % \end{macro} % \begin{macro}{\aeslogo} % \begin{macro}{\aeslogogrijs} % We create a macro for creating the \aesnaam{} logo.\par % \aeslogo \aeslogogrijs % \begin{macrocode} \NewDocumentCommand{\aeslogo}{ O{20mm} }{% \includegraphics[width=#1]{logos/aeskwadraat_RGB.pdf}} \NewDocumentCommand{\aeslogogrijs}{ O{20mm} }{% \includegraphics[width=#1]{logos/aeskwadraat_BW.pdf}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\axicie}\begin{macro}{\BBCie}\begin{macro}{\aesroots}\begin{macro}{\TeXniCie}\begin{macro}{\btw}\begin{macro}{\TbC} % These macros typeset committee names or generate their logos. % \begin{macrocode} \newcommand\aes@pmb[1]{ \setbox0=\hbox{#1}% \kern-0.025em\copy0\kern-\wd0 \kern0.05em\copy0\kern-\wd0 \kern-0.025em\raise0.0433em\box0 } \NewDocumentCommand\axicie{}{{\normalfont\sc\aes@pmb{axicie}}} \NewDocumentCommand{\BBCie}{ O{12pt} }{% \lower2pt\hbox{\epsfig{% file=bbclogo,height=#1}}} \let\bbcie\BBCie % \newcommand{\TbC}{\(\mathcal{T}\)\hspace{-0.45em} % \raisebox{-0.5ex}{\(\mathcal{B}\)}\(\mathcal{C}\)} \let\tbc\TbC \NewDocumentCommand{\aesroots}{}{% \mbox{\mbox{\(\textrm{A--Es}^2\)}\hspace{-3pt} \mbox{\(\sqrt{\textrm{\emph{roots}}}\)}}\xspace} \let\aeskwadraatroots\aesroots \NewDocumentCommand{\TeXniCie}{}{% \mbox{\textsf{\TeX niCie}}} \let\texnicie\TeXniCie \let\hektex\TeXniCie \NewDocumentCommand{\btw}{}{% {\sl``By the way\dots''}} \NewDocumentCommand{\TbC}{}{% \(\mathcal{T} \kern-.45em\lower.5ex\hbox{\(\mathcal{B}\)}% \kern-.00em\mathcal{C}\)\@\relax% } % \end{macrocode} % \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} % \begin{macrocode} % % \end{macrocode} % We create a package to catch people using the % deprecated \textsf{aes.sty}. It loads \textsf{aeskwadraat.sty} % and gives a warning. % \begin{macrocode} %<*masterdeprecated> \ProvidesPackage{aes}[2025/06/13 v1.0.1 Deprecated A-Eskwadraat package] \PackageWarning{aes}{Package deprecated! Load package "aeskwadraat", instead. This package might no longer exist in a future update! Loading aeskwadraat...} \usepackage{aeskwadraat} % % \end{macrocode} % % % % % \subsection{\textsf{aeskwadraatnotulen}} % \setcounter{CodelineNo}{0} % \begin{macrocode} %<*notulen> % \end{macrocode} % As of the 2021/11/15 version of \LaTeXe{}, |\contentsline| % requires a fourth argument, which is used in this package. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[2021/11/15] \ProvidesPackage{aeskwadraatnotulen}[2025/06/13 v1.0.1 A-Eskwadraat notulen] %% Copyright (C) 2003-2015 TeXniCie A-Eskwadraat %% % \end{macrocode} % We define an option |english| to make the output of the package English % \begin{macrocode} \newif\ifeng@art \eng@artfalse \DeclareOption{english}{\eng@arttrue} \ProcessOptions\relax \ifeng@art\RequirePackage[english]{babel} \else\RequirePackage[dutch]{babel} \fi % \end{macrocode} % \begin{macro}{\ifnotulen@stiekemext} % The following if checks whether the \textsf{stiekemext} package % is loaded. % \begin{macrocode} \newif\ifnotulen@stiekemext \notulen@stiekemextfalse % \end{macrocode} % \end{macro} % We import essential packages % \begin{macrocode} \RequirePackage{aeskwadraat, ifthen, calc} % \end{macrocode} % We now go on to defining commands which will create a % table with all decisions, together with a reference to % where they were made.\par % We now go on to defining commands which will create a % table with all decisions, together with a reference to % where they were made.\par % \begin{macro}{\besluit} % Use |\besluit{decision}| to create a ``decision''.\\ % |\besluit{\LaTeX{} rules.}| outputs \besluit{\LaTeX{} rules.}\par % \begin{macro}{\besluitenlijst} % Use |\besluitenlijst| at the end of your document to % create a table of contents for all decisions made. % ^^A TODO: Make all of this in a single macro, then generate the commands for other cases % \begin{macrocode} \ifeng@art\newcommand{\besluitenlijstnaam}{Resolutions} \else\newcommand{\besluitenlijstnaam}{Besluitenlijst} \fi \newcommand{\besluitenlijstentry}{ \addcontentsline{toc}{section}{\besluitenlijstnaam} } \NewDocumentCommand{\besluitenlijst}{ s }{% \IfBooleanF{#1}{\besluitenlijstentry} \section*{\besluitenlijstnaam \@mkboth{\MakeUppercase\besluitenlijstnaam}% {\MakeUppercase\besluitenlijstnaam}}% \@starttoc{lob}% } \newcommand{\l@besluit}{\@dottedtocline{1}{1.5em}{2.3em}} \newcommand{\besluit}[1]{% % We look at level and huidigniveau to decide whether % the decision should be in the table of contents \ifnotulen@stiekemext \addtocounter{level}{-1} \ifnum \thelevel < \thestiekemext@huidigniveau % with addtocounter this becomes a <= \par \ifeng@art\textbf{Decision:}\else\textbf{Besluit:}\fi \hspace{5mm} #1 % kandidaat voor aeskwadraattaal migratie? \addcontentsline{lob}{besluit} {\hetbesluit\hspace{1em}{{% \color{niveau\thestiekemext@huidigniveau}#1}}} \addtocounter{besluit}{1} \par \fi \addtocounter{level}{1} \else% stiekemext is NOT loaded \par \ifeng@art\textbf{Decision:}\else\textbf{Besluit:}\fi \hspace{5mm} #1 \addcontentsline{lob}{besluit} {\hetbesluit\hspace{1em}{#1}} \addtocounter{besluit}{1} \par \fi } \newcounter{besluit} \setcounter{besluit}{1} \newcommand{\hetbesluit}{\@arabic\c@besluit} % \end{macrocode} % \end{macro}\end{macro} % \begin{macro}{\advies}\begin{macro}{\adviezenlijst} % Similarly to |\besluit|, use |\advies{advice}| for % an advice.\\ % |\advies{Stop using Overleaf}.| outputs \advies{Stop using Overleaf.} % Use |\adviezenlijst| to generate a table % of contents. % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % De onderstaande code is gecopypaste van % het bovenstaande. % (besluit, advies, van- voor het bestuur en ap zijn hetzelfde) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifeng@art \newcommand{\adviezenlijstnaam} {Advices} \else \newcommand{\adviezenlijstnaam} {Adviezenlijst} \fi \newcommand{\adviezenlijstentry}{ \addcontentsline{toc}{section}{\adviezenlijstnaam} } \NewDocumentCommand{\adviezenlijst}{ s }{% \IfBooleanF{#1}{\adviezenlijstentry} \section*{\adviezenlijstnaam \@mkboth{\MakeUppercase\adviezenlijstnaam}% {\MakeUppercase\adviezenlijstnaam}}% \@starttoc{lobadvies}% } \newcommand{\l@advies}{\@dottedtocline{1}{1.5em}{2.3em}} \newcommand{\advies}[1]{% % We look at level and huidigniveau to decide whether % the decision should be in the table of contents \ifnotulen@stiekemext \addtocounter{level}{-1} \ifnum \thelevel < \thestiekemext@huidigniveau \par \ifeng@art\textbf{Recommendation:} \else\textbf{Advies:} \fi \hspace{5.5mm} #1 \addcontentsline{lobadvies}{advies} {\hetadvies\hspace{1em}{{% \color{niveau\thestiekemext@huidigniveau}#1}}} \addtocounter{advies}{1} \par \fi \addtocounter{level}{1} \else% stiekemext is NOT loade \par \ifeng@art\textbf{Recommendation:} \else\textbf{Advies:} \fi \hspace{5.5mm} #1 \addcontentsline{lobadvies}{advies} {\hetadvies\hspace{1em}{#1}} \addtocounter{advies}{1} \par \fi } \newcounter{advies} \setcounter{advies}{1} \newcommand{\hetadvies}{\@arabic\c@advies} % \end{macrocode} % \end{macro}\end{macro} % \begin{macro}{\ahb}\begin{macro}{\aanhetbestuur} % Similarly to |\besluit|, use |\ahb{text}| for % information that should be relayed to the board, and % use |\aanhetbestuur| to generate a table of contents. % \begin{verbatim}\ahb{Thanks for your service.}\end{verbatim} outputs \ahb{Thanks for your service.} % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % De onderstaande code is gecopypaste van % het bovenstaande. % (besluit, advies, van- voor het bestuur en ap zijn hetzelfde) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifeng@art \newcommand{\aanhetbestuurnaam} {To the board} \else \newcommand{\aanhetbestuurnaam} {Aan het bestuur} \fi \newcommand{\aanhetbestuurentry}{ \addcontentsline{toc}{section}{\aanhetbestuurnaam} } \NewDocumentCommand{\aanhetbestuur}{ s }{% \IfBooleanF{#1}{\aanhetbestuurentry} \section*{\aanhetbestuurnaam \@mkboth{\MakeUppercase\aanhetbestuurnaam}% {\MakeUppercase\aanhetbestuurnaam}}% \@starttoc{lobahb}% } \newcommand{\l@ahb}{\@dottedtocline{1}{1.5em}{2.3em}} \newcommand{\ahb}[1]{% \par \textbf{\aanhetbestuurnaam}: \hspace{5.5mm} #1 \addcontentsline{lobahb}{ahb} {\ahbestuur\hspace{1em}{#1}} \addtocounter{ahb}{1} \par } \newcounter{ahb} \setcounter{ahb}{1} \newcommand{\ahbestuur}{\@alph\c@ahb} % \end{macrocode} % \end{macro}\end{macro} % \begin{macro}{\aar}\begin{macro}{\aanadviesraad} % Similarly to |\besluit|, use |\aar{text}| for % information that should be relayed to the advisory % board, and use |\aanadviesraad| to generate a table % of contents. \begin{verbatim}\aar{I heard you like advice.}\end{verbatim} outputs % \aar{I heard you like advice.} % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % De onderstaande code is gecopypaste van % het bovenstaande. % (besluit, advies, van- voor het bestuur en ap zijn hetzelfde) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifeng@art \newcommand{\aanadviesraadnaam} {To advisory board} \else \newcommand{\aanadviesraadnaam} {Aan de adviesraad} \fi \newcommand{\aanadviesraadentry}{ \addcontentsline{toc}{section}{\aanadviesraadnaam} } \NewDocumentCommand{\aanadviesraad}{ s }{% \IfBooleanF{#1}{\aanadviesraadentry} \section*{\aanadviesraadnaam \@mkboth{\MakeUppercase\aanadviesraadnaam}% {\MakeUppercase\aanadviesraadnaam}}% \@starttoc{lobaar}% } \newcommand{\l@aar}{\@dottedtocline{1}{1.5em}{2.3em}} \newcommand{\aar}[1]{% \par \textbf{\aanadviesraadnaam}: \hspace{5.5mm} #1 \addcontentsline{lobaar}{aar} {\aadviesraad\hspace{1em}{#1}} \addtocounter{aar}{1} \par } \newcounter{aar} \setcounter{aar}{1} \newcommand{\aadviesraad}{\@alph\c@aar} % \end{macrocode} % \end{macro}\end{macro} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \begin{macro}{\ap} % Use |\ap{name}{task}| to assign a task (``actiepunt'') to a name. For example, % \begin{verbatim}\ap{Jesse}{Write \LaTeX{}.}\end{verbatim} outputs \ap{Jesse}{Write \LaTeX{}.}\par % It is also possible to use multiple names by separating them using % commas:\begin{verbatim}\ap{name1,name2,name3,...}{task}\end{verbatim} % These tasks can later be exported to a table of contents (either |\aplijst| or |\aplijstpp|). % \begin{macrocode} \ifeng@art \newcommand{\aplijstnaam}{List of Assigned Tasks} \else \newcommand{\aplijstnaam}{Actiepunten} \fi \newcommand{\aplijstentry}{ \addcontentsline{toc}{section}{\aplijstnaam} } % Auxiliary command. Creates a list of tasks after \@actiepunt % is defined. \newcommand\ap@maakaplijst{% \section*{\aplijstnaam \@mkboth{\MakeUppercase{\aplijstnaam}}% {\MakeUppercase{\aplijstnaam}}}% \@starttoc{loa}% % \aplijst and \aplijstpp aren't compatible due to \@starttoc. % If both are used, only one actually does anything. % -- Jesse } %TODO: Get rid of all TeX \defs, replace with % proper \newcommand or \NewDocumentCommand \def\verwijdern@@m#1#2{% \def\cleanup##1, !{% ##1% } \def\verwijder##1#2, ##2\relax{% \global\edef\tempn@menlijst{##1##2}% } \verwijder#1, \relax% \expandafter\cleanup\tempn@menlijst!% } % defines \@actiepunt for use with \aplijstpp, \aplijst % redefines the command \def\@actiepunt#1#2#3{% <- name, task, page % % Look for ##1 in known names: \def\splitn@@m##1, {% \setcounter{ap@curnaam}{0}% \setboolean{ap@gebakt}{false}% \ifx\relax##1% \let\next@@\relax \else \let\next@@\splitn@@m \whiledo{\theap@curnaam < \theap@namen}{% \ifthenelse{\equal{##1}{ \csname ap@naam\theap@curnaam\endcsname}}{% % Name found. % Loads tasks of this name into a counter: \setcounter{ap@tmp}{ \csname ap@naam\theap@curnaam taken\endcsname}% % Defines \ap@ as new task: \global\expandafter\def \csname ap@naam\theap@curnaam taak\theap@tmp\endcsname{% \ifthenelse{\equal{#1}{##1}}{% \l@ap{#2}{#3} }{% \l@ap{+ \verwijdern@@m{#1}{##1}: #2}{#3} } }% % Increase number of tasks: \stepcounter{ap@tmp}% \global\expandafter\edef \csname ap@naam\theap@curnaam taken\endcsname{\theap@tmp}% % Remember that the name exists: \setboolean{ap@gebakt}{true}% }{% % nothing }% \stepcounter{ap@curnaam}% }% % The name is not found, % we should define a new name: \ifthenelse{\boolean{ap@gebakt}}{% }{% % Initialise name, number of tasks (1) and first task: \global\expandafter\def \csname ap@naam\theap@namen\endcsname{##1}% \global\expandafter\edef \csname ap@naam\theap@namen taken\endcsname{1}% \global\expandafter\def \csname ap@naam\theap@namen taak0\endcsname{% \ifthenelse{\equal{#1}{##1}}{% \l@ap{#2}{#3} }{% \l@ap{+ \verwijdern@@m{#1}{##1}: #2}{#3} } }% % Increase number of names \stepcounter{ap@namen}% }% \fi \next@@}% % Separate #1 at commas \expandafter\splitn@@m#1, \relax,% }% \newcommand*{\l@ap}{\@dottedtocline{1}{1.5em}{2.3em}} \NewDocumentCommand{\ap}{ m m }{ \ifnotulen@stiekemext \addtocounter{level}{-1} \ifnum \thelevel < \thestiekemext@huidigniveau \par \@inaplijsttrue \ifeng@art\textbf{Assigned task:}\else\textbf{Actiepunt:}\fi \hspace{0.5mm} \naam{#1} #2 \addtocontents{loa}{\protect\@actiepunt{#1}{ {\color{niveau\thestiekemext@huidigniveau}#2}} {\thepage}} \@inaplijstfalse \par \fi \addtocounter{level}{1} \else \par \@inaplijsttrue \ifeng@art\textbf{Assigned task:}\else\textbf{Actiepunt:}\fi \hspace{0.5mm} \naam{#1} #2 \addtocontents{loa}{\protect\@actiepunt{#1}{#2}{\thepage}} \@inaplijstfalse \par \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\korteapnaam} % Use |\korteapnaam{macro}{name}| to define a macro % which automatically outputs someone's name. For example, % |\korteapnaam{RH}{Rozemarijn-Henrietta}| makes |\RH| output ``\korteapnaam{RH}{Rozemarijn-Henrietta}\RH''.\par % We can then use this to create tasks: |\ap{\RH}{Get a shorter name.}| outputs \ap{\RH}{Get a shorter name.}\par % Exceptionally useful if you're meeting with people who have long names. % \begin{macrocode} % ap shortcuts: % by Sjoerd Timmer @ 11-10-2012 \newif\if@inaplijst \newcommand\korteapnaam[2]{% \ifcsname#1\endcsname% \PackageError{notulen} {The command #1 already exists!} {The command #1 already exists!}% \fi% \expandafter\newcommand\csname #1\endcsname{% \if@inaplijst% #2\xspace% \else% \mbox{\naam{#2}}\xspace% \fi% }% } % \end{macrocode} % \end{macro} % \begin{macro}{\aplijst} % |\aplijst| produces a list of tasks. % \begin{macrocode} % Task lists; flat list. % TODO: Add hyperlinks to \ap usage \NewDocumentCommand{\aplijst}{ s }{% \IfBooleanF{#1}{\aplijstentry} % This \def used to be \global, but that interferes % with \actielijstpp -- Jesse \begingroup% \def\@actiepunt##1##2##3{\contentsline{ap}{\naam{##1} ##2}{##3}{}}% \ap@maakaplijst% \endgroup% } % \end{macrocode} % \end{macro} % \begin{macro}{\aplijstpp} % |\aplijstpp| produces a list of tasks sorted by whom % they are assigned to. Its use is highly recommended. % It cannot be used together with |\aplijst| (THIS IS A BUG). % \begin{macrocode} % Auxiliary functions for \aplijstpp. \newcounter{ap@namen} \newcounter{ap@curnaam} \newcounter{ap@tmp} \newboolean{ap@gebakt} % Task list; grouped per person. % TODO: Add hyperlinks to \ap usage \NewDocumentCommand{\aplijstpp}{ s }{% \IfBooleanF{#1}{\aplijstentry} \section*{\aplijstnaam \@mkboth{\MakeUppercase\aplijstnaam}% {\MakeUppercase\aplijstnaam}}% % % Each task goes through here in order of usage. \setcounter{ap@namen}{0}% % % Load the loa file and put it through \@actiepunt: \@starttoc{loa}% % \aplijst and \aplijstpp aren't compatible due to \@starttoc. % If both are used, only one actually does anything. % -- Jesse % \setcounter{ap@curnaam}{0}% % Go through all found names: \whiledo{\theap@curnaam < \theap@namen}{% % Print name: \naam{\csname ap@naam\theap@curnaam\endcsname} \setcounter{ap@tmp}{0} % Go through this person's tasks: \whiledo{\theap@tmp < \csname ap@naam\theap@curnaam taken\endcsname }{% % Print task: \csname ap@naam\theap@curnaam taak\theap@tmp\endcsname \stepcounter{ap@tmp} }% \stepcounter{ap@curnaam}% }% } % \end{macrocode} % \end{macro} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % We define a selection of default values and warnings here % \begin{macrocode} \newcommand{\not@aanwezig}{} \newcommand{\not@afwezig}{} % \end{macrocode} % \begin{macro}{\naamzet} % |\naamzet| outputs a list of present (and potentially absent) names. % \begin{macrocode} \newcommand{\naamzet}{% \noindent% \ifthenelse{\equal{\not@afwezig}{}}% {\parbox[c]{\linewidth-2\fboxsep}{\centering \not@aanwezig}}% {\parbox[c]{\linewidth-2\fboxsep}{\centering \not@aanwezig}\\ \parbox[c]{\linewidth-2\fboxsep}{~\newline \centering \ifeng@art absent: \else afwezig: \fi \not@afwezig}} } % \end{macrocode} % \end{macro} % \begin{macro}{\aanwezig} % Use |\aanwezig{names}| to take note of who is present % at the meeting. For example, |\aanwezig{Alice, Bob}| % will mark them as present. % \begin{macrocode} \newcommand{\aanwezig}[1]{% \ifeng@art\renewcommand{\not@aanwezig}{present: #1} \else \renewcommand{\not@aanwezig}{aanwezig: #1} \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\afwezig} % An optional sister of |\aanwezig|, |\afwezig{names}| % lets you mark a group of people as absent. If the % command isn't used, it won't appear anywhere on the % document. % \begin{macrocode} \newcommand{\afwezig}[1]{ \renewcommand{\not@afwezig}{#1} } % \end{macrocode} % \end{macro} % \begin{macro}{\wvttk} % |\wvttk| produces the text ``\wvttk'' in English or % ``w.v.t.t.k.'' (wat verder ter tafel komt) in Dutch. % It's used to signify when an unexpected business in % the meeting is moved to a later point. % \begin{macrocode} \ifeng@art \newcommand{\wvttk}{Any Other Business} \else \newcommand{\wvttk}{\textsc{w.v.t.t.k.}} \fi % \end{macrocode} % \end{macro} % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % We move on to some miscellaneous macros. % \begin{macro}{\naam} % |\naam{name}| displays a name slanted, e.g., % |\naam{Bob}| would return \naam{Bob}. % \begin{macrocode} \newcommand{\nameshape}{\slshape} \newcommand{\naam}[1]{{\nameshape #1}} % \end{macrocode} % \end{macro} % \begin{macro}{\EUR} % Yet another macro to make a euro sign. % |\EUR{20}| will return \EUR{20}. % \begin{macrocode} \renewcommand{\EUR}[1]{\geneuro ~#1} % \end{macrocode} % \end{macro} % \begin{macro}{\opm} % |\opm{comment}| adds a comment, which will be % smaller and emphasized. For example, |\opm{Foo}| % returns \opm{Foo}. % \begin{macrocode} \newcommand{\opm}[1]{\medskip \footnotesize \emph{#1} \normalsize} % \end{macrocode} % \end{macro} % \begin{macro}{\noitemsep} % This removes the vertical spacing between items in % lists, such as |itemize| or |enumerate|. Enclose % this command between a |\begingroup| and an |\endgroup| % to make sure it doesn't affect anything outside of % the group. % \begin{macrocode} \newcommand{\noitemsep}{\setlength{\itemsep}{-\parskip}} % % \end{macrocode} % \end{macro} % % % % % % \subsubsection{Class \textsf{aeskwadraatnotulen}} % We now generate a class which implements |aeskwadraatnotulen.sty|, % and adds some visuals. % \setcounter{CodelineNo}{0} % \begin{macrocode} %<*notulencls> \NeedsTeXFormat{LaTeX2e}[2021/11/15] \ProvidesClass{aeskwadraatnotulen}[2025/06/13 v1.0.1 A-Eskwadraat notulen package] \DeclareOption{english}{\PassOptionsToPackage{english}{aeskwadraatnotulen}} \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} \ProcessOptions\relax \LoadClass[a4paper,11pt]{article} \RequirePackage{aeskwadraatnotulen} \RequirePackage{fancyhdr, lineno} \RequirePackage{newtxtext} \renewcommand{\familydefault}{\sfdefault} \if@twoside \setlength{\oddsidemargin} {20mm} \setlength{\evensidemargin} {10mm} \else \setlength{\oddsidemargin} {15mm} \setlength{\evensidemargin} {15mm} \fi \setlength{\hoffset} {-1in} \setlength{\voffset} {-1in} \setlength{\textwidth} {180mm} \setlength{\textheight} {240mm} \setlength{\topmargin} {10mm} \setlength{\headheight} {1.5em} \setlength{\headsep} {2em} \setlength{\footskip} {4em} \setlength{\parindent} {0em} \setlength{\parskip} {0em} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagestyle{fancy} \lhead{\@title} \chead{} \rhead{\@date} \lfoot{} \cfoot{\thepage} \rfoot{} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\footrulewidth}{0.0pt} \pagenumbering{Roman} \modulolinenumbers[5] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \setcounter{secnumdepth}{1} \setcounter{tocdepth}{2} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \renewcommand{\section}{ \@startsection{section}{1}{\z@} {-2.5ex \@plus -1ex \@minus -.2ex} {1.3ex \@plus.2ex} {\normalfont\Large\bfseries}} \renewcommand{\subsection}{ \@startsection{subsection}{2}{\z@} {-1.25ex\@plus -1ex \@minus -.2ex} {0.5ex \@plus .2ex} {\normalfont\large\itshape}} \renewcommand{\subsubsection}{ \@startsection{subsubsection}{3}{\z@} {-1.00ex \@plus -0.50ex \@minus -0.50ex} {-1.00ex \@plus -0.50ex \@minus -0.50ex} {\normalfont\normalsize\itshape\bfseries}} \renewcommand{\paragraph}{ \@startsection{paragraph}{4}{\z@} {0.00ex \@plus0.1ex} {-1em} {\normalfont\normalsize\nameshape}} % \renewcommand{\subparagraph}{ % \@startsection{subparagraph}{5}{\parindent} % {3.25ex \@plus1ex \@minus .2ex} % {-1em} % {\normalfont\normalsize\bfseries}} % % % \end{macrocode} % \begin{macro}{\titel} % \begin{macro}{\datum} % Historically, |\titel| and |\datum| did more than just % the regular |\title| and |\date|. For accessibility, we % have made the package work with the original commands, instead. For backwards % compatibility's sake, we do have to define |\titel| and |\date|. % \begin{macrocode} \let\titel\title \let\datum\date % \end{macrocode} % \end{macro}\end{macro} % For the sake of backwards compatibility, we give % a default value to the title and date. A warning is % added. % \begin{macrocode} \DeclareDocumentCommand{\@title}{}{\ifeng@art Meeting records \ClassWarning{aes-notulen}{no \title given} \else Notulen \ClassWarning{aes-notulen}{geen \title ingevoerd} \fi} \DeclareDocumentCommand{\@date}{}{\today \ifeng@art \ClassWarning{aes-notulen}{no \date given} \else \ClassWarning{aes-notulen}{geen \date ingevoerd} \fi} % \end{macrocode} % \begin{macro}{\maketitle} % We redefine |\maketitle|. This is done to add to the % ``author'' section a list of present and absent % people. % \begin{macrocode} \def\@maketitle{% \newpage \null \vskip 2em% \begin{center}% \let \footnote \thanks {\LARGE \@title \par}% \vskip 1.5em% {\large \lineskip .75em% \begin{tabular}[t]{c}% \@author \end{tabular}\par ~\newline \naamzet }% We removed the author here \vskip 1em% {\large \@date}% \end{center}% \par \vskip 1.5em} % % \end{macrocode} % \end{macro} % % % % % \subsection{\textsf{beamerthemeaeskwadraat}} % \setcounter{CodelineNo}{0} % \begin{macrocode} %<*beamer> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \ProvidesPackage{beamerthemeaeskwadraat}[2025/06/13 v1.0.1 A-Eskwadraat beamer theme] %% Copyright (C) 2007-2015 TeXniCie A-Eskwadraat %% % \end{macrocode} % Here follow the theme's options. The first is |noprogress|, % which removes the progress bar at the bottom. Next is |uu|, % which replaces the default (\aesnaam{}) theme with official % Utrecht University colours and logos. Finally, if you want a % gradient at the end of the progress bar (as you used to have % in the old beamer theme), use the option |gradient|. However, % this is not recommended, as this gradient comes with some % visual bugs. % \begin{macrocode} \newif\ifaes@progress \aes@progresstrue \DeclareOption{noprogress}{\aes@progressfalse} \newif\ifaes@uutheme \aes@uuthemefalse \DeclareOption{uu}{\aes@uuthemetrue} \newif\ifaes@gradient \aes@gradientfalse \DeclareOption{gradient}{\aes@gradienttrue} \newif\ifaes@newbeamer \aes@newbeamertrue \DeclareOption{legacy}{\aes@newbeamerfalse} \DeclareOption*{ \PassOptionsToPackage{\CurrentOption}{beamerthemeFrankfurt}} \ProcessOptions\relax % \end{macrocode} % We import some basic theme stuff from the \textsf{Frankfurt} % theme. % \begin{macrocode} \usetheme{Frankfurt} \useinnertheme{rectangles} \setbeamertemplate{mini frames}[box] % \end{macrocode} % \begin{macro}{\setstylecolor} % Here, we define the style colour of our document as % |aes@stylecolor|. To change it, use |\setstylecolor{R,G,B}|, % for |R|, |G|, |B| some values between 0 and 255. % By default, the colour is \aesnaam{} red.\par % We use this theme colour to construct the colour % of the presentation itself, and of blocks that one % can put in. % \begin{macrocode} \definecolor{aes@stylecolor}{rgb}{0.59,0.00,0.12} \NewDocumentCommand{\setstylecolor}{ m }{ \definecolor{aes@stylecolor}{RGB}{#1} } \setbeamercolor{structure}{fg=aes@stylecolor} \setbeamercolor{block title}{bg=aes@stylecolor} \setbeamercolor{block body}{bg=aes@stylecolor!30} \setbeamertemplate{blocks}[default] % \end{macrocode} % \end{macro} % We select a font % \begin{macrocode} \RequirePackage[scale=0.9]{merriweather} \usefonttheme{professionalfonts} % \end{macrocode} % \begin{macro}{\setlogo} % Using |\setlogo{file}| changes the logo in the bottom % right. If the command isn't used, the default is used.\par % If the parameter |file| is left empty, the logo will disappear.\par % Logos are automatically made a little transparent. % \begin{macrocode} \RequirePackage{tikz} \DeclareDocumentCommand{\setlogo}{ m }{% \pgfdeclareimage[width = 25mm]{logo}{#1}% \logo{\tikz\node[opacity = 0.35] {\pgfuseimage{logo}};}% } \pgfdeclareimage[width=25mm]{logo}{aeskwadraat_slinger} % TODO: remove transparency of slinger for compatibility \logo{\pgfuseimage{logo}} % \end{macrocode} % \end{macro} % \changes{v1.0.1}{2025/01/10}{Added warning in case UU logo is missing} % Now, we add the UU theme. Keep in mind that the Utrecht University logo % may only be used by affiliates to the university. For copyright reasons, the % logo may not be included by the distribution, so we add a warning telling the % user to download the file themself, from \url{https://www.uu.nl/en/organisation/corporate-identity/guidelines/logo}. % We need from the logos with white background the file |UU_logo_2021_EN_BLACK.jpg|, which % must be renamed to |aeskwadraat_uulogo.jpg| and moved to a folder % where \LaTeX{} can find it (so either the project itself or the |/logos/| folder % of this package).\par % Since the logo has a lot of white space around it, we resize it and move % it around to make it fit better.\par % The colour chosen here is in accordance with UU guidelines, see % \url{https://www.uu.nl/en/organisation/corporate-identity/brand-policy/colour}. % \begin{macrocode} \ifaes@uutheme \IfFileExists{aeskwadraat_uulogo.jpg}{% % Logo found \pgfdeclareimage[width = 38mm]{logo}{aeskwadraat_uulogo.jpg}% \logo{\tikz\node[opacity = 0.35] {\pgfuseimage{logo}};\hspace{-10em}}% }{% % Logo not found: wasn't included in distribution \PackageWarning{beamerthemeaeskwadraat}{% It seems that we couldn't find the UU logo. Your distribution probably did not include it due to copyright reasons. Please download the (black-white) logo from the UU website and include it as aeskwadraat_uulogo.jpg. Refer to the documentation for more information. } } \setstylecolor{255,205,0} \fi % \end{macrocode} % The code below is used to generate a progress bar % on the bottom. % \begin{macrocode} \ifaes@progress \RequirePackage{ifthen} \RequirePackage{calc} \newlength{\aes@progressbarlength} \defbeamertemplate*{footline}{aes progress bar} {% \leavevmode% % recalculate progressbar length \setlength{\aes@progressbarlength}{\paperwidth/ \maxof{\inserttotalframenumber}{\insertframenumber}* \insertframenumber}% % current frame / total frame * paperwidth % create the solid "main" bar \begin{beamercolorbox}[wd=\aes@progressbarlength,ht=2ex] {frametitle}% \end{beamercolorbox}% \ifaes@gradient % define the gradient \pgfdeclarehorizontalshading{aes@progressbar}{2ex}{% % Start with the stylecolor color(0ex)=(aes@stylecolor)% % Transfer to white 0.3in later color(0.3in)=(white)% }% % add the gradient after the main bar \begin{beamercolorbox}[wd=0.3in,ht=2ex] {frametitle}% \pgfuseshading{aes@progressbar}% \end{beamercolorbox}% \fi \vskip0pt% } \newlength{\aes@step} \setlength{\aes@step}{0pt} \AtEndDocument{ \newcounter{aes@upc} \setcounter{aes@upc}{1} \newlength{\aes@pagelen} \setlength{\aes@pagelen}{\inserttotalframenumber\unitlength} \whiledo{% \lengthtest{\theaes@upc\aes@pagelen<\paperwidth}% }{% \stepcounter{aes@upc}} \setlength{\aes@step}{\theaes@upc\unitlength} \if@filesw \immediate\write\@auxout{\string\@writefile{nav}% {\noexpand\headcommand{ \noexpand\setlength{\noexpand\aes@step}{\the\aes@step}}}} \fi } \fi % \end{macrocode} % \begin{macro}{\miniframeson}\begin{macro}{\miniframesoff} % To exclude / include a frame from the squares on top % of the document, use |\miniframesoff| and |\miniframeson|. % \begin{macrocode} \let\beamer@writeslidentry@miniframeson=\beamer@writeslidentry \def\beamer@writeslidentry@miniframesoff{% \expandafter\beamer@ifempty\expandafter{% does not happen normally \beamer@framestartpage}{} {%else % removed \addtocontents commands \clearpage\beamer@notesactions% } } \NewDocumentCommand{\miniframeson}{}{% \let\beamer@writeslidentry=\beamer@writeslidentry@miniframeson} \NewDocumentCommand{\miniframesoff}{}{% \let\beamer@writeslidentry=\beamer@writeslidentry@miniframesoff} % \end{macrocode} % \end{macro}\end{macro} % The code below reimagines the title page for a more % modern look. % \begin{macrocode} \ifaes@newbeamer \setbeamertemplate{title page}{% \hfuzz=60pt \vfuzz=10pt \begin{tikzpicture} \draw [white, opacity = 0] ([yshift = -0.2in]current page.north west) rectangle (current page.south east); \fill[aes@stylecolor]([yshift = 0.5in]current page.west) rectangle ([yshift = -0.5in]current page.east); \node[anchor = north west, text width = \linewidth] at ([yshift = .4in, xshift = .1in]current page.west) (title) {\LARGE\textcolor{white}\inserttitle}; \node[anchor = south west, text width = \linewidth] at ([yshift = -.4in, xshift = .1in]current page.west) (subtitle) {\large\textcolor{white}\insertsubtitle}; \node[anchor = north west, text width = \linewidth] at ([yshift = -.55in, xshift = .1in]current page.west) (author) {\begin{tabular}[t]{c}\insertauthor\end{tabular}\\ \begin{tabular}[t]{c}\scriptsize\insertinstitute\end{tabular}}; \node[anchor = south east] at ([xshift = -.35in, yshift = -1.66in]current page.east) (titlegraphic) {\usebeamercolor[fg]{titlegraphic}\inserttitlegraphic}; \end{tikzpicture} } % \end{macrocode} % We also add section and subsection slides in the same % style as the title page. % \begin{macrocode} \AtBeginSection[]{ { \hfuzz=60pt \vfuzz=10pt \miniframesoff \begin{frame} \begin{tikzpicture} \draw [white, opacity = 0] ([yshift = -0.2in]current page.north west) rectangle (current page.south east); \fill[aes@stylecolor]([yshift = 0.25in]current page.west) rectangle ([yshift = -0.25in]current page.east); \node[anchor = west, text width = \linewidth] at ([xshift = .1in]current page.west) (title) {\LARGE\textcolor{white}\insertsectionhead}; \end{tikzpicture} \end{frame} } } \AtBeginSubsection[]{ { \hfuzz=60pt \vfuzz=10pt \miniframesoff \begin{frame} \begin{tikzpicture} \draw [white, opacity = 0] ([yshift = -0.2in]current page.north west) rectangle (current page.south east); \fill[aes@stylecolor]([yshift = 0.25in]current page.west) rectangle ([yshift = -0.25in]current page.east); \node[anchor = west, text width = \linewidth] at ([xshift = .1in]current page.west) (title) {\LARGE\textcolor{white}\insertsectionhead}; \node[anchor = north west, text width = \linewidth] at ([xshift = .1in, yshift = -.3in]current page.west) (subtitle) {\Large\textcolor{black}\insertsubsectionhead}; \end{tikzpicture} \end{frame} } } \fi % \end{macrocode} % \begin{macro}{\questionframe} % Finally, we add a question slide with a funny duck, |\questionframe|. % \begin{macrocode} \RequirePackage{tikzducks} \NewDocumentCommand{\questionframe}{}{% { \miniframesoff \thispagestyle{empty} \setbeamercolor{background canvas}{bg=black} \begin{frame} \centering \begin{tikzpicture} \randuck[draw = white] \node[anchor = south, text = white] at (1, 2.7) {\Huge\fontsize{40}{40}?}; \end{tikzpicture}\\ \textcolor{white}{Questions?} \end{frame} } } % \end{macrocode} % \end{macro} % The following code is essential for making |\pause| % work inside |align| environments. % \begin{macrocode} \renewrobustcmd{\beamer@@pause}[1][]{% \unless\ifmeasuring@% \ifblank{#1}% {\stepcounter{beamerpauses}}% {\setcounter{beamerpauses}{#1}}% \onslide<\value{beamerpauses}->\relax% \fi% } % % \end{macrocode} % In the past, |beamerthemeaeskwadraat.sty| was named |beamerthemeaes2.sty|. % To warn users of the old version, we generate |beamerthemeaes2.sty| % to only import |beamerthemeaeskwadraat.sty|, and throw a warning to the users, % telling them to change their name. We might remove this in a future % version. % \begin{macrocode} %<*beamerdeprecated> \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{beamerthemeaes}} \ProcessOptions\relax \usetheme{aeskwadraat} \PackageWarning{beamerthemeaes2}{The beamer theme "aes2" is deprecated and may be deleted in the future. Please use "aeskwadraat", instead.} % % \end{macrocode} % % % % % % \subsection{\textsf{aeskwadraatfactuur}} % We now generate a package which implements `aeskwadraatfactuur.sty', % and adds some visuals. % \setcounter{CodelineNo}{0} % \begin{macrocode} %<*factuur> %<@@=aeskwadraatfactuur> %% Copyright (C) 2008-2015 TeXniCie A-Eskwadraat %% \NeedsTeXFormat{LaTeX2e}[2020/10/01] \ProvidesPackage{aeskwadraatfactuur}[2025/06/13 v1.0.1 Simple invoices with aeskwadraatbrief integration] \RequirePackage{aeskwadraattaal} \RequirePackage{substr} \RequirePackage{ifthen} \RequirePackage{calc} % \end{macrocode} % \changes{v1.0.1}{2024/12/02}{Replaced macro that generated ``\textsf{aesfactuur}'' with ``\textsf{aeskwadraatfactuur}''} % We start by defining an error for if a command is % used outside the proper environment. % \begin{macrocode} \newcommand\FactuurError@verdwaald[1]{% \PackageError{aeskwadraatfactuur} {Runaway #1 command}% {This command may only be used within the factuur environment.\MessageBreak% put #1\space between \protect\begin{factuur} and \protect\end{factuur}.}% } % \end{macrocode} % The following font is used in titles. % {\fontsize{18}{20}\selectfont\bfseries It looks like this.} % \begin{macrocode} \newcommand\aes@fonttitel{\fontsize{18}{20}\selectfont\bfseries} % \end{macrocode} % \begin{macro}{\newnepboolean} % Due to the incompatibility of ifthenelse and tabular, % we define ``fake booleans''. |\newnepboolean{foo}| creates a % command |\iffoo{iftrue}{iffalse}| that returns |iftrue| % if |foo| is true, and it returns |iffalse| if |foo| is false.\par % \begin{macro}{\settrue}\begin{macro}{\setfalse} % By default, the fake booleans are set to |true|. To set a % fake boolean to |true|, use |\settrue{foo}|, and to make % it false, use |\setfalse{foo}|. % \begin{macrocode} \newcommand\newnepboolean[1]{% \settrue{#1}% } \newcommand\settrue[1]{% \expandafter\gdef\csname if#1\endcsname##1##2{##1}% } \newcommand\setfalse[1]{% \expandafter\gdef\csname if#1\endcsname##1##2{##2}% } % \end{macrocode} % \end{macro}\end{macro}\end{macro} % The following code makes a lot of items (``posten'') break to a new % page immediately. We define the maximum number of % items that fit on a letter. For the best result, % use |\nieuwepagina| in the |factuur| environment % to make a new page. This only does something if % the user has activated multiple pages with % |\meerpaginas|.\par % We define a counter |factuur@aantalPosten| to % count the number of times |\post| is used. % \begin{macrocode} \newcounter{factuur@aantalPosten} \setcounter{factuur@aantalPosten}{0} \newboolean{factuur@meerderePaginas} \setboolean{factuur@meerderePaginas}{false} \newcommand{\meerpaginas}{\setboolean{factuur@meerderePaginas}{true}} \let\meerPaginas\meerpaginas % \end{macrocode} % The maximum number of items is set to \(19\). However, % since the second page has no letter header, there is % more space for items --- we set the maximum number to % 25.\par % To know on which page we are, we use a boolean % |factuur@tweedePagina|, which is set to |false| % by default. Using |\nieuwepagina| sets it to % |true|. % \begin{macrocode} \newcounter{factuur@maxPosten} \setcounter{factuur@maxPosten}{19} \newcounter{factuur@maxPostenTweedePagina} \setcounter{factuur@maxPostenTweedePagina}{25} \newboolean{factuur@tweedePagina} \setboolean{factuur@tweedePagina}{false} % \end{macrocode} % \begin{macro}{\valuta} % |\valuta{foo}| defines the currency as |foo|. It is % \euro by default. % \begin{macrocode} \NewDocumentCommand{\valuta}{ m }{% \renewcommand\factuur@valutasym{#1}% } \newcommand\factuur@valutasym{\euro} % \end{macrocode} % \end{macro} % \begin{macro}{\nieuwepagina} % We define |\nieuwepagina| as an alternative to % |\newpage| to be used within the |factuur| % environment. It automatically ends |factuur|, % creates a new page and |factuur| environment % and forwards any relevant parameters to the new % environment. % \begin{macrocode} \NewDocumentCommand{\nieuwepagina}{}{% \setboolean{factuur@tweedePagina}{true}% \setcounter{factuur@maxPosten}{\value{factuur@maxPostenTweedePagina}}% % The following counter needs to be set to zero % because tabular hates empty commands at the end % of a table \setcounter{factuur@aantalPosten}{0} & \vspace{-12pt}\\% \subtotaal% \end{factuur@subfactuur}% \begin{center}% \TAALpaginaGaatVerder% \end{center}% \newpage% \begin{factuur@subfactuur}% } \let\nieuwePagina\nieuwepagina % \end{macrocode} % \end{macro} % If |\post| is used outside of a % |factuur| environment, we raise an error. % \begin{macrocode} \newcommand\factuur@post@err[2]{% \FactuurError@verdwaald{\protect\post}% } \let\post\factuur@post@err % \end{macrocode} % If |\procent| is used outside of a % |factuur| environment, we raise an error. % \begin{macrocode} \newcommand\factuur@procent@err[2]{%procent buiten factuur \FactuurError@verdwaald{\protect\procent}% } \let\procent\factuur@procent@err % \end{macrocode} % \begin{macro}{\factuur@invul} % |\factuur@invul{item}| creates |item| without % associating a value to it. We also set a boolean % |factuur@TotaalVerbokt|\footnote{% % Jesse: I am unsure what the origin of % the word ``verbokt'' is here. I assume % it is loaned from the German ``verbockt'', which % means ``ruined''. I can only guess at the vulgar % words that preceded it.} to |true|, which makes % it impossible to calculate the subtotal.\par % Later, this macro will be used as |\invul|. % \begin{macrocode} \newcommand\factuur@invul[1]{% \settrue{factuur@TotaalVerbokt}% \factuur@zetpostnep{#1}{\dotfill}% } % \end{macrocode} % \end{macro} % If |\invul| is used outside of a % |factuur| environment, we raise an error. % \begin{macrocode} \newcommand\factuur@invul@err[1]{% \FactuurError@verdwaald{\protect\invul}% } \let\invul\factuur@invul@err % \end{macrocode} % If |\subtotaal| is used outside a |factuur| environment, % we throw an error. % \begin{macrocode} \newcommand\factuur@subtotaal@err{% \FactuurError@verdwaald{\protect\subtotaal}% } \let\subtotaal\factuur@subtotaal@err % \end{macrocode} % \begin{macrocode} \newnepboolean{factuur@TotaalVerbokt}% % We construct some internal macros. % \begin{macrocode} \newcommand\factuur@zetpostnep[2]{% \factuur@zetpostraw{#1}{\multicolumn{5}{r}{#2}}% } \newcommand\factuur@zetpostraw[2]{% \vspace{2mm} \parbox[b]{\textwidth*3/4}{#1} & #2 \\ } % \end{macrocode} % From this point on, the code is written in the % \hologo{LaTeX3} language. We use it because it % supports actual floating points, which fixes several % issues this package used to have. % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % |\g_aes_total_fp| will be the floating point which % will save the total amount in invoices. % \begin{macrocode} \fp_new:N \g_aes_total_fp % \end{macrocode} % \begin{environment}{factuur} % The |factuur| environment will be used to generate % our invoices. It sets the total amount to zero, % defines macros as they should (instead of producing % errors), and loads the |factuur@subfactuur| % environment, which is the actual table that the % invoice generates. At the end, |factuur| showcases % the total invoice amount. % \begin{macrocode} \NewDocumentEnvironment{factuur}{}{% \begin \fp_gset:Nn \g_aes_total_fp { 0 } \setfalse{factuur@TotaalVerbokt} % \let\post\factuur@post \let\procent\factuur@procent \let\invul\factuur@invul \let\subtotaal\factuur@subtotaal \begin{factuur@subfactuur} }{% \end \hline\hline\\[-2mm] % Display total, or dots if verbokt \iffactuur@TotaalVerbokt{% \bfseries\TAALtotaal & \multicolumn{5}{r}{\dotfill} }{% \factuur@zetpost{ \bfseries\TAALtotaal }{ \g_aes_total_fp } } \\ \end{factuur@subfactuur} \let\post\factuur@post@err \let\procent\factuur@procent@err \let\invul\factuur@invul@err \let\subtotaal\factuur@subtotaal@err } % \end{macrocode} % \end{environment} % \begin{environment}{factuur@subfactuur} % |factuur@subfactuur| simply generates a table. The % columns are\\ % \begin{tabular}{lccrcl} % Description & Minus sign & Currency % symbol & Wholes & Decimal separator & Cents % \end{tabular} % \begin{macrocode} \newenvironment{factuur@subfactuur}{% \begin % tabel: desc, minus, currency, wholes, decimal sep, cents \begin{tabular}{lc@{}c@{}r@{}c@{}l} \bfseries \TAALomschrijving & \multicolumn{5}{r}{\bfseries \TAALbedrag} \\ \hline\hline \\[-2mm] }{% \end \end{tabular} } % \end{macrocode} % \end{environment} % \begin{macro}{\factuur@iftotalnegative} % |\factuur@iftotalnegative{iftrue}{iffalse}| checks % whether the total amount is negative, and runs the % corresponding macros. % \begin{macrocode} \newcommand\factuur@iftotalnegative[2]{ \fp_compare:nNnTF { \g_aes_total_fp } < { 0 } { #1 } { #2 } } % \end{macrocode} % \end{macro} % \begin{macro}{\factuur@subtotaal} % |\factuur@subtotaal| displays the current total % amount. It only works within a |factuur| environment. % \begin{macrocode} \newcommand\factuur@subtotaal{ \iffactuur@TotaalVerbokt{ \PackageError{aeskwadraatfactuur}{\protect\subtotaal\space kan~niet~meer~na~\protect\invul}{} }{ \hline\\[-2mm] \factuur@zetpost{ \bfseries\TAALsubtotaal }{ \g_aes_total_fp } } } % \end{macrocode} % \end{macro} % \begin{macro}{\factuur@post} % |\factuur@post{desc}{amount}| generates an item (``post'') % with a description and amount. The amount is added to % the total. implemented in |factuur| environments as |\post|. % \begin{macrocode} \newcommand\factuur@post[2]{ \ifthenelse{ \value{factuur@aantalPosten} = \value{factuur@maxPosten} }{\nieuwepagina}{} \addtocounter{factuur@aantalPosten}{1} % We want decimal point, not comma \tl_set:Nn \@@_factuur_input_tl { #2 } \tl_replace_once:Nnn \@@_factuur_input_tl { , } { . } % \fp_gadd:Nn \g_aes_total_fp { \@@_factuur_input_tl } \factuur@zetpost { #1 } { \@@_factuur_input_tl } } % \end{macrocode} % \end{macro} % \begin{macro}{\factuur@procent} % Similar to |\factuur@post|, except that it adds a % percentage to the current total amount. % \begin{macrocode} \newcommand\factuur@procent[2]{ % We want decimal point, not comma \tl_set:Nn \@@_factuur_input_tl { #2 } \tl_replace_once:Nnn \@@_factuur_input_tl { , } { . } % \fp_set:Nn \@@_percent_output_fp { \@@_factuur_input_tl * \g_aes_total_fp / 100 } \fp_gadd:Nn \g_aes_total_fp { \@@_percent_output_fp } % Convert percentage to match regional decimal seperator \tl_replace_once:Nnn \@@_factuur_input_tl { . } { \TAALdecimaalsym } \factuur@zetpost{ #1~(\@@_factuur_input_tl\%) }{ \@@_percent_output_fp } } \tl_new:N \@@_factuur_input_tl \fp_new:N \@@_percent_output_fp % \end{macrocode} % \end{macro} % \begin{macro}{\factuur@zetpost} % |\factuur@zetpost| displays an item in the current % invoice. % \begin{macrocode} \newcommand\factuur@zetpost[2]{ \fp_gset:Nn \@@_post_val_fp {#2} \factuur@zetpostraw{ #1 }{ \@@_fp_display_value:N \@@_post_val_fp } } \fp_new:N \@@_post_val_fp % \end{macrocode} % \end{macro} % TODO: The following code requires \textsf{l3doc} to % be typeset properly (\textsf{ltxdoc} is incompatible % with the underscores). This does require transitioning. % \begin{macrocode} \cs_new:Nn \@@_fp_display_value:N { % Round value to whole cents \fp_gset:Nn \@@_display_fp { \fp_eval:n { round ( #1 , 2 ) } } % Get the sign \fp_gset:Nn \@@_display_sign_fp { \fp_sign:n { \@@_display_fp } } % Get the wholes \int_gset:Nn \@@_display_wholes_int { \fp_to_int:n { \fp_eval:n { abs ( trunc ( \@@_display_fp ) ) } } } % Get the cents \int_gset:Nn \@@_display_cents_int { \fp_eval:n { ( abs ( \@@_display_fp ) - \@@_display_wholes_int )*100 } } % gsets are necessary because the & ends groups, therefore % cancelling the definitions! % \fp_compare:nNnT { \@@_display_sign_fp } = { -1 } { -- } & \factuur@valutasym~ & \@@_int_to_thousands:N \@@_display_wholes_int & \TAALdecimaalsym & \@@_display_cents:N \@@_display_cents_int } \fp_new:N \@@_display_sign_fp \int_new:N \@@_display_wholes_int \int_new:N \@@_display_cents_int \fp_new:N \@@_display_fp \cs_new:Nn \@@_int_to_thousands:N { \int_set_eq:NN \@@_thousands_split_int #1 \int_while_do:nNnn { \@@_thousands_split_int } > { 999 } { \int_set:Nn \@@_thousands_split_next_int { \int_div_truncate:nn { \@@_thousands_split_int } { 1000 } } \tl_put_left:Ne \@@_thousands_tl { \TAALduizendsym \@@_pad_to_three:n { \@@_thousands_split_int - \@@_thousands_split_next_int*1000 } } \int_set_eq:NN \@@_thousands_split_int \@@_thousands_split_next_int } \tl_put_left:Ne \@@_thousands_tl { \int_to_arabic:n { \@@_thousands_split_int } } \@@_thousands_tl } \int_new:N \@@_thousands_split_int \int_new:N \@@_thousands_split_next_int \tl_new:N \@@_thousands_tl \cs_new:Nn \@@_pad_to_three:n { \int_compare:nNnTF { #1 } < { 100 } { \int_compare:nNnTF { #1 } < { 10 } { 00\int_to_arabic:n { #1 } } { 0\int_to_arabic:n { #1 } } } { \int_to_arabic:n { #1 } } } \cs_new:Nn \@@_display_cents:N { \int_compare:nNnTF{ #1 } < { 10 } { 0\int_use:N #1 } { \int_use:N #1 } } \ExplSyntaxOff % \end{macrocode} % The following code enables integration with the class % \textsf{aeskwadraatbrief}.\par % First, we define a command that runs if \textsf{aeskwadraatbrief} % is not loaded. % \begin{macrocode} \newcommand\factuur@geenaeskwadraatbrief{ \newenvironment{factuurbrief}[1]{ \PackageError{aeskwadraatfactuur}{% Alleen gedefinieerd binnen de aeskwadraatbrief-class} {Gebruik \protect\documentclass{aeskwadraatbrief}.} }{} } % \end{macrocode} % Now, we define a command that runs if \textsf{aeskwadraatbrief} % is loaded. % \begin{macrocode} \newcommand\factuur@welaeskwadraatbrief{ % \end{macrocode} % |factuur@teruggave| is a boolean used in |\creditbrief|. % \begin{macrocode} \newboolean{factuur@teruggave} \setboolean{factuur@teruggave}{false} \newcommand{\creditnota}{\setboolean{factuur@teruggave}{true}} % \end{macrocode} % Here follow some user commands. % \begin{macro}{\betalingstermijn} % |\betalingstermijn{days}| sets the term of payment % to |days|. By default, it is \(28\). % \begin{macrocode} \newcommand\aes@betalingstermijn{28} \NewDocumentCommand{\betalingstermijn}{ m }{% \renewcommand\aes@betalingstermijn{##1}% } % \end{macrocode} % \end{macro} % \begin{macro}{\binnenlandbetaling} % |\binnenlandbetaling| makes the invoice fit for domestic % payments. % \begin{macro}{\buitenlandbetaling} % |\buitenlandbetaling| makes the invoice fit % for foreign payments. % \begin{macrocode} \newboolean{factuur@buitenland} \NewDocumentCommand{\buitenlandbetaling}{}{% \setboolean{factuur@buitenland}{true}} \NewDocumentCommand{\binnenlandbetaling}{}{% \setboolean{factuur@buitenland}{false}} % \end{macrocode} % \end{macro}\end{macro} % \begin{macro}{\btwverlegd} % |\btwverlegd| enables BTW reverse charge % (``BTW verlegging''). % \begin{macrocode} \newboolean{factuur@btwverlegd} \newcommand\btwverlegd{\setboolean{factuur@btwverlegd}{true}} % \end{macrocode} % \end{macro} % \begin{macro}{\betaalinstructie} % |\betaalinstructie{instruc}| sets the payment % instruction to |instruc|. % \begin{macrocode} \newcommand\aes@betaalinstructie{} \NewDocumentCommand{\betaalinstructie}{ m }{% \renewcommand\aes@betaalinstructie{##1}} % \end{macrocode} % \end{macro} % \begin{macro}{\autobetaalinstructie} % |\autobetaalinstructie| automatically sets the % payment instruction. It is called by the package, % so no need to do it manually unless |\betaalinstructie| % is used. % \begin{macrocode} \NewDocumentCommand\autobetaalinstructie{}{ \renewcommand\aes@betaalinstructie{ \ifthenelse{\boolean{factuur@teruggave}}{ \TAALterugkrijginstructie }{ \ifthenelse{\boolean{factuur@buitenland}}{ \def\@IBANspul{, BIC:~\aes@BIC} }{ \def\@IBANspul{} } \TAALbetaalinstructie{\aes@betalingstermijn}{\aes@bank} {\aes@IBAN}{\@IBANspul}{\aes@rekeninghouder}{\factuur@ovv} } } } \autobetaalinstructie % \end{macrocode} % \end{macro} % \begin{macrocode} \newboolean{factuur@herinnering} \newboolean{factuur@aanmaning} \setboolean{factuur@herinnering}{false} \setboolean{factuur@aanmaning}{false} \newcommand\factuur@ovv{\aes@onsk} \newcommand\factuur@titel{} % \end{macrocode} % \begin{macro}{\ovv} % \begin{macro}{\autoovv} % Use |\ovv{reference}| to set a payment reference. Alternatively, % use |\autoovv| to do so automatically. % \begin{macrocode} \newcommand\ovv[1]{\renewcommand\factuur@ovv{##1}} % Reset ovv to automatic (same as our payment reference) \newcommand\autoovv{\ovv{\aes@onsk}} % \end{macrocode} % \end{macro}\end{macro} % \begin{macro}{\herinnering} % |\herinnering| makes the invoice letter a reminder. % \begin{macrocode} \newcommand\herinnering{% \setboolean{factuur@herinnering}{true}% \setboolean{factuur@aanmaning}{false}} \newcommand\geenherinnering{\setboolean{factuur@herinnering}{false}} % \end{macrocode} % \end{macro} % \begin{macro}{\aanmaning} % |\aanmaning| makes the letter an \textit{assertive reminder}. % \begin{macrocode} \newcommand\aanmaning{% \setboolean{factuur@aanmaning}{true}% \setboolean{factuur@herinnering}{false}} \newcommand\geenaanmaning{\setboolean{factuur@aanmaning}{false}} % \end{macrocode} % \end{macro} % \begin{macro}{\factuurtitel} % \begin{macro}{\autofactuurtitel} % |\factuurtitel{title}| sets the title of the invoice. % Alternatively, use |\autofactuurtitel| to do so % automatically. % \begin{macrocode} \newcommand\factuurtitel[1]{\renewcommand\factuur@titel{##1}} \newcommand\autofactuurtitel{\factuurtitel{}} \newcommand\@autofactuurtitel{ \ifthenelse{\boolean{factuur@teruggave}}{% \TAALteruggave% }{% \ifthenelse{\boolean{factuur@herinnering}}{% \TAALherinnering% }{% % \ifthenelse{\boolean{factuur@aanmaning}}{% \TAALaanmaning% }{ \TAALfactuur% } }% }% } % \end{macrocode} % \end{macro}\end{macro} % \begin{macrocode} \newcounter{factuur@brief} % \end{macrocode} % \begin{environment}{factuurbrief} % |factuurbrief| is used to generate a letter for % an invoice. % \begin{macrocode} \NewDocumentEnvironment{factuurbrief}{ m }{ \global\def\factuur@briefadres{##1} \ifcsname factuur@brief\thefactuur@brief teruggave\endcsname \csname factuur@brief\thefactuur@brief teruggave\endcsname \else \setboolean{factuur@teruggave}{false} \PackageWarning{aeskwadraatfactuur}{factuurbrief title may be wrong, please rerun the file.} \fi % \begin{brief}{\factuur@briefadres} \geenopening {\aes@fonttitel\ifthenelse{\equal{\factuur@titel}{}}{% \@autofactuurtitel% }{% \factuur@titel% }% }% \par \begin{factuur} }{ \end{factuur} \par % Remember whether total is negative, write to aux \factuur@iftotalnegative{% \def\factuur@tempbool{true}% }{% \def\factuur@tempbool{false}% } % TODO: Check if teruggave has changed and throw warning \newcommand\factuur@auxoutput{% \string\expandafter\string\gdef\noexpand\csname factuur@brief\thefactuur@brief teruggave\string\endcsname% {\string\setboolean{factuur@teruggave}{\factuur@tempbool}}% }% \setboolean{factuur@teruggave}{\factuur@tempbool} \write\@auxout{% \factuur@auxoutput% }% \bigskip \ifthenelse{\boolean{factuur@btwverlegd}}{ \textbf{\TAALbtwverlegd} }{} \aes@betaalinstructie \end{brief} \stepcounter{factuur@brief} } % \end{macrocode} % \end{environment} % \begin{macrocode} } \provideboolean{aes@inbrief} % Check whether we are in aeskwadraatbrief \ifthenelse{\boolean{aes@inbrief}}{ \factuur@welaeskwadraatbrief }{ \factuur@geenaeskwadraatbrief } % \end{macrocode} % \begin{macrocode} % % \end{macrocode} % % % % % % \subsection{\textsf{aeskwadraatbrief}} % \setcounter{CodelineNo}{0} % \begin{macrocode} %<*brief> %% Copyright (C) 2008-2014 TeXniCie A-Eskwadraat %% \NeedsTeXFormat{LaTeX2e}[2020/10/01] \ProvidesClass{aeskwadraatbrief}[2025/06/13 v1.0.1 A-Eskwadraat letter class] \RequirePackage{aeskwadraat,aeskwadraattaal} \RequirePackage{graphicx} \RequirePackage{ifthen} % ifthen is nu nodig vanwege \newboolean verderop \RequirePackage{kix} \RequirePackage{xspace} \RequirePackage{iftex} % \end{macrocode} % We define some booleans and corresponding package % optinos. % \begin{macrocode} \newboolean{aes@inbrief} \setboolean{aes@inbrief}{true} \newboolean{aes@optdebug} \newboolean{aes@optkleur} \newboolean{aes@optfooter} \newboolean{aes@ontour} \newboolean{aes@betadag} \RequirePackage{aeskwadraattaal} \DeclareTaalOpties % aeskwadraattaal languages \DeclareOption{debug}{\setboolean{aes@optdebug}{true}} \DeclareOption{nodebug}{\setboolean{aes@optdebug}{false}} \DeclareOption{kleur}{\setboolean{aes@optkleur}{true}} \DeclareOption{nokleur}{\setboolean{aes@optkleur}{false}} \DeclareOption{geenkleur}{\setboolean{aes@optkleur}{false}} \DeclareOption{footer}{\setboolean{aes@optfooter}{true}} \DeclareOption{nofooter}{\setboolean{aes@optfooter}{false}} \DeclareOption{ontour}{\setboolean{aes@ontour}{true}} \DeclareOption{betadag}{\setboolean{aes@betadag}{true}} \DeclareOption*{% \PassOptionsToClass{\CurrentOption}{article}} \ExecuteOptions{nodebug,nokleur,footer} \ProcessOptions* % *, to parse in order (essential for aeskwadraattaal) \LaadBabel \LoadClass{article} % \end{macrocode} % We set the page layout using the \textsf{geometry} % package. % \begin{macrocode} \RequirePackage[a4paper, left=21mm, right=21mm, top=117mm, bottom=20mm]{geometry} \setlength\parindent{0pt} \setlength\parskip{\baselineskip} \setlength\textwidth{165mm} \setlength\textheight{160mm} % = 297 - 20 - 117 (A4 height - bottom margin - header height) % footer pagestyle \newcommand\ps@footer{ \renewcommand\@oddhead{} \renewcommand\@evenhead{} \renewcommand\@oddfoot{% \hspace{-1cm}% \begin{minipage}[c]{0.6\textwidth} \begin{flushleft} \aes@fontfooter\TAALverenigingfooter% \end{flushleft} \end{minipage} \ifthenelse{\boolean{aes@optkleur}}{}{% \hfill% \begin{minipage}[b][1mm][t]{4.6cm}% \vspace*{-17mm}\par % UU logo is 5 cm on official % letters, too \includegraphics[scale=.65]{logos/UU-logo2011_ZWART} \end{minipage} }% } \let\@evenfoot\@oddfoot } % \end{macrocode} % We use the \TeX{} definition of |\raggedright|, % as the normal definition doesn't work.\par % TODO: Investigate whether this is still true. % \begin{macrocode} \renewcommand\raggedright{\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax} % \end{macrocode} % We set some font parameters. Note that the font % is set depending on the compiler. Any non-\hologo{pdfLaTeX} % compiler is assumed to be compatible with fontspec, % i.e., either \hologo{LuaLaTeX} or \hologo{XeLaTeX}. % \begin{center} % \begin{tabular}{|>{\centering}p{.15\textwidth}|c|c|c|}\hline % \textbf{Compiler} & \textbf{Roman font} & % \textbf{Sans serif font} & \textbf{Mono font}\\\hline % \hologo{pdfLaTeX} & Palatino & Helvetica & % CM Typewriter\\\hline % \hologo{LuaLaTeX}/\newline \hologo{XeLaTeX} & % TeX Gyre Pagella & TeX Gyre Heros & Latin Modern Mono\\\hline % \end{tabular} % \end{center} % \begin{macrocode} \newcommand\aes@fontheader{\fontsize{8}{11}\selectfont\sffamily} \newcommand\aes@fonttext{\fontsize{9}{12}\selectfont} \newcommand\aes@fontnaam{\fontsize{10}{12}\selectfont\sffamily\bfseries} \newcommand\aes@fontfooter{\fontsize{9.5}{11}\selectfont\slshape} \newcommand\aes@fontadres{\fontsize{13}{15}\selectfont} % \renewcommand\familydefault{\rmdefault} \renewcommand\seriesdefault{m} \renewcommand\shapedefault{n} % \ifpdftex % Deprecated LaTeX compilers use these fonts \renewcommand\rmdefault{ppl} \renewcommand\sfdefault{phv} \renewcommand\ttdefault{cmtt} \else % LuaLaTeX and XeLaTeX \RequirePackage{fontspec} \setmainfont{TeX Gyre Pagella} \setsansfont{TeX Gyre Heros} \setmonofont{Latin Modern Mono} \fi % \renewcommand\bfdefault{b} \renewcommand\mddefault{m} % \renewcommand\itdefault{it} \renewcommand\sldefault{sl} \renewcommand\scdefault{sc} \renewcommand\updefault{n} % \end{macrocode} % We don't want page numbers in letters, so we get rid % of them. % \begin{macrocode} \pagestyle{empty} % \end{macrocode} % \begin{macro}{\welkleur}\begin{macro}{\geenkleur} % To set the boolean |aes@optkleur|, it is possible to % use |\welkleur| to set it to |true| or |\geenkleur| % to set it to false. % \begin{macrocode} \NewDocumentCommand{\welkleur}{}{\setboolean{aes@optkleur}{true}} \NewDocumentCommand{\geenkleur}{}{\setboolean{aes@optkleur}{false}} % \end{macrocode} % \end{macro}\end{macro} % \begin{macro}{\afzendernaam} % Use |\afzendernaam{name}| to set the name of the sender. % By default, it is \aesnaam{}. % \begin{macrocode} \newcommand\aes@afzendernaam\TAALaesnaam \newcommand\afzendernaam[1]{\renewcommand\aes@afzendernaam{#1}} % \end{macrocode} % \end{macro} % \begin{macro}{\cienaam} % Use |\cienaam{name}| to set the name of the committee % in charge of sending the letter. % \begin{macrocode} \newcommand\aes@cienaam{\ClassWarningNoLine{aeskwadraatbrief}{% Geen commissienaam gedefinieerd.\MessageBreak Gebruik \protect\cienaam{TeXniCie}\space om het in te stellen}} \newcommand\cienaam[1]{\renewcommand\aes@cienaam{#1}} % \end{macrocode} % \end{macro} % The following macros are used to write \aesnaam{}'s % financial info. % \begin{macrocode} \def\aes@kvknr{40479641} \def\aes@btwnr{NL816588429B01} \NewDocumentCommand{\girorekening}{}{% \def\aes@bank{ING}% \def\aes@giro{656927}% \def\aes@BIC{INGBNL2A}% \def\aes@IBAN{NL58 INGB 0000 6569 27}% \def\aes@rekeninghouder{Studievereniging \aeskwadraat{} inz Fiscus}% } \NewDocumentCommand{\evenementenrekening}{}{% \def\aes@bank{ING}% \def\aes@giro{3743305}% \def\aes@BIC{INGBNL2A}% \def\aes@IBAN{NL67 INGB 0003 7433 05}% \def\aes@rekeninghouder{Studievereniging \aeskwadraat{} inz Evenementen}% } \NewDocumentCommand{\ouderdagrekening}{}{% \evenementenrekening% \ClassWarningNoLine{aeskwadraatbrief}{Warning: The ouderdag account has been cancelled!\MessageBreak You probably want the event account,\MessageBreak so I've set it for you.}% } \NewDocumentCommand{\introrekening}{}{% \evenementenrekening% \ClassWarningNoLine{aeskwadraatbrief}{Warning: The intro account has been cancelled!\MessageBreak You probably want the event account,\MessageBreak so I've set it for you.}% } \NewDocumentCommand{\boekenrekening}{}{% \def\aes@bank{ABN Amro}% \def\aes@giro{50 7122 690}% \def\aes@BIC{ABNANL2A}% \def\aes@IBAN{NL69 ABNA 0507 1226 90}% \def\aes@rekeninghouder{Boekencommissaris}% } \girorekening % \end{macrocode} % \begin{macro}{\uwk} % |\uwk{reference}| adds a reference, used for invoices. % Specifically, it sets the reference for the recipient. % \begin{macrocode} \newcommand\aes@uwk{} \NewDocumentCommand{\uwk}{ m }{% \renewcommand\aes@uwk{#1}% } % \end{macrocode} % \end{macro} % \begin{macro}{\onsk} % Similarly to |\uwk|, |\onsk{reference}| adds the reference % of the sender. % \begin{macrocode} \newcommand\aes@onsk{} \NewDocumentCommand{\onsk}{ m }{% \renewcommand\aes@onsk{#1}% } % \end{macrocode} % \end{macro} % The following macros are all used for providing some % parameters for the header. % \begin{macrocode} \newcommand\aes@email{% \ClassWarningNoLine{aeskwadraatbrief}{No e-mail address set.\MessageBreak Use \protect\email{@a-eskwadraat.nl}\space to \MessageBreak set it} bestuur@a-eskwadraat.nl% } \NewDocumentCommand{\email}{ m }{% \renewcommand\aes@email{#1}% } \newcommand\aes@datum{\today} \NewDocumentCommand{\datum}{ m }{% \renewcommand\aes@datum{#1}% } \newcommand\aes@subject{\ClassWarningNoLine{aeskwadraatbrief}{ No \protect\subject\space found. \MessageBreak Use \protect\subject{subject}\space to set \MessageBreak it. Default (empty) subject set}% } \NewDocumentCommand{\subject}{ m }{% \renewcommand\aes@subject{#1} } \let\onderwerp\subject % \end{macrocode} % \begin{environment}{aes@blist} % |aes@blist| is an environment used to typeset % attachments. % \begin{macrocode} \newenvironment{aes@blist}{ \begin{list}{\(\bullet\)}{% \raggedright \setlength\leftmargin{1em} \setlength\rightmargin{0pt} \setlength\labelwidth{0.6em} \setlength\labelsep{0.3em} \setlength\itemsep{0pt} \setlength\topsep{0pt} \setlength\parsep{0pt} \setlength\partopsep{0pt} \setlength\listparindent{0pt} \setlength\itemindent{0em} }% }{% \end{list}% } % \end{macrocode} % \end{environment} % \begin{macro}{\aes@aantalbijlagen} % We define a fake counter |\aes@aantalbijlagen| to track % the number of attachments. It has to be a macro to % ensure that it is defined locally, respecting scoping. % \begin{macrocode} \newcommand\aes@aantalbijlagen{0} \newcommand\aes@bijlage{} % \end{macrocode} % \end{macro} % \begin{macro}{\geenbijlagen} % |\geenbijlagen| means that there are no attachments. It % is equivalent to |\bijlagen{}|, but slightly more % efficient. % \begin{macrocode} \NewDocumentCommand{\geenbijlagen}{}{% \renewcommand\aes@bijlage{}% \renewcommand\aes@aantalbijlagen{0}% } % \end{macrocode} % \end{macro} % \begin{macro}{\bijlagen} % |\bijlagen{attachments}| typesets a list of attachments, % separated by |\item|s, and saves the number of attachments % to |\aes@aantalbijlagen|.\par % If no |\item| is used, the argument will be treated as one % attachment. If only one attachment is found, no bullets will % be added in the final product. % \begin{macrocode} \newsavebox{\aes@devnull}% \newcounter{aes@telbijlagen}% \NewDocumentCommand{\bijlagen}{ +m }{% % First count the number of attachments and dump the % argument to the savebox \aes@devnull. \let\echtitem\item% \setcounter{aes@telbijlagen}{0}% \renewcommand\item{\stepcounter{aes@telbijlagen}}% % We count the number of attachments as the number of % uses of \item. If no \item is used, but the argument % is non-empty, we will treat it as a single item later on. \savebox{\aes@devnull}{#1}% \let\item\echtitem% % % Correct aes@telbijlagen and fill \aes@bijlage. \ifthenelse{\value{aes@telbijlagen}=0}{% % There are no \items \renewcommand\aes@bijlage{#1}% \ifthenelse{\equal{#1}{}}{% % There are no attachments. }{% % There is one attachment without \item \setcounter{aes@telbijlagen}{1}% }% }{% % There are \items \ifthenelse{\value{aes@telbijlagen}=1}{% % There is only one item: no bullets \renewcommand\aes@bijlage{% \renewcommand\item{}% Deletes the bullet #1 }% }{% % There are several \items, so we make a list \renewcommand\aes@bijlage{% \begin{aes@blist} #1 \end{aes@blist} }% }% }% % We save the number of attachments to \aes@aantalbijlagen % \edef gives the command the current value, rather than the % value of the counter at the time that the command is used \edef\aes@aantalbijlagen{\theaes@telbijlagen}% } \let\bijlage\bijlagen % \end{macrocode} % \end{macro} % In order to respect backwards compatibilty, we need to throw % a warning if |\bijlages| is used. % \begin{macrocode} \NewDocumentCommand{\bijlages}{ +m }{% \ClassWarningNoLine{aeskwadraatbrief}{% The command \protect\bijlages\space is no longer supported.\MessageBreak% Use \protect\bijlage\space or \protect\bijlagen.% }% \bijlagen{ #1 }% } % \end{macrocode} % We define some useful macros. % \begin{macro}{\aes@kixcode} % |\aes@kixcode| sets a kix (customer index) code, % and saves it to |\aes@kixcode|. See % \url{https://nl.wikipedia.org/wiki/KIX-code}. % \begin{macrocode} \newcommand\aes@kixcode{} \NewDocumentCommand{\kixcode}{ m }{% \renewcommand\aes@kixcode{\scantokens{#1}}% } % \end{macrocode} % \end{macro} % \begin{macro}{\opening} % |\opening| creates the opening paragraph of the letter. % It also adds the letter header. % \begin{macrocode} \NewDocumentCommand{\opening}{ +m }{% \setboolean{aes@openinggezien}{true}% \aes@briefhoofd% #1\vspace{0.5\baselineskip}\par% } \let\aanhef\opening % \end{macrocode} % \end{macro} % \begin{macro}{\geenopening} % |\geenopening| is used for adding the letter header % without creating an opening paragraph. % \begin{macrocode} \NewDocumentCommand{\geenopening}{}{% \setboolean{aes@openinggezien}{true}% \aes@briefhoofd% } % \end{macrocode} % \end{macro} % \begin{macro}{\sig} % |\sig| is an internal macro for typesettin % a single signature. % \begin{macrocode} \newcommand\sig[1]{% \begin{minipage}[t][2cm][t]{55mm}% \vspace*{1.3cm}#1% \end{minipage} } % \end{macrocode} % \end{macro} % \begin{macro}{\aes@signature} % |\aes@signature| typesets all signatures % (one or two). % \begin{macrocode} \newcommand\aes@signature{% \ClassError{aeskwadraatbrief}{No \protect\signature\space given, but found a \protect\closing} {Define a \protect\signature\space or remove the \protect\closing.}} % \end{macrocode} % \end{macro} % \begin{macro}{\signature}\begin{macro}{\signature} % |\signature| is the user variant for signatures % and saves it to |\aes@signature|. It takes one argument.\par % |\signatures| takes two arguments and saves % both as signatures. % \begin{macrocode} \NewDocumentCommand{\signature}{ +m }{% \renewcommand\aes@signature{\sig{#1}}% } \NewDocumentCommand{\signatures}{ +m +m }{% \renewcommand\aes@signature{\sig{#1}\hspace*{1cm}\sig{#2}}% } % \end{macrocode} % \end{macro}\end{macro} % \begin{macro}{\closing} % To typeset the signatures, use |\closing|, which % also takes an argument for a closing paragraph % before the signatures. % \begin{macrocode} \NewDocumentCommand{\closing}{ +m }{% \par\vspace{0.5\baselineskip}% % deze minipage zorgt ervoor dat de \closing en % \signature altijd samen op 1 pagina staan \begin{minipage}{\textwidth}% #1\par\aes@signature% \end{minipage}% } % \end{macrocode} % \end{macro} % We define some standard data for \aesnaam{} % that shouldn't be changed by the end user. % \begin{macrocode} \newcommand\aes@NL{\ifthenelse{\boolean{isbuitenland}}{,~NL}{}} \newcommand\aes@returnline{\aesnaam, Princetonplein~5, 3584~CC~~Utrecht\aes@NL} \newcommand\aes@bezoekadr{Buys Ballotgebouw, \TAALkamer~269\\ Princetonplein~5\\ 3584~CC~~Utrecht\aes@NL} \newcommand\aes@telefoon{+31\,30\,253\,44\,99} \newcommand\aes@fax{+31\,30\,253\,57\,87} \newcommand\aes@www{www.a-eskwadraat.nl} % \end{macrocode} % If the letter is by the ontour foundation, % we need to change the standard data % \begin{macrocode} \ifthenelse{\boolean{aes@ontour}}{% \setboolean{aes@optfooter}{false}% \email{ontour@A-Eskwadraat.nl}% \afzendernaam\TAALontournaam% \def\aes@kvknr{30230072}% \def\aes@bank{ING}% \def\aes@giro{4559482}% \def\aes@BIC{INGBNL2A}% \def\aes@IBAN{NL39 INGB 0004 5594 82}% \def\aes@rekeninghouder{\TAALontournaam}% \renewcommand\aes@returnline{% \aesnaam On Tour, Princetonplein~5, 3584~CC~~Utrecht\aes@NL}% }{} % \end{macrocode} % For the betadag, we also need to change % some information. % \begin{macrocode} \ifthenelse{\boolean{aes@betadag}}{% \welkleur% \AtBeginDocument{\def\TAALfinancien#1#2{}}% \setboolean{aes@optfooter}{false}% \email{betadag@A-Eskwadraat.nl}% \afzendernaam{B\`etadag 2013}% \cienaam{Utrecht}% \renewcommand\aes@www{www.a-eskwadraat.nl/betadag}% }{} % \end{macrocode} % We define the height of a block in the letter % header and save it to |\aes@bhhoogte|. % \begin{macrocode} \newlength\aes@bhhoogte % \end{macrocode} % \begin{macro}{\aes@bhblok} % |\aes@bhblok| creates a single block in the % letter header. % \begin{macrocode} \newcommand\aes@bhblok[2]{% \begin{minipage}[t][\aes@bhhoogte][t]{41mm}% {\aes@fontheader#1\vphantom{ghL}}\par% % The \vphantom is for consistent spacing {\aes@fonttext\raggedright#2\vphantom{ghL}}\par% \end{minipage}% } % \end{macrocode} % \end{macro} % \begin{macro}{\aes@leegbhblok} % |\aes@leegbhblok| is a shortcut for an empty % |\aes@bhblok|. % \begin{macrocode} \newcommand\aes@leegbhblok{\aes@bhblok{~}{~}} % \end{macrocode} % \end{macro} % \begin{macro}{\zetblokje} % |\zetblokje{pos}{header}{content}| adds a block % at position |pos|, given by a combination of two % letters, the first being |l| (left), |m| (middle) or |r| (right), % and the second being |b| (top) or |o| (bottom). % It then gives it a header and some content.\par % The block is actually saved to a command % |\blokje@pos|, which is to be run later. % \begin{macrocode} \NewDocumentCommand{\zetblokje}{ m +m +m }{% \expandafter\gdef\csname blokje@#1\endcsname{\aes@bhblok{#2}{#3}}% } % \end{macrocode} % \end{macro} % \begin{macro}{\leegblokje} % |\leegblokje{pos}| would do the same as % |\zetblokje{pos}{}{}|. % \begin{macrocode} \NewDocumentCommand{\leegblokje}{ m }{% \expandafter\gdef\csname blokje@#1\endcsname{\aes@leegbhblok}% } % \end{macrocode} % \end{macro} % \begin{macro}{\aes@briefhoofdblokjes} % We define the default macro for the % letter header blocks. % \begin{macrocode} \newcommand\aes@briefhoofdblokjes{% \zetblokje{rb}{\TAALemail}{\aes@email} % The attachment block is only necessary % if there are attachments. \ifthenelse{\aes@aantalbijlagen=1}{% % One attachment \zetblokje{ro}{\TAALbijlage}{\aes@bijlage} }{% \ifthenelse{\aes@aantalbijlagen>1}{% % Multiple attachments \zetblokje{ro}{\TAALbijlagen}{\aes@bijlage} }{% % No attachments \leegblokje{ro} }% }% % Places the blocks, depending on what data is given \ifthenelse{\equal{\aes@uwk}{} \and \equal{\aes@onsk}{}}{% \zetblokje{lb}{\TAALdatum}{\aes@datum} \zetblokje{mb}{\TAALonderwerp}{\aes@subject} \leegblokje{lo} \leegblokje{mo} }{% \zetblokje{lb}{\TAALuwkenmerk}{\aes@uwk} \zetblokje{mb}{\TAALonskenmerk}{\aes@onsk} \zetblokje{lo}{\TAALdatum}{\aes@datum} \zetblokje{mo}{\TAALonderwerp}{\aes@subject} } } % \end{macrocode} % \end{macro} % \begin{macro}{\aes@briefhoofd} % |\aes@briefhoofd| generates the header above % any letter. % \begin{macrocode} \newlength\hoofd@temp \newcommand\aes@briefhoofd{ \vspace*{-119mm}\par% \setlength\hoofd@temp{\parskip} % Save the parskip, which we will change \setlength\parskip{1mm}% % % Make all blocks empty \leegblokje{lb}\leegblokje{mb}\leegblokje{rb}% \leegblokje{lo}\leegblokje{mo}\leegblokje{ro}% % % Run |\aes@briefhoofdblokjes| and % typeset all blocks \smash{\aes@briefhoofdblokjes}% % % First do the top blocks \setlength\aes@bhhoogte{17mm}% \blokje@lb\hspace*{3mm}% \blokje@mb\hspace*{3mm}% \blokje@rb\hspace*{4mm}% % Despite being set to 17 mm, the minipage's % height will be much larger than it % This goes right regardless \begin{minipage}[t][17mm][t]{45mm}% \raggedright \mbox{\aes@fontheader\bfseries\aes@afzendernaam}\par \mbox{\aes@fontheader\bfseries\aes@cienaam} \vspace{.9\baselineskip}\par {\aes@fontheader% \aes@bezoekadr\vspace{.9\baselineskip}\par \TAALtelefoon~\aes@telefoon\vspace{.9\baselineskip}\par % \TAALfax~\aes@fax\vspace{.9\baselineskip}\par % Fax is dead \TAALfinancien{\aes@kvknr}{\aes@IBAN}\par \@ifundefined{\aes@btwnr} {\TAALbtw{~\aes@btwnr}\vspace{.9\baselineskip}\par} {\vspace{.9\baselineskip}\par} \aes@www} \end{minipage}\par % % The bottom blocks \setlength\aes@bhhoogte{24mm}% \blokje@lo\hspace*{3mm}% \blokje@mo\hspace*{3mm}% \blokje@ro\par% % % Add the address \hspace*{5mm}% %% Address should be slightly % to the right due to the shape of % envelopes \begin{minipage}[t][47mm][t]{140mm}% {\aes@fontheader\aes@returnline}\\[.2ex] \aes@fontadres\aes@adres\\[0.5\baselineskip] \kix{\aes@kixcode} % If \aes@kixcode is empty, % this does nothing \end{minipage}\par % % logo \ifthenelse{\boolean{aes@optkleur}}{}{% \hfill% \begin{minipage}[b][0cm][t]{5cm}% \vspace*{-35mm}\par% % = -(logo height (32mm) + 1.5mm) \aeslogogrijs[5cm] % logo is 5cm on the real % letter paper, too \end{minipage}} \setlength\parskip{\hoofd@temp} \vspace*{4mm}\par% % We add a good distance to the opening % paragraph } % \end{macrocode} % \end{macro} % \begin{environment}{brief} % Finally, we define the important |brief| % environment, which is what we will use to % create letters.\par % The environment takes a single argument, % which is the recipient's address. % \begin{macrocode} \NewDocumentEnvironment{brief}{ +m }{% \ifthenelse{\boolean{aes@optfooter}}{\thispagestyle{footer}}{} % This adds the bottom text and UU logo \newcommand\aes@adres{#1} % \opening does the rest, due to scoping \newboolean{aes@openinggezien}% \setboolean{aes@openinggezien}{false}% }{% \ifthenelse{\boolean{aes@openinggezien}}{}{% \ClassError{aeskwadraatbrief}{You forgot \protect\opening{Dear ...,}\space} {TeXniCie requires beer.}% }% \clearpage% } \NewDocumentEnvironment{letter}{ +m }{\begin{brief}{#1}}{\end{brief}} % To look slightly like the letter class % \end{macrocode} % \end{environment} % \begin{macrocode} % % \end{macrocode} % % % % % % \subsection{\textsf{aeskwadraattaal}} % This package defines some macros for generating text. % It is used mainly for \textsf{aeskwadraatfactuur}. % \setcounter{CodelineNo}{0} % \begin{macrocode} %<*taal> %% Copyright (C) 1994-2017 TeXniCie A-Eskwadraat %% \NeedsTeXFormat{LaTeX2e}[2020/10/01] \ProvidesPackage{aeskwadraattaal}[2025/06/13 v1.0.1 Language definitions for classes and packages] % \end{macrocode} % \textsf{babel} is unnecessary (not even desirable). % \begin{macrocode} %\RequirePackage{babel} % \end{macrocode} % Here follow some important packages. % \begin{macrocode} \RequirePackage{aeskwadraat} \RequirePackage{ifthen} \RequirePackage{eurosym} % \end{macrocode} % The following commands are used for internal purposes.\par % \begin{macro}{\DeclareTaalOpties} % |\DeclareTaalOpties| sets all known language options % to later use. % \begin{macrocode} \newcommand\DeclareTaalOpties{ \def\@babeltalen{} \@taaloptie{dutch} \@taaloptie{english} } % \end{macrocode} % \end{macro} % \begin{macro}{\@taaloptie} % Each language option is built with |\@taaloptie|. % \begin{macrocode} \newcommand\@taaloptie[1]{ \DeclareOption{#1}{ \edef\@babeltalen{\@babeltalen #1,} } } % \end{macrocode} % \end{macro} % \begin{macro}{\LaadBabel} % |\LaadBabel| loads \textsf{babel} with all added languages. % The last one is automatically chosen as the ``active'' % language by babel. % \begin{macrocode} \newcommand\LaadBabel{ \ifthenelse{\equal{\@babeltalen}{}}{ \def\@babeltalen{[dutch]} }{ \edef\@babeltalen{[\@babeltalen]} } \expandafter\RequirePackage\@babeltalen{babel} } % \end{macrocode} % \end{macro} % We now define a basic error.\par % \begin{macro}{\aeskwadraattaal@geenvertaling} % This is to be triggered whenever a command has no % translation for a given language. % \begin{macrocode} \newcommand\aeskwadraattaal@geenvertaling[1]{% \PackageWarning{aeskwadraattaal}{% Ik ken nog geen (goede) vertaling voor '#1'\MessageBreak in de taal '\languagename'}% {Stuur je vertaling naar texnicie@a-eskwadraat.nl.}% } % \end{macrocode} % \end{macro} % We declare a boolean |isbuitenland|, which is to be % |false| for all languages but Dutch. % \begin{macrocode} \newboolean{isbuitenland} % \end{macrocode} % \begin{macro}{\selectlanguage} % The following adds a hook to babel's % |\selectlanguage|. It runs % |\aeskwadraattaal@selectlanguage| after running the regular % |\selectlanguage|. To make this work, \textsf{aeskwadraattaal} % should be loaded AFTER babel. % \begin{macrocode} \let\aeskwadraattaal@babelselectlanguage\selectlanguage \renewcommand\selectlanguage[1]{% \aeskwadraattaal@babelselectlanguage{#1}% \aeskwadraattaal@selectlanguage{#1}% } % \end{macrocode} % \end{macro} % \begin{macro}{\aeskwadraattaal@selectlanguage} % |\aeskwadraattaal@selectlanguage| loads the \aesnaam{} language % definitions in the given language if possible. It loads % the Dutch ones if the language is unknown, giving a warning. % \begin{macrocode} \newcommand\aeskwadraattaal@selectlanguage[1]{% \ifthenelse{% \expandafter\isundefined\csname aeskwadraattaal@#1\endcsname}{% \PackageError{aeskwadraattaal} {Ik ken de taal '#1' niet.}% {Als je deze taal echt nodig hebt, neem dan contact op\MessageBreak met de TeXniCie}% \aeskwadraattaal@dutch% }{% \csname aeskwadraattaal@#1\endcsname% } } % \end{macrocode} % \end{macro} % At the beginning of the document, we want to load the % \aesnaam{} language macros.\par % If \textsf{babel} isn't explicitly loaded, |\selectlanguage| % isn't run automatically. % \begin{macrocode} \AtBeginDocument{\aeskwadraattaal@selectlanguage{\languagename}} % \end{macrocode} % We set some default values for if no language is selected % \begin{macrocode} \newcommand{\@cijfertekst}[1]{% \large{GEEN TAAL GESELECTEERD!}\normalsize} \newcommand{\@tientaltekst}[2]{% \large{GEEN TAAL GESELECTEERD!}\normalsize} % \end{macrocode} % \begin{macro}{\aeskwadraattaal@dutch} % We define the Dutch language macros % \begin{macrocode} \newcommand\aeskwadraattaal@dutch{% \setboolean{isbuitenland}{false}% \def\TAALuwkenmerk{Uw~kenmerk}% \def\TAALonskenmerk{Ons~kenmerk}% \def\TAALemail{E-mail}% \def\TAALdatum{Datum}% \def\TAALonderwerp{Onderwerp}% \def\TAALbijlage{Bijlage}% \def\TAALbijlagen{Bijlagen}% \def\TAALadres{Adres}% \def\TAALkamer{kamer}% \def\TAALtelefoon{Telefoon}% \def\TAALfax{Fax}% \def\TAALbtw##1{BTW-nr. ##1} \def\TAALpostbus{Postbus}% \def\TAALaesnaam{Studievereniging \aesnaam{}}% \def\TAALontournaam{Stichting \aesnaam{} On Tour}% % (1) kvknummer, (2) bank/giro nr incl formatting \def\TAALfinancien##1##2{K.v.K.~Utrecht\,~##1\\##2}% \def\TAALverenigingfooter{% D\'e studievereniging van \mbox{Natuur- en Sterrenkunde}, \mbox{Wiskunde}, \mbox{Informatica} en \mbox{Informatiekunde} aan de Universiteit Utrecht}% % TODO: Change this description to match actual programs % %naam bank, rekeningnummer, optioneel IBAN-spul, t.n.v., o.v.v. \def\TAALbetaalinstructie##1##2##3##4##5##6{% Wij verzoeken u het totaalbedrag binnen ##1 dagen na dagtekening over te maken\\ op ##2-rekening ##3##4 t.n.v.\ ##5\ifthenelse{\equal{##6}{}}{}{, o.v.v.\ \emph{`##6'}}.% }% \def\TAALterugkrijginstructie{% Let op! Het negatieve totaalbedrag op deze factuur geeft aan dat het een factuur betreft in \emph{uw voordeel}. Het bovenstaande bedrag is inmiddels overgemaakt op het door u opgegeven bank- of girorekeningnummer.% }% % \def\TAALfactuur{Factuur}% \def\TAALherinnering{Herinneringsfactuur}% \def\TAALaanmaning{Aanmaning}% \def\TAALteruggave{Creditnota}% \def\TAALomschrijving{Omschrijving}% \def\TAALbedrag{Bedrag}% \def\TAALtotaal{Totaal}% \def\TAALsubtotaal{Subtotaal}% \def\TAALbtw{BTW-nr.}% \def\TAALexbtw{exclusief btw}% \def\TAALinclbtw{inclusief btw}% \def\TAALover{over} \def\TAALduizendsym{.}% \def\TAALdecimaalsym{,}% \def\TAALbtwverlegd{BTW verlegd.}% \def\TAALpaginaGaatVerder{-- Gaat verder op de volgende pagina. --}% % % Contractenspul % % \def\TAALtoelichting{Toelichting: }% \def\TAALovereenkomst{Overeenkomst}% \def\TAALpaginavan##1##2{pagina ##1 van ##2}% \def\TAALaesland{}% \def\TAALhiernatenoemen{Hierna te noemen}% \def\TAALparties{Partijen}% \def\TAALakkoord##1##2##3{##1 en ##2 verklaren kennis genomen te hebben van en akkoord gegaan te zijn met de onderstaande overeenkomst, tellende \ifthenelse{\equal{##3}{1}} {\'e\'en pagina.}{\@cijfertekst{##3} pagina's.}}% \def\TAALannulering{Op dit onderdeel zijn de annuleringsvoorwaarden van toepassing.}% \def\TAALondert{Ondertekening}% \def\TAALexclbtw{Alle bedragen genoemd in dit contract zijn exclusief btw, tenzij anders aangegeven.} \renewcommand{\@cijfertekst}[1]{% \@ifequal{##1}{1}{\'e\'en}{}\@ifequal{##1}{2}{twee}{}% \@ifequal{##1}{3}{drie}{}\@ifequal{##1}{4}{vier}{}% \@ifequal{##1}{5}{vijf}{}\@ifequal{##1}{6}{zes}{}% \@ifequal{##1}{7}{zeven}{}\@ifequal{##1}{8}{acht}{}% \@ifequal{##1}{9}{negen}{}\@ifequal{##1}{10}{tien}{}% \@ifequal{##1}{11}{elf}{}\@ifequal{##1}{12}{twaalf}{}% \@ifequal{##1}{13}{dertien}{}\@ifequal{##1}{14}{veertien}{}% \@ifequal{##1}{15}{vijftien}{}\@ifequal{##1}{16}{zestien}{}% \@ifequal{##1}{17}{zeventien}{}\@ifequal{##1}{18}{achttien}{}% \@ifequal{##1}{19}{negentien}{}\@ifequal{##1}{20}{twintig}{}% \@ifequal{##1}{30}{dertig}{}\@ifequal{##1}{40}{veertig}{}% \@ifequal{##1}{50}{vijftig}{}\@ifequal{##1}{60}{zestig}{}% \@ifequal{##1}{70}{zeventig}{}\@ifequal{##1}{80}{tachtig}{}% \@ifequal{##1}{90}{negentig}{}% }% \renewcommand{\@tientaltekst}[2]{% \kladd=\the##1% \multiply\kladd by 10% \ifthenelse{\the##1>1}{% tekst genereren, iets > 20 \@ifundefined{resttekst}{% \newcommand{\resttekst}{\@cijfertekst{\the\rest}en}% }{% \renewcommand{\resttekst}{\@cijfertekst{\the\rest}en}% }% \ifthenelse{\the\rest=0}{\renewcommand{\resttekst}{}}{}% \ifthenelse{\the\rest=2}{\renewcommand{\resttekst}{twee\"en}}{}% \ifthenelse{\the\rest=3}{\renewcommand{\resttekst}{drie\"en}}{}% \renewcommand{##2}{\resttekst\@cijfertekst{\the\kladd}}% }{ % tiental < 2, tekst uit @cijfertekst halen \advance\kladd by \the\rest% \renewcommand{##2}{\@cijfertekst{\the\kladd}}% }% }% \def\TAALgetalspatie{}% \def\TAALopgemaakt{Opgemaakt te }% \def\TAALnaam{Naam}% \def\TAALhandtekening{Handtekening}% \def\TAALduizend{duizend}% \def\TAALhonderd{honderd}% \def\TAALvakidad{Advertentie Vakidioot}% \def\TAALvakidadtext##1##2##3##4##5##6##7{% \aes stelt ##1 gedurende het collegejaar ##2 een ##3 volledige (staande) pagina (\mbox{18,3 cm} breed bij \mbox{25,8 cm} hoog) ter beschikking voor een full-color ##4 van ##5 van \emph{De Vakidioot}, het periodiek van \aes. Deze ##6 verschijnen in de ##7.}% \def\TAALvacature{vacature}% \def\TAALvacatures{vacatures}% \def\TAALthis{deze}% \def\TAALthese{deze}% \def\TAALvacbank{Online vacaturebank}% \def\TAALvacbanktxt##1##2##3##4##5##6##7{% \aes biedt ##1 gedurende ##2 de mogelijkheid om ##3 ##4 in de vacaturebank op de website van \aes te plaatsen. ##5 heeft de mogelijkheid om ##6 ##7 eens per maand te wijzigen.}% \def\TAALstagemail{Stage- en banenmailing}% \def\TAALbedragsteun##1##2##3{% ##1 zal ##2 hiervoor steunen met een bedrag van ##3 euro.}% \def\TAALbedragrestitutie##1##2##3{% ##2 restitueert een bedrag van ##3 euro aan ##1.}% \def\TAALbetalingsvoorwaarden{Betalingsvoorwaarden}% \def\TAALtotaalgeenkorting##1{% De onderdelen van deze overeenkomst vormen samen een bedrag van ##1 euro (zegge: \@zegge{##1} euro).}% \def\TAALtotaalgeenkortingbtw##1##2{% De onderdelen van deze overeenkomst vormen samen een bedrag van ##1 euro (zegge: \@zegge{##1} euro) exclusief btw, ##2 inclusief btw.}% \def\TAALtotaalwelkorting##1##2##3##4##5##6{% De onderdelen van deze overeenkomst vormen samen een bedrag van ##1 euro. ##2 biedt ##3 een korting van ##4 euro (##5\%), waarmee het totaalbedrag van deze overeenkomst uitkomt op ##6 euro (zegge: \@zegge{##6} euro).}% \def\TAALtotaalwelkortingbtw##1##2##3##4##5##6##7{% De onderdelen van deze overeenkomst vormen samen een bedrag van ##1 euro. ##2 biedt ##3 een korting van ##4 euro (##5\%), waarmee het totaalbedrag van deze overeenkomst uitkomt op ##6 euro (zegge: \@zegge{##6} euro) exclusief btw, ##7 inclusief btw.}% \def\TAALbetalingsvoorwaardentext##1##2##3{% Deze overeenkomst zal als \'e\'en geheel gefactureerd worden, betaling door ##1 geschiedt binnen ##2 dagen na ontvangst van de desbetreffende factuur. Indien er een ordernummer (PO-nummer) verstrekt dient te worden alvorens facturatie kan plaatsvinden, zal ##1 ##3 binnen twee weken na ondertekening van deze overeenkomst voorzien van een dergelijk nummer.}% \def\TAALannuleringsvoorwaardentext##1##2{% Mocht ##1 minder dan 15, 8 of 2 dagen voor de overeengekomen datum aangeven dat zij haar verplichtingen niet kan nakomen, dan zal ##2 respectievelijk 50\%, 75\% of 100\% van de kosten in rekening brengen bij ##1 en heeft \partijkort voldaan aan haar verplichtingen. De genoemde datum wordt in dit contract vastgelegd. Mocht dit niet het geval zijn dan zal er door dit contract uitsluitsel worden gegeven hoe dit wel wordt vastgesteld.}% \def\TAALannuleringsvoorwaarden{Annuleringsvoorwaarden}% \def\TAALparaaf{Paraaf voor akkoord}% \def\TAALstagemailtxt##1##2{% \aes biedt ##1 ruimte om in de stage- en banenmailing van ##2 exclusief te adverteren. Hiermee kunnen stages, afstudeerplekken en banen aangeboden worden.}% \def\TAALpartijen{Partijen}% \def\TAALen{en} \def\TAALcents{cent} \def\TAALeuros{euro} \def\TAALzegge{zegge} } % \end{macrocode} % \end{macro} % \begin{macro}{\aeskwadraattaal@english} % We define the English language macros. % \begin{macrocode} \newcommand\aeskwadraattaal@english{% \setboolean{isbuitenland}{true}% \def\TAALonskenmerk{Our~reference}% \def\TAALuwkenmerk{Your~reference}% \def\TAALemail{Email}% \def\TAALdatum{Date}% \def\TAALonderwerp{Subject}% \def\TAALbijlage{Enclosure}% % Zie: www.dictionary.com. Volgens mij goed % Jesse: It depends. Enclosure is for physical letters, % while attachment is for electronic letters. % NOTE: Maybe change to "attachment". \def\TAALbijlagen{Enclosures}% \def\TAALadres{Address}% \def\TAALkamer{room}% \def\TAALtelefoon{Phone}% \def\TAALfax{Fax}% \def\TAALbtw##1{VAT nr. ##1} \def\TAALpostbus{P.O.\@ Box}% \def\TAALaesnaam{Student Association \aesnaam{}}% % TODO: Should "Student Association" be "Study Association"? \def\TAALontournaam{\aesnaam{} On Tour Foundation}% \def\TAALfinancien##1##2{C.o.C.~Utrecht\,~##1\\##2}% \def\TAALverenigingfooter{% Student association for \mbox{Physics and Astronomy}, \mbox{Mathematics}, \mbox{Information} and \mbox{Computing Sciences} at Utrecht University}% % TODO: these are wrong nowadays % %naam bank, rekeningnummer, optioneel IBAN-spul, t.n.v., o.v.v. \def\TAALbetaalinstructie##1##2##3##4##5##6{% We ask you to deposit the total amount within ##1 days\\ with our ##2 account ##3\ifthenelse{\equal{##4}{}}{}{ (##4)},\\ account holder \emph{`##5'}.% \ifthenelse{\equal{##6}{}}{}{ Please mention \emph{`##6'}.}% }% \def\TAALterugkrijginstructie{% The negative amount indicates this is an invoice in \emph{your favour}. The mentioned amount has been transferred to your bank account.% }% \def\TAALfactuur{Invoice}% \def\TAALherinnering{Invoice}% \def\TAALaanmaning{Urgent Request}% \def\TAALteruggave{Credit memo}% \def\TAALomschrijving{Description}% \def\TAALbedrag{Amount}% \def\TAALtotaal{Total amount}% \def\TAALexbtw{excluding VAT}% \def\TAALinclbtw{including VAT}% \def\TAALbtw{VAT nr.}% \def\TAALover{of} \def\TAALsubtotaal{Subtotal}% \def\TAALduizendsym{,}% \def\TAALdecimaalsym{.}% \def\TAALbtwverlegd{VAT due by recipient.\\ Reverse charge mechanism applicable, based on article 44 and 196 EU VAT directive.}% \def\TAALpaginaGaatVerder{-- Continues on the next page. --}% \def\TAALtoelichting{Explanation: }% \def\TAALovereenkomst{Contract}% \def\TAALpaginavan##1##2{page ##1 of ##2}% \def\TAALaesland{\\ Netherlands}% \def\TAALhiernatenoemen{Hereinafter called }% \def\TAALpartijen{Parties}% \def\TAALakkoord##1##2##3{% ##1 and ##2 declare to have taken note of and agreed to the following agreement, counting % \ifthenelse{\equal{##3}{1}}{one page.}{\@cijfertekst{##3} pages.}}% \def\TAALexclbtw{% All prices include VAT, unless specified otherwise.} \def\TAALannulering{% On this part of the contract the cancellation policy applies.}% \def\TAALondert{Signing}% \renewcommand{\@cijfertekst}[1]{% \@ifequal{##1}{1}{one}{}\@ifequal{##1}{2}{two}{}% \@ifequal{##1}{3}{three}{}\@ifequal{##1}{4}{four}{}% \@ifequal{##1}{5}{five}{}\@ifequal{##1}{6}{six}{}% \@ifequal{##1}{7}{seven}{}\@ifequal{##1}{8}{eight}{}% \@ifequal{##1}{9}{nine}{}\@ifequal{##1}{10}{ten}{}% \@ifequal{##1}{11}{eleven}{}\@ifequal{##1}{12}{twelve}{}% \@ifequal{##1}{13}{thirteen}{}\@ifequal{##1}{14}{fourteen}{}% \@ifequal{##1}{15}{fifteen}{}\@ifequal{##1}{16}{sixteen}{}% \@ifequal{##1}{17}{seventeen}{}\@ifequal{##1}{18}{eighteen}{}% \@ifequal{##1}{19}{nineteen}{}\@ifequal{##1}{20}{twenty}{}% \@ifequal{##1}{30}{thirty}{}\@ifequal{##1}{40}{forty}{}% \@ifequal{##1}{50}{fifty}{}\@ifequal{##1}{60}{sixty}{}% \@ifequal{##1}{70}{seventy}{}\@ifequal{##1}{80}{eighty}{}% \@ifequal{##1}{90}{ninety}{}% } \renewcommand{\@tientaltekst}[2]{% \kladd=\the##1% \multiply\kladd by 10% \ifthenelse{\the##1>1}{% tekst genereren, iets > 20 \@ifundefined{resttekst}{% \newcommand{\resttekst}{\@cijfertekst{\the\rest}}% }{% \renewcommand{\resttekst}{\@cijfertekst{\the\rest}}% }% \ifthenelse{\the\rest=0}{% \renewcommand{##2}{\@cijfertekst{\the\kladd}}% }{% \renewcommand{##2}{\@cijfertekst{\the\kladd}-\resttekst}% }% }{ % tiental < 2, tekst uit @cijfertekst halen \advance\kladd by \the\rest% \renewcommand{##2}{\@cijfertekst{\the\kladd}}% }% }% \def\TAALgetalspatie{ }% \def\TAALopgemaakt{Prepared in }% \def\TAALnaam{Name}% \def\TAALhandtekening{Signature}% \def\TAALduizend{thousand}% \def\TAALhonderd{hundred}% \def\TAALvakidad{Advertisement Vakidioot}% \def\TAALvakidadtext##1##2##3##4##5##6##7##8{% \aes offers ##1 during the academic year ##2 a ##3 full (portrait) page (width: \mbox{18.3 cm}, height: \mbox{25.8 cm}) for a full-color ##4 of ##5 in the \emph{De Vakidioot}, the periodical of \aes. These ##6 ##7 appear in ##8}% % %%% % %%% TODO: plaatsings en maanden dingen vertalen % %%% \def\TAALvacature{vacancy}% \def\TAALvacatures{vancancies}% \def\TAALthis{this}% \def\TAALthese{these}% \def\TAALvacbank{Online Vacancy Board}% \def\TAALvacbanktxt##1##2##3##4##5##6##7{% \aes offers ##1 for a period of ##2 the opportunity to place ##3 ##4 on the vacancy board of \aes, ##5 has the opportunity to change ##6 ##7 once every month.}% \def\TAALstagemail{Internship and job mailing}% \def\TAALstagemailtxt##1##2{% \aes offers ##1 the opportunity to exclusively advertise via the internship and job mailing of ##2 . This can be used to offer internships, graduation projects and jobs.}% \def\TAALbedragsteun##1##2##3{% In exchange ##1 will support ##2 with the sum of ##3 euro.}% \def\TAALbetalingsvoorwaarden{Payment policy}% \def\TAALtotaalgeenkorting##1{% The parts of this contract form an amount of ##1 euro (in words: \@zegge{##1} euro).}% \def\TAALtotaalgeenkortingbtw##1##2{% The parts of this contract form an amount of ##1 euro (in words: \@zegge{##1} euros) excluding VAT and ##2 including VAT.}% \def\TAALtotaalwelkorting##1##2##3##4##5##6{% The parts of this contract form an amount of ##1 euro. ##2 offers ##3 a discount of ##4 euro (##5\%), bringing the total amount of this agreement to ##6 euro (in words:\@zegge{##6} euro).}% \def\TAALtotaalwelkortingbtw##1##2##3##4##5##6##7{% The parts of this contract form an amount of ##1 euro. ##2 offers ##3 a discount of ##4 euro (##5\%), bringing the total amount of this agreement to ##6 euro (in words: \@zegge{##6} euro) excluding VAT and ##7 including VAT.}% \def\TAALbetalingsvoorwaardentext##1##2##3{% The contract will be charged as a whole, payment will be completed by ##1 within ##2 days after receiving the invoice. If an order number (PO number) should be provided before invoicing can take place, ##1 will provide ##3 o such a number within two weeks after signing this contract.}% \def\TAALannuleringsvoorwaardentext##1##2{% If ##1 has indicated less than 15, 8 or 2 days before the agreed date that they can not fulfill the obligations, \partijkort will charge respectively 50\%, 75\% or 100\% of the total charges at ##1 and then ##2 has fulfilled its obligations. The date is specified in this contract. If this is not the case, this contract will define how this is being determined.}% \def\TAALannuleringsvoorwaarden{Cancelation policy}% \def\TAALparaaf{Paraph for approval}% \def\TAALen{and} \def\TAALeuros{euros} \def\TAALcents{cents} \def\TAALzegge{in words} } % \end{macrocode} % \end{macro} % We now define some other English babel languages % to just invoke the regular English words (we're % not that picky). In a future version, some macros % may be defined differently for UK and US English. % \begin{macrocode} \let\aeskwadraattaal@USenglish\aeskwadraattaal@english \let\aeskwadraattaal@american\aeskwadraattaal@english \let\aeskwadraattaal@UKenglish\aeskwadraattaal@english \let\aeskwadraattaal@british\aeskwadraattaal@english % \end{macrocode} % \begin{macrocode} % % \end{macrocode} % \Finale