From 9432fde8b5fbcadd14f9a52444e90e90eecd04f4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 30 Dec 2018 22:11:16 +0000 Subject: skrapport (30dec18) git-svn-id: svn://tug.org/texlive/trunk@49540 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/skrapport/Makefile | 62 - .../texmf-dist/doc/latex/skrapport/skrapport.pdf | Bin 268087 -> 268245 bytes .../texmf-dist/doc/latex/skrapport/skrapport.tex | 4375 -------------------- .../source/latex/skrapport/skrapport.tex | 4375 ++++++++++++++++++++ 4 files changed, 4375 insertions(+), 4437 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex/skrapport/Makefile delete mode 100644 Master/texmf-dist/doc/latex/skrapport/skrapport.tex create mode 100644 Master/texmf-dist/source/latex/skrapport/skrapport.tex (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/latex/skrapport/Makefile b/Master/texmf-dist/doc/latex/skrapport/Makefile deleted file mode 100644 index c653763275c..00000000000 --- a/Master/texmf-dist/doc/latex/skrapport/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -TEXMFHOME ?= $(shell kpsewhich -var-value TEXMFHOME) -.PHONY: all clean distclean install dist test clean-test -all: skrapport.tex skrapport.pdf skrapport.cls README -clean: clean-test - rm -f *.gl? *.id? *.aux # problematic files - rm -f *.bbl *.bcf *.bib *.blg *.xdy # biblatex - rm -f *.fls *.log *.out *.run.xml *.toc # junk -distclean: clean - rm -f *.cls *.sty *.clo *.tar.gz *.tds.zip README - git reset --hard - -%.pdf: %.tex %.cls - makeglossaries $* - biber $* - pdflatex -interaction=nonstopmode -halt-on-error $< - makeglossaries $* - pdflatex -interaction=nonstopmode -halt-on-error $< - -%.cls: %.tex - pdflatex -interaction=nonstopmode -halt-on-error $< - -%.sty: skrapport.cls - -%.clo: skrapport.cls - -README: README.md - sed -e '1,4d;$$d' $< > $@ - -install: all - install -m 0644 skrapport-*.sty $(TEXMFHOME)/tex/latex/skrapport/ - install -m 0644 skrapport-*.clo $(TEXMFHOME)/tex/latex/skrapport/ - install -m 0644 skrapport.cls $(TEXMFHOME)/tex/latex/skrapport/skrapport.cls - install -m 0644 skrapport.pdf $(TEXMFHOME)/doc/latex/skrapport/skrapport.pdf - install -m 0644 skrapport.tex $(TEXMFHOME)/source/latex/skrapport/skrapport.tex - install -m 0644 README $(TEXMFHOME)/doc/latex/skrapport/README - -mktexlsr - -skrapport.tar.gz: all - mkdir -p skrapport - cp README skrapport/README - cp skrapport.pdf skrapport/skrapport.pdf - mkdir -p skrapport/source - cp Makefile skrapport/source/Makefile - cp skrapport.tex skrapport/source/skrapport.tex - mkdir -p skrapport/latex - cp skrapport-*.sty skrapport/latex/ - cp skrapport-*.clo skrapport/latex/ - cp skrapport.cls skrapport/latex/skrapport.cls - tar -czf $@ skrapport - rm -rf skrapport - -dist: skrapport.tar.gz - -test: - cp -f skrapport-*.sty tests/ - cp -f skrapport-*.clo tests/ - $(MAKE) -C tests - -clean-test: - $(MAKE) -C tests clean - rm -rf tests/skrapport-*.sty - rm -rf tests/skrapport-*.clo diff --git a/Master/texmf-dist/doc/latex/skrapport/skrapport.pdf b/Master/texmf-dist/doc/latex/skrapport/skrapport.pdf index 7391e83bdf3..3ec7599b6a3 100644 Binary files a/Master/texmf-dist/doc/latex/skrapport/skrapport.pdf and b/Master/texmf-dist/doc/latex/skrapport/skrapport.pdf differ diff --git a/Master/texmf-dist/doc/latex/skrapport/skrapport.tex b/Master/texmf-dist/doc/latex/skrapport/skrapport.tex deleted file mode 100644 index 397da4a9185..00000000000 --- a/Master/texmf-dist/doc/latex/skrapport/skrapport.tex +++ /dev/null @@ -1,4375 +0,0 @@ -%% skrapport Skånings rapportklass -%% -%% Copyright (C) 2012-2016 by Simon Sigurdhsson -%% -%% This work may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3 -%% of this license or (at your option) any later version. -%% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This work has the LPPL maintenance status `maintained'. -%% -%% The Current Maintainer of this work is Simon Sigurdhsson. -%% -%% This work consists of the file skrapport.tex and the derived files: -%% * skrapport.cls -%% * skrapport-colortheme-default.sty -%% * skrapport-colortheme-unscathed.sty -%% * skrapport-colortheme-violet.sty -%% * skrapport-colortheme-cruelwater.sty -%% * skrapport-colortheme-skdoc.sty -%% * skrapport-size-common.sty -%% * skrapport-size10pt.clo -%% * skrapport-size11pt.clo -%% * skrapport-size12pt.clo -\documentclass{skdoc} -\let\SI\relax -\usepackage{siunitx} -\DeclareSIUnit\point{pt} -\usepackage{hologo,booktabs,xcoffins,calc} -\usepackage[style=authoryear]{biblatex} -\usepackage{csquotes} -\usepackage{varioref,cleveref} -%\usepackage{chslacite} - -\ExplSyntaxOn -\cs_set_protected_nopar:Npn\ExplHack{ - \char_set_catcode_letter:n{ 58 } - \char_set_catcode_letter:n{ 95 } -} -\ExplSyntaxOff - -% Hide the implementation -\OnlyDescription - -% Bibliography entries -\begin{filecontents}{skrapport.bib} - @article{kpfonts, - author = {Christophe Caignaert}, - title = {KP-Fonts 3.31}, - year = {2010}, - url = {http://www.tex.ac.uk/tex-archive/fonts/kpfonts/doc/kpfonts.pdf} - } - @standard{ISO216, - title = {ISO 216:2007}, - subtitle = {Writing paper and certain classes of printed matter -- Trimmed sizes -- A and B series, and indication of machine direction}, - author = {{International Organization for Standardization, Technical Committee 6}}, - year = {2007} - } - @standard{ISO8601, - title = {ISO 8601:2004}, - subtitle = {Data elements and interchange formats -- Information interchange -- Representation of dates and times}, - author = {{International Organization for Standardization, Technical Committee 154}}, - year = {2004} - } - @article{Flynn, - author = {Peter Flynn}, - title = {Rolling your own Document Class: Using \LaTeX{} to - keep away from the Dark Side}, - journal = {The Prac\TeX{} Journal}, - number = {4}, - year = {2006}, - url = {http://tug.org/pracjourn/2006-4/flynn/flynn.pdf} - } -\end{filecontents} -\addbibresource{skrapport.bib} - -% Declare the target files -\SelfPreambleTo{\mypreamble} -\DeclareFile[key=class,preamble=\mypreamble]{skrapport.cls} -\DeclareFile[key=size-common,preamble=\mypreamble]% - {skrapport-size-common.sty} -\DeclareFile[key=size-10,preamble=\mypreamble]{skrapport-size10pt.clo} -\DeclareFile[key=size-11,preamble=\mypreamble]{skrapport-size11pt.clo} -\DeclareFile[key=size-12,preamble=\mypreamble]{skrapport-size12pt.clo} -\DeclareFile[key=theme-default,preamble=\mypreamble]% - {skrapport-colortheme-default.sty} -\DeclareFile[key=theme-unscathed,preamble=\mypreamble]% - {skrapport-colortheme-unscathed.sty} -\DeclareFile[key=theme-cruelwater,preamble=\mypreamble]% - {skrapport-colortheme-cruelwater.sty} -\DeclareFile[key=theme-violet,preamble=\mypreamble]% - {skrapport-colortheme-violet.sty} -\DeclareFile[key=theme-skdoc,preamble=\mypreamble]% - {skrapport-colortheme-skdoc.sty} - -% This is where the documentation begins -\begin{document} - % Change & version info - \version{0.12i} - \changes{0.01}{Initial version} - \changes{0.03}{Removed \cs{rd} and \cs{id}} - \changes{0.04}{Added \pkg{microtype} package} - \changes{0.05}{Improved documentation} - \changes{0.06}{Corrected cheksum, further improved documentation} - \changes{0.07}{Various bugfixes, \hologo{XeLaTeX} compatibility, - better float settings, quote style fix, - \opt{intlimits} option to \pkg{amsmath}} - \changes{0.07a}{Fixed \pkg{kpfonts} issues} - \changes{0.09}{Introduced \pkg{kvoptions}, - fixed abstract in twocolumn mode} - \changes{0.10}{Include skmath if exists - and wanted. Gobble optional arguments to - \env{figure} and \env{table} in two-column mode} - \changes{0.10a}{Include \pkg{xparse} (fixes breakage)} - \changes{0.11}{Added \opt{minion} for Adobe Minion Pro font} - \changes{0.11a}{Added \opt{skdoc} font option and \thm{skdoc} color theme} - \changes{0.12}{Deprecated several macros, moved to \LaTeX3. Use of TOC depth above 3 is now unsupported} - \changes{0.12a}{The \pkg{fontspec} package is now only loaded when using the \texttt{word} or \texttt{none} font stacks on \hologo{LuaLaTeX} or \hologo{XeLaTeX}. The \texttt{word} font stack is now - the default font stack on \hologo{XeLaTeX}} - \changes{0.12b}{Minor and major bugfixes to \cs{maketitle}, \opt{ptsize}, \opt{twocolumn} and others} - \changes{0.12c}{Added german language option, fixed sectioning macros in \opt{twocolumn} mode} - \changes{0.12d}{Added \opt{hanging-titles}, latin phrase macros. Load \pkg{isomath}. Don't load \pkg{icomma}. Use \cs{frenchspacing}} - \changes{0.12e}{Replace usage of deprecated \pkg{expl3} macros (thanks for the heads-up, Joseph Wright!)} - \changes{0.12f}{Fix incorrect usage of \pkg{xparse} macros} - \changes{0.12g}{Track \pkg{expl3} changes (thanks to Joseph Wright)} - \changes{0.12h}{Fix incompatibilities with recent \pkg{expl3}} - \changes{0.12i}{Track \pkg{expl3} changes (thanks to Joseph Wright)} - % Don't forget to update the version number and release date of - % the package declaration in the implementation! - - % Metadata - \package[ctan=skrapport,vcs=https://github.com/urdh/skrapport]{skrapport} - \title{The \textbf{\thepackage} document class} - \author{Simon Sigurdhsson} - \email{sigurdhsson@gmail.com} - - % First page - \maketitle - \begin{abstract} - A document class intended for simple documents \emph{e.g.} - reports handed in to courses and such. It is small, - straight-forward and heavily inspired by the Prac\TeX{} - Journal style. - \end{abstract} - \tableofcontents - - \section{Documentation} - The \thepackage\ document class aims to make typesetting simple but - stylish documents (mostly reports) as effortless as possible. It - does this by mostly reimplementing the default \pkg{article} class - in \LaTeX3, while making modifications to both form and function - along the way. - - Because it is reimplemented in \LaTeX3, it may be incompatible with - any number of packages that patch or otherwise modify internals of - \pkg{article} or other document classes. For commonly used packages - (especially those used frequently by the author), this shouldn't be - a problem. The author gladly accepts reports of any such issues at - the project issue tracker --- see \enquote{Known issues} on - \vpageref{sec:issues}. - - \subsection{Options} - As with other document classes, the class is loaded, possibly with - options, by issuing \Macro\documentclass[]{skrapport}. - The class has a number of options controlling both form and function, - by \emph{e.g.} setting the font size, selecting a font stack, setting - the section title style, and so on. - - \subsubsection{Layout} - Two options controlling the overall layout of the document are - provided. Collectively they control the paper size and text layout - of the document. - - \Option{paper}\WithValues{a4, a5}\AndDefault{a4} - The \opt{paper} option controls the paper size of the document. - Internally, this is set by the \pkg{typearea} package, so in theory - many more paper sizes could be available, but the current options - cover most useful documents. - - \Option{twocolumn} - The \opt{twocolumn} option sets up a two-column mode. This is not - provided by internal \LaTeX\ mechanics as in the original - \pkg{article} class, but instead by patching environments and macros - and using a combination of the \pkg{multicol} and \pkg{grid} - packages. In theory, this means that baselines of adjacent columns - should be aligned, and that three- or four-column modes are possible - in the future (but that'd be ridiculous). - - \subsubsection{Style} - A couple of options to control the style of the document are - provided. Two of them, \opt{leqno} and \opt{fleqn}, are mainly - provided for compatibility with the \pkg{article} class. - - \Option{leqno} - This option makes display math environments typeset their labels on - the left-hand side of the formula instead of the right-hand side. - - \Option{fleqn} - This option makes display math environments left-align the entire - formula as opposed to centering it. - - \Option{indent}\WithValues{true, false}\AndDefault{false} - The \opt{indent} option enables or disables the indentation of - paragraphs, with the default being not to indent anything. The - default behaviour thus is similar to that obtained using the - \pkg{parskip} package with the \pkg{article} package. - - \Option{titles}\WithValues{rm, it, bf, sf}\AndDefault{bf} - Section titles (and a few other elements) are controlled by this - option in that they are typeset either using the regular roman font, - the boldfaced roman font or the sans serif font. For historical - reasons the default is a boldfaced roman font, but the sans serif - option is very handsome. - - \Option{hanging-titles}\WithValues{true, false}\AndDefault{false} - This options allow sections to be set as \enquote{hanging} titles, - \emph{i.e.} with the section number in the margin. - - \Option{color}\WithValues{\meta{color theme}}\AndDefault{default} - This option tells the class to activate color theme support and - optionally load a color theme. Several color themes are available - (as detailed by \enquote{Color themes} \vpageref{ssec:color}), - and the special value \texttt{false} disables color support - entirely (which only means that the \pkg{xcolor} package isn't - loaded, and that \cs{colortheme} remains undefined). - - \subsubsection{Fonts} - Only two options control the font setup of the document class. The - class provides the same point sizes as \pkg{article}, but also - provides a large number of font stacks to choose from. - - \Option{ptsize}\WithValues{10pt, 11pt, 12pt}\AndDefault{11pt} - The document class provides the same three point sizes as the - \pkg{article} class. There is room for expansion, but there really - shouldn't be any reason to use other point sizes. - - \Option{font}\WithValues{none, kpfonts, lmodern, palatino, minion, skdoc, word}\AndDefault{kpfonts} - Several different font stacks, detailed by \vref{tab:font}, are - provided. Most of these work with \hologo{pdfLaTeX}, but there are - two special font stacks: \texttt{none} and \texttt{word}. The - former, predictably, loads no fonts whatsoever leaving the document - with Computer Modern fonts. This is useful if the fonts are replaced - later anyway, such as when using \hologo{XeLaTeX}. - - The \texttt{word} - font stack, however, does load a few fonts. The fonts must be present - and installed on the system as OTF or TTF fonts, and the font stack - requires either \hologo{XeLaTeX} or \hologo{LuaLaTeX}. - Both \texttt{word} and \texttt{none} load the \pkg{fontspec} - package, assuming the document is compiled using \hologo{XeLaTeX} - or \hologo{LuaLaTeX}. - - \Notice{The \texttt{skdoc} font stack doesn't have a math font.} - \Warning{Currently, \pkg{fontspec} is always loaded by - \hologo{XeLaTeX} regardless of options due to - the use of \pkg{polyglossia}. This means that - you \emph{have} to use OpenType fonts in your - document, otherwise \emph{only} Latin Modern - Roman (\emph{i.e.} no sans-serif or monospace - fonts) will be available. Therefore, the \texttt{word} - font stack is the default when using \hologo{XeLaTeX}. - \Hologo{LuaLaTeX} is not affected by this.} - - \begin{table}[tp] - \centering - \caption{Font stacks provided by \thepackage.} - \label{tab:font} - \NewCoffin\tempcoffin\newlength\templength - \SetHorizontalCoffin\tempcoffin{ - \begin{tabular}{lllll} - \toprule - Font stack & Serif font & Math font & Sans serif font & Monospace font \\ - \midrule - \texttt{kpfonts} & Kp-Fonts & Kp-Fonts & Kp-Fonts & Kp-Fonts \\ - \texttt{lmodern} & Latin Modern & Latin Modern & Latin Modern & Source Code Pro \\ - \texttt{palatino} & \TeX\ Gyre & PX & Arev & Source Code Pro \\ - \texttt{minion} & Minion Pro & Minion Pro & Myriad Pro & Source Code Pro \\ - \texttt{skdoc} & PT Serif & --- & Open Sans & Source Code Pro \\ - \texttt{word} & Cambria & Cambria Math & Calibri & Consolas \\ - \bottomrule - \end{tabular} - } - \setlength{\templength}{(\textwidth - \CoffinWidth\tempcoffin)/2} - \hspace*{\templength} - \TypesetCoffin\tempcoffin - \end{table} - - \subsubsection{Functionality} - The final three options affect functionality in one way or another. - Since \thepackage\ was originally designed for reports written in - either swedish or english, the class always loads either \pkg{babel} - or \pkg{polyglossia} with either of these languages. Additionally, - the class may load the \pkg{skmath} package if desirable. - - \Option{nomath}\WithValues{true, false}\AndDefault{false} - When \texttt{false}, the \pkg{skmath} package is loaded, providing - improvements to the math functionality of \pkg{amsmath} and friends. - - \Option{lang}\WithValues{en, sv, de}\AndDefault{sv} - This option specifies what main language \pkg{babel} or - \pkg{polyglossia} set up with. English (or swedish, for - \texttt{lang=en}) is loaded as well, for use in constructs - that allow for a second language. - - \Option{draft}\WithValues{true, false}\AndDefault{false} - The \opt{draft} option, much like in \pkg{article}, enables - \cs{overfullrule}s and possibly similar functionality in loaded - packages (if they react to the global \opt{draft} option). - - \subsection{User-level commands and environments} - The general idea behind the document class is to provide most - (if not all) of the macros provided by the standard \LaTeXe{} - classes, as well as additional macros to simplify and beautify - the documents produced. As such, most of the documentation that - follows details macros that are present in the standard document - classes. Some of them have changed functionality or semantics, - so at least a skim through this section is recommended. - - \subsubsection{The front page} - The front page is the part of the document that has seen the most - changes in \thepackage\ compared to \pkg{article}. In addition to - the new, Prac\TeX-inspired layout, there are a few additional - pieces of information in it. Also, the \cs{author} macro has been - dramatically improved. - - \DescribeMacro\date{} - The \cs{date} macro now internally employs \pkg{isodate} to typeset - the date of the document. This means that the input must be either - the string \enquote{today}, the token \cs{today} or a date as defined - by ISO8601\footcite{ISO8601}. The mechanisms provided by - \pkg{isodate} can be used to affect the output format. - - \DescribeMacro\author[]{} - In contrast with the \pkg{article} package, the \cs{author} macro - should no longer be used to typeset several author names at once. - Instead, one \cs{author} command is to be issued for every author, - optionally providing a corresponding email. These are then combined, - in the order they are given, to form a list of authors and a - corresponding list of email adresses. - - \DescribeMacro\regarding{} - This macro defines a topic or other short message detailing the - purpose of the document. It is typeset along with the date in the - upper left corner of the title page. - - \DescribeMacro\license{} - The \cs{license} macro defines a short license name to be typeset - in the lower right corner of the title page. This mechanism could of - course be used to typeset an institution name or similar as well. - It is only typeset when also using the \env{titlepage} environment - described below. - - \DescribeMacro\title{} - The \cs{title} macro, while not defined by \pkg{skrapport}, is - relevant to describe. It simply sets the title of the document, as - displayed by \cs{maketitle}. - - \DescribeMacro\maketitle[hide=\{date,regarding,email\},nopdfinfo] - As in \pkg{article}, the \cs{maketitle} macro typesets the - information provided by \cs{title}, \cs{author} and friends to form - a stylish front page. When combined with \env{abstract}, - \env{titlepage} and/or \cs{tableofcontents}, you get a very - good-looking preamble with almost no effort. - - The optional argument is a key-value list with two valid entries, - \opt*{hide} and \opt*{nopdfinfo}. The \opt*{hide} entry accepts a - comma-separated list in which the values \opt*{date}, - \opt*{regarding} and \opt*{email} - are interpreted as instructions to hide the corresponding entry from - the front page. The \opt*{nopdfinfo} key disables the generation of - PDF information by \pkg{hyperref}. - - \DescribeEnv[]{abstract} - The \env{abstract} environment defines an abstract, which is typeset - in a block with the \cs{abstractname} word next to it (see - \emph{e.g.} the title page of this manual for an example). - - \DescribeEnv[]{titlepage} - Normally, \cs{maketitle} doesn't reserve its own page. By enclosing - \cs{maketitle} (and \env{abstract} if appropriate) in the - \env{titlepage} environment, the contents are typeset on their - own page, without page numbering and with the \cs{license} text - in the lower right corner (if applicable). - - \subsubsection{Sectioning} - \DescribeMacro\section*[<short title>]{<title>} - \DescribeMacro\subsection*[<short title>]{<title>} - \DescribeMacro\subsubsection*[<short title>]{<title>} - \DescribeMacro\paragraph*[<short title>]{<title>} - \DescribeMacro\subparagraph*[<short title>]{<title>} - The sectioning macros are superficially very similar to those - provided by \pkg{article}, but have been completely reimplemented - in \pkg{expl3} code. Additionally, the style of these sectioning - macros, as detailed by the \opt{titles} option documentation above, - can be changed. - - All of them have both arguments and behaviour in common, only - differing in style. The starred versions are unnumbered, but still - accept the opional short title (simply discarding it). The optional - short title is used in the table of contents. The - \texttt{secnumdepth} counter limits the depth of section numbering. - - The first three macros, being section titles, are typeset as actual - titles on their own line with appropriate spacing above and below. - The paragraph macros instead typeset run-in titles. - - \subsubsection{Macros and environments from \pkg{article}} - Aside from the \env{itemize} and \env{enumerate} envionments and the - font selection macros, which are carried without modification from - \LaTeXe, a couple of environments and macros are defined. - - The old font macros, whose use has been discouraged for a long time, - are now deprecated. Instead of functioning correctly, they will emit - an error and require user input. Use the \cs*{text??}/\cs*{??family} - macros instead. For emphasis, use the \cs{emph} macro. - - \DescribeMacro\emph{<text>} - Emphasized text will be typeset in italic, or bold italic if the - macro is used in a context where italic is already used (such as - inside another \cs{emph} invokation). - - \DescribeEnv[\cs*{item}\oarg{item} \meta{description}]{description} - The \env{description} environment behaves as expected, typesetting - a list of descriptions as in the \pkg{article} class. - - \DescribeEnv[<short quote>]{quote} - Intended for short quotes, the \env{quote} environment simply - typesets a centered block of italic text. - - \DescribeEnv[<long quote>]{quotation} - Longer quoted passages are typeset using the \env{quotation} - environment. This is simply a \env{quote} environment with additional - spacing above and below. - - \DescribeEnv[<pretentious poetry>]{verse} - The \env{verse} environment is intended for poetry and other text - where line breaks are critical. Use \verb|\\| to break - lines. - - \DescribeMacro\appendix - This macro signals the end of the main matter and the start of - the appendix. In essence, it resets the section numbering counter - and changes the section numbering to the upper-case alphabetic - sequence. - - \subsubsection{Floats} - Both the \env{figure} and \env{table} float environments accept an - optional positioning argument. The default positioning is - \texttt{tp}. Both environments also have starred variants, which - do nothing in one-column mode while typesetting the figure across - both columns in two-column mode. As usual, \cs{centering}, - \cs{caption} and \cs{label} should be used inside the floats. - - \DescribeEnv[<content>]{figure}[position] - This float environment is intended for figures. The most common - contents are \cs{includegraphics} statements or \env{tikzpicture} - environments. - - \DescribeEnv[<content>]{table}[position] - A float intended for tables. Probably contains \env{tabular}s. - - \DescribeEnv{figcenter} - This environment is useful for wide figures and tables. It typesets - its contents centered horizonally, but allows the content to extend - into the margin. The content is set in a horizontal coffin. - - \subsubsection{Table of contents} - \DescribeMacro\tableofcontents - The table of contents are typeset using this macro. The - \texttt{tocdepth} counter limits the depth of the table of - contents, but for stylistic reasons values higher than 3 are - unsupported. - -% \subsubsection{Basic bibliography support} - - \subsubsection{Miscellaneous} - \DescribeMacro\comment*{<comment>} - \DescribeMacro\note*{<comment>} - \DescribeMacro\com*{<comment>} - These macros, the two latter being aliases of the first one, typeset - an author's comment in the document. The starred variants typeset the - comment inline with a red background, while the unstarred variant - typesets the comment in a \cs{marginpar}. - - \DescribeMacro\eg - \DescribeMacro\ie - \DescribeMacro\etc - \DescribeMacro\cf - \DescribeMacro\viz - These macro print the abbreviation of the latin phrases - \emph{exempli gratia}, \emph{id est}, \emph{et cetera}, - \emph{confer} and \emph{videlicet}, respectively. - The macros peek ahead to find punctuation marks and spaces, so they - should behave correctly regardless of usage (assuming they're used in - running text and uncomplicated settings). In languages other than - english, appropriate translations are made if applicable. - - \DescribeMacro\dash - This macro prints an em-dash surrounded by thin spaces, as discussed - by \textcite[\pno~8]{Flynn}. When \cs*{DeclareUnicodeCharacter} is - available, the real em dash uses this definition. - - \subsubsection{Color theme support} - \DescribeMacro\colortheme{<theme>} - The \cs{colortheme} macro, which is only available when the - \opt{color} option is \texttt{true}, applies a color theme to - the document. For a list of available color themes, see - \enquote{Color themes} \vpageref{ssec:color}. - - \subsubsection{Font size macros} - The font size macros, expectedly, set the size of the text. They - do not take arguments, instead affecting all subsequent text of the - current \TeX\ group, so use braces to provide and limit context. - Also note that unlike \pkg{article}, these macros are \emph{all} - available, regardless of point size option. - - \DescribeMacro\tiny - Typesets {\tiny tiny} text. - \DescribeMacro\scriptsize - Typesets {\scriptsize script-size} text. - \DescribeMacro\footnotesize - Typesets {\footnotesize footnote-sized} text. - \DescribeMacro\small - Typesets {\small small} text. - \DescribeMacro\normalsize - Typesets normal text. - \DescribeMacro\large - Typesets {\large large} text. - \DescribeMacro\Large - Typesets {\Large slightly larger} text. - \DescribeMacro\LARGE - Typesets {\LARGE even larger} text. - \DescribeMacro\huge - Typesets {\huge huge} text. - \DescribeMacro\Huge - Typesets {\Huge really huge} text. - - \subsection{Color themes}\label{ssec:color} - \DescribeMacro\colortheme{<theme>} - If the package is loaded with the \opt{color} option, changing the color theme is - possible using \cs{colortheme}, which loads an - appropriate package. At the moment, four color themes are available. - - \Theme{default} - The \thm{default} theme is fairly conservative, only coloring - \pkg{hyperef} links with more readable, slightly darker colors than - the standard ones. It should print well even on non-color printers. - - \Theme{unscathed} - The \thm{unscathed} theme is based on a palette with the same - name on COLOURlovers% -\footnote{\url{http://www.colourlovers.com/palette/1440498/unscathed}}, - and applies a \textcolor[HTML]{463335}{dark brown} color to - emphasized text, a \textcolor[HTML]{CF5D3B}{rusty} color to links, - a \textcolor[HTML]{B34430}{darker rust} color to titles and a - \textcolor[HTML]{70524A}{lighter brown} to quotes. - - \Theme{cruelwater} - The \thm{cruelwater} theme is also based on a palette from - COLOURlovers% -\footnote{\url{http://www.colourlovers.com/palette/126030/Cruel_Water_at_Night}}, - and applies a \textcolor[HTML]{030C22}{dark blue} color to bold - text and captions, a \textcolor[HTML]{20293F}{slightly less dark - blue} to titles and emphasized text, a \textcolor[HTML]{A9B0B3}{ - light gray} color to small print and a \textcolor[HTML]{404749}{ - darker gray} to quotes. - - \Theme{violet} - The \thm{violet} theme, like \thm{unscathed} and \thm{cruelwater}, - is based on a COLOURlovers palette% -\footnote{\url{http://www.colourlovers.com/palette/1831303/Violet_White_Bedrm}}. - It colors all links \textcolor[HTML]{932444}{bright purple}, applies - a \textcolor[HTML]{311A2A}{dark puple} color to titles, bold text - and captions, a \textcolor[HTML]{D6CBCF}{grayish purple} to small - print, a \textcolor[HTML]{463335}{dark brown} color to quotes and a - \textcolor[HTML]{98758D}{pastel violet} color to emphasized text. - - \Theme{skdoc} - The \thm{skdoc} theme is loosely based on the \pkg{skdoc} document class, with which this documentation is typeset. - -% \subsection{Additional information} -% The document class includes a number of packages by default. This -% is useful to know, since passing explicit options to these packages -% will require you to utilize the \cs{PassOptionsToPackage} macro -% before you load the class using \cs{documentclass}. -% Table~\ref{tab:pkgs} lists the packages included by \thepkg\ along -% with their options (if applicable). -% -% \begin{table}[tbp] -% \centering -% \caption{User-level packages included by \thepkg.} -% \label{tab:pkgs} -% \begin{tabular}{llp{15em}} -% \toprule -% \textbf{Package} & \textbf{Options} & \textbf{Comments} \\ -% \midrule -% \pkg{amsmath} & \texttt{intlimits} & Provides \hologo{AmS} commands and environments. \\ -% \pkg{amssymb} & & Only if not using \opt{kpfonts}.\\ -% \pkg{babel} & see options \opt{swe} and \opt{eng} & Only loaded if \emph{not} using \hologo{XeTeX}.\\ -% \pkg{calc} & & \\ -% \pkg{fontenc} & \texttt{T1} & Only loaded if \emph{not} using \hologo{XeTeX}. Makes sure we are using a good font encoding for crisp appearance on-screen (OT1 is horrible). \\ -% \pkg{fontspec} & \texttt{quiet} & Only loaded if using \hologo{XeTeX}. Provides basic OTF font selection commands.\\ -% \pkg{geometry} & \texttt{a4paper} or \texttt{a5paper} & This is used by the \opt{paper} option to set the paper area. \\ -% \pkg{icomma} & & \\ -% \pkg{inconsolata} & & \\ -% \pkg{microtype} & & Provides micro-typographic improvements.\\ -% \pkg{multicol} & & Only loaded with the \opt{twocolumn} option. \\ -% \pkg{polyglossia} & see options \opt{swe} and \opt{eng} & Only loaded if using \hologo{XeTeX}.\\ -% \pkg{skmath} & & Only if it exists and \opt{nomath} isn't set.\\ -% \pkg{textcomp} & & Only if not using \opt{kpfonts}.\\ -% \pkg{xcolor} & & Only loaded with the \opt{color} option.\\ -% \bottomrule -% \end{tabular} -% \end{table} - - \section{Known issues}\label{sec:issues} - A list of current issues is available in the Github repository of this - package\footnote{\url{https://github.com/urdh/skrapport/issues}}, but as - of the release of \theversion, there is one known issue: - \begin{description} - % \item[\#6] ??? - \item[--] If a \cs{subsubsection} is the last item of the Table - of Contents, it will not be indented properly. - \end{description} - - If you discover any bugs in this package, please report them to the issue - tracker in the \thepackage\ Github repository. - - \Implementation\ExplHack - \section{Implementation} - Start by including \pkg{expl3}, \pkg{l3keys2e} and some other - useful packages, as well as declaring the class. -\begin{MacroCode}{class} -\RequirePackage{expl3,l3keys2e,xparse,xstring,etoolbox} -\ProvidesExplClass{skrapport}% - {2018/12/29}{0.12i}{stylish report document class} -\end{MacroCode} - - \subsection{Messages} - Tons of messages are declared for future use. -\begin{MacroCode}{class} -\msg_new:nnnn{skrapport}{option-deprecated}{Option~`#1'~deprecated!} - {Please~use~`#2'~instead.} -\msg_new:nnnn{skrapport}{option-no-effect}{Option~`#1'~deprecated!} - {It~has~no~effect;~simply~use~nothing~instead.} -\msg_new:nnnn{skrapport}{invalid-paper-size}{Invalid~paper~size~`#1'!} - {\token_to_str:N\__skrapport_setup_paper:n~was~invoked~with~an~ - invalid~argument;~paper~size~will~remain~unchanged.} -\msg_new:nnnn{skrapport}{invalid-point-size}{Invalid~point~size~`#1'!} - {\token_to_str:N\__skrapport_setup_ptsize:n~was~invoked~with~an~ - invalid~argument;~cannot~continue~without~setting~a~valid~point~ - size.~Please~fix~the~issue~before~typesetting~again.} -\msg_new:nnnn{skrapport}{invalid-titles}{Invalid~title~type~`#1'!} - {\token_to_str:N\__skrapport_setup_titles:n~was~invoked~with~an~ - invalid~argument;~falling~back~to~`#2'.} -\msg_new:nnnn{skrapport}{invalid-lang}{Invalid~language~`#1'!} - {\token_to_str:N\__skrapport_setup_lang:n~was~invoked~with~an~ - invalid~argument;~`babel'~and/or~`polyglossia'~will~remain~ - unloaded.} -\msg_new:nnnn{skrapport}{invalid-font}{Invalid~font~`#1'!} - {\token_to_str:N\__skrapport_setup_font:n~was~invoked~with~an~ - invalid~argument;~no~font~package~has~been~loaded.~This~may~result~ - in~bad~rendering~due~to~old~Computer~Modern~fonts.} -\msg_new:nnnn{skrapport}{noop-call}{No-op~invokation~of~macro!} - {\token_to_str:N#1~was~invoked,~but~circumstances~dictate~that~the~ - macro~should~do~nothing.~Will~do~\token_to_str:N\prg_do_nothing:~ - instead.} -\msg_new:nnnn{skrapport}{old-font-deprecated}{Deprecated~macro~\token_to_str:N#1!} - {The~old~font~macro~\token_to_str:N#1~is~deprecated!~Use~ - \token_to_str:N#2~instead.} -\msg_new:nnnn{skrapport}{color-patch-failed}{Could~not~patch~macro~\token_to_str:N#1!} - {The~macro~\token_to_str:N#1~could~not~be~patched!~Color~theme~ - support~may~be~incomplete.} -\msg_new:nnnn{skrapport}{license-not-printed}{Detected~\token_to_str:N\license\ but~no~`titlepage'!} - {The~text~provided~by~\token_to_str:N\license\ is~only~printed~when~ - the~`titlepage'~environment~is~used,~but~it~seems~to~be~missing.} -\msg_new:nnnn{skrapport}{font-requires-xetex}{The~`font=#1'~option~requires~XeTeX~or~luaTeX!} - {Please~choose~another~font~setup~or~compile~the~document~with~ - either~xelatex~or~lualatex.} -\msg_new:nnnn{skrapport}{tocdepth-too-deep}{TOC~depth~is~too~deep!} - {The~current~tocdepth,~#1,~is~not~supported.~Please~redefine~the~ - \token_to_str:N#2~macro~to~enable~support.} -\msg_new:nnnn{skrapport}{caption-in-figcenter}{Cannot~use~\token_to_str:N\caption\ here!} - {The~\token_to_str:N\caption\ macro~can't~be~used~inside~figcenter~environments!~Please~move~the~caption~to~the~enclosing~float~environment.} -\end{MacroCode} - This message should probably not be used at all. Except in - development versions straight off Github, of course. -\begin{MacroCode}{class} -\msg_new:nnn{skrapport}{not-implemented} - {Unimplemented~macro~\token_to_str:N#1!} -\end{MacroCode} - - \subsection{Options} - First, a few booleans used by parts of the option handling code. - \begin{macro}{\g__skrapport_draft_bool} - Are we in \opt{draft} mode? -\begin{MacroCode}{class} -\bool_new:N\g__skrapport_draft_bool -\end{MacroCode} - \end{macro} - \begin{macro}{\g__skrapport_color_bool} - Are we supposed to be using \opt{color}s? -\begin{MacroCode}{class} -\bool_new:N\g__skrapport_color_bool -\end{MacroCode} - \end{macro} - \begin{macro}{\g__skrapport_has_polyglossia_bool} - Has \pkg{polyglossia} been loaded? -\begin{MacroCode}{class} -\bool_new:N\g__skrapport_has_polyglossia_bool -\end{MacroCode} - \end{macro} - - \subsubsection{Option setup macros} - In this section, all options declared in the previous section are - implemented using setup macros. Some of these may have to be called - in an appropriate order, but I haven't checked that yet. - - \begin{macro}{\__skrapport_setup_paper:n}[1] - {Paper size (\texttt{a4} or \texttt{a5})} - \changes{0.12}{Use \pkg{typearea} to set paper size} - Note the extra integer, which is set up for use with \pkg{grid}. - \begin{macro*}{\g__skrapport_grid_lines_int} -\begin{MacroCode}{class} -\int_new:N\g__skrapport_grid_lines_int -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_setup_paper:n#1{ - \str_case:nnF{#1}{ -\end{MacroCode} - The two options simply consist of passing the appropriate option - to the \pkg{typearea} package. Note that the use of \pkg{typearea} - mean that we theoretically could accept more paper size options. -\begin{MacroCode}{class} - {a4}{ - \PassOptionsToPackage{paper=A4}{typearea} - \int_gset:Nn\g__skrapport_grid_lines_int{40} - } - {a5}{ - \PassOptionsToPackage{paper=A5}{typearea} - \int_gset:Nn\g__skrapport_grid_lines_int{28} - } - }{ -\end{MacroCode} - Invalid paper sizes (such calls should never happen) are - handled by issuing a warning and hoping that the default - paper size is acceptable. -\begin{MacroCode}{class} - \msg_warning:nnn{skrapport}{invalid-paper-size}{#1} - } -\end{MacroCode} - The \pkg{typearea} package is loaded with the options specified - earlier through \cs{PassOptionsToPackage}, and some additional ones. -\begin{MacroCode}{class} - \AtEndOfClass{\RequirePackage[DIV=calc]{typearea}} -\end{MacroCode} - In case the point size changes later, or two column mode is - activated, we recalculate the typearea just before the typesetting - begins. -\begin{MacroCode}{class} - \AtBeginDocument{\recalctypearea} -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_ptsize:n}[1] - {Point size (\texttt{10pt}, \texttt{11pt} or \texttt{12pt})} - The standard point sizes are defined much like in the \pkg{article} - class, \emph{i.e.} by saving a number and loading \file{size10.clo}, - \file{size11.clo} or \file{size12.clo} as appropriate -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_setup_ptsize:n#1{ - \str_case:nnF{#1}{ -\end{MacroCode} - \begin{macro*}{\c__skrapport_ptsize_token} -\begin{MacroCode}{class} - {10pt}{\int_const:Nn\c__skrapport_ptsize_int{0}} - {11pt}{\int_const:Nn\c__skrapport_ptsize_int{1}} - {12pt}{\int_const:Nn\c__skrapport_ptsize_int{2}} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} - }{ -\end{MacroCode} - Invalid point sizes are critical errors, since we can't recover - from them in any reasonable way. Loading a default point size is - unreasonable, since all in-class calls to this macro should know - what sizes are available, and if you're calling it with invalid - parameters from elsewhere, you should be punished. -\begin{MacroCode}{class} - \msg_critical:nnn{skrapport}{invalid-point-size}{#1} - } - \file_input:n{skrapport-size#1.clo} -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_twocolumn:} - \changes{0.12c}{Major changes to the sectioning commands, to - override what \pkg{grid} is doing} - Setting up for twocolumn mode is slightly compliacted. Note that this - macro should be called from \cs{AtEndOfClass} to ensure that we patch - everything correctly. Note also that \pkg{multicol} is always loaded - as it is used for the \env{theindex} environment. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_twocolumn:{ - \RequirePackage{etoolbox} - \AtBeginDocument{ - \KOMAoptions{twocolumn=false,DIV=12} - } -\end{MacroCode} - We include the \pkg{grid} package in two-column mode, because - it looks way better that way. -\begin{MacroCode}{class} - \int_set:Nn\l_tmpa_int{10+\c__skrapport_ptsize_int} - \int_set:Nn\l_tmpb_int{12*\l_tmpa_int/10} - \RequirePackage[fontsize=\l_tmpa_int pt, - baseline=\l_tmpb_int pt, - lines=\g__skrapport_grid_lines_int]{grid} -\end{MacroCode} - Now, we patch commands. First up is \env{abstract}. Save the old - one in case we need it (we do). -\begin{MacroCode}{class} - \cs_set_eq:Nc\__skrapport_onecol_abstract:{environment~abstract~code} - \cs_set_eq:Nc\__skrapport_end_onecol_abstract:{environment~abstract~end~aux~} - \pretocmd{\__skrapport_onecol_abstract:}{\null}{}{} - \RenewDocumentEnvironment{abstract}{}{\section*{\abstractname}}{} -\end{MacroCode} - Then \env{document} (kind of, at least) and \cs{maketitle}. Again, - save the old \cs{maketitle}. -\begin{MacroCode}{class} - \AfterEndPreamble{\begin{multicols}{2}} - \AtEndDocument{\end{multicols}} - \cs_set_eq:NN\__skrapport_onecol_maketitle:\maketitle - \pretocmd{\maketitle}{\begin{onecol}}{}{} - \apptocmd{\maketitle}{\end{onecol}}{}{} -\end{MacroCode} - Next up is \env{titlepage}. This is where we need the saved - \env{abstract} and \cs{maketitle}. -\begin{MacroCode}{class} - \BeforeBeginEnvironment{titlepage}{ - \begin{onecol} - \cs_set_eq:cN{environment~abstract~code}\__skrapport_onecol_abstract: - \cs_set_eq:cN{environment~abstract~end~aux~}\__skrapport_end_onecol_abstract: - \cs_set_eq:NN\maketitle\__skrapport_onecol_maketitle: - } - \AfterEndEnvironment{titlepage}{\end{onecol}} -\end{MacroCode} - Always typeset \env{equation} and friends outside the grid: -\begin{MacroCode}{class} - \BeforeBeginEnvironment{equation}{\begin{gridenv}} - \AfterEndEnvironment{equation}{\end{gridenv}} - \BeforeBeginEnvironment{equation*}{\begin{gridenv}} - \AfterEndEnvironment{equation*}{\end{gridenv}} - \BeforeBeginEnvironment{multline}{\begin{gridenv}} - \AfterEndEnvironment{multline}{\end{gridenv}} - \BeforeBeginEnvironment{multline*}{\begin{gridenv}} - \AfterEndEnvironment{multline*}{\end{gridenv}} - \BeforeBeginEnvironment{gather}{\begin{gridenv}} - \AfterEndEnvironment{gather}{\end{gridenv}} - \BeforeBeginEnvironment{gather*}{\begin{gridenv}} - \AfterEndEnvironment{gather*}{\end{gridenv}} - \BeforeBeginEnvironment{align}{\begin{gridenv}} - \AfterEndEnvironment{align}{\end{gridenv}} - \BeforeBeginEnvironment{align*}{\begin{gridenv}} - \AfterEndEnvironment{align*}{\end{gridenv}} - \BeforeBeginEnvironment{flalign}{\begin{gridenv}} - \AfterEndEnvironment{flalign}{\end{gridenv}} - \BeforeBeginEnvironment{flalign*}{\begin{gridenv}} - \AfterEndEnvironment{flalign*}{\end{gridenv}} - \BeforeBeginEnvironment{alignat}{\begin{gridenv}} - \AfterEndEnvironment{alignat}{\end{gridenv}} - \BeforeBeginEnvironment{alignat*}{\begin{gridenv}} - \AfterEndEnvironment{alignat*}{\end{gridenv}} -\end{MacroCode} - Since \pkg{grid} override the usual sectioning macros, we have to - provide fixed and improved variants that conform to our style - and out public API. This is only necessary for - the \enquote{major} sectioning macros, not \cs*{paragraph} and - \cs*{subparagraph}. - \begin{macro*}{\section} -\begin{MacroCode}{class} - \skip_gset:Nn\c__skrapport_section_pre_skip{-.999\baselineskip} - \skip_gset:Nn\c__skrapport_section_post_skip{0.001\baselineskip} - \dim_gset:Nn \c__skrapport_section_indent_dim{\c_zero_dim} - \cs_set_protected:Nn\__skrapport_section_style: - {\normalfont\__skrapport_title_style:} - \DeclareDocumentCommand\section{som}{ - \__skrapport_generic_section:nnnnn{section}{1}{##1}{##2}{##3} - } -\end{MacroCode} - \end{macro*} - \begin{macro*}{\subsection} -\begin{MacroCode}{class} - \skip_gset:Nn\c__skrapport_subsection_pre_skip{\baselineskip} - \skip_gset:Nn\c__skrapport_subsection_post_skip{-.35\baselineskip} - \dim_gset:Nn \c__skrapport_subsection_indent_dim{\c_zero_dim} - \cs_set_protected:Nn\__skrapport_subsection_style: - {\normalfont\__skrapport_title_style:\unskip} - \DeclareDocumentCommand\subsection{som}{ - \__skrapport_generic_section:nnnnn{subsection}{2}{##1}{##2}{##3} - } -\end{MacroCode} - \end{macro*} - \begin{macro*}{\subsubsection} -\begin{MacroCode}{class} - \skip_gset:Nn\c__skrapport_subsubsection_pre_skip{\baselineskip} - \skip_gset:Nn\c__skrapport_subsubsection_post_skip{-.35\baselineskip} - \dim_gset:Nn \c__skrapport_subsubsection_indent_dim{\c_zero_dim} - \cs_set_protected:Nn\__skrapport_subsubsection_style: - {\normalfont\itshape\__skrapport_title_style:\unskip} - \DeclareDocumentCommand\subsubsection{som}{ - \__skrapport_generic_section:nnnnn{subsubsection}{3}{##1}{##2}{##3} - } -\end{MacroCode} - \end{macro*} - We also redefine \cs{l@section} to make the TOC blend in a bit. - \begin{macro*}{\l@section} -\begin{MacroCode}{class} - \DeclareDocumentCommand\l@section{mm}{ - \group_begin: - \skip_vertical:n{.75ex} - \__skrapport_title_style: - \__skrapport_toc_line:nnnnn{1}{0em}{1.3em}{##1}{ - \__skrapport_title_style: ##2 - } - \group_end: - } -\end{MacroCode} - \end{macro*} - The \env{figure} environment is patched\ldots -\begin{MacroCode}{class} - \cs_new:Npn\__skrapport_xdblfloat:nn##1##2{\@xdblfloat{##1}[##2]} - \cs_generate_variant:Nn\__skrapport_xdblfloat:nn{nx} - \RenewDocumentEnvironment{figure}{o}{ - \begin{gridenv} - \vspace{\intextsep} - \begin{minipage}{\linewidth} - \cs_set:Npn\@captype{figure} - \centering - }{ - \end{minipage} - \vspace{\intextsep} - \end{gridenv} - } - \RenewDocumentEnvironment{figure*}{o}{ - \__skrapport_xdblfloat:nx{figure} - {\IfNoValueTF{##1}{tp}{##1}} - \dim_set_eq:NN\hsize\textwidth - \dim_set_eq:NN\linewidth\textwidth - \centering - }{ - \end@dblfloat - } -\end{MacroCode} - \ldots as is \env{table}. -\begin{MacroCode}{class} - \RenewDocumentEnvironment{table}{o}{% - \begin{gridenv} - \vspace{\intextsep} - \begin{minipage}{\linewidth} - \cs_set:Npn\@captype{table} - \cs_set_eq:NN\__skrapport_old_caption:\caption - \RenewDocumentCommand{\caption}{om}{% - \skip_set_eq:NN\l_tmpa_skip\abovecaptionskip - \skip_set_eq:NN\abovecaptionskip\belowcaptionskip - \skip_set_eq:NN\belowcaptionskip\l_tmpa_skip - \vspace{\abovecaptionskip} - \__skrapport_old_caption:[####1]{####2} - \vspace{\belowcaptionskip} - } - \centering - }{ - \end{minipage} - \vspace{\intextsep} - \end{gridenv} - } - \RenewDocumentEnvironment{table*}{o}{ - \__skrapport_xdblfloat:nx{table} - {\IfNoValueTF{##1}{tp}{##1}} - \dim_set_eq:NN\hsize\textwidth - \dim_set_eq:NN\linewidth\textwidth - \centering - }{ - \end@dblfloat - } -\end{MacroCode} - \begin{environment}{onecol} - \changes{0.10}{Fixed, now not completely broken} - \changes{0.12b}{Reverted to \cs{newenvironment}, because \pkg{xparse} breaks the trickery} - Finally, we define an environment \env{onecol} that typesets - arbitrary material in a single column. This is a bit tricky to - do, and probably cargo-cult as well. We define the start of the - environment to immediately end itself (with the empty ending), - then end the \env{multiols} environment, redefine our end macro - to start \env{multicols} as well as redefining the start of - \env{onecol} to simply reset itself, then start the environment - again only to have it ended at once. - - Basically, we trick \LaTeX\ into thinking that we have an empty - \env{onecol} environment at the end of the first \env{multicols}, - then some content inside a fake \env{onecol}, then an empty - \env{onecol} at the start of the next \env{multicols}. Voilá, no - wierd group errors! -\begin{MacroCode}{class} - \newenvironment{onecol}{ - \end{onecol} - \end{multicols} - \group_begin: - \cs_set:Npn\endonecol{ - \group_end: - \begin{multicols}{2} - \cs_set_eq:NN\__skrapport_old_onecol:\onecol - \cs_set:Npn\onecol{ - \cs_set_eq:NN\onecol\__skrapport_old_onecol: - } - \begin{onecol} - } - \cs_set:Npn\onecol{} - \begin{onecol} - }{} -\end{MacroCode} - \end{environment} -\begin{MacroCode}{class} -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_leqno:} - Instead of loading \file{leqno.clo}, we reimplement the (tiny) file - as LaTeX3 code and include it directly. It's not terribly advanced. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_leqno:{ - \RenewDocumentCommand\@eqnnum{}{ - \hbox_to_wd:nn{.01pt}{} - \hbox_overlap_right:n{ - \normalfont\normalcolor - \skip_horizontal:n{-\displaywidth} - (\theequation) - } - } -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_fleqn:} - The \file{fleqn.clo} functionality is more complex, so we include - the file instead of reimplementing. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_fleqn:{ - \file_input:n{fleqn.clo} -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_titles:n}[1] - {Title style (\texttt{rm}, \texttt{it}, - \texttt{bf} or \texttt{sf})} - The title styles are implemented by creating a new macro - \cs{__skrapport_title_style:} which will later be used by - \cs{section} and friends. -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_setup_titles:n#1{ - \str_case:nnF{#1}{ -\end{MacroCode} - \begin{macro*}{\__skrapport_title_style:} - \changes{0.11a}{Removed incorrect \cs{bfseries}, replaced - \cs{relax} with \cs{rmfamily}} - \changes{0.12d}{Added \texttt{it} option} -\begin{MacroCode}{class} - {rm}{\cs_new_protected:Nn\__skrapport_title_style:{\rmfamily}} - {it}{\cs_new_protected:Nn\__skrapport_title_style:{\itshape}} - {bf}{\cs_new_protected:Nn\__skrapport_title_style:{\bfseries}} - {sf}{\cs_new_protected:Nn\__skrapport_title_style:{\sffamily}} -\end{MacroCode} - \end{macro*} - The fall-back for incorrect parameters is an informational message - along with setting up for \cs{rmfamily} titles. -\begin{MacroCode}{class} - }{ - \msg_info:nnnn{skrapport}{invalid-titles}{#1}{rm} - \__skrapport_setup_titles:n{rm} - } -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_lang:n}[1] - {Language (\texttt{sv}, \texttt{en} or \texttt{de})} - \changes{0.12d}{Use \pkg{babel} mechanisms for language-dependent - strings, so they work correctly in \env{otherlanguage}} - Thus far only two language options are implemented, each of them - setting the other as the \enquote{other} language. We check if - \pkg{polyglossia} has been loaded (this is done by - \cs{__skrapport_setup_xelatex:}): if it has, we use the - \pkg{polyglossia} interface for setting languages, otherwise we - load the \pkg{babel} package with appropriate options. -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_setup_lang:n#1{ - \str_case:nnF{#1}{ - {sv}{ - \bool_if:NTF\g__skrapport_has_polyglossia_bool{ - \setmainlanguage{swedish} - \setotherlanguage[variant=british]{english} - }{ - \RequirePackage[british,swedish]{babel} - } -\end{MacroCode} - \begin{macro*}{\__skrapport_RFC_language:} -\begin{MacroCode}{class} - \cs_gset:Nn\__skrapport_RFC_language:{swe} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} - \PassOptionsToPackage{iso,swedish}{isodate} - } - {en}{ - \bool_if:NTF\g__skrapport_has_polyglossia_bool{ - \setmainlanguage[variant=british]{english} - \setotherlanguage{swedish} - }{ - \RequirePackage[swedish,british]{babel} - } -\end{MacroCode} - \begin{macro*}{\__skrapport_RFC_language:} -\begin{MacroCode}{class} - \cs_gset:Nn\__skrapport_RFC_language:{eng} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} - \PassOptionsToPackage{iso,british}{isodate} - } - {de}{ - \bool_if:NTF\g__skrapport_has_polyglossia_bool{ - \setmainlanguage{ngerman} - \setotherlanguage[variant=british]{english} - }{ - \RequirePackage[british,ngerman]{babel} - } -\end{MacroCode} - \begin{macro*}{\__skrapport_RFC_language:} -\begin{MacroCode}{class} - \cs_gset:Nn\__skrapport_RFC_language:{ger} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} - \PassOptionsToPackage{iso,ngerman}{isodate} - } - }{ -\end{MacroCode} - Fallback prints an informational message and leaves both \pkg{babel} - and \pkg{polyglossia} unloaded. -\begin{MacroCode}{class} - \msg_info:nnn{skrapport}{invalid-lang}{#1} - } -\end{MacroCode} - After loading \pkg{babel} or \pkg{polyglossia}, we provide - translation strings. This is done using the \cs*{addto} and - \cs*{captions<lang>}, which is compatible with both packages. - \begin{macro*}{\captionsswedish} - \changes{0.12e}{Don't redefine standard language strings} - \begin{macro*}{\dateswedish} -\begin{MacroCode}{class} - \addto\captionsswedish{ - \cs_gset:Nn\__skrapport_and_word:{och} - \cs_gset:Nn\__skrapport_Email_word:{E-post} - \cs_gset:Nn\__skrapport_Comment_word:{Kommentar} - \cs_gset:Nn\__skrapport_eg_word:{t.ex.} - \cs_gset:Nn\__skrapport_ie_word:{dvs.} - \cs_gset:Nn\__skrapport_etc_word:{\emph{etc.}} - \cs_gset:Nn\__skrapport_cf_word:{jfr.} - \cs_gset:Nn\__skrapport_viz_word:{dvs.} - } - \cs_gset:Npn\dateswedish{ - \cs_gset:Npn\today - {\int_use:N\year--\int_use:N\month--\int_use:N\day} - } -\end{MacroCode} - \end{macro*} - \end{macro*} - \begin{macro*}{\captionsbritish} - \changes{0.12e}{Don't redefine standard language strings} - \begin{macro*}{\datebritish} -\begin{MacroCode}{class} - \addto\captionsbritish{ - \cs_gset:Nn\__skrapport_and_word:{and} - \cs_gset:Nn\__skrapport_Email_word:{Email} - \cs_gset:Nn\__skrapport_Comment_word:{Comment} - \cs_gset:Nn\__skrapport_eg_word:{\emph{e.g.}} - \cs_gset:Nn\__skrapport_ie_word:{\emph{i.e.}} - \cs_gset:Nn\__skrapport_etc_word:{\emph{etc.}} - \cs_gset:Nn\__skrapport_cf_word:{\emph{cf.}} - \cs_gset:Nn\__skrapport_viz_word:{\emph{viz.}} - } - \cs_gset:Npn\datebritish{ - \cs_gset:Npn\today - {\int_use:N\year--\int_use:N\month--\int_use:N\day} - } -\end{MacroCode} - \end{macro*} - \end{macro*} - \begin{macro*}{\captionsngerman} - \changes{0.12e}{Don't redefine standard language strings} - \begin{macro*}{\datengerman} -\begin{MacroCode}{class} - \addto\captionsngerman{ - \cs_gset:Nn\__skrapport_and_word:{und} - \cs_gset:Nn\__skrapport_Email_word:{E-Mail} - \cs_gset:Nn\__skrapport_Comment_word:{Kommentar} - \cs_gset:Nn\__skrapport_eg_word:{z.~B.} - \cs_gset:Nn\__skrapport_ie_word:{d.~h.} - \cs_gset:Nn\__skrapport_etc_word:{usw.} - \cs_gset:Nn\__skrapport_cf_word:{vgl.} - \cs_gset:Nn\__skrapport_viz_word:{\emph{viz.}} - } - \cs_gset:Npn\datengerman{ - \cs_gset:Npn\today - {\int_use:N\day.\,\int_use:N\month.\,\int_use:N\year} - } -\end{MacroCode} - \end{macro*} - \end{macro*} -\begin{MacroCode}{class} -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_font:n}[1] - {Font (\texttt{none}, \texttt{kpfonts}, \texttt{lmodern}, - \texttt{palatino}, \texttt{minion} or \texttt{skdoc})} - \changes{0.12a}{Drop the post-\pkg{amsmath} hook entirely. - Load \pkg{fontspec} in \texttt{word} and - \texttt{none}} - We set up the somewhat involved font stack. -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_setup_font:n#1{ - \PassOptionsToPackage{intlimits}{amsmath} - \PassOptionsToPackage{full}{textcomp} - \str_case:nnF{#1}{ -\end{MacroCode} - The \texttt{none} font stack is special. If we're using - \hologo{XeTeX} or \hologo{LuaTeX}, we load the \pkg{fontspec} - package. Otherwise, we do nothing. -\begin{MacroCode}{class} - {none}{ - \bool_if:nT{\sys_if_engine_luatex_p: || \sys_if_engine_xetex_p:}{ - \RequirePackage[quiet]{fontspec} - } - } -\end{MacroCode} - The \texttt{kpfonts} font stack simply loads \pkg{kpfonts}... -\begin{MacroCode}{class} - {kpfonts}{ - \RequirePackage[easyscsl,intlimits,sumlimits]{kpfonts} - } -\end{MacroCode} - ...and the \texttt{lmodern} font stack loads \pkg{lmodern}. -\begin{MacroCode}{class} - {lmodern}{ - \RequirePackage{lmodern} - } -\end{MacroCode} - The \texttt{palatino} font stack loads \pkg{tgpagella} if available, - but falls back to \pkg{mathpazo} otherwise. -\begin{MacroCode}{class} - {palatino}{ - \file_if_exist:nTF{tgpagella.sty}{ - \RequirePackage{arev} - \RequirePackage{pxfonts} - \RequirePackage{tgpagella} - }{ - \RequirePackage[osf]{mathpazo} - } - } -\end{MacroCode} - Minion Pro, provided by the \texttt{minion} font stack, loads both - \pkg{minionpro} (the font) and \pkg{MnSymbol} (appropriate math - symbols). -\begin{MacroCode}{class} - {minion}{ - \AtEndOfClass{ - \cs_set_eq:NN\__skrapport_old_vec:\vec - \cs_undefine:N\vec - \RequirePackage{MyriadPro} - \RequirePackage{MinionPro} - \RequirePackage{MnSymbol} - \cs_set_eq:NN\vec\__skrapport_old_vec: - } - } -\end{MacroCode} - Finally, the \texttt{skdoc} font stack loads \pkg{PTSerif} and - \pkg{opensans}, inspired by the style of the \pkg{skdoc} class. -\begin{MacroCode}{class} - {skdoc}{ - \RequirePackage{PTSerif} - \RequirePackage[defaultsans,osfigures,scale=0.95]{opensans} - } -\end{MacroCode} - The \texttt{word} font stack mimics recent versions of Microsoft - Word, using Cambria, Consolas and Calibri. This requires a modern - engine that supports \pkg{fontspec}. -\begin{MacroCode}{class} - {word}{ - \bool_if:nF{\sys_if_engine_luatex_p: || \sys_if_engine_xetex_p:}{ - \msg_fatal:nnn{skrapport}{font-requires-xetex}{word} - } - \RequirePackage[quiet]{fontspec} - \setmainfont[Ligatures=TeX]{Cambria} - \setsansfont[Ligatures=TeX]{Calibri} - \setmonofont[Scale=0.95]{Consolas} - \apptocmd{\__skrapport_after_ams_hook:}{ - \setmathfont{Cambria Math} - }{}{} - } - }{ -\end{MacroCode} - As a fallback, we print a waning and load no font packages. -\begin{MacroCode}{class} - \msg_warning:nnn{skrapport}{invalid-font}{#1} - } - \str_if_eq:nnF{#1}{none}{ -\end{MacroCode} - All font stacks except \texttt{none} and \texttt{kpfonts} require - additional packages. Or, rather, \texttt{none} can't load these - packages by definition, and \texttt{kpfonts} already loads them - internally \footcite[p.~1]{kpfonts}. They are always useful. - - We also load \pkg{sourcecodepro} as our monospace font. - But we don't load it when using the \texttt{none} font stack. -\begin{MacroCode}{class} - \str_if_eq:nnF{#1}{kpfonts}{ - \str_if_eq:nnF{#1}{word}{ - \RequirePackage{sourcecodepro} - } - \AtEndOfClass{ - \RequirePackage{amsmath} -\end{MacroCode} - The \pkg{mnsymbol} package is incompatible with \pkg{amssymb}. -\begin{MacroCode}{class} - \str_if_eq:nnF{#1}{minion}{ - \RequirePackage{amssymb} - } - \RequirePackage{textcomp} - } - } - } -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_parskip:} - \changes{0.12a}{Fixed bug where font size reset the \cs{parindent}} - This part mixes \LaTeXe\ and \LaTeX3, which may not be a good thing. - On the other hand, it seems hard to avoid. Most of the code is - half-lifted from \pkg{parskip} and converted to \LaTeX3. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_parskip:{ - \AtEndOfClass{ - \skip_gset:Nn\parskip{0.5\baselineskip~plus~2pt} - \dim_gzero:N\parindent - \skip_gset:Nn\parfillskip{30pt~plus~1fil} -\end{MacroCode} - \begin{macro*}{\@listI} - \begin{macro*}{\@listi} -\begin{MacroCode}{class} - \cs_gset:Npn\@listI{ - \dim_set_eq:NN\leftmargin\leftmargini - \dim_set_eq:NN\parsep\parskip - \dim_zero:N\topsep - \dim_zero:N\itemsep - } - \cs_gset_eq:NN\@listi\@listI -\end{MacroCode} - \end{macro*} - \end{macro*} -\begin{MacroCode}{class} - \dim_gset_eq:NN\leftmargin\leftmargini - \dim_gset_eq:NN\parsep\parskip - \dim_gzero:N\topsep - \dim_gzero:N\itemsep -\end{MacroCode} - \begin{macro*}{\@listii} -\begin{MacroCode}{class} - \cs_gset:Npn\@listii{ - \dim_set_eq:NN\leftmargin\leftmarginii - \dim_set_eq:NN\labelwidth\leftmarginii - \dim_set_eq:NN\parsep\parskip - \dim_sub:Nn\labelwidth{-\labelsep} - \dim_zero:N\topsep - \dim_zero:N\itemsep - } -\end{MacroCode} - \end{macro*} - \begin{macro*}{\@listiii} -\begin{MacroCode}{class} - \cs_gset:Npn\@listiii{ - \dim_set_eq:NN\leftmargin\leftmarginiii - \dim_set_eq:NN\labelwidth\leftmarginiii - \dim_set_eq:NN\parsep\parskip - \dim_sub:Nn\labelwidth{-\labelsep} - \dim_zero:N\topsep - \dim_zero:N\itemsep - } -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} - \dim_gzero:N\partopsep -\end{MacroCode} - \begin{macro*}{\@starttoc}[1] - {Table of contents extension} - \changes{0.12h}{Replaced use of deprecated \cs{c_job_name_tl} - with \cs{c_sys_jobname_str}} -\begin{MacroCode}{class} - \RenewDocumentCommand\@starttoc{m}{ - \group_begin: - \dim_zero:N\parskip - \file_if_exist:nT{\c_sys_jobname_str.##1}{ - \file_input:n{\c_sys_jobname_str.##1} - } - \if@filesw - \iow_new:c{tf@##1} - \iow_open:cn{tf@##1}{\c_sys_jobname_str.##1} - \fi - \@nobreakfalse - \group_end: - } -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} - } -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_math:} - This is the simplest option, only loading \pkg{skmath} if it exists. - Also the post-skmath hook is run. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_math:{ - \file_if_exist:nT{skmath.sty}{\RequirePackage{skmath}} -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_draft:} - Setting up the \opt{draft} mode is also fairly easy, as we only need - wider (wider than \SI{0}{\point}, that is) \cs{overfullrule}s. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_draft:{ - \bool_if:NTF\g__skrapport_draft_bool{ - \dim_gset:Nn\overfullrule{5pt} - }{ - \msg_log:nnn{skrapport}{noop-call}{\__skrapport_setup_draft:} - \prg_do_nothing: - } -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_color:} - Setting up colors is also fairly easy, as we only have to load the - \pkg{xcolor} package. All the other color-related code is in other - places, utilizing the \cs{g__skdoc_color_bool} boolean. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_color:{ - \bool_if:NTF\g__skrapport_color_bool{ - \RequirePackage{xcolor} - \PassOptionsToPackage{ - labelfont+={bf,color=skrapport@captioncolor} - }{caption} - }{ - \msg_log:nnn{skrapport}{noop-call}{\__skrapport_setup_color:} - \prg_do_nothing: - } -} -\end{MacroCode} - \end{macro} - \begin{macro}{\__skrapport_setup_color:n} - We may also set up a specific color theme using options. This is - easily done by first calling \cs{__skrapport_setup_color:}, then - calling \cs{colortheme} at \cs{BeginDocument}. -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_setup_color:n#1{ - \__skrapport_setup_color: - \bool_if:NTF\g__skrapport_color_bool{ - \AtBeginDocument{\colortheme{#1}} - }{ - \msg_log:nnn{skrapport}{noop-call}{\__skrapport_setup_color:n} - \prg_do_nothing: - } -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_xelatex:} - \changes{0.12a}{Don't load \pkg{polyglossia} for \hologo{LuaTeX}. - Don't load \pkg{fontspec} for any engine} - \changes{0.12d}{Force \texttt{quiet} option for \pkg{fontspec}} - This macro contains special setup code for the \hologo{XeTeX} and - \hologo{LuaTeX} engines, such as providing - missing commands (which have been replaced by equivalent Unicode - characters, apparently) and loading \pkg{polyglossia}. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_xelatex:{ - \AtEndOfClass{ - \cs_undefine:N\dblcolon - \cs_undefine:N\coloneqq - \cs_undefine:N\Coloneqq - \cs_undefine:N\eqqcolon - \RequirePackage{unicode-math} - \unimathsetup { - math-style = ISO, - bold-style = ISO, - sans-style = italic, - nabla = upright, - partial = italic, - vargreek-shape = unicode - } - } -\end{MacroCode} - \begin{macro}{\nobreakspace} -\begin{MacroCode}{class} - \DeclareDocumentCommand\nobreakspace{}{\leavevmode\nobreak\space} -\end{MacroCode} - \end{macro} - Since apparently \hologo{LuaLaTeX} isn't supported by - \pkg{polyglossia}, we fall back to \pkg{babel} in that engine. - Thus, only load \pkg{polyglossia} for \hologo{XeLaTeX}. -\begin{MacroCode}{class} - \sys_if_engine_xetex:TF{ - \PassOptionsToPackage{quiet}{fontspec} - \RequirePackage{polyglossia} - \bool_gset_true:N\g__skrapport_has_polyglossia_bool - }{ - \bool_gset_false:N\g__skrapport_has_polyglossia_bool - } -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_pdftex:} - \changes{0.12d}{Load \pkg{isomath}} - This macro contains special setup code for the \hologo{pdfTeX} - engine. Currently, it only sets the font encoding to T1. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_pdftex:{ - \RequirePackage[T1]{fontenc} - \AtEndOfClass{ - \RequirePackage{isomath} - } - \bool_gset_false:N\g__skrapport_has_polyglossia_bool -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\__skrapport_setup_engine_specific:} - This macro detects the current engine and calls the appropriate - engine setup macro. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_engine_specific:{ - \bool_if:nTF{\sys_if_engine_luatex_p: || \sys_if_engine_xetex_p:}{ - \__skrapport_setup_xelatex: - }{ - \__skrapport_setup_pdftex: - } -} -\end{MacroCode} - \end{macro} - - \paragraph{Variants with expandable arguments} - Some option setup macros accept arguments, but those arguments are - not expanded. Here, we provide variants which expand the parameters - properly using the excellent \pkg{l3prg} functionality. - \begin{macro}{\__skrapport_setup_ptsize:x} -\begin{MacroCode}{class} -\cs_generate_variant:Nn\__skrapport_setup_ptsize:n{ x } -\end{MacroCode} - \end{macro} - \begin{macro}{\__skrapport_setup_titles:x} -\begin{MacroCode}{class} -\cs_generate_variant:Nn\__skrapport_setup_titles:n{ x } -\end{MacroCode} - \end{macro} - \begin{macro}{\__skrapport_setup_lang:x} -\begin{MacroCode}{class} -\cs_generate_variant:Nn\__skrapport_setup_lang:n{ x } -\end{MacroCode} - \end{macro} - \begin{macro}{\__skrapport_setup_font:x} -\begin{MacroCode}{class} -\cs_generate_variant:Nn\__skrapport_setup_font:n{ x } -\end{MacroCode} - \end{macro} - - \subsubsection{Key-value system} - Let's define some \pkg{l3keys} corresponding to the options. Note - that most of them just refer to a macro in their \texttt{.code:n} - block --- these macros were defined earlier. -\begin{MacroCode}{class} -\keys_define:nn{skrapport}{ -\end{MacroCode} - \begin{option}{paper}{a4paper, a5paper, a4, a5} - \changes{0.12}{Values \texttt{a4paper} and \texttt{a5paper} are - now deprecated} - \begin{option}{a4paper} - \changes{0.12}{Option is now deprecated} - \begin{option}{a5paper} - \changes{0.12}{Option is now deprecated} - Declare the paper size options. Note that having to handle the - deprecated \texttt{a4paper} and \texttt{a5paper} values of the - \opt{paper} option makes the code less readable. In a few - versions, when these options are removed, the code should probably - be refactored to look something like the \opt{ptsize} option below. -\begin{MacroCode}{class} - paper .choice:, - paper / a4 .code:n = - {\__skrapport_setup_paper:n{a4}}, - paper / a5 .code:n = - {\__skrapport_setup_paper:n{a5}}, - paper / a4paper .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {paper=a4paper}{paper=a4} - \keys_set:nn{skrapport}{paper=a4}}, - paper / a5paper .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {paper=a5paper}{paper=a5} - \keys_set:nn{skrapport}{paper=a4}}, - paper .value_required:n = true, - a4paper .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {a4paper}{paper=a4} - \keys_set:nn{skrapport}{paper=a4}}, - a5paper .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {a5paper}{paper=a5} - \keys_set:nn{skrapport}{paper=a5}}, -\end{MacroCode} - \end{option} - \end{option} - \end{option} - - \begin{option}{ptsize}{10pt, 11pt, 12pt} - \begin{option}{10pt} - \begin{option}{11pt} - \begin{option}{12pt} - Declare point size options. Note that we don't deprecate the - non-\opt{ptsize} aliases as they are much easier to type. -\begin{MacroCode}{class} - ptsize .choices:nn = - { 10pt, 11pt, 12pt } - {\__skrapport_setup_ptsize:x{\tl_use:N\l_keys_choice_tl}}, - ptsize .value_required:n = true, - 10pt .meta:n = {ptsize=10pt}, - 11pt .meta:n = {ptsize=11pt}, - 12pt .meta:n = {ptsize=12pt}, -\end{MacroCode} - \end{option} - \end{option} - \end{option} - \end{option} - - \begin{option}{twocolumn} - \changes{0.08}{Added option \opt{twocolumn}} - \changes{0.12a}{Use \cs{AtEndOfClass} instead of \cs{AtEndClass}} - Declare column options. The code here should be run through - \cs{AtEndOfClass} so that the setup code can patch everythin - properly. - \begin{option}{onecolumn} - \changes{0.12}{Option is now deprecated} - The \opt{onecolumn} option has no effect and is deprecated. -\begin{MacroCode}{class} - twocolumn .code:n = - {\AtEndOfClass{\__skrapport_setup_twocolumn:}}, - onecolumn .code:n = - {\msg_warning:nnn{skrapport}{option-no-effect}{onecolumn}}, -\end{MacroCode} - \end{option} - \end{option} - - \begin{option}{draft}{true, false} - \begin{option}{final} - Declare \opt{draft} and \opt{final} options. Note that even if the - \opt{final} option does absolutely nothing, users may expect it to - be there and as such it is not deprecated. -\begin{MacroCode}{class} - draft .choice:, - draft / true .code:n = - {\bool_gset_true:N\g__skrapport_draft_bool - \__skrapport_setup_draft:}, - draft / false .code:n = - {\bool_gset_false:N\g__skrapport_draft_bool}, - draft .default:n = true, - final .code:n = {\prg_do_nothing:}, -\end{MacroCode} - \end{option} - \end{option} - - Declare the \opt{fleqn} and \opt{leqno} options, mainly for - compatibility with the \pkg{article} class. - \begin{option}{leqno} -\begin{MacroCode}{class} - leqno .code:n = - {\__skrapport_setup_leqno:}, -\end{MacroCode} - \end{option} - \begin{option}{fleqn} -\begin{MacroCode}{class} - fleqn .code:n = - {\__skrapport_setup_fleqn:}, -\end{MacroCode} - \end{option} - - \begin{option}{titles}{rm, it, bf, sf} - Declare options for section titles. The old \opt*{??titles} aliases - are deprecated and will be removed in a future version. - \begin{option}{rmtitles} - \changes{0.12}{Option is now deprecated} - \begin{option}{bftitles} - \changes{0.12}{Option is now deprecated} - \begin{option}{sftitles} - \changes{0.09}{Added \opt{sftitles} option} - \changes{0.12}{Option is now deprecated} -\begin{MacroCode}{class} - titles .choices:nn = - { rm, it, bf, sf } - {\__skrapport_setup_titles:x{\tl_use:N\l_keys_choice_tl}}, - titles .value_required:n = true, - rmtitles .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {rmtitles}{titles=rm} - \keys_set:nn{skrapport}{titles=rm}}, - bftitles .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {bftitles}{titles=bf} - \keys_set:nn{skrapport}{titles=bf}}, - sftitles .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {sftitles}{titles=sf} - \keys_set:nn{skrapport}{titles=sf}}, -\end{MacroCode} - \end{option} - \end{option} - \end{option} - \end{option} - - \begin{option}{hanging-titles}{true, false} - \changes{0.12d}{Added option to enable \enquote{hanging} titles} -\begin{MacroCode}{class} - hanging-titles .bool_gset:N = \g__skrapport_hanging_titles_bool, - hanging-titles .default:n = true, - hanging-titles .initial:n = false, -\end{MacroCode} - \end{option} - - \begin{option}{lang}{sv, en, de} - \changes{0.12c}{Added option value \texttt{de}} - \changes{0.12}{Incompatible change: values \texttt{swe} and - \texttt{eng} are now \texttt{sv} and \texttt{en}, - respectively} - \begin{option}{swe} - \changes{0.12}{Option is now deprecated} - \begin{option}{eng} - \changes{0.12}{Option is now deprecated} - Declare options for swedish/english \pkg{babel} or - \pkg{polyglossia} support. Again, the old \opt{swe} and \opt{eng} - aliases are deprecated and will be removed. -\begin{MacroCode}{class} - lang .choices:nn = - { sv, en, de } - {\__skrapport_setup_lang:x{\tl_use:N\l_keys_choice_tl}}, - lang .value_required:n = true, - swe .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {swe}{lang=sv} - \keys_set:nn{skrapport}{lang=sv}}, - eng .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {eng}{lang=en} - \keys_set:nn{skrapport}{lang=en}}, -\end{MacroCode} - \end{option} - \end{option} - \end{option} - - \begin{option}{font}{none, kpfonts, lmodern, palatino, minion, skdoc} - Declare font options. Again, aliases are deprecated. - \begin{option}{kpfonts} - \changes{0.07}{Added option \opt{kpfonts}, set as default - option for fonts} - \changes{0.12}{Option is now deprecated} - \begin{option}{lmodern} - \changes{0.12}{Option is now deprecated} - \begin{option}{palatino} - \changes{0.12}{Option is now deprecated} - \begin{option}{minion} - \changes{0.11}{Added option \opt{minion}} - \changes{0.12}{Option is now deprecated} - \begin{option}{skdoc} - \changes{0.11a}{Added option \opt{skdoc}} - \changes{0.12}{Option is now deprecated} - \begin{option}{nofont} - \changes{0.12}{Option is now deprecated} -\begin{MacroCode}{class} - font .choices:nn = - { none, kpfonts, lmodern, palatino, minion, skdoc, word } - {\__skrapport_setup_font:x{\tl_use:N\l_keys_choice_tl}}, - font .value_required:n = true, - nofont .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {nofont}{font=none} - \keys_set:nn{skrapport}{font=none}}, - kpfonts .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {kpfonts}{font=kpfonts} - \keys_set:nn{skrapport}{font=kpfonts}}, - lmodern .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {lmodern}{font=lmodern} - \keys_set:nn{skrapport}{font=lmodern}}, - palatino .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {palatino}{font=palatino} - \keys_set:nn{skrapport}{font=palatino}}, - minion .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {minion}{font=minion} - \keys_set:nn{skrapport}{font=minion}}, - skdoc .code:n = - {\msg_warning:nnnn{skrapport}{option-deprecated} - {skdoc}{font=skdoc} - \keys_set:nn{skrapport}{font=skdoc}}, -\end{MacroCode} - \end{option} - \end{option} - \end{option} - \end{option} - \end{option} - \end{option} - \end{option} - - \begin{option}{indent}{true, false} - \changes{0.02}{Added option of indented paragraphs} - \begin{option}{noindent} - \changes{0.12}{Option is now deprecated} - Declare indentation options. Since the \opt{noindent} option - technically has no effect and is an alias of \opt{indent=false}, - it has been deprecated. -\begin{MacroCode}{class} - indent .choice:, - indent / true .code:n = {\prg_do_nothing:}, - indent / false .code:n = {\__skrapport_setup_parskip:}, - indent .default:n = true, - noindent .code:n = - {\msg_warning:nnn{skrapport}{option-no-effect}{noindent}}, -\end{MacroCode} - \end{option} - \end{option} - - \begin{option}{color}{true, false} - \changes{0.09}{Added \opt{color} option} - \changes{0.12}{Converted to a key-value option which will load - the specified color theme.} - \begin{option}{nocolor} - Declare color options. Note that we explicitly set the boolean - \cs{g__skrapport_color_bool} as well as setting up the colors - through \cs{__skrapport_setup_color:n}, so that we can keep track - of the color usage even after the options have been set up. -\begin{MacroCode}{class} - color .code:n = - {\str_if_eq:nnTF{#1}{false} - {\bool_gset_false:N\g__skrapport_color_bool} - {\bool_gset_true:N\g__skrapport_color_bool - \str_if_eq:nnTF{#1}{true} - {\__skrapport_setup_color:n{default}} - {\__skrapport_setup_color:n{#1}}}}, - color .default:n = true, - nocolor .meta:n = {color=false}, -\end{MacroCode} - \end{option} - \end{option} - - \begin{option}{nomath}{true, false} - \begin{option}{math} - \changes{0.12}{Option is now deprecated} - Declare math options. As with the \opt{noindent} option, \opt{math} - has been deprecated since it is an alias and has no effect. -\begin{MacroCode}{class} - nomath .choice:, - nomath / false .code:n = {\__skrapport_setup_math:}, - nomath / true .code:n = {\prg_do_nothing:}, - nomath .default:n = true, - math .code:n = - {\msg_warning:nnn{skrapport}{option-no-effect}{math}}, -\end{MacroCode} - \end{option} - \end{option} - - That's it, we're done setting up the \pkg{l3keys} for the options. -\begin{MacroCode}{class} -} -\end{MacroCode} - - We will now define a \enquote{defaults} key-value system because - \texttt{.initial:n} doesn't work they way we want it to. This - key-value system will be used to set flags with which we will - determine wether to set certain default options. - \begin{macro}{\__skrapport_setup_defaults:} - \changes{0.12a}{\texttt{word} font stack is now the default font stack when using \hologo{XeLaTeX}} -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_setup_defaults:{ - \bool_new:N\l__skrapport_has_option_indent_bool - \bool_new:N\l__skrapport_has_option_nomath_bool - \bool_new:N\l__skrapport_has_option_color_bool - \bool_new:N\l__skrapport_has_option_font_bool - \bool_new:N\l__skrapport_has_option_lang_bool - \bool_new:N\l__skrapport_has_option_titles_bool - \bool_new:N\l__skrapport_has_option_draft_bool - \bool_new:N\l__skrapport_has_option_ptsize_bool - \bool_new:N\l__skrapport_has_option_paper_bool - \keys_define:nn{skrapport-default}{ - indent .code:n = - {\bool_set_true:N\l__skrapport_has_option_indent_bool}, - nomath .code:n = - {\bool_set_true:N\l__skrapport_has_option_nomath_bool}, - color .code:n = - {\bool_set_true:N\l__skrapport_has_option_color_bool}, - font .code:n = - {\bool_set_true:N\l__skrapport_has_option_font_bool}, - lang .code:n = - {\bool_set_true:N\l__skrapport_has_option_lang_bool}, - titles .code:n = - {\bool_set_true:N\l__skrapport_has_option_titles_bool}, - draft .code:n = - {\bool_set_true:N\l__skrapport_has_option_draft_bool}, - ptsize .code:n = - {\bool_set_true:N\l__skrapport_has_option_ptsize_bool}, - paper .code:n = - {\bool_set_true:N\l__skrapport_has_option_paper_bool}, -\end{MacroCode} - The following keys correspond to deprecated options. They should - be removed when the corresponding options are removed. -\begin{MacroCode}{class} - nofont .code:n = {\keys_set:nn{skrapport-default}{font}}, - kpfonts .code:n = {\keys_set:nn{skrapport-default}{font}}, - lmodern .code:n = {\keys_set:nn{skrapport-default}{font}}, - palatino .code:n = {\keys_set:nn{skrapport-default}{font}}, - minion .code:n = {\keys_set:nn{skrapport-default}{font}}, - skdoc .code:n = {\keys_set:nn{skrapport-default}{font}}, - swe .code:n = {\keys_set:nn{skrapport-default}{lang}}, - eng .code:n = {\keys_set:nn{skrapport-default}{lang}}, - rmtitles .code:n = {\keys_set:nn{skrapport-default}{titles}}, - bftitles .code:n = {\keys_set:nn{skrapport-default}{titles}}, - sftitles .code:n = {\keys_set:nn{skrapport-default}{titles}}, - 10pt .code:n = {\keys_set:nn{skrapport-default}{ptsize}}, - 11pt .code:n = {\keys_set:nn{skrapport-default}{ptsize}}, - 12pt .code:n = {\keys_set:nn{skrapport-default}{ptsize}}, - a4paper .code:n = {\keys_set:nn{skrapport-default}{paper}}, - a5paper .code:n = {\keys_set:nn{skrapport-default}{paper}}, -\end{MacroCode} -\begin{MacroCode}{class} - } - \ProcessKeysOptions{skrapport-default} - \bool_if:NF\l__skrapport_has_option_indent_bool{ - \keys_set:nn{skrapport}{indent=false} - } - \bool_if:NF\l__skrapport_has_option_nomath_bool{ - \keys_set:nn{skrapport}{nomath=false} - } - \bool_if:NF\l__skrapport_has_option_color_bool{ - \keys_set:nn{skrapport}{color=true} - } - \bool_if:NF\l__skrapport_has_option_font_bool{ - \sys_if_engine_xetex:TF{ - \keys_set:nn{skrapport}{font=word} - }{ - \keys_set:nn{skrapport}{font=kpfonts} - } - } - \bool_if:NF\l__skrapport_has_option_lang_bool{ - \keys_set:nn{skrapport}{lang=sv} - } - \bool_if:NF\l__skrapport_has_option_titles_bool{ - \keys_set:nn{skrapport}{titles=bf} - } - \bool_if:NF\l__skrapport_has_option_draft_bool{ - \keys_set:nn{skrapport}{draft=false} - } - \bool_if:NF\l__skrapport_has_option_ptsize_bool{ - \keys_set:nn{skrapport}{ptsize=11pt} - } - \bool_if:NF\l__skrapport_has_option_paper_bool{ - \keys_set:nn{skrapport}{paper=a4} - } -} -\end{MacroCode} - \end{macro} - - Finally, we process the class options using the keys defined earlier. - We also run the engine-specific code implemented above, and the fake - key system used to define defaults. - - Note that we save and restore \cs{@classoptionslist} around the - engine-specific setup. This is because we might load \pkg{xkeyval}, - which apparently removes all key-value options from the list when - loaded (and this is really bad for us). -\begin{MacroCode}{class} -\cs_set_eq:NN\__skrapport_tmpa_cs:\@classoptionslist -\RequirePackage{xkeyval} -\cs_set_eq:NN\__skrapport_tmpb_cs:\@classoptionslist -\cs_set_eq:NN\@classoptionslist\__skrapport_tmpa_cs: -\__skrapport_setup_engine_specific: -\ProcessKeysOptions{skrapport} -\__skrapport_setup_defaults: -\cs_set_eq:NN\@classoptionslist\__skrapport_tmpb_cs: -\cs_undefine:N\__skrapport_tmpa_cs: -\cs_undefine:N\__skrapport_tmpb_cs: -\end{MacroCode} - - \subsection{Required packages} - We also include some essential packages per default. The - \pkg{calc} package, for instance, is essential in later - definitions. -\begin{MacroCode}{class} -\RequirePackage{calc,isodate,multicol} -\end{MacroCode} - - At the end of the class definition we load a very - useful package that improves typesetting: \pkg{microtype}. - Also set \cs{frenchspacing}. -\begin{MacroCode}{class} -\AtEndOfClass{ - \RequirePackage{microtype} - \frenchspacing -} -\end{MacroCode} - - When the document starts, we set the URL style if the user has - loaded the \pkg{url} package. -\begin{MacroCode}{class} -\AtBeginDocument{ - \cs_if_exist:NT\urlstyle{\urlstyle{same}} -} -\end{MacroCode} - - \subsection{Utilities} - We define useful \LaTeX3 replacements of \LaTeXe\ stuff that - hasn't made its way into \pkg{interface3}. This includes - a \cs{settowidth} clone and possibly more stuff later. - \begin{macro}{\dim_set_to_wd:Nn} -\begin{MacroCode}{class} -\cs_new:Npn\dim_set_to_wd:Nn#1#2{ - \hbox_set:Nn\l_tmpa_box{#2} - \dim_set:Nn#1{\box_wd:N\l_tmpa_box} - \box_clear:N\l_tmpa_box -} -\end{MacroCode} - \end{macro} - - \subsection{Hidden things} - Set some default measurements (should probably be replaced with - simply loading \pkg{typearea}). -\begin{MacroCode}{class} -\dim_add:Nn\textwidth{0.5\oddsidemargin} -\dim_add:Nn\textwidth{0.5\evensidemargin} -\dim_add:Nn\oddsidemargin{-0.5\oddsidemargin} -\dim_add:Nn\evensidemargin{-0.5\evensidemargin} -\dim_gset:Nn\lineskip{1pt} -\dim_gset:Nn\normallineskip{1pt} -\end{MacroCode} - \begin{macro}{\baselinestretch} - Note that we can't use \cs{RenewDocumentCommand} as that yields an - infinite loop before or at \env{document}. -\begin{MacroCode}{class} -\cs_set:Npn\baselinestretch{} -\end{MacroCode} - \end{macro} - - \subsubsection{Penalties} -\begin{MacroCode}{class} -\int_gset:Nn\@lowpenalty {51} -\int_gset:Nn\@medpenalty {151} -\int_gset:Nn\@highpenalty{301} -\setcounter{topnumber}{2} -\setcounter{bottomnumber}{1} -\setcounter{totalnumber}{4} -\setcounter{dbltopnumber}{2} -\end{MacroCode} - \begin{macro}{\topfraction} -\begin{MacroCode}{class} -\RenewDocumentCommand\topfraction{}{.75} -\end{MacroCode} - \end{macro} - \begin{macro}{\bottomfraction} -\begin{MacroCode}{class} -\RenewDocumentCommand\bottomfraction{}{.5} -\end{MacroCode} - \end{macro} - \begin{macro}{\textfraction} -\begin{MacroCode}{class} -\RenewDocumentCommand\textfraction{}{.25} -\end{MacroCode} - \end{macro} - \begin{macro}{\floatpagefraction} -\begin{MacroCode}{class} -\RenewDocumentCommand\floatpagefraction{}{.625} -\end{MacroCode} - \end{macro} - \begin{macro}{\dbltopfraction} -\begin{MacroCode}{class} -\RenewDocumentCommand\dbltopfraction{}{.75} -\end{MacroCode} - \end{macro} - \begin{macro}{\dblfloatpagefraction} -\begin{MacroCode}{class} -\RenewDocumentCommand\dblfloatpagefraction{}{.625} -\end{MacroCode} - \end{macro} - - \subsection{User-level commands and environments} - \subsubsection{The front page} - \begin{macro}{\title}[1] - {Title of the document} - \begin{macro*}{\g__skrapport_title_tl} -\begin{MacroCode}{class} -\tl_new:N\g__skrapport_title_tl -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\DeclareDocumentCommand\title{m}{ - \tl_gset:Nn\g__skrapport_title_tl{#1} -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\date}[1] - {Date in ISO8601 format} - The \cs{date} macro sets the current date of the document. It only - accepts dates accepted by \pkg{isodate} (or the special value - \enquote{\texttt{today}}). Dates are always printed using the - current format as specified by the \pkg{isodate} package. The default - value of the date (if \cs{date} isn't used) is \cs{today}. - \begin{macro*}{\g__skrapport_title_tl} -\begin{MacroCode}{class} -\tl_new:N\g__skrapport_date_tl -\tl_gset:Nn\g__skrapport_date_tl{\today} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\DeclareDocumentCommand\date{m}{ - \str_if_eq:nnTF{#1}{today}{ - \tl_gset:Nn\g__skrapport_date_tl{\today} - }{ - \if_meaning:w \today #1 - \tl_gset:Nn\g__skrapport_date_tl{\today} - \else: - \tl_gset:Nn\g__skrapport_date_tl{\printdate{#1}} - \fi: - } -} -\end{MacroCode} - \end{macro} - - \begin{macro}{\author}[2] - {Optional email address} - {Author name} - \changes{0.10b}{Improved \cs{author} macro} - \changes{0.12}{Use comma-separated lists instead of token list} - The \cs{author} macro is redefined to accept an optional argument - and to be used multiple times. - \begin{macro*}{\__skrapport_email:n}[1] - {Email address} - \changes{0.12a}{Store \cs{textemdash} instead of \cs{NoValue}} - The \cs{skrapport@email} helper macro typesets an email address - using \pkg{hyperref} if that package is used. This is suboptimal, - the macro behaves differently with respect to special characters - depending on wether \pkg{hyperref} is loaded or not. -\begin{MacroCode}{class} -\cs_new_nopar:Npn\__skrapport_email:n#1{ - \texttt{#1} -} -\AtBeginDocument{ - \cs_if_exist:NT\href{ - \cs_gset_nopar:Npn\__skrapport_email:n#1{ - \href{mailto:#1}{\nolinkurl{#1}} - } - } -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\g__skrapport_author_clist} -\begin{MacroCode}{class} -\clist_new:N\g__skrapport_author_clist -\end{MacroCode} - \end{macro*} - \begin{macro*}{\g__skrapport_email_clist} -\begin{MacroCode}{class} -\clist_new:N\g__skrapport_email_clist -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\DeclareDocumentCommand\author{om}{% - \clist_gput_right:Nn\g__skrapport_author_clist{#2} - \clist_gput_right:Nn\g__skrapport_email_clist - {\IfNoValueTF{#1}{\textemdash}{#1}} -} -\end{MacroCode} - \begin{macro}{\__skrapport_author_list:} - \changes{0.12a}{Use \cs{clist_use:Nnnn}} - This macro lists all the authors in the comma-separated list - \cs{g__skrapport_author_clist}, separating them with a comma - or the word \enquote{and} (in the appropriate language). -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_author_list:{ - \clist_use:Nnnn\g__skrapport_author_clist - {~\__skrapport_and_word:{}~}{,~}{~\__skrapport_and_word:{}~} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\__skrapport_email_list:} - \changes{0.12a}{Use \cs{clist_use:Nnnn}} - This macro lists the email addresses in the comma-separated list - \cs{g__skrapport_email_clist} by applying \cs{__skrapport_email:} - if appropriate (or printing an em-dash if no value exists) and - separating them with commas. -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_email_list:{ - \int_compare:nT{\clist_count:N\g__skrapport_author_clist>\c_zero}{ - \clist_use:Nnnn\g__skrapport_email_clist{\\}{\\}{\\} - } -} -\end{MacroCode} - \end{macro} - \end{macro} - - \begin{macro}{\regarding}[1] - {Text snippet} - This macro defines a variable used by \cs{maketitle} to insert a - simple text into the header on the title page. - \begin{macro*}{\g__skrapport_regarding_tl} -\begin{MacroCode}{class} -\tl_new:N\g__skrapport_regarding_tl -\DeclareDocumentCommand\regarding{m}{ - \tl_gset:Nn\g__skrapport_regarding_tl{#1} -} -\end{MacroCode} - \end{macro*} - \end{macro} - - \begin{macro}{\license}[1] - {Short license description} - \changes{0.07}{Added command \cs{license}} - This macro defines a variable used by \cs{maketitle} to insert a - license into the footer on the titlepage. - \begin{macro*}{\g__skrapport_copyright_unprinted_bool} -\begin{MacroCode}{class} -\bool_new:N\g__skrapport_copyright_unprinted_bool -\AtEndDocument{ - \bool_if:NT\g__skrapport_copyright_unprinted_bool - {\msg_warning:nn{skrapport}{license-not-printed}} -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\g__skrapport_copyright_tl} -\begin{MacroCode}{class} -\tl_new:N\g__skrapport_copyright_tl -\DeclareDocumentCommand\license{m}{ - \tl_gset:Nn\g__skrapport_copyright_tl{#1} - \bool_gset_true:N\g__skrapport_copyright_unprinted_bool -} -\end{MacroCode} - \end{macro*} - \end{macro} - - \begin{macro}{\maketitle}[1] - {Optional key-value list} - \changes{0.12a}{Added optional key-value argument and PDFinfo} - The standard \cs{maketitle} command as taken from the \pkg{article} - class but with some basic restyling. -\begin{MacroCode}{class} -\keys_define:nn{skrapport/maketitle}{ - hide .clist_set:N = \l__skrapport_maketitle_hide_clist, - hide .value_required:n = true, - nopdfinfo .bool_set_inverse:N = \l__skrapport_maketitle_pdfinfo_bool, - nopdfinfo .default:n = true, - nopdfinfo .initial:n = false -} -\end{MacroCode} - \begin{macro*}{\__skrapport_smallprint_style:} -\begin{MacroCode}{class} -\cs_new_protected:Nn\__skrapport_smallprint_style:{} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\__skrapport_abstract_style:} -\begin{MacroCode}{class} -\cs_new_protected:Nn\__skrapport_abstract_style: - {\__skrapport_title_style:} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\DeclareDocumentCommand\maketitle{o}{ - \clist_clear:N\l__skrapport_maketitle_hide_clist - \IfNoValueF{#1}{\keys_set:nn{skrapport/maketitle}{#1}} - \bool_if:NT\l__skrapport_maketitle_pdfinfo_bool{ - \exp_args:NNx\cs_if_exist_use:NT\hypersetup{{ - pdfinfo={ - Title={\tl_use:N\g__skrapport_title_tl}, - Subject={\tl_use:N\g__skrapport_regarding_tl}, - Author={ - \clist_use:Nnnn\g__skrapport_author_clist{,~}{,~}{,~} - }, - Lang={\__skrapport_RFC_language:} - } - }} - } - \par - \group_begin: - \RenewDocumentCommand\thefootnote{}{ - \fnsymbol{footnote} - } - \RenewDocumentCommand\@makefnmark{}{ - \hbox_overlap_right:n{ - \@textsuperscript{\normalfont\@thefnmark} - } - } - \RenewDocumentCommand\@makefntext{+m}{ - \dim_set:Nn\parindent{1em}\noindent - \hbox_to_wd:nn{1.8em}{ - \hss\@textsuperscript{\normalfont\@thefnmark} - } - ##1 - } - \newpage - \int_gzero:N\@topnum - \__skrapport_maketitle: - \thispagestyle{plain} - \group_end: - \setcounter{footnote}{0} -} -\end{MacroCode} - \end{macro} - \begin{macro*}{\__skrapport_maketitle:} -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_maketitle:{ - \newpage - \hbox:n{} - \begin{flushleft} - \vspace{-\headsep} - \clist_if_in:NnF\l__skrapport_maketitle_hide_clist{regarding}{ - \small\__skrapport_smallprint_style: - \tl_use:N\g__skrapport_regarding_tl - \clist_if_in:NnF\l__skrapport_maketitle_hide_clist{date}{ - \tl_if_empty:NF\g__skrapport_regarding_tl{,~} - } - } - \clist_if_in:NnF\l__skrapport_maketitle_hide_clist{date}{ - \tl_use:N\g__skrapport_date_tl - } - \clist_if_in:NnTF\l__skrapport_maketitle_hide_clist{regarding}{ - \clist_if_in:NnTF\l__skrapport_maketitle_hide_clist{date} - {}{\par} - }{\par} - \vspace{1.5cm} - { - \Huge\__skrapport_title_style: - \tl_use:N\g__skrapport_title_tl - \par - } - \vspace{.125cm} - { - \Large\__skrapport_title_style: - \__skrapport_author_list: - } - \vspace{.75cm} - \end{flushleft} - \par - \clist_if_in:NnF\l__skrapport_maketitle_hide_clist{email}{ - \dim_set_to_abstract_or_email_wd:N\l_tmpa_dim - \bool_gset_false:N\g__skrapport_abstract_used - \dim_set:Nn\l_tmpb_dim - {\textwidth-\l_tmpa_dim-\c__skrapport_abstract_separator_dim} - \begin{minipage}[t]{\l_tmpa_dim} - \begin{flushright} - \leavevmode\__skrapport_abstract_style: - \__skrapport_Email_word: - \end{flushright} - \end{minipage} - \hspace{\c__skrapport_abstract_separator_dim} - \begin{minipage}[t]{\l_tmpb_dim} - \__skrapport_email_list: - \end{minipage} - \par - } -} -\end{MacroCode} - \end{macro*} - - \begin{macro*}{\g__skrapport_abstract_used} - This boolean keeps track of wether the \env{abstract} environment has - been used, and is set accordingly in the main auxillary file. -\begin{MacroCode}{class} -\bool_new:N\g__skrapport_abstract_used -\AtEndDocument{ - \iow_shipout:Nx\@mainaux{ % !!! - \exp_not:N\ExplSyntaxOn - \bool_if:NTF\g__skrapport_abstract_used - {\exp_not:n{\bool_gset_true:N\g__skrapport_abstract_used}} - {\exp_not:n{\bool_gset_false:N\g__skrapport_abstract_used}} - \exp_not:N\ExplSyntaxOff - } -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\dim_set_to_abstract_or_email_wd:N}[1] - {Dimension register} - \changes{0.12a}{Set abstract style before word to fix incorrect width} - This macro sets a dimension to either the width of the email word - or the width of the abstract word depending on the state of - \cs{g__skrapport_abstract_used}. -\begin{MacroCode}{class} -\cs_new:Npn\dim_set_to_abstract_or_email_wd:N#1{ - \dim_set_to_wd:Nn\l_tmpa_dim - {\__skrapport_abstract_style:\abstractname} - \dim_set_to_wd:Nn\l_tmpb_dim - {\__skrapport_abstract_style:\__skrapport_Email_word:} - \bool_if:NTF\g__skrapport_abstract_used - {\dim_set:Nn#1{\dim_max:nn{\l_tmpa_dim}{\l_tmpb_dim}}} - {\dim_set_eq:NN#1\l_tmpb_dim} -} -\end{MacroCode} - \end{macro*} - - \begin{environment}{abstract} - Standard restyled \env{abstract} environment from the - \pkg{article} class. -\begin{MacroCode}{class} -\dim_const:Nn\c__skrapport_abstract_separator_dim{1em} -\DeclareDocumentEnvironment{abstract}{}{ - \bool_gset_true:N\g__skrapport_abstract_used - \dim_set_to_abstract_or_email_wd:N\l_tmpa_dim - \dim_set:Nn\l_tmpb_dim - {\textwidth-\l_tmpa_dim-\c__skrapport_abstract_separator_dim} - \begin{minipage}[t]{\l_tmpa_dim} - \begin{flushright} - \leavevmode\__skrapport_abstract_style: - \abstractname - \end{flushright} - \end{minipage} - \hspace{\c__skrapport_abstract_separator_dim} - \begin{minipage}[t]{\l_tmpb_dim} -}{ - \end{minipage} -} -\end{MacroCode} - \end{environment} - - \begin{environment}{titlepage} - Titlepage environment. - \begin{macro}{\ps@skrapport@titlepage} -\begin{MacroCode}{class} -\cs_new:Npn\ps@skrapport@titlepage{ - \cs_set:Npn\@oddhead{} - \cs_set:Npn\@evenhead{} - \cs_set:Npn\@oddfoot{ - \begin{minipage}{\textwidth} - \raggedleft\small\par - \__skrapport_smallprint_style: - \tl_use:N\g__skrapport_copyright_tl - \end{minipage} - } - \cs_set_eq:NN\@evenfoot\@oddfoot -} -\end{MacroCode} - \end{macro} -\begin{MacroCode}{class} -\DeclareDocumentEnvironment{titlepage}{}{ - \cleardoublepage\setcounter{page}{1} -}{ - \bool_gset_false:N\g__skrapport_copyright_unprinted_bool - \thispagestyle{skrapport@titlepage} - \cleardoublepage\setcounter{page}{1} -} -\end{MacroCode} - \end{environment} - - \subsubsection{Sectioning} - Sectioning macros. This is kind of messy. We start with creaiting - some counters using our homemade \LaTeX3 counter macros. -\begin{MacroCode}{class} -\setcounter{secnumdepth}{3} -\newcounter{section} -\newcounter{subsection}[section] -\newcounter{subsubsection}[subsection] -\newcounter{paragraph}[subsubsection] -\newcounter{subparagraph}[paragraph] -\end{MacroCode} - Next up, we have macros to display the section numberings. - \begin{macro*}{\thesection} -\begin{MacroCode}{class} -\cs_gset:Npn\thesection{ - \arabic{section} -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\thesubsection} -\begin{MacroCode}{class} -\cs_gset:Npn\thesubsection{ - \thesection.\arabic{subsection} -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\thesubsubsection} -\begin{MacroCode}{class} -\cs_gset:Npn\thesubsubsection{ - \thesubsection.\arabic{subsubsection} -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\theparagraph} -\begin{MacroCode}{class} -\cs_gset:Npn\theparagraph{ - \thesubsubsection.\arabic{paragraph} -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\thesubparagraph} -\begin{MacroCode}{class} -\cs_gset:Npn\thesubparagraph{ - \theparagraph.\arabic{subparagraph} -} -\end{MacroCode} - \end{macro*} - - \paragraph{Pre- and post-section spacing} - Here comes the tricky part. We define two generic macros that add - spacing before and after the section title, to condense the code - a bit. Note that many of the following macros constitute a - reimplementation of \cs{@startsection}, \cs{@ssect}, \cs{@sect} and - friends. - \begin{macro}{\__skrapport_pre_section:n}[1] - {Skip before the section title} -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_pre_section:n#1{ - \leavevmode\par - \skip_set:Nn\l_tmpa_skip{#1} - \@afterindenttrue % !!! - \dim_compare:nT{\l_tmpa_skip<\c_zero_skip}{ - \skip_set:Nn\l_tmpa_skip{-\l_tmpa_skip} - \@afterindentfalse % !!! - } - \if@nobreak \everypar{} \else - \addpenalty\@secpenalty % !!! - \skip_vertical:N\l_tmpa_skip - \fi -} -\end{MacroCode} - \end{macro} - \begin{macro}{\__skrapport_post_section:n}[1] - {Space after the section title} -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_post_section:n#1{ - \skip_set:Nn\l_tmpa_skip{#1} - \dim_compare:nTF{\l_tmpa_skip>\c_zero_skip}{ - \par\nobreak - \skip_vertical:N\l_tmpa_skip - \@afterheading % !!! - }{ - \@nobreakfalse - \global\@noskipsectrue - \skip_horizontal:n{-\l_tmpa_skip} - } - \ignorespaces -} -\end{MacroCode} - \end{macro} - - \paragraph{Starred sections} - These two macros (the first only being an alias for the second with - its last argument empty) correspond to unnumbered sections. Or, - rather, they do all the typesetting and none of the TOC/counter - stuff. This means that starred sections only call this macro, while - unstarred ones call other macros in addition to this macro. - \begin{macro*}{\__skrapport_section_star:nnn} - \begin{macro}{\__skrapport_section_star:nnnn}[4] - {Indentation of section title} - {Styling of the section title} - {Actual section title} - {Optional code to run in the indentation (\emph{i.e.} section number)} -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_section_star:nnn#1#2#3{ - \__skrapport_section_star:nnnn{#1}{#2}{#3}{} -} -\cs_new:Npn\__skrapport_section_star:nnnn#1#2#3#4{ - \group_begin: - #2 - \hbox_set:Nn\l_tmpa_box{{\skip_horizontal:n{#1}#4}} - \dim_set:Nn\hangindent{#1+\box_wd:N\l_tmpa_box} - \noindent\box_use_drop:N\l_tmpa_box - \interlinepenalty\@M % !!! - #3 - \group_end: -} -\end{MacroCode} - \end{macro} - \end{macro*} - - \paragraph{Unstarred sections} - This macro typesets an unstarred section, \emph{i.e.} a numbered - one. It defines a temporary macro containing the section number - (maybe, depends on the \cs{c@secnumdepth} counter) which it passes - on to \cs{__skrapport_section_star:nnnn}, and then writes some things - to the TOC. - \begin{macro}{\__skrapport_section_nostar:nnnnnn}[6] - {Section counter name} - {Section level} - {Indentation of section title} - {Styling of the section title} - {Actual section title} - {Section title for TOC} - \changes{0.12d}{Added support for hanging titles} -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_section_nostar:nnnnnn#1#2#3#4#5#6{ - \cs_set:Nn\__skrapport_saved_section:{} - \int_compare:nF{#2>\value{secnumdepth}}{ - \refstepcounter{#1} - \cs_set:Nn\__skrapport_saved_section:{ - \bool_if:NTF\g__skrapport_hanging_titles_bool - {\llap{\use:c{the#1}\hspace{1ex}}} - {\use:c{the#1}~} - } - } - \__skrapport_section_star:nnnn - {#3}{#4}{#5}{\__skrapport_saved_section:} - \use:c{#1mark}{#6} - \addcontentsline{toc}{#1}{ - \int_compare:nF{#2>\value{secnumdepth}}{ - \protect\numberline{\use:c{the#1}} - } - #6 - } -} -\end{MacroCode} - \end{macro} - - \paragraph{Generic sectioning macros} - We will now set up a generic sectioning macro. First, we need - version of the above macros that expand their arguments. - \begin{macro*}{\__skrapport_pre_section:c} -\begin{MacroCode}{class} -\cs_generate_variant:Nn\__skrapport_pre_section:n{c} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\__skrapport_post_section:c} -\begin{MacroCode}{class} -\cs_generate_variant:Nn\__skrapport_post_section:n{c} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\__skrapport_section_star:ccn} -\begin{MacroCode}{class} -\cs_generate_variant:Nn\__skrapport_section_star:nnn{ccn} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\__skrapport_section_nostar:nnccnn} -\begin{MacroCode}{class} -\cs_generate_variant:Nn\__skrapport_section_nostar:nnnnnn{nnccnn} -\end{MacroCode} - \end{macro*} - - Now, the generic sectioning macro basically takes the sectioning - macro arguments straight up (arguments 3--5), additionally - requiring a section counter name and a section level. It expects - that constant dimensions (see definition of \cs{section} below) - and a formatting macro are available, and passes these as arguments - to the underlying sectioning macros as appropriate. - \begin{macro}{\__skrapport_generic_section:nnnnn}[5] - {Section counter name} - {Section level} - {Star (tested with \cs{IfBooleanTF})} - {Optional argument (or \cs{NoValue})} - {Section title text} -\begin{MacroCode}{class} -\cs_set:Nn\__skrapport_generic_section:nnnnn{ - \__skrapport_pre_section:c{c__skrapport_#1_pre_skip} - \IfBooleanTF#3{ - \__skrapport_section_star:ccn - {c__skrapport_#1_indent_dim} - {__skrapport_#1_style:} - {#5} - }{ - \IfNoValueTF{#4}{ - \__skrapport_section_nostar:nnccnn - {#1}{#2} - {c__skrapport_#1_indent_dim} - {__skrapport_#1_style:} - {#5} - {#5} - }{ - \__skrapport_section_nostar:nnccnn - {#1}{#2} - {c__skrapport_#1_indent_dim} - {__skrapport_#1_style:} - {#5} - {#4} - } - } - \__skrapport_post_section:c{c__skrapport_#1_post_skip} -} -\end{MacroCode} - \end{macro} - - \paragraph{Public sectioning API} - It's time to define the public sectioning macros. They all follow - the same format: first, two skips and one dimension (used by - \cs{__skrapport_generic_section:nnnnn}) are defined, as well as - a macro defining the text style of the section. Then, the actual - macro is provided. - \begin{macro}{\section}[3] - {Star (tested with \cs{IfBooleanTF})} - {Optional short title (or \cs{NoValue})} - {Sectioning title} - \begin{macro*}{\c__skrapport_section_pre_skip} - This is the skip \emph{before} a section title. -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_section_pre_skip{-4ex~plus~1ex~minus~-1ex} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_section_post_skip} - This is the skip \emph{after} a section title. -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_section_post_skip{.5ex~plus~.5ex} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_section_indent_dim} - This is the \emph{indentation} of a section title. -\begin{MacroCode}{class} -\dim_const:Nn \c__skrapport_section_indent_dim{\c_zero_dim} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_section_style:} - This is the text style of a section title. -\begin{MacroCode}{class} -\cs_set_protected:Nn\__skrapport_section_style: - {\normalfont\LARGE\__skrapport_title_style:} -\end{MacroCode} - \end{macro*} - Finally, the public macro is provided. -\begin{MacroCode}{class} -\DeclareDocumentCommand\section{som}{ - \__skrapport_generic_section:nnnnn{section}{1}{#1}{#2}{#3} -} -\end{MacroCode} - \end{macro} - - The other sectioning macros (macros from section to subparagraph are - available) are defined in an analogous manner. - \begin{macro}{\subsection}[3] - {Star (tested with \cs{IfBooleanTF})} - {Optional short title (or \cs{NoValue})} - {Sectioning title} - \begin{macro*}{\c__skrapport_subsection_pre_skip} -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_subsection_pre_skip{-3ex~plus~1ex~minus~-1ex} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_subsection_post_skip} -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_subsection_post_skip{.25ex~plus~.25ex} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_subsection_indent_dim} -\begin{MacroCode}{class} -\dim_const:Nn \c__skrapport_subsection_indent_dim{\c_zero_dim} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_subsection_style:} -\begin{MacroCode}{class} -\cs_set_protected:Nn\__skrapport_subsection_style: - {\normalfont\Large\__skrapport_title_style:} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\DeclareDocumentCommand\subsection{som}{ - \__skrapport_generic_section:nnnnn{subsection}{2}{#1}{#2}{#3} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\subsubsection}[3] - {Star (tested with \cs{IfBooleanTF})} - {Optional short title (or \cs{NoValue})} - {Sectioning title} - \begin{macro*}{\c__skrapport_subsubsection_pre_skip} -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_subsubsection_pre_skip{-2ex~plus~.5ex~minus~-.5ex} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_subsubsection_post_skip} -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_subsubsection_post_skip{.125ex~plus~.125ex} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_subsubsection_indent_dim} -\begin{MacroCode}{class} -\dim_const:Nn \c__skrapport_subsubsection_indent_dim{\c_zero_dim} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_subsubsection_style:} -\begin{MacroCode}{class} -\cs_set_protected:Nn\__skrapport_subsubsection_style: - {\normalfont\large\__skrapport_title_style:} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\DeclareDocumentCommand\subsubsection{som}{ - \__skrapport_generic_section:nnnnn{subsubsection}{3}{#1}{#2}{#3} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\paragraph}[3] - {Star (tested with \cs{IfBooleanTF})} - {Optional short title (or \cs{NoValue})} - {Sectioning title} - \begin{macro*}{\c__skrapport_paragraph_pre_skip} -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_paragraph_pre_skip{1ex~plus~.25ex~minus~-.25ex} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_paragraph_post_skip} -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_paragraph_post_skip{-1em} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_paragraph_indent_dim} -\begin{MacroCode}{class} -\dim_const:Nn \c__skrapport_paragraph_indent_dim{\c_zero_dim} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_paragraph_style:} -\begin{MacroCode}{class} -\cs_set_protected:Nn\__skrapport_paragraph_style: - {\normalfont\normalsize\__skrapport_title_style:} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\DeclareDocumentCommand\paragraph{som}{ - \__skrapport_generic_section:nnnnn{paragraph}{4}{#1}{#2}{#3} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\subparagraph}[3] - {Star (tested with \cs{IfBooleanTF})} - {Optional short title (or \cs{NoValue})} - {Sectioning title} - \begin{macro*}{\c__skrapport_subparagraph_pre_skip} -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_subparagraph_pre_skip{1ex~plus~.25ex~minus~-.25ex} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_subparagraph_post_skip} -\begin{MacroCode}{class} -\skip_const:Nn\c__skrapport_subparagraph_post_skip{-1em} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_subparagraph_indent_dim} -\begin{MacroCode}{class} -\dim_const:Nn \c__skrapport_subparagraph_indent_dim{\parindent} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\c__skrapport_subparagraph_style:} -\begin{MacroCode}{class} -\cs_set_protected:Nn\__skrapport_subparagraph_style: - {\normalfont\normalsize\__skrapport_title_style:\itshape} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\DeclareDocumentCommand\subparagraph{som}{ - \__skrapport_generic_section:nnnnn{subparagraph}{5}{#1}{#2}{#3} -} -\end{MacroCode} - \end{macro} - - \subsubsection{Macros and environments from \pkg{article}} - \paragraph{List environments} - First, several dimensions are provided and three penalties defined. -\begin{MacroCode}{class} -\dim_gset:Nn\leftmargini{2em} -\dim_gset_eq:NN\leftmargin\leftmargini -\dim_gset:Nn\leftmarginii{2em} -\dim_gset:Nn\leftmarginiii{1.5em} -\dim_gset:Nn\leftmarginiv{1.5em} -\dim_gset:Nn\leftmarginv{1em} -\dim_gset:Nn\leftmarginvi{1em} -\dim_gset:Nn\labelsep{.5em} -\dim_gset_eq:NN\labelwidth\leftmargini -\dim_gsub:Nn\labelwidth{-\labelsep} -\int_gset:Nn\@beginparpenalty{-\@lowpenalty} -\int_gset:Nn\@endparpenalty {-\@lowpenalty} -\int_gset:Nn\@itempenalty {-\@lowpenalty} -\end{MacroCode} - - Then, we define the appearance of the item numbers. - \begin{macro*}{\theenumi} - The first level consists of arabic numbers (\(1,2,3,\dotsc\)). -\begin{MacroCode}{class} -\cs_set:Npn\theenumi {\arabic{enumi}} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\theenumii} - The second level consists of lower-case alphabetic characters - (\(\text{a},\text{b},\text{c},\dotsc\)). -\begin{MacroCode}{class} -\cs_set:Npn\theenumii {\alph{enumii}} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\theenumiii} - The third level consists of lower-case roman numerals - (\(\text{i},\text{ii},\text{iii},\dotsc\)). -\begin{MacroCode}{class} -\cs_set:Npn\theenumiii{\roman{enumiii}} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\theenumiv} - The fourth level consists of upper-case alphabetic characters - (\(\text{A},\text{B},\text{C},\dotsc\)). -\begin{MacroCode}{class} -\cs_set:Npn\theenumiv {\Alph{enumiv}} -\end{MacroCode} - \end{macro*} - We also need macros that typeset the actual labels. Here, different - levels have a different postfix: all levels except the second are - postfixed by a period, while the second level is postfixed by a - closing bracket. - \begin{macro*}{\labelenumi} -\begin{MacroCode}{class} -\cs_new:Npn\labelenumi{\theenumi.} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\labelenumii} -\begin{MacroCode}{class} -\cs_new:Npn\labelenumii{\theenumii)} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\labelenumiii} -\begin{MacroCode}{class} -\cs_new:Npn\labelenumiii{\theenumiii.} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\labelenumiv} -\begin{MacroCode}{class} -\cs_new:Npn\labelenumiv{\theenumiv.} -\end{MacroCode} - \end{macro*} - We also fix the referencing of lower-level items so that one can - refer to them properly (\emph{i.e.} as 1b(iii) and so on). - \begin{macro*}{\p@enumii} -\begin{MacroCode}{class} -\cs_set:Npn\p@enumii{\theenumi} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\p@enumiii} -\begin{MacroCode}{class} -\cs_set:Npn\p@enumiii{\theenumi(\theenumii)} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\p@enumiiv} -\begin{MacroCode}{class} -\cs_set:Npn\p@enumiv{\p@enumiii\theenumiii} -\end{MacroCode} - \end{macro*} - - All that was for numbered lists (\env{enumerate}). Now, we define - the \enquote{labels} of \env{itemize} items. Alternately, they - are a bullet (\textbullet) and a boldfaced dash - ({\normalfont\bfseries\textendash}). - \begin{macro*}{\labelitemi} -\begin{MacroCode}{class} -\cs_set:Npn\labelitemi{\textbullet} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\labelitemii} -\begin{MacroCode}{class} -\cs_set:Npn\labelitemii{\normalfont\bfseries\textendash} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\labelitemiii} -\begin{MacroCode}{class} -\cs_set:Npn\labelitemiii{\textbullet} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\labelitemiv} -\begin{MacroCode}{class} -\cs_set:Npn\labelitemiv{\normalfont\bfseries\textendash} -\end{MacroCode} - \end{macro*} - - The last of the commonly used list environments is \env{description}. - Defining it is fairly simple --- we define a list with empty item - labels and a bit of hackery for the \cs{makelabel} macro inside. - \begin{environment}{description} -\begin{MacroCode}{class} -\DeclareDocumentEnvironment{description}{}{ - \begin{list}{}{ - \dim_zero:N\labelwidth - \dim_set:Nn\itemindent{-\leftmargin} - \cs_set_eq:NN\makelabel\descriptionlabel - } -}{ - \end{list} -} -\end{MacroCode} - \begin{macro}{\descriptionlabel} - Additionally, the \cs{descriptionlabel} macro is defined. -\begin{MacroCode}{class} -\NewDocumentCommand\descriptionlabel{m}{ - \hspace{\labelsep}\normalfont\bfseries #1 -} -\end{MacroCode} - \end{macro} - \end{environment} - - \paragraph{Quotation environments} - The quotation environments are also fairly simple --- \env{quote} - is just a list with a single item, and \env{quotation} is a - \env{quote} with extra skips around it. - \begin{environment}{quote} -\begin{MacroCode}{class} -\NewDocumentEnvironment{quote}{}{ - \begin{list}{}{ - \dim_set_eq:NN\rightmargin\leftmargin - } - \item\itshape -}{ - \end{list} -} -\end{MacroCode} - \end{environment} - \begin{environment}{quotation} -\begin{MacroCode}{class} -\NewDocumentEnvironment{quotation}{}{ - \bigskip - \begin{quote} -}{ - \end{quote} - \bigskip -} -\end{MacroCode} - \end{environment} - There's a \env{verse} environment, too, but it's just \env{quote}. - \begin{environment}{verse} -\begin{MacroCode}{class} -\NewDocumentEnvironment{verse}{}{ - \begin{quote} -}{ - \end{quote} -} -\end{MacroCode} - \end{environment} - - \paragraph{Front- and backmatter} - We only define one front/backmatter macro; \cs{appendix}. - \begin{macro}{\appendix} -\begin{MacroCode}{class} -\NewDocumentCommand\appendix{}{ - \par - \setcounter{section}{0} - \setcounter{subsection}{0} - \cs_gset:Npn\thesection{\Alph{section}} -} -\end{MacroCode} - \end{macro} - - \paragraph{Old font macros} - The old font macros have been deprecated. Do not use! - \begin{macro}{\rm} - \changes{0.12}{Deprecated command} -\begin{MacroCode}{class} -\DeclareDocumentCommand\rm{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\rm}{\textrm}} -\end{MacroCode} - \end{macro} - \begin{macro}{\sf} - \changes{0.12}{Deprecated command} -\begin{MacroCode}{class} -\DeclareDocumentCommand\sf{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\sf}{\textsf}} -\end{MacroCode} - \end{macro} - \begin{macro}{\tt} - \changes{0.12}{Deprecated command} -\begin{MacroCode}{class} -\DeclareDocumentCommand\tt{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\tt}{\texttt}} -\end{MacroCode} - \end{macro} - \begin{macro}{\bf} - \changes{0.12}{Deprecated command} -\begin{MacroCode}{class} -\DeclareDocumentCommand\bf{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\bf}{\textbf}} -\end{MacroCode} - \end{macro} - \begin{macro}{\it} - \changes{0.12}{Deprecated command} -\begin{MacroCode}{class} -\DeclareDocumentCommand\it{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\it}{\textit}} -\end{MacroCode} - \end{macro} - \begin{macro}{\sl} - \changes{0.12}{Deprecated command} -\begin{MacroCode}{class} -\DeclareDocumentCommand\sl{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\sl}{\textsl}} -\end{MacroCode} - \end{macro} - \begin{macro}{\sc} - \changes{0.12}{Deprecated command} -\begin{MacroCode}{class} -\DeclareDocumentCommand\sc{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\sc}{\textsc}} -\end{MacroCode} - \end{macro} - - \paragraph{The emphasis macro} - \begin{macro}{\emph} - \changes{0.12}{Changed definition, may have introduced spacing issues} - Redefining the \cs{emph} style to be bold when nested. - \begin{macro*}{\em} - \changes{0.12}{Deprecated command} -\begin{MacroCode}{class} -\DeclareDocumentCommand\em{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\em}{\emph}} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\__skrapport_emphstyle:} -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_emphstyle:{ - \itshape - \dim_compare:nF{\fontdimen\c_one\font>\c_zero_dim}{\bfseries} -} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\DeclareDocumentCommand\emph{+m}{ - \ifmmode - \text{\__skrapport_emphstyle: #1} - \else - {\__skrapport_emphstyle: #1} - \fi -} -\end{MacroCode} - \end{macro} - - \paragraph{The footnote rule} - \begin{macro*}{\footnoterule} - \changes{0.12}{Removed footnote rule entirely} -\begin{MacroCode}{class} -\DeclareDocumentCommand\footnoterule{}{} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\@makefntext} -\begin{MacroCode}{class} -\DeclareDocumentCommand\@makefntext{+m}{ - \dim_set:Nn\parindent{1em}\noindent - \hbox_to_wd:nn{1.8em}{\hss\@makefnmark} - #1 -} -\end{MacroCode} - \end{macro*} - - \subsubsection{Floats} - \paragraph{Table- and box-related lengths} -\begin{MacroCode}{class} -\dim_gset:Nn\arraycolsep {5pt} -\dim_gset:Nn\tabcolsep {6pt} -\dim_gset:Nn\arrayrulewidth{.4pt} -\dim_gset:Nn\doublerulesep {2pt} -\dim_gset_eq:NN\tabbingsep\labelsep -\skip_gset_eq:NN{\skip\@mpfootins}{\skip\footins} -\dim_gset:Nn\fboxsep {3pt} -\dim_gset:Nn\fboxrule {.4pt} -\end{MacroCode} - - \paragraph{Counters} -\begin{MacroCode}{class} -\newcounter{figure} -\newcounter{table} -\end{MacroCode} - \begin{macro*}{\theequation} -\begin{MacroCode}{class} -\cs_set:Npn\theequation{\arabic{equation}} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\thefigure} -\begin{MacroCode}{class} -\cs_set:Npn\thefigure{\arabic{figure}} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\thetable} -\begin{MacroCode}{class} -\cs_set:Npn\thetable{\arabic{table}} -\end{MacroCode} - \end{macro*} - - \paragraph{Defaults} - The default placement, list extension and caption text of all floats. -\begin{MacroCode}{class} -\cs_new:Npn \fps@figure{tb} -\cs_new:Npn\ftype@figure{1} -\cs_new:Npn \ext@figure{lof} -\cs_new:Npn \fnum@figure{\figurename\ \thefigure} -\cs_new:Npn \fps@table {tb} -\cs_new:Npn\ftype@table {2} -\cs_new:Npn \ext@table {lot} -\cs_new:Npn \fnum@table {\tablename\ \thetable} -\end{MacroCode} - - \paragraph{Environments} - \begin{macro}{\__skrapport_xfloat:nn} - \begin{macro*}{\__skrapport_xfloat:nx} - This is a helper macro basically replacing the \cs{@float} macro - used by \LaTeXe. -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_xfloat:nn#1#2{\@xfloat{#1}[#2]} -\cs_generate_variant:Nn\__skrapport_xfloat:nn{nx} -\end{MacroCode} - \end{macro*} - \end{macro} - \begin{environment}{figure} - \changes{0.12a}{Figures are now \cs{centering}ed by default} - \begin{environment*}{figure*} -\begin{MacroCode}{class} -\DeclareDocumentEnvironment{figure}{o}{ - \__skrapport_xfloat:nx{figure} - {\IfNoValueTF{#1}{\fps@figure}{#1}} - \centering -}{ - \end@float -} -\DeclareDocumentEnvironment{figure*}{o}{ - \__skrapport_xfloat:nx{figure} - {\IfNoValueTF{#1}{tp}{#1}} - \centering -}{ - \end@float -} -\end{MacroCode} - \end{environment*} - \end{environment} - \begin{environment}{table} - \changes{0.12a}{Tables are now \cs{centering}ed by default} - \begin{environment*}{table*} -\begin{MacroCode}{class} -\DeclareDocumentEnvironment{table}{o}{ - \__skrapport_xfloat:nx{table} - {\IfNoValueTF{#1}{\fps@table}{#1}} - \centering -}{ - \end@float -} -\DeclareDocumentEnvironment{table*}{o}{ - \__skrapport_xfloat:nx{table} - {\IfNoValueTF{#1}{tp}{#1}} - \centering -}{ - \end@float -} -\end{MacroCode} - \end{environment*} - \end{environment} - - In addition to the \env{figure} and \env{table} environments, we - also provide a \env{figcenter} environment that enables centering - of figures or tables that are too wide for the page. - \begin{macro*}{\coffin_typeset:Nnnon} -\begin{MacroCode}{class} -\cs_generate_variant:Nn\coffin_typeset:Nnnnn{Nnnon} -\end{MacroCode} - \end{macro*} - \begin{environment}{figcenter} - \changes{0.12c}{Fixed the x-offset calculation} -\begin{MacroCode}{class} -\DeclareDocumentEnvironment{figcenter}{}{ - \cs_set_eq:NN\l__tmpa_cs\caption - \cs_set:Npn\caption{\msg_error:nn{skrapport}{caption-in-figcenter}} - \coffin_clear:N\l_tmpa_coffin - \hcoffin_set:Nw\l_tmpa_coffin -}{ - \hcoffin_set_end: - \dim_set:Nn\l_tmpa_dim{(\textwidth - \coffin_wd:N\l_tmpa_coffin)/2} - \coffin_typeset:Nnnon\l_tmpa_coffin{H}{l}{\dim_use:N\l_tmpa_dim}{0pt} - \cs_set_eq:NN\caption\l__tmpa_cs - \cs_undefine:N\l__tmpa_cs -} -\end{MacroCode} - \end{environment} - - \paragraph{Captions} - Before we begin, we pass options to \pkg{caption}, in case the user - is loading it or another package based upon it. This fixes an issue - where the custom caption style was overwritten with the ugly default - \pkg{article} caption style. -\begin{MacroCode}{class} -\PassOptionsToPackage{font=small,labelfont+=bf,textfont+=it}{caption} -\end{MacroCode} - \begin{macro*}{\__skrapport_caption_name_style:} -\begin{MacroCode}{class} -\cs_new_protected:Nn\__skrapport_caption_name_style:{\small\bfseries} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\__skrapport_caption_text_style:} -\begin{MacroCode}{class} -\cs_new_protected:Nn\__skrapport_caption_text_style:{\small\itshape} -\end{MacroCode} - \end{macro*} -\begin{MacroCode}{class} -\skip_new:N\abovecaptionskip -\skip_set:Nn\abovecaptionskip{10pt} -\skip_new:N\belowcaptionskip -\skip_set:Nn\belowcaptionskip{10pt} -\end{MacroCode} - \begin{macro*}{\@makecaption} - \changes{0.10c}{Fix missing coloring command for some captions} - \changes{0.12}{Split \cs{@captionstyle} into two macros} - \changes{0.12a}{Fix a bug which applied caption name styling to the - caption text} - This should possibly be redefined already at the \cs{caption} level. -\begin{MacroCode}{class} -\cs_new:Npn\@makecaption#1#2{ - \skip_vertical:N\abovecaptionskip - \hbox_set:Nn\l_tmpa_box{ - \color@setgroup % !!! - {\__skrapport_caption_name_style:#1:~} - {\__skrapport_caption_text_style:#2} - \color@endgroup % !!! - } - \dim_compare:nTF{\box_wd:N\l_tmpa_box>\hsize}{ - {\__skrapport_caption_name_style:#1:~} - {\__skrapport_caption_text_style:#2} - \par - }{ - \global\@minipagefalse % !!! - \hbox_to_wd:nn{\hsize}{ - \hfil - \box_use_drop:N\l_tmpa_box - \hfil - } - } - \skip_vertical:N\belowcaptionskip -} -\end{MacroCode} - \end{macro*} - - \subsubsection{Table of contents} -\begin{MacroCode}{class} -\cs_new:Npn\@pnumwidth{1.55em} -\cs_new:Npn\@tocrmarg{2em} -\cs_new:Npn\@dotsep{1.7} -\setcounter{tocdepth}{3} -\end{MacroCode} - \begin{macro}{\tableofcontents} - \changes{0.12}{Removed spacing and \cs{@mkboth} call} -\begin{MacroCode}{class} -\DeclareDocumentCommand\tableofcontents{}{ - \section*{\contentsname} - \makeatletter - \@starttoc{toc} - \makeatother -} -\end{MacroCode} - \end{macro} - - The following macros conspire to replace \cs{@dottedtocline}. - \begin{macro*}{\__skrapport_toc_line:nnnnnn}[6] - {TOC line character} - {Table of contents level of the line} - {Indentation at the start of the line} - {Width of the section number} - {Section title} - {Page number} -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_toc_line:nnnnnn#1#2#3#4#5#6{ - \int_compare:nF{#2>\value{tocdepth}}{ - \skip_vertical:n{0pt~plus~.2pt} - \group_begin: - \skip_set:Nn\leftskip{#3} - \skip_set_eq:NN\rightskip\@tocrmarg - \skip_set:Nn\parfillskip{-\rightskip} - \dim_set:Nn\parindent{#3} - \@afterindenttrue % !!! - \interlinepenalty\@M % !!! - \leavevmode -\end{MacroCode} - This here is pretty dumb. We can't use a \LaTeX3\ temporary skip - register (or skip the temporary), because \texttt{\#5} further down - will contain a \cs{hbox} based on \cs{@tempdima}. The proper thing - to do here would be to rewrite \cs{addcontentsline}, I guess. Bah. -\begin{MacroCode}{class} - \skip_set:Nn\@tempdima{#4} % !!! (dumb) - \skip_add:Nn\leftskip{\@tempdima} - \null\nobreak - \skip_horizontal:n{-\leftskip} - {#5}\nobreak - \str_if_eq:nnTF{#1}{}{ - \hfill - }{ - \leaders\hbox:n{ - \(\mkern\@dotsep mu\hbox{#1}\mkern\@dotsep mu\) % !!! - } - } - \hfill\nobreak - \hbox_to_wd:nn{\@pnumwidth}{ % !!! - \hfil\normalfont\normalcolor #6 - } - \par - \group_end: - } -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\__skrapport_toc_line:nnnnnn}[5] - {Table of contents level of the line} - {Indentation at the start of the line} - {Width of the section number} - {Section title} - {Page number} - This is a variant of \cs{__skrapport_toc_line:nnnnnn} which - implicitly sets empty space as its TOC line. -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_toc_line:nnnnn#1#2#3#4#5{ - \__skrapport_toc_line:nnnnnn{}{#1}{#2}{#3}{#4}{#5} -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\l@section} - \changes{0.12}{Now uses \cs{__skrapport_toc_line:nnnnn}} -\begin{MacroCode}{class} -\DeclareDocumentCommand\l@section{mm}{ - \group_begin: - \skip_vertical:n{.75ex} - \bfseries - \__skrapport_toc_line:nnnnn{1}{0em}{1.3em}{#1}{#2} - \group_end: -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\l@subsection} - \changes{0.12}{Now uses \cs{__skrapport_toc_line:nnnnnn}} -\begin{MacroCode}{class} -\DeclareDocumentCommand\l@subsection{mm}{ - \group_begin: - \skip_vertical:n{.35ex} - \penalty\@secpenalty % !!! - \__skrapport_toc_line:nnnnnn{.}{2}{1.3em}{2em}{#1}{#2} - \group_end: -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\l@subsubsection} - \changes{0.12}{Changed style to match \pkg{skdoc}} -\begin{MacroCode}{class} -\DeclareDocumentCommand\l@subsubsection{mm}{ - \skip_set:Nn\leftskip{3.3em} - \dim_set_eq:NN\parindent\c_zero_dim - \group_begin: - \cs_set_eq:NN\numberline\use_none:n - \small #1~[#2] - \group_end: -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\l@paragraph} -\begin{MacroCode}{class} -\DeclareDocumentCommand\l@paragraph{mm}{ - \int_compare:nF{4>\value{tocdepth}}{ - \msg_warning:nnnn{skrapport}{tocdepth-too-deep} - {4}{\l@paragraph} - } -} -\end{MacroCode} - \end{macro*} - \begin{macro*}{\l@subparagraph} -\begin{MacroCode}{class} -\DeclareDocumentCommand\l@subparagraph{mm}{ - \int_compare:nF{5>\value{tocdepth}}{ - \msg_warning:nnnn{skrapport}{tocdepth-too-deep} - {5}{\l@subparagraph} - } -} -\end{MacroCode} - \end{macro*} - - Fix for \emph{e.g.}~\pkg{tocloft} package. -\begin{MacroCode}{class} -\cs_set:Npn\l@figure{} -\cs_set:Npn\l@table{} -\end{MacroCode} - - \subsubsection{Basic bibliography support} -\begin{MacroCode}{class} -\dim_new:N\bibindent -\dim_set:Nn\bibindent{2em} -\end{MacroCode} - \begin{environment}{thebibliography} - \changes{0.12}{Removed \cs{@mkboth}, \cs{@openbib@code} and - \cs{@noitemerr}} -\begin{MacroCode}{class} -\DeclareDocumentEnvironment{thebibliography}{m}{ - \section*{\refname} - \list{\@biblabel{\arabic{enumiv}}}{ - \dim_set_to_wd:Nn\labelwidth{\@biblabel{#1}} - \dim_set_eq:NN\leftmargin\labelwidth - \dim_add:Nn\leftmargin{\labelsep} - \usecounter{enumiv} % !!! - \cs_set:Nn\p@enumiv{} - \RenewDocumentCommand\theenumiv{}{\arabic{enumiv}} - } - \sloppy - \int_set:Nn\clubpenalty{4000} - \int_set_eq:NN\@clubpenalty\clubpenalty - \int_set:Nn\widowpenalty{4000} -}{ - \cs_set:Nn\@noitemerr{} - \endlist -} -\end{MacroCode} - \end{environment} - \begin{macro*}{\newblock} -\begin{MacroCode}{class} -\DeclareDocumentCommand\newblock{}{ - \skip_horizontal:n{.11em~plus~.33em~minus~.07em} -} -\end{MacroCode} - \end{macro*} - \begin{environment}{theindex} - \changes{0.12}{Use \pkg{multicol} instead of \cs{twocolumn} mode, - removed \cs{@mkboth} call} -\begin{MacroCode}{class} -\DeclareDocumentEnvironment{theindex}{}{ - \begin{multicols}{2}[\section*{\indexname}] - \thispagestyle{plain} - \dim_zero:N\parindent - \skip_set:N\parskip{\c_zero_skip~plus~.3pt} - \dim_zero:N\columnseprule - \dim_set:Nn\columnsep{35pt} - \cs_set_eq:NN\item\@idxitem -}{ - \end{multicols} -} -\end{MacroCode} - \end{environment} - \begin{macro*}{\@idxitem} -\begin{MacroCode}{class} -\DeclareDocumentCommand\@idxitem{}{ - \par - \dim_set:Nn\hangindent{40pt} -} -\end{MacroCode} - \end{macro*} - \begin{macro}{\subitem} -\begin{MacroCode}{class} -\DeclareDocumentCommand\subitem{}{ - \@idxitem - \hspace*{20pt} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\subsubitem} -\begin{MacroCode}{class} -\DeclareDocumentCommand\subsubitem{}{ - \@idxitem - \hspace*{30pt} -} -\end{MacroCode} - \end{macro} - \begin{macro*}{\indexspace} -\begin{MacroCode}{class} -\DeclareDocumentCommand\indexspace{}{ - \par - \skip_vertical:n{10pt~plus~5pt~minus~3pt} -} -\end{MacroCode} - \end{macro*} - - \subsubsection{Miscellaneous} - A macro \cs{comment} (alias \cs{com}/\cs{note}) is defined to let - the user add comments and notes to the document. - \begin{macro}{\__skrapport_comment:n} -\begin{MacroCode}{class} -\cs_new:Npn\__skrapport_comment:n#1{ - {\textbf{\__skrapport_Comment_word: :}~#1} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\comment} - \changes{0.10}{Added macro for comments} - \changes{0.12b}{No longer uses \cs{colorbox} if no color package is loaded} -\begin{MacroCode}{class} -\DeclareDocumentCommand\comment{sm}{ - \IfBooleanTF{#1} - { - \cs_if_exist_use:NT\colorbox{{red!50}} - {\__skrapport_comment:n{#2}} - } - {\marginpar{\__skrapport_comment:n{#2}}} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\com} - \begin{macro}{\note} - \changes{0.10b}{Fixed a silly error in \cs{com} and \cs{note}} -\begin{MacroCode}{class} -\ProvideDocumentCommand\com{sm} - {\IfBooleanTF{#1}{\comment*{#2}}{\comment{#2}}} -\ProvideDocumentCommand\note{sm} - {\IfBooleanTF{#1}{\comment*{#2}}{\comment{#2}}} -\end{MacroCode} - \end{macro} - \end{macro} - - \begin{macro}{\__skrapport_space_if_not_punctuation:} -\begin{MacroCode}{class} -\cs_new:Nn\__skrapport_space_if_not_punctuation:{ - \clist_if_in:noF - {{,},:,;,!,?,-,),'} - {\token_to_meaning:N\l_peek_token} - {\ } -} -\end{MacroCode} - \end{macro} - \begin{macro}{\__skrapport_peek_punctuation:n} - \begin{macro*}{\__skrapport_peek_punctuation:x} -\begin{MacroCode}{class} -\cs_new_nopar:Nn\__skrapport_peek_punctuation:n{ - \mbox{#1} - \peek_meaning_remove:NTF.{}{ - \peek_meaning:NF\ { - \peek_after:Nw\__skrapport_space_if_not_punctuation: - } - } -} -\cs_generate_variant:Nn\__skrapport_peek_punctuation:n{x} -\end{MacroCode} - \end{macro*} - \end{macro} - \begin{macro}{\eg} -\begin{MacroCode}{class} -\DeclareDocumentCommand\eg{}{ - \__skrapport_peek_punctuation:x{\__skrapport_eg_word:} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\ie} -\begin{MacroCode}{class} -\DeclareDocumentCommand\ie{}{ - \__skrapport_peek_punctuation:x{\__skrapport_ie_word:} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\etc} -\begin{MacroCode}{class} -\DeclareDocumentCommand\etc{}{ - \__skrapport_peek_punctuation:x{\__skrapport_etc_word:} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\cf} -\begin{MacroCode}{class} -\DeclareDocumentCommand\cf{}{ - \__skrapport_peek_punctuation:x{\__skrapport_cf_word:} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\viz} -\begin{MacroCode}{class} -\DeclareDocumentCommand\viz{}{ - \__skrapport_peek_punctuation:x{\__skrapport_viz_word:} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\dash} -\begin{MacroCode}{class} -\DeclareDocumentCommand\dash{}{ - \cs_if_exist_use:NT\texorpdfstring - {\unskip\nobreak\thinspace\textemdash\thinspace\ignorespaces}{{ - }} -} -\cs_if_exist_use:NT\DeclareUnicodeCharacter{{2014}{\dash}} -\end{MacroCode} - \end{macro} - - \subsubsection{Color theme support} - Color theme setup. Start by patching commands and declaring - default colors. Not implemented: background colors for e.g. - quote environments and sections headings, different colors - for the different sectioning levels. -\begin{MacroCode}{class} -\bool_if:NT\g__skrapport_color_bool{ - \apptocmd{\bfseries} - {\color{skrapport@boldcolor}}{} - {\msg_warning:nnn{skrapport}{color-patch-failed}{\bfseries}} - \apptocmd{\itshape} - {\color{skrapport@italiccolor}}{} - {\msg_warning:nnn{skrapport}{color-patch-failed}{\itshape}} - \apptocmd{\__skrapport_title_style:} - {\color{skrapport@titlecolor}}{} - {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_title_style:}} - \apptocmd{\__skrapport_smallprint_style:} - {\color{skrapport@smallprintcolor}}{} - {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_smallprint_style:}} - \apptocmd{\__skrapport_abstract_style:} - {\color{skrapport@titlecolor}}{} - {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_abstract_style:}} - \apptocmd{\quote} - {\color{skrapport@quotecolor}}{} - {\msg_warning:nnn{skrapport}{color-patch-failed}{\quote}} - \apptocmd{\__skrapport_caption_name_style:} - {\color{skrapport@captioncolor}}{} - {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_caption_name_style:}} - \apptocmd{\__skrapport_emphstyle:} - {\color{skrapport@emphcolor}}{} - {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_emphstyle:}} -\end{MacroCode} -% I have no idea why this was here or what difference it makes. These -% things should be using \__skrapport_title_style:. -% \ifskrapport@twocolumn\AtBeginDocument{% -% \renewcommand\section{\@startsection {section}{1}{\z@}% -% {-.999\baselineskip}{0.001\baselineskip}{\bfseries\mathversi%on{bold}\color{skrapport@titlecolor}}} -% \renewcommand\subsection{\@startsection{subsection}{2}{\z@}% -% {\baselineskip}{-.35\baselineskip}{\bfseries\color{skrapport@titlecolor}\unskip}} -% \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% -% {\baselineskip}{-.35\baselineskip}{\itshape\color{skrapport@titlecolor}\unskip}} -% }\fi -% \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% -% {1ex \@plus .25ex \@minus -.25ex}{-1em}{\normalfont\normalsize\bfseries\color{skrapport@titlecolor}}} -% \renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% -% {1ex \@plus .25ex \@minus -.25ex}{-1em}{\normalfont\normalsize\itshape\color{skrapport@titlecolor}}} -\begin{MacroCode}{class} - \AtBeginDocument{\@ifpackageloaded{hyperref}{% - \hypersetup{% - citebordercolor=skrapport@citecolor,citecolor=skrapport@citecolor,% - filebordercolor=skrapport@filecolor,filecolor=skrapport@filecolor,% - linkbordercolor=skrapport@linkcolor,linkcolor=skrapport@linkcolor,% - menubordercolor=skrapport@menucolor,menucolor=skrapport@menucolor,% - urlbordercolor=skrapport@urlcolor,urlcolor=skrapport@urlcolor,% - runbordercolor=skrapport@runcolor,runcolor=skrapport@runcolor% - } - }{}} - \AtBeginDocument{\color{skrapport@defaultcolor}} -\end{MacroCode} - \begin{macro}{\colortheme} - The \cs{colortheme} macro allows the end-user to load color themes - (described later) to customize the colors of the document when the - class is loaded with the \opt{color} option. -\begin{MacroCode}{class} - \DeclareDocumentCommand\colortheme{m}{ - \usepackage{skrapport-colortheme-#1} - } -\end{MacroCode} - \end{macro} -\begin{MacroCode}{class} - \colortheme{default} -} -\end{MacroCode} - - \subsection{Final class setup} - We end the document class by setting a few lengths along with the - page style and page numbering. Also, activate \cs{raggedbottom} and - \cs{onexolumn} (since we always do all the two-column stuff - ourselves anyway). -\begin{MacroCode}{class} -\dim_set:Nn\columnsep{10pt} -\dim_zero:N\columnseprule -\pagestyle{plain} -\pagenumbering{arabic} -\raggedbottom -\onecolumn -\endinput -\end{MacroCode} - - \subsection{Color themes} - As described earlier, the user can load color themes to customize - the appearance of the document if the class was loaded with the - \opt{color} option. Four themes are available by default. - - \subsubsection{Default color theme} - \begin{theme}{Default} - \changes{0.09}{Added default color theme} -\begin{MacroCode}{theme-default} -\RequirePackage{expl3} -\ProvidesExplPackage{skrapport-colortheme-default} - {2012/06/07}{1.0}{skrapport color theme default} -\definecolor{skrapport@citecolor}{named}{green} -\definecolor{skrapport@filecolor}{named}{teal} -\definecolor{skrapport@linkcolor}{named}{red} -\definecolor{skrapport@menucolor}{named}{red} -\definecolor{skrapport@urlcolor}{named}{cyan} -\definecolor{skrapport@runcolor}{named}{teal} -\definecolor{skrapport@boldcolor}{named}{black} -\definecolor{skrapport@titlecolor}{named}{black} -\definecolor{skrapport@italiccolor}{named}{black} -\definecolor{skrapport@smallprintcolor}{named}{black} -\definecolor{skrapport@quotecolor}{named}{black} -\definecolor{skrapport@captioncolor}{named}{black} -\definecolor{skrapport@emphcolor}{named}{black} -\definecolor{skrapport@defaultcolor}{named}{black} -\endinput -\end{MacroCode} - \end{theme} - - \subsubsection{Unscathed color theme} - \begin{theme}{Unscathed} - \changes{0.09}{Added \enquote{Unschathed} color theme} -\begin{MacroCode}{theme-unscathed} -\RequirePackage{expl3} -\ProvidesExplPackage{skrapport-colortheme-unscathed} - {2012/06/07}{1.0}{skrapport color theme unscathed} -\definecolor{skrapport@citecolor}{named}{skrapport@defaultcolor} -\definecolor{skrapport@filecolor}{named}{skrapport@defaultcolor} -\definecolor{skrapport@menucolor}{named}{skrapport@defaultcolor} -\definecolor{skrapport@runcolor}{named}{skrapport@defaultcolor} -\definecolor{skrapport@emphcolor}{HTML}{463335} -\definecolor{skrapport@linkcolor}{HTML}{CF5D3B} -\definecolor{skrapport@urlcolor}{named}{skrapport@linkcolor} -\definecolor{skrapport@titlecolor}{HTML}{B34430} -\definecolor{skrapport@captioncolor}{named}{skrapport@titlecolor} -\definecolor{skrapport@quotecolor}{HTML}{70524A} -\definecolor{skrapport@smallprintcolor}{named}{skrapport@quotecolor} -\endinput -\end{MacroCode} - \end{theme} - - \subsubsection{Cruelwater color theme} - \begin{theme}{Cruelwater} - \changes{0.09}{Added \enquote{Cruelwater} color theme} -\begin{MacroCode}{theme-cruelwater} -\RequirePackage{expl3} -\ProvidesExplPackage{skrapport-colortheme-cruelwater} - {2012/06/07}{1.0}{skrapport color theme cruelwater} -\definecolor{skrapport@citecolor}{named}{black} -\definecolor{skrapport@filecolor}{named}{black} -\definecolor{skrapport@linkcolor}{named}{black} -\definecolor{skrapport@menucolor}{named}{black} -\definecolor{skrapport@urlcolor}{named}{black} -\definecolor{skrapport@runcolor}{named}{black} -\definecolor{skrapport@boldcolor}{HTML}{030C22} -\definecolor{skrapport@titlecolor}{HTML}{20293F} -\definecolor{skrapport@italiccolor}{named}{black} -\definecolor{skrapport@smallprintcolor}{HTML}{A9B0B3} -\definecolor{skrapport@quotecolor}{HTML}{404749} -\definecolor{skrapport@captioncolor}{HTML}{030C22} -\definecolor{skrapport@emphcolor}{HTML}{20293F} -\definecolor{skrapport@defaultcolor}{named}{black} -\endinput -\end{MacroCode} - \end{theme} - - \subsubsection{Violet color theme} - \begin{theme}{Violet} -\changes{0.09}{Added \enquote{Violet} color theme} -\begin{MacroCode}{theme-violet} -\RequirePackage{expl3} -\ProvidesExplPackage{skrapport-colortheme-violet} - {2012/06/07}{1.0}{skrapport color theme violet} -\definecolor{skrapport@citecolor}{HTML}{932444} -\definecolor{skrapport@filecolor}{HTML}{932444} -\definecolor{skrapport@linkcolor}{HTML}{932444} -\definecolor{skrapport@menucolor}{HTML}{932444} -\definecolor{skrapport@urlcolor}{HTML}{932444} -\definecolor{skrapport@runcolor}{HTML}{932444} -\definecolor{skrapport@boldcolor}{HTML}{311A2A} -\definecolor{skrapport@titlecolor}{HTML}{311A2A} -\definecolor{skrapport@italiccolor}{named}{black} -\definecolor{skrapport@smallprintcolor}{HTML}{D6CBCF} -\definecolor{skrapport@quotecolor}{HTML}{463335} -\definecolor{skrapport@captioncolor}{HTML}{311A2A} -\definecolor{skrapport@emphcolor}{HTML}{98758D} -\definecolor{skrapport@defaultcolor}{named}{black} -\endinput -\end{MacroCode} - \end{theme} - - \subsubsection{skdoc color theme} - \begin{theme}{skdoc} -\changes{0.11a}{Added \enquote{skdoc} color theme} -\begin{MacroCode}{theme-skdoc} -\RequirePackage{expl3} -\ProvidesExplPackage{skrapport-colortheme-skdoc} - {2013/04/10}{1.0}{skrapport color theme skdoc} -\definecolor{skrapport@citecolor}{RGB}{140,35,24} -\definecolor{skrapport@filecolor}{RGB}{73,10,61} -\definecolor{skrapport@linkcolor}{RGB}{140,35,24} -\definecolor{skrapport@menucolor}{RGB}{140,35,24} -\definecolor{skrapport@urlcolor}{RGB}{73,10,61} -\definecolor{skrapport@runcolor}{RGB}{73,10,61} -\definecolor{skrapport@boldcolor}{RGB}{73,10,61} -\definecolor{skrapport@titlecolor}{RGB}{11,72,107} -\definecolor{skrapport@italiccolor}{named}{black} -\definecolor{skrapport@smallprintcolor}{RGB}{11,72,107} -\definecolor{skrapport@quotecolor}{RGB}{140,35,24} -\definecolor{skrapport@captioncolor}{RGB}{11,72,107} -\definecolor{skrapport@emphcolor}{RGB}{73,10,61} -\definecolor{skrapport@defaultcolor}{named}{black} -\endinput -\end{MacroCode} - \end{theme} - - \section{Point sizes} - The point size options are pretty much \LaTeX3 translations of the - standard \pkg{article} class option files. There's a lot of duplicate - code here which may be worth to consolidate a bit. - - \subsubsection{Common macros} - We first set up a package providing replacements for \LaTeXe\ macros, - common to all the point size files. -\begin{MacroCode}{size-common} -\RequirePackage{expl3} -\ProvidesExplPackage{skrapport-size-common} - {2013/04/29}{1.0}{skrapport point size option common macros} -\end{MacroCode} - \begin{macro}{\__skrapport_set_font_size:nn}[2] - {Font size} - {Baseline skip?} % !!! -\begin{MacroCode}{size-common} -\cs_new:Npn\__skrapport_set_font_size:nn#1#2{ - \fontsize{#1}{#2} % !!! - \selectfont -} -\end{MacroCode} - \end{macro} -\begin{MacroCode}{size-common} -\endinput -\end{MacroCode} - - \subsubsection{Actual point size files} -\begin{MacroCode}{size-10,size-11,size-12} -\RequirePackage{expl3} -\end{MacroCode} -\begin{MacroCode}{size-10} -\ProvidesExplFile{skrapport-size10pt.clo} - {2013/04/29}{1.0}{skrapport point size option 10pt} -\end{MacroCode} -\begin{MacroCode}{size-11} -\ProvidesExplFile{skrapport-size11pt.clo} - {2013/04/29}{1.0}{skrapport point size option 11pt} -\end{MacroCode} -\begin{MacroCode}{size-12} -\ProvidesExplFile{skrapport-size12pt.clo} - {2013/04/29}{1.0}{skrapport point size option 12pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -\RequirePackage{skrapport-size-common} -\end{MacroCode} - \begin{macro}{\normalsize} -\begin{MacroCode}{size-10,size-11,size-12} -\RenewDocumentCommand\normalsize{}{ -\end{MacroCode} -\begin{MacroCode}{size-10} - \__skrapport_set_font_size:nn{10}{12} - \skip_gset:Nn \abovedisplayskip {10pt~plus~2pt~minus~5pt} - \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~3pt} - \skip_gset:Nn \belowdisplayshortskip {6pt ~plus~3pt~minus~3pt} -\end{MacroCode} -\begin{MacroCode}{size-11} - \__skrapport_set_font_size:nn{11}{13.2} - \skip_gset:Nn \abovedisplayskip {11pt ~plus~3pt ~minus~6pt} - \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~3pt} - \skip_gset:Nn \belowdisplayshortskip {6.5pt~plus~3.5pt~minus~3pt} -\end{MacroCode} -\begin{MacroCode}{size-12} - \__skrapport_set_font_size:nn{12}{14.5} - \skip_gset:Nn \abovedisplayskip {12pt ~plus~3pt ~minus~7pt} - \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~3pt} - \skip_gset:Nn \belowdisplayshortskip {6.5pt~plus~3.5pt~minus~3pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} - \skip_gset_eq:NN\belowdisplayskip \abovedisplayskip - \cs_gset_eq:NN\@listi\@listI -} -\end{MacroCode} - \end{macro} -\begin{MacroCode}{size-10,size-11,size-12} -\normalsize -\end{MacroCode} - \begin{macro}{\small} -\begin{MacroCode}{size-10,size-11,size-12} -\NewDocumentCommand\small{}{ -\end{MacroCode} -\begin{MacroCode}{size-10} - \__skrapport_set_font_size:nn{9}{11} - \skip_gset:Nn \abovedisplayskip {8.5pt~plus~3pt~minus~4pt} - \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~2pt} - \skip_gset:Nn \belowdisplayshortskip {4pt ~plus~2pt~minus~2pt} -\end{MacroCode} -\begin{MacroCode}{size-11} - \__skrapport_set_font_size:nn{10}{12} - \skip_gset:Nn \abovedisplayskip {10pt~plus~2pt~minus~5pt} - \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~2pt} - \skip_gset:Nn \belowdisplayshortskip {6pt ~plus~3pt~minus~3pt} -\end{MacroCode} -\begin{MacroCode}{size-12} - \__skrapport_set_font_size:nn{11}{13.6} - \skip_gset:Nn \abovedisplayskip {11pt ~plus~3pt ~minus~6pt} - \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~3pt} - \skip_gset:Nn \belowdisplayshortskip {6.5pt~plus~3.5pt~minus~3pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} - \skip_gset_eq:NN\belowdisplayskip \abovedisplayskip - \cs_gset:Npn\@listi{ - \dim_gset_eq:NN\leftmargin\leftmargini -\end{MacroCode} -\begin{MacroCode}{size-10} - \skip_gset:Nn\topsep{4pt~plus~2pt~minus~2pt} - \skip_gset:Nn\parsep{2pt~plus~1pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-11} - \skip_gset:Nn\topsep{6pt~plus~2pt~minus~2pt} - \skip_gset:Nn\parsep{3pt~plus~2pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-12} - \skip_gset:Nn\topsep{ 9pt~plus~3pt~minus~5pt} - \skip_gset:Nn\parsep{4.5pt~plus~2pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} - \skip_gset_eq:NN\itemsep\parsep - } -} -\end{MacroCode} - \end{macro} - \begin{macro}{\footnotesize} -\begin{MacroCode}{size-10,size-11,size-12} -\NewDocumentCommand\footnotesize{}{ -\end{MacroCode} -\begin{MacroCode}{size-10} - \__skrapport_set_font_size:nn{8}{9.5} - \skip_gset:Nn \abovedisplayskip {6pt~plus~2pt~minus~4pt} - \skip_gset:Nn \abovedisplayshortskip {0pt~plus~1pt} - \skip_gset:Nn \belowdisplayshortskip {3pt~plus~1pt~minus~2pt} -\end{MacroCode} -\begin{MacroCode}{size-11} - \__skrapport_set_font_size:nn{9}{11} - \skip_gset:Nn \abovedisplayskip {8pt~plus~2pt~minus~4pt} - \skip_gset:Nn \abovedisplayshortskip {0pt~plus~1pt} - \skip_gset:Nn \belowdisplayshortskip {4pt~plus~2pt~minus~2pt} -\end{MacroCode} -\begin{MacroCode}{size-12} - \__skrapport_set_font_size:nn{10}{12} - \skip_gset:Nn \abovedisplayskip {10pt~plus~2pt~minus~5pt} - \skip_gset:Nn \abovedisplayshortskip { 0pt~plus~3pt} - \skip_gset:Nn \belowdisplayshortskip { 6pt~plus~3pt~minus~3pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} - \skip_gset_eq:NN\belowdisplayskip \abovedisplayskip - \cs_gset:Npn\@listi{ - \dim_gset_eq:NN\leftmargin\leftmargini -\end{MacroCode} -\begin{MacroCode}{size-10} - \skip_gset:Nn\topsep{3pt~plus~1pt~minus~1pt} - \skip_gset:Nn\parsep{2pt~plus~1pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-11} - \skip_gset:Nn\topsep{4pt~plus~2pt~minus~2pt} - \skip_gset:Nn\parsep{2pt~plus~1pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-12} - \skip_gset:Nn\topsep{6pt~plus~2pt~minus~2pt} - \skip_gset:Nn\parsep{3pt~plus~2pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} - \skip_gset_eq:NN\itemsep\parsep - } -} -\end{MacroCode} - \end{macro} - \begin{macro}{\scriptsize} -\begin{MacroCode}{size-10,size-11,size-12} -\NewDocumentCommand\scriptsize{}{ -\end{MacroCode} -\begin{MacroCode}{size-10} - \__skrapport_set_font_size:nn{7}{8} -\end{MacroCode} -\begin{MacroCode}{size-11,size-12} - \__skrapport_set_font_size:nn{8}{9.5} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\tiny} -\begin{MacroCode}{size-10,size-11,size-12} -\NewDocumentCommand\tiny{}{ -\end{MacroCode} -\begin{MacroCode}{size-10} - \__skrapport_set_font_size:nn{5}{6} -\end{MacroCode} -\begin{MacroCode}{size-11,size-12} - \__skrapport_set_font_size:nn{6}{7} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\large} -\begin{MacroCode}{size-10,size-11,size-12} -\NewDocumentCommand\large{}{ -\end{MacroCode} -\begin{MacroCode}{size-10,size-11} - \__skrapport_set_font_size:nn{12}{14} -\end{MacroCode} -\begin{MacroCode}{size-12} - \__skrapport_set_font_size:nn{14}{18} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\Large} -\begin{MacroCode}{size-10,size-11,size-12} -\NewDocumentCommand\Large{}{ -\end{MacroCode} -\begin{MacroCode}{size-10,size-11} - \__skrapport_set_font_size:nn{14}{18} -\end{MacroCode} -\begin{MacroCode}{size-12} - \__skrapport_set_font_size:nn{17}{22} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\LARGE} -\begin{MacroCode}{size-10,size-11,size-12} -\NewDocumentCommand\LARGE{}{ -\end{MacroCode} -\begin{MacroCode}{size-10,size-11} - \__skrapport_set_font_size:nn{17}{22} -\end{MacroCode} -\begin{MacroCode}{size-12} - \__skrapport_set_font_size:nn{20}{25} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\huge} -\begin{MacroCode}{size-10,size-11,size-12} -\NewDocumentCommand\huge{}{ -\end{MacroCode} -\begin{MacroCode}{size-10,size-11} - \__skrapport_set_font_size:nn{20}{25} -\end{MacroCode} -\begin{MacroCode}{size-12} - \__skrapport_set_font_size:nn{25}{30} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -} -\end{MacroCode} - \end{macro} - \begin{macro}{\Huge} -\begin{MacroCode}{size-10,size-11,size-12} -\NewDocumentCommand\Huge{}{ -\end{MacroCode} -\begin{MacroCode}{size-10,size-11} - \__skrapport_set_font_size:nn{25}{30} -\end{MacroCode} -\begin{MacroCode}{size-12} - \__skrapport_set_font_size:nn{30}{36} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -} -\end{MacroCode} - \end{macro} -\begin{MacroCode}{size-10} -\dim_set:Nn\parindent {15pt} -\end{MacroCode} -\begin{MacroCode}{size-11} -\dim_set:Nn\parindent {17pt} -\end{MacroCode} -\begin{MacroCode}{size-12} -\dim_set:Nn\parindent {1.5em} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -\skip_set:Nn\smallskipamount{ 3pt~plus~1pt~minus~1pt} -\skip_set:Nn\medskipamount { 6pt~plus~2pt~minus~2pt} -\skip_set:Nn\bigskipamount {12pt~plus~4pt~minus~4pt} -\dim_set:Nn\headheight{12pt} -\dim_set:Nn\headsep {25pt} -\dim_set:Nn\topskip {10pt} -\dim_set:Nn\footskip {30pt} -\dim_set:Nn\maxdepth { 5pt} -\end{MacroCode} - These (\emph{i.e.} text width and height) are hopefully overwritten - by \pkg{typearea} later, so we don't bother much with them. -\begin{MacroCode}{size-10,size-11,size-12} -\dim_set:Nn\textwidth {\paperwidth-2cm} -\dim_set:Nn\textheight{\paperheight-2cm} -\dim_set:Nn\oddsidemargin {.2cm} -\dim_set:Nn\evensidemargin {1cm} -\dim_set:Nn\marginparsep {11pt} -\dim_set:Nn\marginparpush {5pt} -\dim_set:Nn\marginparwidth {.8cm-\marginparsep} -\dim_set:Nn\topmargin{\paperheight-1cm - -\headheight-\headsep - -\textheight-\footskip - -.5\topmargin} -\end{MacroCode} -\begin{MacroCode}{size-10} -\dim_set:Nn\footnotesep{6.65pt} -\skip_set:Nn{\skip\footins} { 9pt~plus~4pt~minus~2pt} -\skip_set:Nn\floatsep {12pt~plus~2pt~minus~2pt} -\skip_set:Nn\textfloatsep {20pt~plus~2pt~minus~4pt} -\skip_set:Nn\intextsep {12pt~plus~2pt~minus~2pt} -\skip_set:Nn\dblfloatsep {12pt~plus~2pt~minus~2pt} -\skip_set:Nn\dbltextfloatsep{20pt~plus~2pt~minus~4pt} -\end{MacroCode} -\begin{MacroCode}{size-11} -\dim_set:Nn\footnotesep{7.7pt} -\skip_set:Nn{\skip\footins} {10pt~plus~4pt~minus~2pt} -\skip_set:Nn\floatsep {12pt~plus~2pt~minus~2pt} -\skip_set:Nn\textfloatsep {20pt~plus~2pt~minus~4pt} -\skip_set:Nn\intextsep {12pt~plus~2pt~minus~2pt} -\skip_set:Nn\dblfloatsep {12pt~plus~2pt~minus~2pt} -\skip_set:Nn\dbltextfloatsep{20pt~plus~2pt~minus~4pt} -\end{MacroCode} -\begin{MacroCode}{size-12} -\dim_set:Nn\footnotesep{8.4pt} -\skip_set:Nn{\skip\footins} {10.8pt~plus~4pt~minus~2pt} -\skip_set:Nn\floatsep {12pt ~plus~2pt~minus~4pt} -\skip_set:Nn\textfloatsep {20pt ~plus~2pt~minus~4pt} -\skip_set:Nn\intextsep {14pt ~plus~4pt~minus~4pt} -\skip_set:Nn\dblfloatsep {14pt ~plus~2pt~minus~4pt} -\skip_set:Nn\dbltextfloatsep{20pt ~plus~2pt~minus~4pt} -\end{MacroCode} - These six have been changed slightly compared to \LaTeXe. -\begin{MacroCode}{size-10,size-11,size-12} -\skip_set:Nn\@fptop{ 5pt} -\end{MacroCode} -\begin{MacroCode}{size-10} -\skip_set:Nn\@fpsep{10pt~plus~2fil} -\end{MacroCode} -\begin{MacroCode}{size-11} -\skip_set:Nn\@fpsep{11pt~plus~2fil} -\end{MacroCode} -\begin{MacroCode}{size-12} -\skip_set:Nn\@fpsep{12pt~plus~2fil} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -\skip_set:Nn\@fpbot{ 5pt} -\skip_set:Nn\@dblfptop{ 5pt} -\end{MacroCode} -\begin{MacroCode}{size-10} -\skip_set:Nn\@dblfpsep{10pt~plus~2fil} -\end{MacroCode} -\begin{MacroCode}{size-11} -\skip_set:Nn\@dblfpsep{11pt~plus~2fil} -\end{MacroCode} -\begin{MacroCode}{size-12} -\skip_set:Nn\@dblfpsep{12pt~plus~2fil} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -\skip_set:Nn\@dblfpbot{ 5pt} -\end{MacroCode} -\begin{MacroCode}{size-10} -\skip_set:Nn\partopsep{2pt~plus~1pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-11} -\skip_set:Nn\partopsep{3pt~plus~1pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-12} -\skip_set:Nn\partopsep{3pt~plus~2pt~minus~2pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -\cs_set:Npn\@listi{ - \dim_set_eq:NN\leftmargin\leftmargini -\end{MacroCode} -\begin{MacroCode}{size-10} - \skip_set:Nn\parsep {4pt~plus~2pt~minus~1pt} - \skip_set:Nn\topsep {8pt~plus~2pt~minus~4pt} - \skip_set:Nn\itemsep{4pt~plus~2pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-11} - \skip_set:Nn\parsep {4.5pt~plus~2pt~minus~1pt} - \skip_set:Nn\topsep { 9pt~plus~3pt~minus~5pt} - \skip_set:Nn\itemsep{4.5pt~plus~2pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-12} - \skip_set:Nn\parsep { 5pt~plus~2.5pt~minus~1pt} - \skip_set:Nn\topsep {10pt~plus~4pt ~minus~6pt} - \skip_set:Nn\itemsep{ 5pt~plus~2.5pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -} -\cs_set_eq:NN\@listI\@listi -\dim_gset_eq:NN\leftmargin\leftmargini -\end{MacroCode} -\begin{MacroCode}{size-10} -\skip_gset:Nn\parsep {4pt~plus~2pt~minus~1pt} -\skip_gset:Nn\topsep {8pt~plus~2pt~minus~4pt} -\skip_gset:Nn\itemsep{4pt~plus~2pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-11} -\skip_gset:Nn\parsep {4.5pt~plus~2pt~minus~1pt} -\skip_gset:Nn\topsep { 9pt~plus~3pt~minus~5pt} -\skip_gset:Nn\itemsep{4.5pt~plus~2pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-12} -\skip_gset:Nn\parsep { 5pt~plus~2.5pt~minus~1pt} -\skip_gset:Nn\topsep {10pt~plus~4pt ~minus~6pt} -\skip_gset:Nn\itemsep{ 5pt~plus~2.5pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} -\cs_set:Npn\@listii{ - \dim_set_eq:NN\leftmargin\leftmarginii - \dim_set:Nn\labelwidth{\leftmarginii-\labelsep} -\end{MacroCode} -\begin{MacroCode}{size-10} - \skip_set:Nn\parsep {2pt~plus~1pt~minus~1pt} - \skip_set:Nn\topsep {4pt~plus~2pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-11} - \skip_set:Nn\parsep { 2pt~plus~1pt~minus~1pt} - \skip_set:Nn\topsep {4.5pt~plus~2pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-12} - \skip_set:Nn\parsep {2.5pt~plus~1pt ~minus~1pt} - \skip_set:Nn\topsep { 5pt~plus~2.5pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} - \skip_set_eq:NN\itemsep\parsep -} -\cs_set:Npn\@listiii{ - \dim_set_eq:NN\leftmargin\leftmarginiii - \dim_set:Nn\labelwidth{\leftmarginiii-\labelsep} - \skip_set_eq:NN\parsep\c_zero_skip -\end{MacroCode} -\begin{MacroCode}{size-10,size-11} - \skip_set:Nn\topsep {2pt~plus~1pt~minus~1pt} - \skip_set:Nn\partopsep{1pt~plus~0pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-12} - \skip_set:Nn\topsep {2.5pt~plus~1pt~minus~1pt} - \skip_set:Nn\partopsep{ 1pt~plus~0pt~minus~1pt} -\end{MacroCode} -\begin{MacroCode}{size-10,size-11,size-12} - \skip_set_eq:NN\itemsep\topsep -} -\cs_set:Npn\@listiv{ - \dim_set_eq:NN\leftmargin\leftmarginiv - \dim_set:Nn\labelwidth{\leftmarginiv-\labelsep} -} -\cs_set:Npn\@listv{ - \dim_set_eq:NN\leftmargin\leftmarginv - \dim_set:Nn\labelwidth{\leftmarginv-\labelsep} -} -\cs_set:Npn\@listvi{ - \dim_set_eq:NN\leftmargin\leftmarginvi - \dim_set:Nn\labelwidth{\leftmarginvi-\labelsep} -} -\endinput -\end{MacroCode} - - \Finale - \section{Installation} - The easiest way to install this package is using the package - manager provided by your \LaTeX\ installation if such a program - is available. Failing that, provided you have obtained the package - source (\file{skrapport.tex} and \file{Makefile}) from either CTAN - or Github, running \texttt{make install} inside the source directory - works well. This will extract the documentation and code from - \file{skrapport.tex}, install all files into the TDS tree at - \texttt{TEXMFHOME} and run \texttt{mktexlsr}. - - If you want to extract code and documentation without installing - the package, run \texttt{make all} instead. If you insist on not - using \texttt{make}, remember that packages distributed using - \pkg{skdoc} must be extracted using \texttt{pdflatex}, \emph{not} - \texttt{tex} or \texttt{latex}. - - \PrintChanges - \PrintIndex - \printbibliography -\end{document} diff --git a/Master/texmf-dist/source/latex/skrapport/skrapport.tex b/Master/texmf-dist/source/latex/skrapport/skrapport.tex new file mode 100644 index 00000000000..397da4a9185 --- /dev/null +++ b/Master/texmf-dist/source/latex/skrapport/skrapport.tex @@ -0,0 +1,4375 @@ +%% skrapport Skånings rapportklass +%% +%% Copyright (C) 2012-2016 by Simon Sigurdhsson <sigurdhsson@gmail.com> +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Simon Sigurdhsson. +%% +%% This work consists of the file skrapport.tex and the derived files: +%% * skrapport.cls +%% * skrapport-colortheme-default.sty +%% * skrapport-colortheme-unscathed.sty +%% * skrapport-colortheme-violet.sty +%% * skrapport-colortheme-cruelwater.sty +%% * skrapport-colortheme-skdoc.sty +%% * skrapport-size-common.sty +%% * skrapport-size10pt.clo +%% * skrapport-size11pt.clo +%% * skrapport-size12pt.clo +\documentclass{skdoc} +\let\SI\relax +\usepackage{siunitx} +\DeclareSIUnit\point{pt} +\usepackage{hologo,booktabs,xcoffins,calc} +\usepackage[style=authoryear]{biblatex} +\usepackage{csquotes} +\usepackage{varioref,cleveref} +%\usepackage{chslacite} + +\ExplSyntaxOn +\cs_set_protected_nopar:Npn\ExplHack{ + \char_set_catcode_letter:n{ 58 } + \char_set_catcode_letter:n{ 95 } +} +\ExplSyntaxOff + +% Hide the implementation +\OnlyDescription + +% Bibliography entries +\begin{filecontents}{skrapport.bib} + @article{kpfonts, + author = {Christophe Caignaert}, + title = {KP-Fonts 3.31}, + year = {2010}, + url = {http://www.tex.ac.uk/tex-archive/fonts/kpfonts/doc/kpfonts.pdf} + } + @standard{ISO216, + title = {ISO 216:2007}, + subtitle = {Writing paper and certain classes of printed matter -- Trimmed sizes -- A and B series, and indication of machine direction}, + author = {{International Organization for Standardization, Technical Committee 6}}, + year = {2007} + } + @standard{ISO8601, + title = {ISO 8601:2004}, + subtitle = {Data elements and interchange formats -- Information interchange -- Representation of dates and times}, + author = {{International Organization for Standardization, Technical Committee 154}}, + year = {2004} + } + @article{Flynn, + author = {Peter Flynn}, + title = {Rolling your own Document Class: Using \LaTeX{} to + keep away from the Dark Side}, + journal = {The Prac\TeX{} Journal}, + number = {4}, + year = {2006}, + url = {http://tug.org/pracjourn/2006-4/flynn/flynn.pdf} + } +\end{filecontents} +\addbibresource{skrapport.bib} + +% Declare the target files +\SelfPreambleTo{\mypreamble} +\DeclareFile[key=class,preamble=\mypreamble]{skrapport.cls} +\DeclareFile[key=size-common,preamble=\mypreamble]% + {skrapport-size-common.sty} +\DeclareFile[key=size-10,preamble=\mypreamble]{skrapport-size10pt.clo} +\DeclareFile[key=size-11,preamble=\mypreamble]{skrapport-size11pt.clo} +\DeclareFile[key=size-12,preamble=\mypreamble]{skrapport-size12pt.clo} +\DeclareFile[key=theme-default,preamble=\mypreamble]% + {skrapport-colortheme-default.sty} +\DeclareFile[key=theme-unscathed,preamble=\mypreamble]% + {skrapport-colortheme-unscathed.sty} +\DeclareFile[key=theme-cruelwater,preamble=\mypreamble]% + {skrapport-colortheme-cruelwater.sty} +\DeclareFile[key=theme-violet,preamble=\mypreamble]% + {skrapport-colortheme-violet.sty} +\DeclareFile[key=theme-skdoc,preamble=\mypreamble]% + {skrapport-colortheme-skdoc.sty} + +% This is where the documentation begins +\begin{document} + % Change & version info + \version{0.12i} + \changes{0.01}{Initial version} + \changes{0.03}{Removed \cs{rd} and \cs{id}} + \changes{0.04}{Added \pkg{microtype} package} + \changes{0.05}{Improved documentation} + \changes{0.06}{Corrected cheksum, further improved documentation} + \changes{0.07}{Various bugfixes, \hologo{XeLaTeX} compatibility, + better float settings, quote style fix, + \opt{intlimits} option to \pkg{amsmath}} + \changes{0.07a}{Fixed \pkg{kpfonts} issues} + \changes{0.09}{Introduced \pkg{kvoptions}, + fixed abstract in twocolumn mode} + \changes{0.10}{Include skmath if exists + and wanted. Gobble optional arguments to + \env{figure} and \env{table} in two-column mode} + \changes{0.10a}{Include \pkg{xparse} (fixes breakage)} + \changes{0.11}{Added \opt{minion} for Adobe Minion Pro font} + \changes{0.11a}{Added \opt{skdoc} font option and \thm{skdoc} color theme} + \changes{0.12}{Deprecated several macros, moved to \LaTeX3. Use of TOC depth above 3 is now unsupported} + \changes{0.12a}{The \pkg{fontspec} package is now only loaded when using the \texttt{word} or \texttt{none} font stacks on \hologo{LuaLaTeX} or \hologo{XeLaTeX}. The \texttt{word} font stack is now + the default font stack on \hologo{XeLaTeX}} + \changes{0.12b}{Minor and major bugfixes to \cs{maketitle}, \opt{ptsize}, \opt{twocolumn} and others} + \changes{0.12c}{Added german language option, fixed sectioning macros in \opt{twocolumn} mode} + \changes{0.12d}{Added \opt{hanging-titles}, latin phrase macros. Load \pkg{isomath}. Don't load \pkg{icomma}. Use \cs{frenchspacing}} + \changes{0.12e}{Replace usage of deprecated \pkg{expl3} macros (thanks for the heads-up, Joseph Wright!)} + \changes{0.12f}{Fix incorrect usage of \pkg{xparse} macros} + \changes{0.12g}{Track \pkg{expl3} changes (thanks to Joseph Wright)} + \changes{0.12h}{Fix incompatibilities with recent \pkg{expl3}} + \changes{0.12i}{Track \pkg{expl3} changes (thanks to Joseph Wright)} + % Don't forget to update the version number and release date of + % the package declaration in the implementation! + + % Metadata + \package[ctan=skrapport,vcs=https://github.com/urdh/skrapport]{skrapport} + \title{The \textbf{\thepackage} document class} + \author{Simon Sigurdhsson} + \email{sigurdhsson@gmail.com} + + % First page + \maketitle + \begin{abstract} + A document class intended for simple documents \emph{e.g.} + reports handed in to courses and such. It is small, + straight-forward and heavily inspired by the Prac\TeX{} + Journal style. + \end{abstract} + \tableofcontents + + \section{Documentation} + The \thepackage\ document class aims to make typesetting simple but + stylish documents (mostly reports) as effortless as possible. It + does this by mostly reimplementing the default \pkg{article} class + in \LaTeX3, while making modifications to both form and function + along the way. + + Because it is reimplemented in \LaTeX3, it may be incompatible with + any number of packages that patch or otherwise modify internals of + \pkg{article} or other document classes. For commonly used packages + (especially those used frequently by the author), this shouldn't be + a problem. The author gladly accepts reports of any such issues at + the project issue tracker --- see \enquote{Known issues} on + \vpageref{sec:issues}. + + \subsection{Options} + As with other document classes, the class is loaded, possibly with + options, by issuing \Macro\documentclass[<options>]{skrapport}. + The class has a number of options controlling both form and function, + by \emph{e.g.} setting the font size, selecting a font stack, setting + the section title style, and so on. + + \subsubsection{Layout} + Two options controlling the overall layout of the document are + provided. Collectively they control the paper size and text layout + of the document. + + \Option{paper}\WithValues{a4, a5}\AndDefault{a4} + The \opt{paper} option controls the paper size of the document. + Internally, this is set by the \pkg{typearea} package, so in theory + many more paper sizes could be available, but the current options + cover most useful documents. + + \Option{twocolumn} + The \opt{twocolumn} option sets up a two-column mode. This is not + provided by internal \LaTeX\ mechanics as in the original + \pkg{article} class, but instead by patching environments and macros + and using a combination of the \pkg{multicol} and \pkg{grid} + packages. In theory, this means that baselines of adjacent columns + should be aligned, and that three- or four-column modes are possible + in the future (but that'd be ridiculous). + + \subsubsection{Style} + A couple of options to control the style of the document are + provided. Two of them, \opt{leqno} and \opt{fleqn}, are mainly + provided for compatibility with the \pkg{article} class. + + \Option{leqno} + This option makes display math environments typeset their labels on + the left-hand side of the formula instead of the right-hand side. + + \Option{fleqn} + This option makes display math environments left-align the entire + formula as opposed to centering it. + + \Option{indent}\WithValues{true, false}\AndDefault{false} + The \opt{indent} option enables or disables the indentation of + paragraphs, with the default being not to indent anything. The + default behaviour thus is similar to that obtained using the + \pkg{parskip} package with the \pkg{article} package. + + \Option{titles}\WithValues{rm, it, bf, sf}\AndDefault{bf} + Section titles (and a few other elements) are controlled by this + option in that they are typeset either using the regular roman font, + the boldfaced roman font or the sans serif font. For historical + reasons the default is a boldfaced roman font, but the sans serif + option is very handsome. + + \Option{hanging-titles}\WithValues{true, false}\AndDefault{false} + This options allow sections to be set as \enquote{hanging} titles, + \emph{i.e.} with the section number in the margin. + + \Option{color}\WithValues{\meta{color theme}}\AndDefault{default} + This option tells the class to activate color theme support and + optionally load a color theme. Several color themes are available + (as detailed by \enquote{Color themes} \vpageref{ssec:color}), + and the special value \texttt{false} disables color support + entirely (which only means that the \pkg{xcolor} package isn't + loaded, and that \cs{colortheme} remains undefined). + + \subsubsection{Fonts} + Only two options control the font setup of the document class. The + class provides the same point sizes as \pkg{article}, but also + provides a large number of font stacks to choose from. + + \Option{ptsize}\WithValues{10pt, 11pt, 12pt}\AndDefault{11pt} + The document class provides the same three point sizes as the + \pkg{article} class. There is room for expansion, but there really + shouldn't be any reason to use other point sizes. + + \Option{font}\WithValues{none, kpfonts, lmodern, palatino, minion, skdoc, word}\AndDefault{kpfonts} + Several different font stacks, detailed by \vref{tab:font}, are + provided. Most of these work with \hologo{pdfLaTeX}, but there are + two special font stacks: \texttt{none} and \texttt{word}. The + former, predictably, loads no fonts whatsoever leaving the document + with Computer Modern fonts. This is useful if the fonts are replaced + later anyway, such as when using \hologo{XeLaTeX}. + + The \texttt{word} + font stack, however, does load a few fonts. The fonts must be present + and installed on the system as OTF or TTF fonts, and the font stack + requires either \hologo{XeLaTeX} or \hologo{LuaLaTeX}. + Both \texttt{word} and \texttt{none} load the \pkg{fontspec} + package, assuming the document is compiled using \hologo{XeLaTeX} + or \hologo{LuaLaTeX}. + + \Notice{The \texttt{skdoc} font stack doesn't have a math font.} + \Warning{Currently, \pkg{fontspec} is always loaded by + \hologo{XeLaTeX} regardless of options due to + the use of \pkg{polyglossia}. This means that + you \emph{have} to use OpenType fonts in your + document, otherwise \emph{only} Latin Modern + Roman (\emph{i.e.} no sans-serif or monospace + fonts) will be available. Therefore, the \texttt{word} + font stack is the default when using \hologo{XeLaTeX}. + \Hologo{LuaLaTeX} is not affected by this.} + + \begin{table}[tp] + \centering + \caption{Font stacks provided by \thepackage.} + \label{tab:font} + \NewCoffin\tempcoffin\newlength\templength + \SetHorizontalCoffin\tempcoffin{ + \begin{tabular}{lllll} + \toprule + Font stack & Serif font & Math font & Sans serif font & Monospace font \\ + \midrule + \texttt{kpfonts} & Kp-Fonts & Kp-Fonts & Kp-Fonts & Kp-Fonts \\ + \texttt{lmodern} & Latin Modern & Latin Modern & Latin Modern & Source Code Pro \\ + \texttt{palatino} & \TeX\ Gyre & PX & Arev & Source Code Pro \\ + \texttt{minion} & Minion Pro & Minion Pro & Myriad Pro & Source Code Pro \\ + \texttt{skdoc} & PT Serif & --- & Open Sans & Source Code Pro \\ + \texttt{word} & Cambria & Cambria Math & Calibri & Consolas \\ + \bottomrule + \end{tabular} + } + \setlength{\templength}{(\textwidth - \CoffinWidth\tempcoffin)/2} + \hspace*{\templength} + \TypesetCoffin\tempcoffin + \end{table} + + \subsubsection{Functionality} + The final three options affect functionality in one way or another. + Since \thepackage\ was originally designed for reports written in + either swedish or english, the class always loads either \pkg{babel} + or \pkg{polyglossia} with either of these languages. Additionally, + the class may load the \pkg{skmath} package if desirable. + + \Option{nomath}\WithValues{true, false}\AndDefault{false} + When \texttt{false}, the \pkg{skmath} package is loaded, providing + improvements to the math functionality of \pkg{amsmath} and friends. + + \Option{lang}\WithValues{en, sv, de}\AndDefault{sv} + This option specifies what main language \pkg{babel} or + \pkg{polyglossia} set up with. English (or swedish, for + \texttt{lang=en}) is loaded as well, for use in constructs + that allow for a second language. + + \Option{draft}\WithValues{true, false}\AndDefault{false} + The \opt{draft} option, much like in \pkg{article}, enables + \cs{overfullrule}s and possibly similar functionality in loaded + packages (if they react to the global \opt{draft} option). + + \subsection{User-level commands and environments} + The general idea behind the document class is to provide most + (if not all) of the macros provided by the standard \LaTeXe{} + classes, as well as additional macros to simplify and beautify + the documents produced. As such, most of the documentation that + follows details macros that are present in the standard document + classes. Some of them have changed functionality or semantics, + so at least a skim through this section is recommended. + + \subsubsection{The front page} + The front page is the part of the document that has seen the most + changes in \thepackage\ compared to \pkg{article}. In addition to + the new, Prac\TeX-inspired layout, there are a few additional + pieces of information in it. Also, the \cs{author} macro has been + dramatically improved. + + \DescribeMacro\date{<ISO8601 date>} + The \cs{date} macro now internally employs \pkg{isodate} to typeset + the date of the document. This means that the input must be either + the string \enquote{today}, the token \cs{today} or a date as defined + by ISO8601\footcite{ISO8601}. The mechanisms provided by + \pkg{isodate} can be used to affect the output format. + + \DescribeMacro\author[<email>]{<name>} + In contrast with the \pkg{article} package, the \cs{author} macro + should no longer be used to typeset several author names at once. + Instead, one \cs{author} command is to be issued for every author, + optionally providing a corresponding email. These are then combined, + in the order they are given, to form a list of authors and a + corresponding list of email adresses. + + \DescribeMacro\regarding{<topic>} + This macro defines a topic or other short message detailing the + purpose of the document. It is typeset along with the date in the + upper left corner of the title page. + + \DescribeMacro\license{<license name>} + The \cs{license} macro defines a short license name to be typeset + in the lower right corner of the title page. This mechanism could of + course be used to typeset an institution name or similar as well. + It is only typeset when also using the \env{titlepage} environment + described below. + + \DescribeMacro\title{<document title>} + The \cs{title} macro, while not defined by \pkg{skrapport}, is + relevant to describe. It simply sets the title of the document, as + displayed by \cs{maketitle}. + + \DescribeMacro\maketitle[hide=\{date,regarding,email\},nopdfinfo] + As in \pkg{article}, the \cs{maketitle} macro typesets the + information provided by \cs{title}, \cs{author} and friends to form + a stylish front page. When combined with \env{abstract}, + \env{titlepage} and/or \cs{tableofcontents}, you get a very + good-looking preamble with almost no effort. + + The optional argument is a key-value list with two valid entries, + \opt*{hide} and \opt*{nopdfinfo}. The \opt*{hide} entry accepts a + comma-separated list in which the values \opt*{date}, + \opt*{regarding} and \opt*{email} + are interpreted as instructions to hide the corresponding entry from + the front page. The \opt*{nopdfinfo} key disables the generation of + PDF information by \pkg{hyperref}. + + \DescribeEnv[<abstract text>]{abstract} + The \env{abstract} environment defines an abstract, which is typeset + in a block with the \cs{abstractname} word next to it (see + \emph{e.g.} the title page of this manual for an example). + + \DescribeEnv[<title page contents>]{titlepage} + Normally, \cs{maketitle} doesn't reserve its own page. By enclosing + \cs{maketitle} (and \env{abstract} if appropriate) in the + \env{titlepage} environment, the contents are typeset on their + own page, without page numbering and with the \cs{license} text + in the lower right corner (if applicable). + + \subsubsection{Sectioning} + \DescribeMacro\section*[<short title>]{<title>} + \DescribeMacro\subsection*[<short title>]{<title>} + \DescribeMacro\subsubsection*[<short title>]{<title>} + \DescribeMacro\paragraph*[<short title>]{<title>} + \DescribeMacro\subparagraph*[<short title>]{<title>} + The sectioning macros are superficially very similar to those + provided by \pkg{article}, but have been completely reimplemented + in \pkg{expl3} code. Additionally, the style of these sectioning + macros, as detailed by the \opt{titles} option documentation above, + can be changed. + + All of them have both arguments and behaviour in common, only + differing in style. The starred versions are unnumbered, but still + accept the opional short title (simply discarding it). The optional + short title is used in the table of contents. The + \texttt{secnumdepth} counter limits the depth of section numbering. + + The first three macros, being section titles, are typeset as actual + titles on their own line with appropriate spacing above and below. + The paragraph macros instead typeset run-in titles. + + \subsubsection{Macros and environments from \pkg{article}} + Aside from the \env{itemize} and \env{enumerate} envionments and the + font selection macros, which are carried without modification from + \LaTeXe, a couple of environments and macros are defined. + + The old font macros, whose use has been discouraged for a long time, + are now deprecated. Instead of functioning correctly, they will emit + an error and require user input. Use the \cs*{text??}/\cs*{??family} + macros instead. For emphasis, use the \cs{emph} macro. + + \DescribeMacro\emph{<text>} + Emphasized text will be typeset in italic, or bold italic if the + macro is used in a context where italic is already used (such as + inside another \cs{emph} invokation). + + \DescribeEnv[\cs*{item}\oarg{item} \meta{description}]{description} + The \env{description} environment behaves as expected, typesetting + a list of descriptions as in the \pkg{article} class. + + \DescribeEnv[<short quote>]{quote} + Intended for short quotes, the \env{quote} environment simply + typesets a centered block of italic text. + + \DescribeEnv[<long quote>]{quotation} + Longer quoted passages are typeset using the \env{quotation} + environment. This is simply a \env{quote} environment with additional + spacing above and below. + + \DescribeEnv[<pretentious poetry>]{verse} + The \env{verse} environment is intended for poetry and other text + where line breaks are critical. Use \verb|\\| to break + lines. + + \DescribeMacro\appendix + This macro signals the end of the main matter and the start of + the appendix. In essence, it resets the section numbering counter + and changes the section numbering to the upper-case alphabetic + sequence. + + \subsubsection{Floats} + Both the \env{figure} and \env{table} float environments accept an + optional positioning argument. The default positioning is + \texttt{tp}. Both environments also have starred variants, which + do nothing in one-column mode while typesetting the figure across + both columns in two-column mode. As usual, \cs{centering}, + \cs{caption} and \cs{label} should be used inside the floats. + + \DescribeEnv[<content>]{figure}[position] + This float environment is intended for figures. The most common + contents are \cs{includegraphics} statements or \env{tikzpicture} + environments. + + \DescribeEnv[<content>]{table}[position] + A float intended for tables. Probably contains \env{tabular}s. + + \DescribeEnv{figcenter} + This environment is useful for wide figures and tables. It typesets + its contents centered horizonally, but allows the content to extend + into the margin. The content is set in a horizontal coffin. + + \subsubsection{Table of contents} + \DescribeMacro\tableofcontents + The table of contents are typeset using this macro. The + \texttt{tocdepth} counter limits the depth of the table of + contents, but for stylistic reasons values higher than 3 are + unsupported. + +% \subsubsection{Basic bibliography support} + + \subsubsection{Miscellaneous} + \DescribeMacro\comment*{<comment>} + \DescribeMacro\note*{<comment>} + \DescribeMacro\com*{<comment>} + These macros, the two latter being aliases of the first one, typeset + an author's comment in the document. The starred variants typeset the + comment inline with a red background, while the unstarred variant + typesets the comment in a \cs{marginpar}. + + \DescribeMacro\eg + \DescribeMacro\ie + \DescribeMacro\etc + \DescribeMacro\cf + \DescribeMacro\viz + These macro print the abbreviation of the latin phrases + \emph{exempli gratia}, \emph{id est}, \emph{et cetera}, + \emph{confer} and \emph{videlicet}, respectively. + The macros peek ahead to find punctuation marks and spaces, so they + should behave correctly regardless of usage (assuming they're used in + running text and uncomplicated settings). In languages other than + english, appropriate translations are made if applicable. + + \DescribeMacro\dash + This macro prints an em-dash surrounded by thin spaces, as discussed + by \textcite[\pno~8]{Flynn}. When \cs*{DeclareUnicodeCharacter} is + available, the real em dash uses this definition. + + \subsubsection{Color theme support} + \DescribeMacro\colortheme{<theme>} + The \cs{colortheme} macro, which is only available when the + \opt{color} option is \texttt{true}, applies a color theme to + the document. For a list of available color themes, see + \enquote{Color themes} \vpageref{ssec:color}. + + \subsubsection{Font size macros} + The font size macros, expectedly, set the size of the text. They + do not take arguments, instead affecting all subsequent text of the + current \TeX\ group, so use braces to provide and limit context. + Also note that unlike \pkg{article}, these macros are \emph{all} + available, regardless of point size option. + + \DescribeMacro\tiny + Typesets {\tiny tiny} text. + \DescribeMacro\scriptsize + Typesets {\scriptsize script-size} text. + \DescribeMacro\footnotesize + Typesets {\footnotesize footnote-sized} text. + \DescribeMacro\small + Typesets {\small small} text. + \DescribeMacro\normalsize + Typesets normal text. + \DescribeMacro\large + Typesets {\large large} text. + \DescribeMacro\Large + Typesets {\Large slightly larger} text. + \DescribeMacro\LARGE + Typesets {\LARGE even larger} text. + \DescribeMacro\huge + Typesets {\huge huge} text. + \DescribeMacro\Huge + Typesets {\Huge really huge} text. + + \subsection{Color themes}\label{ssec:color} + \DescribeMacro\colortheme{<theme>} + If the package is loaded with the \opt{color} option, changing the color theme is + possible using \cs{colortheme}, which loads an + appropriate package. At the moment, four color themes are available. + + \Theme{default} + The \thm{default} theme is fairly conservative, only coloring + \pkg{hyperef} links with more readable, slightly darker colors than + the standard ones. It should print well even on non-color printers. + + \Theme{unscathed} + The \thm{unscathed} theme is based on a palette with the same + name on COLOURlovers% +\footnote{\url{http://www.colourlovers.com/palette/1440498/unscathed}}, + and applies a \textcolor[HTML]{463335}{dark brown} color to + emphasized text, a \textcolor[HTML]{CF5D3B}{rusty} color to links, + a \textcolor[HTML]{B34430}{darker rust} color to titles and a + \textcolor[HTML]{70524A}{lighter brown} to quotes. + + \Theme{cruelwater} + The \thm{cruelwater} theme is also based on a palette from + COLOURlovers% +\footnote{\url{http://www.colourlovers.com/palette/126030/Cruel_Water_at_Night}}, + and applies a \textcolor[HTML]{030C22}{dark blue} color to bold + text and captions, a \textcolor[HTML]{20293F}{slightly less dark + blue} to titles and emphasized text, a \textcolor[HTML]{A9B0B3}{ + light gray} color to small print and a \textcolor[HTML]{404749}{ + darker gray} to quotes. + + \Theme{violet} + The \thm{violet} theme, like \thm{unscathed} and \thm{cruelwater}, + is based on a COLOURlovers palette% +\footnote{\url{http://www.colourlovers.com/palette/1831303/Violet_White_Bedrm}}. + It colors all links \textcolor[HTML]{932444}{bright purple}, applies + a \textcolor[HTML]{311A2A}{dark puple} color to titles, bold text + and captions, a \textcolor[HTML]{D6CBCF}{grayish purple} to small + print, a \textcolor[HTML]{463335}{dark brown} color to quotes and a + \textcolor[HTML]{98758D}{pastel violet} color to emphasized text. + + \Theme{skdoc} + The \thm{skdoc} theme is loosely based on the \pkg{skdoc} document class, with which this documentation is typeset. + +% \subsection{Additional information} +% The document class includes a number of packages by default. This +% is useful to know, since passing explicit options to these packages +% will require you to utilize the \cs{PassOptionsToPackage} macro +% before you load the class using \cs{documentclass}. +% Table~\ref{tab:pkgs} lists the packages included by \thepkg\ along +% with their options (if applicable). +% +% \begin{table}[tbp] +% \centering +% \caption{User-level packages included by \thepkg.} +% \label{tab:pkgs} +% \begin{tabular}{llp{15em}} +% \toprule +% \textbf{Package} & \textbf{Options} & \textbf{Comments} \\ +% \midrule +% \pkg{amsmath} & \texttt{intlimits} & Provides \hologo{AmS} commands and environments. \\ +% \pkg{amssymb} & & Only if not using \opt{kpfonts}.\\ +% \pkg{babel} & see options \opt{swe} and \opt{eng} & Only loaded if \emph{not} using \hologo{XeTeX}.\\ +% \pkg{calc} & & \\ +% \pkg{fontenc} & \texttt{T1} & Only loaded if \emph{not} using \hologo{XeTeX}. Makes sure we are using a good font encoding for crisp appearance on-screen (OT1 is horrible). \\ +% \pkg{fontspec} & \texttt{quiet} & Only loaded if using \hologo{XeTeX}. Provides basic OTF font selection commands.\\ +% \pkg{geometry} & \texttt{a4paper} or \texttt{a5paper} & This is used by the \opt{paper} option to set the paper area. \\ +% \pkg{icomma} & & \\ +% \pkg{inconsolata} & & \\ +% \pkg{microtype} & & Provides micro-typographic improvements.\\ +% \pkg{multicol} & & Only loaded with the \opt{twocolumn} option. \\ +% \pkg{polyglossia} & see options \opt{swe} and \opt{eng} & Only loaded if using \hologo{XeTeX}.\\ +% \pkg{skmath} & & Only if it exists and \opt{nomath} isn't set.\\ +% \pkg{textcomp} & & Only if not using \opt{kpfonts}.\\ +% \pkg{xcolor} & & Only loaded with the \opt{color} option.\\ +% \bottomrule +% \end{tabular} +% \end{table} + + \section{Known issues}\label{sec:issues} + A list of current issues is available in the Github repository of this + package\footnote{\url{https://github.com/urdh/skrapport/issues}}, but as + of the release of \theversion, there is one known issue: + \begin{description} + % \item[\#6] ??? + \item[--] If a \cs{subsubsection} is the last item of the Table + of Contents, it will not be indented properly. + \end{description} + + If you discover any bugs in this package, please report them to the issue + tracker in the \thepackage\ Github repository. + + \Implementation\ExplHack + \section{Implementation} + Start by including \pkg{expl3}, \pkg{l3keys2e} and some other + useful packages, as well as declaring the class. +\begin{MacroCode}{class} +\RequirePackage{expl3,l3keys2e,xparse,xstring,etoolbox} +\ProvidesExplClass{skrapport}% + {2018/12/29}{0.12i}{stylish report document class} +\end{MacroCode} + + \subsection{Messages} + Tons of messages are declared for future use. +\begin{MacroCode}{class} +\msg_new:nnnn{skrapport}{option-deprecated}{Option~`#1'~deprecated!} + {Please~use~`#2'~instead.} +\msg_new:nnnn{skrapport}{option-no-effect}{Option~`#1'~deprecated!} + {It~has~no~effect;~simply~use~nothing~instead.} +\msg_new:nnnn{skrapport}{invalid-paper-size}{Invalid~paper~size~`#1'!} + {\token_to_str:N\__skrapport_setup_paper:n~was~invoked~with~an~ + invalid~argument;~paper~size~will~remain~unchanged.} +\msg_new:nnnn{skrapport}{invalid-point-size}{Invalid~point~size~`#1'!} + {\token_to_str:N\__skrapport_setup_ptsize:n~was~invoked~with~an~ + invalid~argument;~cannot~continue~without~setting~a~valid~point~ + size.~Please~fix~the~issue~before~typesetting~again.} +\msg_new:nnnn{skrapport}{invalid-titles}{Invalid~title~type~`#1'!} + {\token_to_str:N\__skrapport_setup_titles:n~was~invoked~with~an~ + invalid~argument;~falling~back~to~`#2'.} +\msg_new:nnnn{skrapport}{invalid-lang}{Invalid~language~`#1'!} + {\token_to_str:N\__skrapport_setup_lang:n~was~invoked~with~an~ + invalid~argument;~`babel'~and/or~`polyglossia'~will~remain~ + unloaded.} +\msg_new:nnnn{skrapport}{invalid-font}{Invalid~font~`#1'!} + {\token_to_str:N\__skrapport_setup_font:n~was~invoked~with~an~ + invalid~argument;~no~font~package~has~been~loaded.~This~may~result~ + in~bad~rendering~due~to~old~Computer~Modern~fonts.} +\msg_new:nnnn{skrapport}{noop-call}{No-op~invokation~of~macro!} + {\token_to_str:N#1~was~invoked,~but~circumstances~dictate~that~the~ + macro~should~do~nothing.~Will~do~\token_to_str:N\prg_do_nothing:~ + instead.} +\msg_new:nnnn{skrapport}{old-font-deprecated}{Deprecated~macro~\token_to_str:N#1!} + {The~old~font~macro~\token_to_str:N#1~is~deprecated!~Use~ + \token_to_str:N#2~instead.} +\msg_new:nnnn{skrapport}{color-patch-failed}{Could~not~patch~macro~\token_to_str:N#1!} + {The~macro~\token_to_str:N#1~could~not~be~patched!~Color~theme~ + support~may~be~incomplete.} +\msg_new:nnnn{skrapport}{license-not-printed}{Detected~\token_to_str:N\license\ but~no~`titlepage'!} + {The~text~provided~by~\token_to_str:N\license\ is~only~printed~when~ + the~`titlepage'~environment~is~used,~but~it~seems~to~be~missing.} +\msg_new:nnnn{skrapport}{font-requires-xetex}{The~`font=#1'~option~requires~XeTeX~or~luaTeX!} + {Please~choose~another~font~setup~or~compile~the~document~with~ + either~xelatex~or~lualatex.} +\msg_new:nnnn{skrapport}{tocdepth-too-deep}{TOC~depth~is~too~deep!} + {The~current~tocdepth,~#1,~is~not~supported.~Please~redefine~the~ + \token_to_str:N#2~macro~to~enable~support.} +\msg_new:nnnn{skrapport}{caption-in-figcenter}{Cannot~use~\token_to_str:N\caption\ here!} + {The~\token_to_str:N\caption\ macro~can't~be~used~inside~figcenter~environments!~Please~move~the~caption~to~the~enclosing~float~environment.} +\end{MacroCode} + This message should probably not be used at all. Except in + development versions straight off Github, of course. +\begin{MacroCode}{class} +\msg_new:nnn{skrapport}{not-implemented} + {Unimplemented~macro~\token_to_str:N#1!} +\end{MacroCode} + + \subsection{Options} + First, a few booleans used by parts of the option handling code. + \begin{macro}{\g__skrapport_draft_bool} + Are we in \opt{draft} mode? +\begin{MacroCode}{class} +\bool_new:N\g__skrapport_draft_bool +\end{MacroCode} + \end{macro} + \begin{macro}{\g__skrapport_color_bool} + Are we supposed to be using \opt{color}s? +\begin{MacroCode}{class} +\bool_new:N\g__skrapport_color_bool +\end{MacroCode} + \end{macro} + \begin{macro}{\g__skrapport_has_polyglossia_bool} + Has \pkg{polyglossia} been loaded? +\begin{MacroCode}{class} +\bool_new:N\g__skrapport_has_polyglossia_bool +\end{MacroCode} + \end{macro} + + \subsubsection{Option setup macros} + In this section, all options declared in the previous section are + implemented using setup macros. Some of these may have to be called + in an appropriate order, but I haven't checked that yet. + + \begin{macro}{\__skrapport_setup_paper:n}[1] + {Paper size (\texttt{a4} or \texttt{a5})} + \changes{0.12}{Use \pkg{typearea} to set paper size} + Note the extra integer, which is set up for use with \pkg{grid}. + \begin{macro*}{\g__skrapport_grid_lines_int} +\begin{MacroCode}{class} +\int_new:N\g__skrapport_grid_lines_int +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_setup_paper:n#1{ + \str_case:nnF{#1}{ +\end{MacroCode} + The two options simply consist of passing the appropriate option + to the \pkg{typearea} package. Note that the use of \pkg{typearea} + mean that we theoretically could accept more paper size options. +\begin{MacroCode}{class} + {a4}{ + \PassOptionsToPackage{paper=A4}{typearea} + \int_gset:Nn\g__skrapport_grid_lines_int{40} + } + {a5}{ + \PassOptionsToPackage{paper=A5}{typearea} + \int_gset:Nn\g__skrapport_grid_lines_int{28} + } + }{ +\end{MacroCode} + Invalid paper sizes (such calls should never happen) are + handled by issuing a warning and hoping that the default + paper size is acceptable. +\begin{MacroCode}{class} + \msg_warning:nnn{skrapport}{invalid-paper-size}{#1} + } +\end{MacroCode} + The \pkg{typearea} package is loaded with the options specified + earlier through \cs{PassOptionsToPackage}, and some additional ones. +\begin{MacroCode}{class} + \AtEndOfClass{\RequirePackage[DIV=calc]{typearea}} +\end{MacroCode} + In case the point size changes later, or two column mode is + activated, we recalculate the typearea just before the typesetting + begins. +\begin{MacroCode}{class} + \AtBeginDocument{\recalctypearea} +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_ptsize:n}[1] + {Point size (\texttt{10pt}, \texttt{11pt} or \texttt{12pt})} + The standard point sizes are defined much like in the \pkg{article} + class, \emph{i.e.} by saving a number and loading \file{size10.clo}, + \file{size11.clo} or \file{size12.clo} as appropriate +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_setup_ptsize:n#1{ + \str_case:nnF{#1}{ +\end{MacroCode} + \begin{macro*}{\c__skrapport_ptsize_token} +\begin{MacroCode}{class} + {10pt}{\int_const:Nn\c__skrapport_ptsize_int{0}} + {11pt}{\int_const:Nn\c__skrapport_ptsize_int{1}} + {12pt}{\int_const:Nn\c__skrapport_ptsize_int{2}} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} + }{ +\end{MacroCode} + Invalid point sizes are critical errors, since we can't recover + from them in any reasonable way. Loading a default point size is + unreasonable, since all in-class calls to this macro should know + what sizes are available, and if you're calling it with invalid + parameters from elsewhere, you should be punished. +\begin{MacroCode}{class} + \msg_critical:nnn{skrapport}{invalid-point-size}{#1} + } + \file_input:n{skrapport-size#1.clo} +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_twocolumn:} + \changes{0.12c}{Major changes to the sectioning commands, to + override what \pkg{grid} is doing} + Setting up for twocolumn mode is slightly compliacted. Note that this + macro should be called from \cs{AtEndOfClass} to ensure that we patch + everything correctly. Note also that \pkg{multicol} is always loaded + as it is used for the \env{theindex} environment. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_twocolumn:{ + \RequirePackage{etoolbox} + \AtBeginDocument{ + \KOMAoptions{twocolumn=false,DIV=12} + } +\end{MacroCode} + We include the \pkg{grid} package in two-column mode, because + it looks way better that way. +\begin{MacroCode}{class} + \int_set:Nn\l_tmpa_int{10+\c__skrapport_ptsize_int} + \int_set:Nn\l_tmpb_int{12*\l_tmpa_int/10} + \RequirePackage[fontsize=\l_tmpa_int pt, + baseline=\l_tmpb_int pt, + lines=\g__skrapport_grid_lines_int]{grid} +\end{MacroCode} + Now, we patch commands. First up is \env{abstract}. Save the old + one in case we need it (we do). +\begin{MacroCode}{class} + \cs_set_eq:Nc\__skrapport_onecol_abstract:{environment~abstract~code} + \cs_set_eq:Nc\__skrapport_end_onecol_abstract:{environment~abstract~end~aux~} + \pretocmd{\__skrapport_onecol_abstract:}{\null}{}{} + \RenewDocumentEnvironment{abstract}{}{\section*{\abstractname}}{} +\end{MacroCode} + Then \env{document} (kind of, at least) and \cs{maketitle}. Again, + save the old \cs{maketitle}. +\begin{MacroCode}{class} + \AfterEndPreamble{\begin{multicols}{2}} + \AtEndDocument{\end{multicols}} + \cs_set_eq:NN\__skrapport_onecol_maketitle:\maketitle + \pretocmd{\maketitle}{\begin{onecol}}{}{} + \apptocmd{\maketitle}{\end{onecol}}{}{} +\end{MacroCode} + Next up is \env{titlepage}. This is where we need the saved + \env{abstract} and \cs{maketitle}. +\begin{MacroCode}{class} + \BeforeBeginEnvironment{titlepage}{ + \begin{onecol} + \cs_set_eq:cN{environment~abstract~code}\__skrapport_onecol_abstract: + \cs_set_eq:cN{environment~abstract~end~aux~}\__skrapport_end_onecol_abstract: + \cs_set_eq:NN\maketitle\__skrapport_onecol_maketitle: + } + \AfterEndEnvironment{titlepage}{\end{onecol}} +\end{MacroCode} + Always typeset \env{equation} and friends outside the grid: +\begin{MacroCode}{class} + \BeforeBeginEnvironment{equation}{\begin{gridenv}} + \AfterEndEnvironment{equation}{\end{gridenv}} + \BeforeBeginEnvironment{equation*}{\begin{gridenv}} + \AfterEndEnvironment{equation*}{\end{gridenv}} + \BeforeBeginEnvironment{multline}{\begin{gridenv}} + \AfterEndEnvironment{multline}{\end{gridenv}} + \BeforeBeginEnvironment{multline*}{\begin{gridenv}} + \AfterEndEnvironment{multline*}{\end{gridenv}} + \BeforeBeginEnvironment{gather}{\begin{gridenv}} + \AfterEndEnvironment{gather}{\end{gridenv}} + \BeforeBeginEnvironment{gather*}{\begin{gridenv}} + \AfterEndEnvironment{gather*}{\end{gridenv}} + \BeforeBeginEnvironment{align}{\begin{gridenv}} + \AfterEndEnvironment{align}{\end{gridenv}} + \BeforeBeginEnvironment{align*}{\begin{gridenv}} + \AfterEndEnvironment{align*}{\end{gridenv}} + \BeforeBeginEnvironment{flalign}{\begin{gridenv}} + \AfterEndEnvironment{flalign}{\end{gridenv}} + \BeforeBeginEnvironment{flalign*}{\begin{gridenv}} + \AfterEndEnvironment{flalign*}{\end{gridenv}} + \BeforeBeginEnvironment{alignat}{\begin{gridenv}} + \AfterEndEnvironment{alignat}{\end{gridenv}} + \BeforeBeginEnvironment{alignat*}{\begin{gridenv}} + \AfterEndEnvironment{alignat*}{\end{gridenv}} +\end{MacroCode} + Since \pkg{grid} override the usual sectioning macros, we have to + provide fixed and improved variants that conform to our style + and out public API. This is only necessary for + the \enquote{major} sectioning macros, not \cs*{paragraph} and + \cs*{subparagraph}. + \begin{macro*}{\section} +\begin{MacroCode}{class} + \skip_gset:Nn\c__skrapport_section_pre_skip{-.999\baselineskip} + \skip_gset:Nn\c__skrapport_section_post_skip{0.001\baselineskip} + \dim_gset:Nn \c__skrapport_section_indent_dim{\c_zero_dim} + \cs_set_protected:Nn\__skrapport_section_style: + {\normalfont\__skrapport_title_style:} + \DeclareDocumentCommand\section{som}{ + \__skrapport_generic_section:nnnnn{section}{1}{##1}{##2}{##3} + } +\end{MacroCode} + \end{macro*} + \begin{macro*}{\subsection} +\begin{MacroCode}{class} + \skip_gset:Nn\c__skrapport_subsection_pre_skip{\baselineskip} + \skip_gset:Nn\c__skrapport_subsection_post_skip{-.35\baselineskip} + \dim_gset:Nn \c__skrapport_subsection_indent_dim{\c_zero_dim} + \cs_set_protected:Nn\__skrapport_subsection_style: + {\normalfont\__skrapport_title_style:\unskip} + \DeclareDocumentCommand\subsection{som}{ + \__skrapport_generic_section:nnnnn{subsection}{2}{##1}{##2}{##3} + } +\end{MacroCode} + \end{macro*} + \begin{macro*}{\subsubsection} +\begin{MacroCode}{class} + \skip_gset:Nn\c__skrapport_subsubsection_pre_skip{\baselineskip} + \skip_gset:Nn\c__skrapport_subsubsection_post_skip{-.35\baselineskip} + \dim_gset:Nn \c__skrapport_subsubsection_indent_dim{\c_zero_dim} + \cs_set_protected:Nn\__skrapport_subsubsection_style: + {\normalfont\itshape\__skrapport_title_style:\unskip} + \DeclareDocumentCommand\subsubsection{som}{ + \__skrapport_generic_section:nnnnn{subsubsection}{3}{##1}{##2}{##3} + } +\end{MacroCode} + \end{macro*} + We also redefine \cs{l@section} to make the TOC blend in a bit. + \begin{macro*}{\l@section} +\begin{MacroCode}{class} + \DeclareDocumentCommand\l@section{mm}{ + \group_begin: + \skip_vertical:n{.75ex} + \__skrapport_title_style: + \__skrapport_toc_line:nnnnn{1}{0em}{1.3em}{##1}{ + \__skrapport_title_style: ##2 + } + \group_end: + } +\end{MacroCode} + \end{macro*} + The \env{figure} environment is patched\ldots +\begin{MacroCode}{class} + \cs_new:Npn\__skrapport_xdblfloat:nn##1##2{\@xdblfloat{##1}[##2]} + \cs_generate_variant:Nn\__skrapport_xdblfloat:nn{nx} + \RenewDocumentEnvironment{figure}{o}{ + \begin{gridenv} + \vspace{\intextsep} + \begin{minipage}{\linewidth} + \cs_set:Npn\@captype{figure} + \centering + }{ + \end{minipage} + \vspace{\intextsep} + \end{gridenv} + } + \RenewDocumentEnvironment{figure*}{o}{ + \__skrapport_xdblfloat:nx{figure} + {\IfNoValueTF{##1}{tp}{##1}} + \dim_set_eq:NN\hsize\textwidth + \dim_set_eq:NN\linewidth\textwidth + \centering + }{ + \end@dblfloat + } +\end{MacroCode} + \ldots as is \env{table}. +\begin{MacroCode}{class} + \RenewDocumentEnvironment{table}{o}{% + \begin{gridenv} + \vspace{\intextsep} + \begin{minipage}{\linewidth} + \cs_set:Npn\@captype{table} + \cs_set_eq:NN\__skrapport_old_caption:\caption + \RenewDocumentCommand{\caption}{om}{% + \skip_set_eq:NN\l_tmpa_skip\abovecaptionskip + \skip_set_eq:NN\abovecaptionskip\belowcaptionskip + \skip_set_eq:NN\belowcaptionskip\l_tmpa_skip + \vspace{\abovecaptionskip} + \__skrapport_old_caption:[####1]{####2} + \vspace{\belowcaptionskip} + } + \centering + }{ + \end{minipage} + \vspace{\intextsep} + \end{gridenv} + } + \RenewDocumentEnvironment{table*}{o}{ + \__skrapport_xdblfloat:nx{table} + {\IfNoValueTF{##1}{tp}{##1}} + \dim_set_eq:NN\hsize\textwidth + \dim_set_eq:NN\linewidth\textwidth + \centering + }{ + \end@dblfloat + } +\end{MacroCode} + \begin{environment}{onecol} + \changes{0.10}{Fixed, now not completely broken} + \changes{0.12b}{Reverted to \cs{newenvironment}, because \pkg{xparse} breaks the trickery} + Finally, we define an environment \env{onecol} that typesets + arbitrary material in a single column. This is a bit tricky to + do, and probably cargo-cult as well. We define the start of the + environment to immediately end itself (with the empty ending), + then end the \env{multiols} environment, redefine our end macro + to start \env{multicols} as well as redefining the start of + \env{onecol} to simply reset itself, then start the environment + again only to have it ended at once. + + Basically, we trick \LaTeX\ into thinking that we have an empty + \env{onecol} environment at the end of the first \env{multicols}, + then some content inside a fake \env{onecol}, then an empty + \env{onecol} at the start of the next \env{multicols}. Voilá, no + wierd group errors! +\begin{MacroCode}{class} + \newenvironment{onecol}{ + \end{onecol} + \end{multicols} + \group_begin: + \cs_set:Npn\endonecol{ + \group_end: + \begin{multicols}{2} + \cs_set_eq:NN\__skrapport_old_onecol:\onecol + \cs_set:Npn\onecol{ + \cs_set_eq:NN\onecol\__skrapport_old_onecol: + } + \begin{onecol} + } + \cs_set:Npn\onecol{} + \begin{onecol} + }{} +\end{MacroCode} + \end{environment} +\begin{MacroCode}{class} +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_leqno:} + Instead of loading \file{leqno.clo}, we reimplement the (tiny) file + as LaTeX3 code and include it directly. It's not terribly advanced. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_leqno:{ + \RenewDocumentCommand\@eqnnum{}{ + \hbox_to_wd:nn{.01pt}{} + \hbox_overlap_right:n{ + \normalfont\normalcolor + \skip_horizontal:n{-\displaywidth} + (\theequation) + } + } +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_fleqn:} + The \file{fleqn.clo} functionality is more complex, so we include + the file instead of reimplementing. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_fleqn:{ + \file_input:n{fleqn.clo} +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_titles:n}[1] + {Title style (\texttt{rm}, \texttt{it}, + \texttt{bf} or \texttt{sf})} + The title styles are implemented by creating a new macro + \cs{__skrapport_title_style:} which will later be used by + \cs{section} and friends. +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_setup_titles:n#1{ + \str_case:nnF{#1}{ +\end{MacroCode} + \begin{macro*}{\__skrapport_title_style:} + \changes{0.11a}{Removed incorrect \cs{bfseries}, replaced + \cs{relax} with \cs{rmfamily}} + \changes{0.12d}{Added \texttt{it} option} +\begin{MacroCode}{class} + {rm}{\cs_new_protected:Nn\__skrapport_title_style:{\rmfamily}} + {it}{\cs_new_protected:Nn\__skrapport_title_style:{\itshape}} + {bf}{\cs_new_protected:Nn\__skrapport_title_style:{\bfseries}} + {sf}{\cs_new_protected:Nn\__skrapport_title_style:{\sffamily}} +\end{MacroCode} + \end{macro*} + The fall-back for incorrect parameters is an informational message + along with setting up for \cs{rmfamily} titles. +\begin{MacroCode}{class} + }{ + \msg_info:nnnn{skrapport}{invalid-titles}{#1}{rm} + \__skrapport_setup_titles:n{rm} + } +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_lang:n}[1] + {Language (\texttt{sv}, \texttt{en} or \texttt{de})} + \changes{0.12d}{Use \pkg{babel} mechanisms for language-dependent + strings, so they work correctly in \env{otherlanguage}} + Thus far only two language options are implemented, each of them + setting the other as the \enquote{other} language. We check if + \pkg{polyglossia} has been loaded (this is done by + \cs{__skrapport_setup_xelatex:}): if it has, we use the + \pkg{polyglossia} interface for setting languages, otherwise we + load the \pkg{babel} package with appropriate options. +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_setup_lang:n#1{ + \str_case:nnF{#1}{ + {sv}{ + \bool_if:NTF\g__skrapport_has_polyglossia_bool{ + \setmainlanguage{swedish} + \setotherlanguage[variant=british]{english} + }{ + \RequirePackage[british,swedish]{babel} + } +\end{MacroCode} + \begin{macro*}{\__skrapport_RFC_language:} +\begin{MacroCode}{class} + \cs_gset:Nn\__skrapport_RFC_language:{swe} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} + \PassOptionsToPackage{iso,swedish}{isodate} + } + {en}{ + \bool_if:NTF\g__skrapport_has_polyglossia_bool{ + \setmainlanguage[variant=british]{english} + \setotherlanguage{swedish} + }{ + \RequirePackage[swedish,british]{babel} + } +\end{MacroCode} + \begin{macro*}{\__skrapport_RFC_language:} +\begin{MacroCode}{class} + \cs_gset:Nn\__skrapport_RFC_language:{eng} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} + \PassOptionsToPackage{iso,british}{isodate} + } + {de}{ + \bool_if:NTF\g__skrapport_has_polyglossia_bool{ + \setmainlanguage{ngerman} + \setotherlanguage[variant=british]{english} + }{ + \RequirePackage[british,ngerman]{babel} + } +\end{MacroCode} + \begin{macro*}{\__skrapport_RFC_language:} +\begin{MacroCode}{class} + \cs_gset:Nn\__skrapport_RFC_language:{ger} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} + \PassOptionsToPackage{iso,ngerman}{isodate} + } + }{ +\end{MacroCode} + Fallback prints an informational message and leaves both \pkg{babel} + and \pkg{polyglossia} unloaded. +\begin{MacroCode}{class} + \msg_info:nnn{skrapport}{invalid-lang}{#1} + } +\end{MacroCode} + After loading \pkg{babel} or \pkg{polyglossia}, we provide + translation strings. This is done using the \cs*{addto} and + \cs*{captions<lang>}, which is compatible with both packages. + \begin{macro*}{\captionsswedish} + \changes{0.12e}{Don't redefine standard language strings} + \begin{macro*}{\dateswedish} +\begin{MacroCode}{class} + \addto\captionsswedish{ + \cs_gset:Nn\__skrapport_and_word:{och} + \cs_gset:Nn\__skrapport_Email_word:{E-post} + \cs_gset:Nn\__skrapport_Comment_word:{Kommentar} + \cs_gset:Nn\__skrapport_eg_word:{t.ex.} + \cs_gset:Nn\__skrapport_ie_word:{dvs.} + \cs_gset:Nn\__skrapport_etc_word:{\emph{etc.}} + \cs_gset:Nn\__skrapport_cf_word:{jfr.} + \cs_gset:Nn\__skrapport_viz_word:{dvs.} + } + \cs_gset:Npn\dateswedish{ + \cs_gset:Npn\today + {\int_use:N\year--\int_use:N\month--\int_use:N\day} + } +\end{MacroCode} + \end{macro*} + \end{macro*} + \begin{macro*}{\captionsbritish} + \changes{0.12e}{Don't redefine standard language strings} + \begin{macro*}{\datebritish} +\begin{MacroCode}{class} + \addto\captionsbritish{ + \cs_gset:Nn\__skrapport_and_word:{and} + \cs_gset:Nn\__skrapport_Email_word:{Email} + \cs_gset:Nn\__skrapport_Comment_word:{Comment} + \cs_gset:Nn\__skrapport_eg_word:{\emph{e.g.}} + \cs_gset:Nn\__skrapport_ie_word:{\emph{i.e.}} + \cs_gset:Nn\__skrapport_etc_word:{\emph{etc.}} + \cs_gset:Nn\__skrapport_cf_word:{\emph{cf.}} + \cs_gset:Nn\__skrapport_viz_word:{\emph{viz.}} + } + \cs_gset:Npn\datebritish{ + \cs_gset:Npn\today + {\int_use:N\year--\int_use:N\month--\int_use:N\day} + } +\end{MacroCode} + \end{macro*} + \end{macro*} + \begin{macro*}{\captionsngerman} + \changes{0.12e}{Don't redefine standard language strings} + \begin{macro*}{\datengerman} +\begin{MacroCode}{class} + \addto\captionsngerman{ + \cs_gset:Nn\__skrapport_and_word:{und} + \cs_gset:Nn\__skrapport_Email_word:{E-Mail} + \cs_gset:Nn\__skrapport_Comment_word:{Kommentar} + \cs_gset:Nn\__skrapport_eg_word:{z.~B.} + \cs_gset:Nn\__skrapport_ie_word:{d.~h.} + \cs_gset:Nn\__skrapport_etc_word:{usw.} + \cs_gset:Nn\__skrapport_cf_word:{vgl.} + \cs_gset:Nn\__skrapport_viz_word:{\emph{viz.}} + } + \cs_gset:Npn\datengerman{ + \cs_gset:Npn\today + {\int_use:N\day.\,\int_use:N\month.\,\int_use:N\year} + } +\end{MacroCode} + \end{macro*} + \end{macro*} +\begin{MacroCode}{class} +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_font:n}[1] + {Font (\texttt{none}, \texttt{kpfonts}, \texttt{lmodern}, + \texttt{palatino}, \texttt{minion} or \texttt{skdoc})} + \changes{0.12a}{Drop the post-\pkg{amsmath} hook entirely. + Load \pkg{fontspec} in \texttt{word} and + \texttt{none}} + We set up the somewhat involved font stack. +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_setup_font:n#1{ + \PassOptionsToPackage{intlimits}{amsmath} + \PassOptionsToPackage{full}{textcomp} + \str_case:nnF{#1}{ +\end{MacroCode} + The \texttt{none} font stack is special. If we're using + \hologo{XeTeX} or \hologo{LuaTeX}, we load the \pkg{fontspec} + package. Otherwise, we do nothing. +\begin{MacroCode}{class} + {none}{ + \bool_if:nT{\sys_if_engine_luatex_p: || \sys_if_engine_xetex_p:}{ + \RequirePackage[quiet]{fontspec} + } + } +\end{MacroCode} + The \texttt{kpfonts} font stack simply loads \pkg{kpfonts}... +\begin{MacroCode}{class} + {kpfonts}{ + \RequirePackage[easyscsl,intlimits,sumlimits]{kpfonts} + } +\end{MacroCode} + ...and the \texttt{lmodern} font stack loads \pkg{lmodern}. +\begin{MacroCode}{class} + {lmodern}{ + \RequirePackage{lmodern} + } +\end{MacroCode} + The \texttt{palatino} font stack loads \pkg{tgpagella} if available, + but falls back to \pkg{mathpazo} otherwise. +\begin{MacroCode}{class} + {palatino}{ + \file_if_exist:nTF{tgpagella.sty}{ + \RequirePackage{arev} + \RequirePackage{pxfonts} + \RequirePackage{tgpagella} + }{ + \RequirePackage[osf]{mathpazo} + } + } +\end{MacroCode} + Minion Pro, provided by the \texttt{minion} font stack, loads both + \pkg{minionpro} (the font) and \pkg{MnSymbol} (appropriate math + symbols). +\begin{MacroCode}{class} + {minion}{ + \AtEndOfClass{ + \cs_set_eq:NN\__skrapport_old_vec:\vec + \cs_undefine:N\vec + \RequirePackage{MyriadPro} + \RequirePackage{MinionPro} + \RequirePackage{MnSymbol} + \cs_set_eq:NN\vec\__skrapport_old_vec: + } + } +\end{MacroCode} + Finally, the \texttt{skdoc} font stack loads \pkg{PTSerif} and + \pkg{opensans}, inspired by the style of the \pkg{skdoc} class. +\begin{MacroCode}{class} + {skdoc}{ + \RequirePackage{PTSerif} + \RequirePackage[defaultsans,osfigures,scale=0.95]{opensans} + } +\end{MacroCode} + The \texttt{word} font stack mimics recent versions of Microsoft + Word, using Cambria, Consolas and Calibri. This requires a modern + engine that supports \pkg{fontspec}. +\begin{MacroCode}{class} + {word}{ + \bool_if:nF{\sys_if_engine_luatex_p: || \sys_if_engine_xetex_p:}{ + \msg_fatal:nnn{skrapport}{font-requires-xetex}{word} + } + \RequirePackage[quiet]{fontspec} + \setmainfont[Ligatures=TeX]{Cambria} + \setsansfont[Ligatures=TeX]{Calibri} + \setmonofont[Scale=0.95]{Consolas} + \apptocmd{\__skrapport_after_ams_hook:}{ + \setmathfont{Cambria Math} + }{}{} + } + }{ +\end{MacroCode} + As a fallback, we print a waning and load no font packages. +\begin{MacroCode}{class} + \msg_warning:nnn{skrapport}{invalid-font}{#1} + } + \str_if_eq:nnF{#1}{none}{ +\end{MacroCode} + All font stacks except \texttt{none} and \texttt{kpfonts} require + additional packages. Or, rather, \texttt{none} can't load these + packages by definition, and \texttt{kpfonts} already loads them + internally \footcite[p.~1]{kpfonts}. They are always useful. + + We also load \pkg{sourcecodepro} as our monospace font. + But we don't load it when using the \texttt{none} font stack. +\begin{MacroCode}{class} + \str_if_eq:nnF{#1}{kpfonts}{ + \str_if_eq:nnF{#1}{word}{ + \RequirePackage{sourcecodepro} + } + \AtEndOfClass{ + \RequirePackage{amsmath} +\end{MacroCode} + The \pkg{mnsymbol} package is incompatible with \pkg{amssymb}. +\begin{MacroCode}{class} + \str_if_eq:nnF{#1}{minion}{ + \RequirePackage{amssymb} + } + \RequirePackage{textcomp} + } + } + } +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_parskip:} + \changes{0.12a}{Fixed bug where font size reset the \cs{parindent}} + This part mixes \LaTeXe\ and \LaTeX3, which may not be a good thing. + On the other hand, it seems hard to avoid. Most of the code is + half-lifted from \pkg{parskip} and converted to \LaTeX3. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_parskip:{ + \AtEndOfClass{ + \skip_gset:Nn\parskip{0.5\baselineskip~plus~2pt} + \dim_gzero:N\parindent + \skip_gset:Nn\parfillskip{30pt~plus~1fil} +\end{MacroCode} + \begin{macro*}{\@listI} + \begin{macro*}{\@listi} +\begin{MacroCode}{class} + \cs_gset:Npn\@listI{ + \dim_set_eq:NN\leftmargin\leftmargini + \dim_set_eq:NN\parsep\parskip + \dim_zero:N\topsep + \dim_zero:N\itemsep + } + \cs_gset_eq:NN\@listi\@listI +\end{MacroCode} + \end{macro*} + \end{macro*} +\begin{MacroCode}{class} + \dim_gset_eq:NN\leftmargin\leftmargini + \dim_gset_eq:NN\parsep\parskip + \dim_gzero:N\topsep + \dim_gzero:N\itemsep +\end{MacroCode} + \begin{macro*}{\@listii} +\begin{MacroCode}{class} + \cs_gset:Npn\@listii{ + \dim_set_eq:NN\leftmargin\leftmarginii + \dim_set_eq:NN\labelwidth\leftmarginii + \dim_set_eq:NN\parsep\parskip + \dim_sub:Nn\labelwidth{-\labelsep} + \dim_zero:N\topsep + \dim_zero:N\itemsep + } +\end{MacroCode} + \end{macro*} + \begin{macro*}{\@listiii} +\begin{MacroCode}{class} + \cs_gset:Npn\@listiii{ + \dim_set_eq:NN\leftmargin\leftmarginiii + \dim_set_eq:NN\labelwidth\leftmarginiii + \dim_set_eq:NN\parsep\parskip + \dim_sub:Nn\labelwidth{-\labelsep} + \dim_zero:N\topsep + \dim_zero:N\itemsep + } +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} + \dim_gzero:N\partopsep +\end{MacroCode} + \begin{macro*}{\@starttoc}[1] + {Table of contents extension} + \changes{0.12h}{Replaced use of deprecated \cs{c_job_name_tl} + with \cs{c_sys_jobname_str}} +\begin{MacroCode}{class} + \RenewDocumentCommand\@starttoc{m}{ + \group_begin: + \dim_zero:N\parskip + \file_if_exist:nT{\c_sys_jobname_str.##1}{ + \file_input:n{\c_sys_jobname_str.##1} + } + \if@filesw + \iow_new:c{tf@##1} + \iow_open:cn{tf@##1}{\c_sys_jobname_str.##1} + \fi + \@nobreakfalse + \group_end: + } +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} + } +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_math:} + This is the simplest option, only loading \pkg{skmath} if it exists. + Also the post-skmath hook is run. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_math:{ + \file_if_exist:nT{skmath.sty}{\RequirePackage{skmath}} +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_draft:} + Setting up the \opt{draft} mode is also fairly easy, as we only need + wider (wider than \SI{0}{\point}, that is) \cs{overfullrule}s. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_draft:{ + \bool_if:NTF\g__skrapport_draft_bool{ + \dim_gset:Nn\overfullrule{5pt} + }{ + \msg_log:nnn{skrapport}{noop-call}{\__skrapport_setup_draft:} + \prg_do_nothing: + } +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_color:} + Setting up colors is also fairly easy, as we only have to load the + \pkg{xcolor} package. All the other color-related code is in other + places, utilizing the \cs{g__skdoc_color_bool} boolean. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_color:{ + \bool_if:NTF\g__skrapport_color_bool{ + \RequirePackage{xcolor} + \PassOptionsToPackage{ + labelfont+={bf,color=skrapport@captioncolor} + }{caption} + }{ + \msg_log:nnn{skrapport}{noop-call}{\__skrapport_setup_color:} + \prg_do_nothing: + } +} +\end{MacroCode} + \end{macro} + \begin{macro}{\__skrapport_setup_color:n} + We may also set up a specific color theme using options. This is + easily done by first calling \cs{__skrapport_setup_color:}, then + calling \cs{colortheme} at \cs{BeginDocument}. +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_setup_color:n#1{ + \__skrapport_setup_color: + \bool_if:NTF\g__skrapport_color_bool{ + \AtBeginDocument{\colortheme{#1}} + }{ + \msg_log:nnn{skrapport}{noop-call}{\__skrapport_setup_color:n} + \prg_do_nothing: + } +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_xelatex:} + \changes{0.12a}{Don't load \pkg{polyglossia} for \hologo{LuaTeX}. + Don't load \pkg{fontspec} for any engine} + \changes{0.12d}{Force \texttt{quiet} option for \pkg{fontspec}} + This macro contains special setup code for the \hologo{XeTeX} and + \hologo{LuaTeX} engines, such as providing + missing commands (which have been replaced by equivalent Unicode + characters, apparently) and loading \pkg{polyglossia}. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_xelatex:{ + \AtEndOfClass{ + \cs_undefine:N\dblcolon + \cs_undefine:N\coloneqq + \cs_undefine:N\Coloneqq + \cs_undefine:N\eqqcolon + \RequirePackage{unicode-math} + \unimathsetup { + math-style = ISO, + bold-style = ISO, + sans-style = italic, + nabla = upright, + partial = italic, + vargreek-shape = unicode + } + } +\end{MacroCode} + \begin{macro}{\nobreakspace} +\begin{MacroCode}{class} + \DeclareDocumentCommand\nobreakspace{}{\leavevmode\nobreak\space} +\end{MacroCode} + \end{macro} + Since apparently \hologo{LuaLaTeX} isn't supported by + \pkg{polyglossia}, we fall back to \pkg{babel} in that engine. + Thus, only load \pkg{polyglossia} for \hologo{XeLaTeX}. +\begin{MacroCode}{class} + \sys_if_engine_xetex:TF{ + \PassOptionsToPackage{quiet}{fontspec} + \RequirePackage{polyglossia} + \bool_gset_true:N\g__skrapport_has_polyglossia_bool + }{ + \bool_gset_false:N\g__skrapport_has_polyglossia_bool + } +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_pdftex:} + \changes{0.12d}{Load \pkg{isomath}} + This macro contains special setup code for the \hologo{pdfTeX} + engine. Currently, it only sets the font encoding to T1. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_pdftex:{ + \RequirePackage[T1]{fontenc} + \AtEndOfClass{ + \RequirePackage{isomath} + } + \bool_gset_false:N\g__skrapport_has_polyglossia_bool +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\__skrapport_setup_engine_specific:} + This macro detects the current engine and calls the appropriate + engine setup macro. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_engine_specific:{ + \bool_if:nTF{\sys_if_engine_luatex_p: || \sys_if_engine_xetex_p:}{ + \__skrapport_setup_xelatex: + }{ + \__skrapport_setup_pdftex: + } +} +\end{MacroCode} + \end{macro} + + \paragraph{Variants with expandable arguments} + Some option setup macros accept arguments, but those arguments are + not expanded. Here, we provide variants which expand the parameters + properly using the excellent \pkg{l3prg} functionality. + \begin{macro}{\__skrapport_setup_ptsize:x} +\begin{MacroCode}{class} +\cs_generate_variant:Nn\__skrapport_setup_ptsize:n{ x } +\end{MacroCode} + \end{macro} + \begin{macro}{\__skrapport_setup_titles:x} +\begin{MacroCode}{class} +\cs_generate_variant:Nn\__skrapport_setup_titles:n{ x } +\end{MacroCode} + \end{macro} + \begin{macro}{\__skrapport_setup_lang:x} +\begin{MacroCode}{class} +\cs_generate_variant:Nn\__skrapport_setup_lang:n{ x } +\end{MacroCode} + \end{macro} + \begin{macro}{\__skrapport_setup_font:x} +\begin{MacroCode}{class} +\cs_generate_variant:Nn\__skrapport_setup_font:n{ x } +\end{MacroCode} + \end{macro} + + \subsubsection{Key-value system} + Let's define some \pkg{l3keys} corresponding to the options. Note + that most of them just refer to a macro in their \texttt{.code:n} + block --- these macros were defined earlier. +\begin{MacroCode}{class} +\keys_define:nn{skrapport}{ +\end{MacroCode} + \begin{option}{paper}{a4paper, a5paper, a4, a5} + \changes{0.12}{Values \texttt{a4paper} and \texttt{a5paper} are + now deprecated} + \begin{option}{a4paper} + \changes{0.12}{Option is now deprecated} + \begin{option}{a5paper} + \changes{0.12}{Option is now deprecated} + Declare the paper size options. Note that having to handle the + deprecated \texttt{a4paper} and \texttt{a5paper} values of the + \opt{paper} option makes the code less readable. In a few + versions, when these options are removed, the code should probably + be refactored to look something like the \opt{ptsize} option below. +\begin{MacroCode}{class} + paper .choice:, + paper / a4 .code:n = + {\__skrapport_setup_paper:n{a4}}, + paper / a5 .code:n = + {\__skrapport_setup_paper:n{a5}}, + paper / a4paper .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {paper=a4paper}{paper=a4} + \keys_set:nn{skrapport}{paper=a4}}, + paper / a5paper .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {paper=a5paper}{paper=a5} + \keys_set:nn{skrapport}{paper=a4}}, + paper .value_required:n = true, + a4paper .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {a4paper}{paper=a4} + \keys_set:nn{skrapport}{paper=a4}}, + a5paper .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {a5paper}{paper=a5} + \keys_set:nn{skrapport}{paper=a5}}, +\end{MacroCode} + \end{option} + \end{option} + \end{option} + + \begin{option}{ptsize}{10pt, 11pt, 12pt} + \begin{option}{10pt} + \begin{option}{11pt} + \begin{option}{12pt} + Declare point size options. Note that we don't deprecate the + non-\opt{ptsize} aliases as they are much easier to type. +\begin{MacroCode}{class} + ptsize .choices:nn = + { 10pt, 11pt, 12pt } + {\__skrapport_setup_ptsize:x{\tl_use:N\l_keys_choice_tl}}, + ptsize .value_required:n = true, + 10pt .meta:n = {ptsize=10pt}, + 11pt .meta:n = {ptsize=11pt}, + 12pt .meta:n = {ptsize=12pt}, +\end{MacroCode} + \end{option} + \end{option} + \end{option} + \end{option} + + \begin{option}{twocolumn} + \changes{0.08}{Added option \opt{twocolumn}} + \changes{0.12a}{Use \cs{AtEndOfClass} instead of \cs{AtEndClass}} + Declare column options. The code here should be run through + \cs{AtEndOfClass} so that the setup code can patch everythin + properly. + \begin{option}{onecolumn} + \changes{0.12}{Option is now deprecated} + The \opt{onecolumn} option has no effect and is deprecated. +\begin{MacroCode}{class} + twocolumn .code:n = + {\AtEndOfClass{\__skrapport_setup_twocolumn:}}, + onecolumn .code:n = + {\msg_warning:nnn{skrapport}{option-no-effect}{onecolumn}}, +\end{MacroCode} + \end{option} + \end{option} + + \begin{option}{draft}{true, false} + \begin{option}{final} + Declare \opt{draft} and \opt{final} options. Note that even if the + \opt{final} option does absolutely nothing, users may expect it to + be there and as such it is not deprecated. +\begin{MacroCode}{class} + draft .choice:, + draft / true .code:n = + {\bool_gset_true:N\g__skrapport_draft_bool + \__skrapport_setup_draft:}, + draft / false .code:n = + {\bool_gset_false:N\g__skrapport_draft_bool}, + draft .default:n = true, + final .code:n = {\prg_do_nothing:}, +\end{MacroCode} + \end{option} + \end{option} + + Declare the \opt{fleqn} and \opt{leqno} options, mainly for + compatibility with the \pkg{article} class. + \begin{option}{leqno} +\begin{MacroCode}{class} + leqno .code:n = + {\__skrapport_setup_leqno:}, +\end{MacroCode} + \end{option} + \begin{option}{fleqn} +\begin{MacroCode}{class} + fleqn .code:n = + {\__skrapport_setup_fleqn:}, +\end{MacroCode} + \end{option} + + \begin{option}{titles}{rm, it, bf, sf} + Declare options for section titles. The old \opt*{??titles} aliases + are deprecated and will be removed in a future version. + \begin{option}{rmtitles} + \changes{0.12}{Option is now deprecated} + \begin{option}{bftitles} + \changes{0.12}{Option is now deprecated} + \begin{option}{sftitles} + \changes{0.09}{Added \opt{sftitles} option} + \changes{0.12}{Option is now deprecated} +\begin{MacroCode}{class} + titles .choices:nn = + { rm, it, bf, sf } + {\__skrapport_setup_titles:x{\tl_use:N\l_keys_choice_tl}}, + titles .value_required:n = true, + rmtitles .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {rmtitles}{titles=rm} + \keys_set:nn{skrapport}{titles=rm}}, + bftitles .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {bftitles}{titles=bf} + \keys_set:nn{skrapport}{titles=bf}}, + sftitles .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {sftitles}{titles=sf} + \keys_set:nn{skrapport}{titles=sf}}, +\end{MacroCode} + \end{option} + \end{option} + \end{option} + \end{option} + + \begin{option}{hanging-titles}{true, false} + \changes{0.12d}{Added option to enable \enquote{hanging} titles} +\begin{MacroCode}{class} + hanging-titles .bool_gset:N = \g__skrapport_hanging_titles_bool, + hanging-titles .default:n = true, + hanging-titles .initial:n = false, +\end{MacroCode} + \end{option} + + \begin{option}{lang}{sv, en, de} + \changes{0.12c}{Added option value \texttt{de}} + \changes{0.12}{Incompatible change: values \texttt{swe} and + \texttt{eng} are now \texttt{sv} and \texttt{en}, + respectively} + \begin{option}{swe} + \changes{0.12}{Option is now deprecated} + \begin{option}{eng} + \changes{0.12}{Option is now deprecated} + Declare options for swedish/english \pkg{babel} or + \pkg{polyglossia} support. Again, the old \opt{swe} and \opt{eng} + aliases are deprecated and will be removed. +\begin{MacroCode}{class} + lang .choices:nn = + { sv, en, de } + {\__skrapport_setup_lang:x{\tl_use:N\l_keys_choice_tl}}, + lang .value_required:n = true, + swe .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {swe}{lang=sv} + \keys_set:nn{skrapport}{lang=sv}}, + eng .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {eng}{lang=en} + \keys_set:nn{skrapport}{lang=en}}, +\end{MacroCode} + \end{option} + \end{option} + \end{option} + + \begin{option}{font}{none, kpfonts, lmodern, palatino, minion, skdoc} + Declare font options. Again, aliases are deprecated. + \begin{option}{kpfonts} + \changes{0.07}{Added option \opt{kpfonts}, set as default + option for fonts} + \changes{0.12}{Option is now deprecated} + \begin{option}{lmodern} + \changes{0.12}{Option is now deprecated} + \begin{option}{palatino} + \changes{0.12}{Option is now deprecated} + \begin{option}{minion} + \changes{0.11}{Added option \opt{minion}} + \changes{0.12}{Option is now deprecated} + \begin{option}{skdoc} + \changes{0.11a}{Added option \opt{skdoc}} + \changes{0.12}{Option is now deprecated} + \begin{option}{nofont} + \changes{0.12}{Option is now deprecated} +\begin{MacroCode}{class} + font .choices:nn = + { none, kpfonts, lmodern, palatino, minion, skdoc, word } + {\__skrapport_setup_font:x{\tl_use:N\l_keys_choice_tl}}, + font .value_required:n = true, + nofont .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {nofont}{font=none} + \keys_set:nn{skrapport}{font=none}}, + kpfonts .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {kpfonts}{font=kpfonts} + \keys_set:nn{skrapport}{font=kpfonts}}, + lmodern .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {lmodern}{font=lmodern} + \keys_set:nn{skrapport}{font=lmodern}}, + palatino .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {palatino}{font=palatino} + \keys_set:nn{skrapport}{font=palatino}}, + minion .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {minion}{font=minion} + \keys_set:nn{skrapport}{font=minion}}, + skdoc .code:n = + {\msg_warning:nnnn{skrapport}{option-deprecated} + {skdoc}{font=skdoc} + \keys_set:nn{skrapport}{font=skdoc}}, +\end{MacroCode} + \end{option} + \end{option} + \end{option} + \end{option} + \end{option} + \end{option} + \end{option} + + \begin{option}{indent}{true, false} + \changes{0.02}{Added option of indented paragraphs} + \begin{option}{noindent} + \changes{0.12}{Option is now deprecated} + Declare indentation options. Since the \opt{noindent} option + technically has no effect and is an alias of \opt{indent=false}, + it has been deprecated. +\begin{MacroCode}{class} + indent .choice:, + indent / true .code:n = {\prg_do_nothing:}, + indent / false .code:n = {\__skrapport_setup_parskip:}, + indent .default:n = true, + noindent .code:n = + {\msg_warning:nnn{skrapport}{option-no-effect}{noindent}}, +\end{MacroCode} + \end{option} + \end{option} + + \begin{option}{color}{true, false} + \changes{0.09}{Added \opt{color} option} + \changes{0.12}{Converted to a key-value option which will load + the specified color theme.} + \begin{option}{nocolor} + Declare color options. Note that we explicitly set the boolean + \cs{g__skrapport_color_bool} as well as setting up the colors + through \cs{__skrapport_setup_color:n}, so that we can keep track + of the color usage even after the options have been set up. +\begin{MacroCode}{class} + color .code:n = + {\str_if_eq:nnTF{#1}{false} + {\bool_gset_false:N\g__skrapport_color_bool} + {\bool_gset_true:N\g__skrapport_color_bool + \str_if_eq:nnTF{#1}{true} + {\__skrapport_setup_color:n{default}} + {\__skrapport_setup_color:n{#1}}}}, + color .default:n = true, + nocolor .meta:n = {color=false}, +\end{MacroCode} + \end{option} + \end{option} + + \begin{option}{nomath}{true, false} + \begin{option}{math} + \changes{0.12}{Option is now deprecated} + Declare math options. As with the \opt{noindent} option, \opt{math} + has been deprecated since it is an alias and has no effect. +\begin{MacroCode}{class} + nomath .choice:, + nomath / false .code:n = {\__skrapport_setup_math:}, + nomath / true .code:n = {\prg_do_nothing:}, + nomath .default:n = true, + math .code:n = + {\msg_warning:nnn{skrapport}{option-no-effect}{math}}, +\end{MacroCode} + \end{option} + \end{option} + + That's it, we're done setting up the \pkg{l3keys} for the options. +\begin{MacroCode}{class} +} +\end{MacroCode} + + We will now define a \enquote{defaults} key-value system because + \texttt{.initial:n} doesn't work they way we want it to. This + key-value system will be used to set flags with which we will + determine wether to set certain default options. + \begin{macro}{\__skrapport_setup_defaults:} + \changes{0.12a}{\texttt{word} font stack is now the default font stack when using \hologo{XeLaTeX}} +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_setup_defaults:{ + \bool_new:N\l__skrapport_has_option_indent_bool + \bool_new:N\l__skrapport_has_option_nomath_bool + \bool_new:N\l__skrapport_has_option_color_bool + \bool_new:N\l__skrapport_has_option_font_bool + \bool_new:N\l__skrapport_has_option_lang_bool + \bool_new:N\l__skrapport_has_option_titles_bool + \bool_new:N\l__skrapport_has_option_draft_bool + \bool_new:N\l__skrapport_has_option_ptsize_bool + \bool_new:N\l__skrapport_has_option_paper_bool + \keys_define:nn{skrapport-default}{ + indent .code:n = + {\bool_set_true:N\l__skrapport_has_option_indent_bool}, + nomath .code:n = + {\bool_set_true:N\l__skrapport_has_option_nomath_bool}, + color .code:n = + {\bool_set_true:N\l__skrapport_has_option_color_bool}, + font .code:n = + {\bool_set_true:N\l__skrapport_has_option_font_bool}, + lang .code:n = + {\bool_set_true:N\l__skrapport_has_option_lang_bool}, + titles .code:n = + {\bool_set_true:N\l__skrapport_has_option_titles_bool}, + draft .code:n = + {\bool_set_true:N\l__skrapport_has_option_draft_bool}, + ptsize .code:n = + {\bool_set_true:N\l__skrapport_has_option_ptsize_bool}, + paper .code:n = + {\bool_set_true:N\l__skrapport_has_option_paper_bool}, +\end{MacroCode} + The following keys correspond to deprecated options. They should + be removed when the corresponding options are removed. +\begin{MacroCode}{class} + nofont .code:n = {\keys_set:nn{skrapport-default}{font}}, + kpfonts .code:n = {\keys_set:nn{skrapport-default}{font}}, + lmodern .code:n = {\keys_set:nn{skrapport-default}{font}}, + palatino .code:n = {\keys_set:nn{skrapport-default}{font}}, + minion .code:n = {\keys_set:nn{skrapport-default}{font}}, + skdoc .code:n = {\keys_set:nn{skrapport-default}{font}}, + swe .code:n = {\keys_set:nn{skrapport-default}{lang}}, + eng .code:n = {\keys_set:nn{skrapport-default}{lang}}, + rmtitles .code:n = {\keys_set:nn{skrapport-default}{titles}}, + bftitles .code:n = {\keys_set:nn{skrapport-default}{titles}}, + sftitles .code:n = {\keys_set:nn{skrapport-default}{titles}}, + 10pt .code:n = {\keys_set:nn{skrapport-default}{ptsize}}, + 11pt .code:n = {\keys_set:nn{skrapport-default}{ptsize}}, + 12pt .code:n = {\keys_set:nn{skrapport-default}{ptsize}}, + a4paper .code:n = {\keys_set:nn{skrapport-default}{paper}}, + a5paper .code:n = {\keys_set:nn{skrapport-default}{paper}}, +\end{MacroCode} +\begin{MacroCode}{class} + } + \ProcessKeysOptions{skrapport-default} + \bool_if:NF\l__skrapport_has_option_indent_bool{ + \keys_set:nn{skrapport}{indent=false} + } + \bool_if:NF\l__skrapport_has_option_nomath_bool{ + \keys_set:nn{skrapport}{nomath=false} + } + \bool_if:NF\l__skrapport_has_option_color_bool{ + \keys_set:nn{skrapport}{color=true} + } + \bool_if:NF\l__skrapport_has_option_font_bool{ + \sys_if_engine_xetex:TF{ + \keys_set:nn{skrapport}{font=word} + }{ + \keys_set:nn{skrapport}{font=kpfonts} + } + } + \bool_if:NF\l__skrapport_has_option_lang_bool{ + \keys_set:nn{skrapport}{lang=sv} + } + \bool_if:NF\l__skrapport_has_option_titles_bool{ + \keys_set:nn{skrapport}{titles=bf} + } + \bool_if:NF\l__skrapport_has_option_draft_bool{ + \keys_set:nn{skrapport}{draft=false} + } + \bool_if:NF\l__skrapport_has_option_ptsize_bool{ + \keys_set:nn{skrapport}{ptsize=11pt} + } + \bool_if:NF\l__skrapport_has_option_paper_bool{ + \keys_set:nn{skrapport}{paper=a4} + } +} +\end{MacroCode} + \end{macro} + + Finally, we process the class options using the keys defined earlier. + We also run the engine-specific code implemented above, and the fake + key system used to define defaults. + + Note that we save and restore \cs{@classoptionslist} around the + engine-specific setup. This is because we might load \pkg{xkeyval}, + which apparently removes all key-value options from the list when + loaded (and this is really bad for us). +\begin{MacroCode}{class} +\cs_set_eq:NN\__skrapport_tmpa_cs:\@classoptionslist +\RequirePackage{xkeyval} +\cs_set_eq:NN\__skrapport_tmpb_cs:\@classoptionslist +\cs_set_eq:NN\@classoptionslist\__skrapport_tmpa_cs: +\__skrapport_setup_engine_specific: +\ProcessKeysOptions{skrapport} +\__skrapport_setup_defaults: +\cs_set_eq:NN\@classoptionslist\__skrapport_tmpb_cs: +\cs_undefine:N\__skrapport_tmpa_cs: +\cs_undefine:N\__skrapport_tmpb_cs: +\end{MacroCode} + + \subsection{Required packages} + We also include some essential packages per default. The + \pkg{calc} package, for instance, is essential in later + definitions. +\begin{MacroCode}{class} +\RequirePackage{calc,isodate,multicol} +\end{MacroCode} + + At the end of the class definition we load a very + useful package that improves typesetting: \pkg{microtype}. + Also set \cs{frenchspacing}. +\begin{MacroCode}{class} +\AtEndOfClass{ + \RequirePackage{microtype} + \frenchspacing +} +\end{MacroCode} + + When the document starts, we set the URL style if the user has + loaded the \pkg{url} package. +\begin{MacroCode}{class} +\AtBeginDocument{ + \cs_if_exist:NT\urlstyle{\urlstyle{same}} +} +\end{MacroCode} + + \subsection{Utilities} + We define useful \LaTeX3 replacements of \LaTeXe\ stuff that + hasn't made its way into \pkg{interface3}. This includes + a \cs{settowidth} clone and possibly more stuff later. + \begin{macro}{\dim_set_to_wd:Nn} +\begin{MacroCode}{class} +\cs_new:Npn\dim_set_to_wd:Nn#1#2{ + \hbox_set:Nn\l_tmpa_box{#2} + \dim_set:Nn#1{\box_wd:N\l_tmpa_box} + \box_clear:N\l_tmpa_box +} +\end{MacroCode} + \end{macro} + + \subsection{Hidden things} + Set some default measurements (should probably be replaced with + simply loading \pkg{typearea}). +\begin{MacroCode}{class} +\dim_add:Nn\textwidth{0.5\oddsidemargin} +\dim_add:Nn\textwidth{0.5\evensidemargin} +\dim_add:Nn\oddsidemargin{-0.5\oddsidemargin} +\dim_add:Nn\evensidemargin{-0.5\evensidemargin} +\dim_gset:Nn\lineskip{1pt} +\dim_gset:Nn\normallineskip{1pt} +\end{MacroCode} + \begin{macro}{\baselinestretch} + Note that we can't use \cs{RenewDocumentCommand} as that yields an + infinite loop before or at \env{document}. +\begin{MacroCode}{class} +\cs_set:Npn\baselinestretch{} +\end{MacroCode} + \end{macro} + + \subsubsection{Penalties} +\begin{MacroCode}{class} +\int_gset:Nn\@lowpenalty {51} +\int_gset:Nn\@medpenalty {151} +\int_gset:Nn\@highpenalty{301} +\setcounter{topnumber}{2} +\setcounter{bottomnumber}{1} +\setcounter{totalnumber}{4} +\setcounter{dbltopnumber}{2} +\end{MacroCode} + \begin{macro}{\topfraction} +\begin{MacroCode}{class} +\RenewDocumentCommand\topfraction{}{.75} +\end{MacroCode} + \end{macro} + \begin{macro}{\bottomfraction} +\begin{MacroCode}{class} +\RenewDocumentCommand\bottomfraction{}{.5} +\end{MacroCode} + \end{macro} + \begin{macro}{\textfraction} +\begin{MacroCode}{class} +\RenewDocumentCommand\textfraction{}{.25} +\end{MacroCode} + \end{macro} + \begin{macro}{\floatpagefraction} +\begin{MacroCode}{class} +\RenewDocumentCommand\floatpagefraction{}{.625} +\end{MacroCode} + \end{macro} + \begin{macro}{\dbltopfraction} +\begin{MacroCode}{class} +\RenewDocumentCommand\dbltopfraction{}{.75} +\end{MacroCode} + \end{macro} + \begin{macro}{\dblfloatpagefraction} +\begin{MacroCode}{class} +\RenewDocumentCommand\dblfloatpagefraction{}{.625} +\end{MacroCode} + \end{macro} + + \subsection{User-level commands and environments} + \subsubsection{The front page} + \begin{macro}{\title}[1] + {Title of the document} + \begin{macro*}{\g__skrapport_title_tl} +\begin{MacroCode}{class} +\tl_new:N\g__skrapport_title_tl +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\DeclareDocumentCommand\title{m}{ + \tl_gset:Nn\g__skrapport_title_tl{#1} +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\date}[1] + {Date in ISO8601 format} + The \cs{date} macro sets the current date of the document. It only + accepts dates accepted by \pkg{isodate} (or the special value + \enquote{\texttt{today}}). Dates are always printed using the + current format as specified by the \pkg{isodate} package. The default + value of the date (if \cs{date} isn't used) is \cs{today}. + \begin{macro*}{\g__skrapport_title_tl} +\begin{MacroCode}{class} +\tl_new:N\g__skrapport_date_tl +\tl_gset:Nn\g__skrapport_date_tl{\today} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\DeclareDocumentCommand\date{m}{ + \str_if_eq:nnTF{#1}{today}{ + \tl_gset:Nn\g__skrapport_date_tl{\today} + }{ + \if_meaning:w \today #1 + \tl_gset:Nn\g__skrapport_date_tl{\today} + \else: + \tl_gset:Nn\g__skrapport_date_tl{\printdate{#1}} + \fi: + } +} +\end{MacroCode} + \end{macro} + + \begin{macro}{\author}[2] + {Optional email address} + {Author name} + \changes{0.10b}{Improved \cs{author} macro} + \changes{0.12}{Use comma-separated lists instead of token list} + The \cs{author} macro is redefined to accept an optional argument + and to be used multiple times. + \begin{macro*}{\__skrapport_email:n}[1] + {Email address} + \changes{0.12a}{Store \cs{textemdash} instead of \cs{NoValue}} + The \cs{skrapport@email} helper macro typesets an email address + using \pkg{hyperref} if that package is used. This is suboptimal, + the macro behaves differently with respect to special characters + depending on wether \pkg{hyperref} is loaded or not. +\begin{MacroCode}{class} +\cs_new_nopar:Npn\__skrapport_email:n#1{ + \texttt{#1} +} +\AtBeginDocument{ + \cs_if_exist:NT\href{ + \cs_gset_nopar:Npn\__skrapport_email:n#1{ + \href{mailto:#1}{\nolinkurl{#1}} + } + } +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\g__skrapport_author_clist} +\begin{MacroCode}{class} +\clist_new:N\g__skrapport_author_clist +\end{MacroCode} + \end{macro*} + \begin{macro*}{\g__skrapport_email_clist} +\begin{MacroCode}{class} +\clist_new:N\g__skrapport_email_clist +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\DeclareDocumentCommand\author{om}{% + \clist_gput_right:Nn\g__skrapport_author_clist{#2} + \clist_gput_right:Nn\g__skrapport_email_clist + {\IfNoValueTF{#1}{\textemdash}{#1}} +} +\end{MacroCode} + \begin{macro}{\__skrapport_author_list:} + \changes{0.12a}{Use \cs{clist_use:Nnnn}} + This macro lists all the authors in the comma-separated list + \cs{g__skrapport_author_clist}, separating them with a comma + or the word \enquote{and} (in the appropriate language). +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_author_list:{ + \clist_use:Nnnn\g__skrapport_author_clist + {~\__skrapport_and_word:{}~}{,~}{~\__skrapport_and_word:{}~} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\__skrapport_email_list:} + \changes{0.12a}{Use \cs{clist_use:Nnnn}} + This macro lists the email addresses in the comma-separated list + \cs{g__skrapport_email_clist} by applying \cs{__skrapport_email:} + if appropriate (or printing an em-dash if no value exists) and + separating them with commas. +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_email_list:{ + \int_compare:nT{\clist_count:N\g__skrapport_author_clist>\c_zero}{ + \clist_use:Nnnn\g__skrapport_email_clist{\\}{\\}{\\} + } +} +\end{MacroCode} + \end{macro} + \end{macro} + + \begin{macro}{\regarding}[1] + {Text snippet} + This macro defines a variable used by \cs{maketitle} to insert a + simple text into the header on the title page. + \begin{macro*}{\g__skrapport_regarding_tl} +\begin{MacroCode}{class} +\tl_new:N\g__skrapport_regarding_tl +\DeclareDocumentCommand\regarding{m}{ + \tl_gset:Nn\g__skrapport_regarding_tl{#1} +} +\end{MacroCode} + \end{macro*} + \end{macro} + + \begin{macro}{\license}[1] + {Short license description} + \changes{0.07}{Added command \cs{license}} + This macro defines a variable used by \cs{maketitle} to insert a + license into the footer on the titlepage. + \begin{macro*}{\g__skrapport_copyright_unprinted_bool} +\begin{MacroCode}{class} +\bool_new:N\g__skrapport_copyright_unprinted_bool +\AtEndDocument{ + \bool_if:NT\g__skrapport_copyright_unprinted_bool + {\msg_warning:nn{skrapport}{license-not-printed}} +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\g__skrapport_copyright_tl} +\begin{MacroCode}{class} +\tl_new:N\g__skrapport_copyright_tl +\DeclareDocumentCommand\license{m}{ + \tl_gset:Nn\g__skrapport_copyright_tl{#1} + \bool_gset_true:N\g__skrapport_copyright_unprinted_bool +} +\end{MacroCode} + \end{macro*} + \end{macro} + + \begin{macro}{\maketitle}[1] + {Optional key-value list} + \changes{0.12a}{Added optional key-value argument and PDFinfo} + The standard \cs{maketitle} command as taken from the \pkg{article} + class but with some basic restyling. +\begin{MacroCode}{class} +\keys_define:nn{skrapport/maketitle}{ + hide .clist_set:N = \l__skrapport_maketitle_hide_clist, + hide .value_required:n = true, + nopdfinfo .bool_set_inverse:N = \l__skrapport_maketitle_pdfinfo_bool, + nopdfinfo .default:n = true, + nopdfinfo .initial:n = false +} +\end{MacroCode} + \begin{macro*}{\__skrapport_smallprint_style:} +\begin{MacroCode}{class} +\cs_new_protected:Nn\__skrapport_smallprint_style:{} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\__skrapport_abstract_style:} +\begin{MacroCode}{class} +\cs_new_protected:Nn\__skrapport_abstract_style: + {\__skrapport_title_style:} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\DeclareDocumentCommand\maketitle{o}{ + \clist_clear:N\l__skrapport_maketitle_hide_clist + \IfNoValueF{#1}{\keys_set:nn{skrapport/maketitle}{#1}} + \bool_if:NT\l__skrapport_maketitle_pdfinfo_bool{ + \exp_args:NNx\cs_if_exist_use:NT\hypersetup{{ + pdfinfo={ + Title={\tl_use:N\g__skrapport_title_tl}, + Subject={\tl_use:N\g__skrapport_regarding_tl}, + Author={ + \clist_use:Nnnn\g__skrapport_author_clist{,~}{,~}{,~} + }, + Lang={\__skrapport_RFC_language:} + } + }} + } + \par + \group_begin: + \RenewDocumentCommand\thefootnote{}{ + \fnsymbol{footnote} + } + \RenewDocumentCommand\@makefnmark{}{ + \hbox_overlap_right:n{ + \@textsuperscript{\normalfont\@thefnmark} + } + } + \RenewDocumentCommand\@makefntext{+m}{ + \dim_set:Nn\parindent{1em}\noindent + \hbox_to_wd:nn{1.8em}{ + \hss\@textsuperscript{\normalfont\@thefnmark} + } + ##1 + } + \newpage + \int_gzero:N\@topnum + \__skrapport_maketitle: + \thispagestyle{plain} + \group_end: + \setcounter{footnote}{0} +} +\end{MacroCode} + \end{macro} + \begin{macro*}{\__skrapport_maketitle:} +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_maketitle:{ + \newpage + \hbox:n{} + \begin{flushleft} + \vspace{-\headsep} + \clist_if_in:NnF\l__skrapport_maketitle_hide_clist{regarding}{ + \small\__skrapport_smallprint_style: + \tl_use:N\g__skrapport_regarding_tl + \clist_if_in:NnF\l__skrapport_maketitle_hide_clist{date}{ + \tl_if_empty:NF\g__skrapport_regarding_tl{,~} + } + } + \clist_if_in:NnF\l__skrapport_maketitle_hide_clist{date}{ + \tl_use:N\g__skrapport_date_tl + } + \clist_if_in:NnTF\l__skrapport_maketitle_hide_clist{regarding}{ + \clist_if_in:NnTF\l__skrapport_maketitle_hide_clist{date} + {}{\par} + }{\par} + \vspace{1.5cm} + { + \Huge\__skrapport_title_style: + \tl_use:N\g__skrapport_title_tl + \par + } + \vspace{.125cm} + { + \Large\__skrapport_title_style: + \__skrapport_author_list: + } + \vspace{.75cm} + \end{flushleft} + \par + \clist_if_in:NnF\l__skrapport_maketitle_hide_clist{email}{ + \dim_set_to_abstract_or_email_wd:N\l_tmpa_dim + \bool_gset_false:N\g__skrapport_abstract_used + \dim_set:Nn\l_tmpb_dim + {\textwidth-\l_tmpa_dim-\c__skrapport_abstract_separator_dim} + \begin{minipage}[t]{\l_tmpa_dim} + \begin{flushright} + \leavevmode\__skrapport_abstract_style: + \__skrapport_Email_word: + \end{flushright} + \end{minipage} + \hspace{\c__skrapport_abstract_separator_dim} + \begin{minipage}[t]{\l_tmpb_dim} + \__skrapport_email_list: + \end{minipage} + \par + } +} +\end{MacroCode} + \end{macro*} + + \begin{macro*}{\g__skrapport_abstract_used} + This boolean keeps track of wether the \env{abstract} environment has + been used, and is set accordingly in the main auxillary file. +\begin{MacroCode}{class} +\bool_new:N\g__skrapport_abstract_used +\AtEndDocument{ + \iow_shipout:Nx\@mainaux{ % !!! + \exp_not:N\ExplSyntaxOn + \bool_if:NTF\g__skrapport_abstract_used + {\exp_not:n{\bool_gset_true:N\g__skrapport_abstract_used}} + {\exp_not:n{\bool_gset_false:N\g__skrapport_abstract_used}} + \exp_not:N\ExplSyntaxOff + } +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\dim_set_to_abstract_or_email_wd:N}[1] + {Dimension register} + \changes{0.12a}{Set abstract style before word to fix incorrect width} + This macro sets a dimension to either the width of the email word + or the width of the abstract word depending on the state of + \cs{g__skrapport_abstract_used}. +\begin{MacroCode}{class} +\cs_new:Npn\dim_set_to_abstract_or_email_wd:N#1{ + \dim_set_to_wd:Nn\l_tmpa_dim + {\__skrapport_abstract_style:\abstractname} + \dim_set_to_wd:Nn\l_tmpb_dim + {\__skrapport_abstract_style:\__skrapport_Email_word:} + \bool_if:NTF\g__skrapport_abstract_used + {\dim_set:Nn#1{\dim_max:nn{\l_tmpa_dim}{\l_tmpb_dim}}} + {\dim_set_eq:NN#1\l_tmpb_dim} +} +\end{MacroCode} + \end{macro*} + + \begin{environment}{abstract} + Standard restyled \env{abstract} environment from the + \pkg{article} class. +\begin{MacroCode}{class} +\dim_const:Nn\c__skrapport_abstract_separator_dim{1em} +\DeclareDocumentEnvironment{abstract}{}{ + \bool_gset_true:N\g__skrapport_abstract_used + \dim_set_to_abstract_or_email_wd:N\l_tmpa_dim + \dim_set:Nn\l_tmpb_dim + {\textwidth-\l_tmpa_dim-\c__skrapport_abstract_separator_dim} + \begin{minipage}[t]{\l_tmpa_dim} + \begin{flushright} + \leavevmode\__skrapport_abstract_style: + \abstractname + \end{flushright} + \end{minipage} + \hspace{\c__skrapport_abstract_separator_dim} + \begin{minipage}[t]{\l_tmpb_dim} +}{ + \end{minipage} +} +\end{MacroCode} + \end{environment} + + \begin{environment}{titlepage} + Titlepage environment. + \begin{macro}{\ps@skrapport@titlepage} +\begin{MacroCode}{class} +\cs_new:Npn\ps@skrapport@titlepage{ + \cs_set:Npn\@oddhead{} + \cs_set:Npn\@evenhead{} + \cs_set:Npn\@oddfoot{ + \begin{minipage}{\textwidth} + \raggedleft\small\par + \__skrapport_smallprint_style: + \tl_use:N\g__skrapport_copyright_tl + \end{minipage} + } + \cs_set_eq:NN\@evenfoot\@oddfoot +} +\end{MacroCode} + \end{macro} +\begin{MacroCode}{class} +\DeclareDocumentEnvironment{titlepage}{}{ + \cleardoublepage\setcounter{page}{1} +}{ + \bool_gset_false:N\g__skrapport_copyright_unprinted_bool + \thispagestyle{skrapport@titlepage} + \cleardoublepage\setcounter{page}{1} +} +\end{MacroCode} + \end{environment} + + \subsubsection{Sectioning} + Sectioning macros. This is kind of messy. We start with creaiting + some counters using our homemade \LaTeX3 counter macros. +\begin{MacroCode}{class} +\setcounter{secnumdepth}{3} +\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] +\newcounter{subparagraph}[paragraph] +\end{MacroCode} + Next up, we have macros to display the section numberings. + \begin{macro*}{\thesection} +\begin{MacroCode}{class} +\cs_gset:Npn\thesection{ + \arabic{section} +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\thesubsection} +\begin{MacroCode}{class} +\cs_gset:Npn\thesubsection{ + \thesection.\arabic{subsection} +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\thesubsubsection} +\begin{MacroCode}{class} +\cs_gset:Npn\thesubsubsection{ + \thesubsection.\arabic{subsubsection} +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\theparagraph} +\begin{MacroCode}{class} +\cs_gset:Npn\theparagraph{ + \thesubsubsection.\arabic{paragraph} +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\thesubparagraph} +\begin{MacroCode}{class} +\cs_gset:Npn\thesubparagraph{ + \theparagraph.\arabic{subparagraph} +} +\end{MacroCode} + \end{macro*} + + \paragraph{Pre- and post-section spacing} + Here comes the tricky part. We define two generic macros that add + spacing before and after the section title, to condense the code + a bit. Note that many of the following macros constitute a + reimplementation of \cs{@startsection}, \cs{@ssect}, \cs{@sect} and + friends. + \begin{macro}{\__skrapport_pre_section:n}[1] + {Skip before the section title} +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_pre_section:n#1{ + \leavevmode\par + \skip_set:Nn\l_tmpa_skip{#1} + \@afterindenttrue % !!! + \dim_compare:nT{\l_tmpa_skip<\c_zero_skip}{ + \skip_set:Nn\l_tmpa_skip{-\l_tmpa_skip} + \@afterindentfalse % !!! + } + \if@nobreak \everypar{} \else + \addpenalty\@secpenalty % !!! + \skip_vertical:N\l_tmpa_skip + \fi +} +\end{MacroCode} + \end{macro} + \begin{macro}{\__skrapport_post_section:n}[1] + {Space after the section title} +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_post_section:n#1{ + \skip_set:Nn\l_tmpa_skip{#1} + \dim_compare:nTF{\l_tmpa_skip>\c_zero_skip}{ + \par\nobreak + \skip_vertical:N\l_tmpa_skip + \@afterheading % !!! + }{ + \@nobreakfalse + \global\@noskipsectrue + \skip_horizontal:n{-\l_tmpa_skip} + } + \ignorespaces +} +\end{MacroCode} + \end{macro} + + \paragraph{Starred sections} + These two macros (the first only being an alias for the second with + its last argument empty) correspond to unnumbered sections. Or, + rather, they do all the typesetting and none of the TOC/counter + stuff. This means that starred sections only call this macro, while + unstarred ones call other macros in addition to this macro. + \begin{macro*}{\__skrapport_section_star:nnn} + \begin{macro}{\__skrapport_section_star:nnnn}[4] + {Indentation of section title} + {Styling of the section title} + {Actual section title} + {Optional code to run in the indentation (\emph{i.e.} section number)} +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_section_star:nnn#1#2#3{ + \__skrapport_section_star:nnnn{#1}{#2}{#3}{} +} +\cs_new:Npn\__skrapport_section_star:nnnn#1#2#3#4{ + \group_begin: + #2 + \hbox_set:Nn\l_tmpa_box{{\skip_horizontal:n{#1}#4}} + \dim_set:Nn\hangindent{#1+\box_wd:N\l_tmpa_box} + \noindent\box_use_drop:N\l_tmpa_box + \interlinepenalty\@M % !!! + #3 + \group_end: +} +\end{MacroCode} + \end{macro} + \end{macro*} + + \paragraph{Unstarred sections} + This macro typesets an unstarred section, \emph{i.e.} a numbered + one. It defines a temporary macro containing the section number + (maybe, depends on the \cs{c@secnumdepth} counter) which it passes + on to \cs{__skrapport_section_star:nnnn}, and then writes some things + to the TOC. + \begin{macro}{\__skrapport_section_nostar:nnnnnn}[6] + {Section counter name} + {Section level} + {Indentation of section title} + {Styling of the section title} + {Actual section title} + {Section title for TOC} + \changes{0.12d}{Added support for hanging titles} +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_section_nostar:nnnnnn#1#2#3#4#5#6{ + \cs_set:Nn\__skrapport_saved_section:{} + \int_compare:nF{#2>\value{secnumdepth}}{ + \refstepcounter{#1} + \cs_set:Nn\__skrapport_saved_section:{ + \bool_if:NTF\g__skrapport_hanging_titles_bool + {\llap{\use:c{the#1}\hspace{1ex}}} + {\use:c{the#1}~} + } + } + \__skrapport_section_star:nnnn + {#3}{#4}{#5}{\__skrapport_saved_section:} + \use:c{#1mark}{#6} + \addcontentsline{toc}{#1}{ + \int_compare:nF{#2>\value{secnumdepth}}{ + \protect\numberline{\use:c{the#1}} + } + #6 + } +} +\end{MacroCode} + \end{macro} + + \paragraph{Generic sectioning macros} + We will now set up a generic sectioning macro. First, we need + version of the above macros that expand their arguments. + \begin{macro*}{\__skrapport_pre_section:c} +\begin{MacroCode}{class} +\cs_generate_variant:Nn\__skrapport_pre_section:n{c} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\__skrapport_post_section:c} +\begin{MacroCode}{class} +\cs_generate_variant:Nn\__skrapport_post_section:n{c} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\__skrapport_section_star:ccn} +\begin{MacroCode}{class} +\cs_generate_variant:Nn\__skrapport_section_star:nnn{ccn} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\__skrapport_section_nostar:nnccnn} +\begin{MacroCode}{class} +\cs_generate_variant:Nn\__skrapport_section_nostar:nnnnnn{nnccnn} +\end{MacroCode} + \end{macro*} + + Now, the generic sectioning macro basically takes the sectioning + macro arguments straight up (arguments 3--5), additionally + requiring a section counter name and a section level. It expects + that constant dimensions (see definition of \cs{section} below) + and a formatting macro are available, and passes these as arguments + to the underlying sectioning macros as appropriate. + \begin{macro}{\__skrapport_generic_section:nnnnn}[5] + {Section counter name} + {Section level} + {Star (tested with \cs{IfBooleanTF})} + {Optional argument (or \cs{NoValue})} + {Section title text} +\begin{MacroCode}{class} +\cs_set:Nn\__skrapport_generic_section:nnnnn{ + \__skrapport_pre_section:c{c__skrapport_#1_pre_skip} + \IfBooleanTF#3{ + \__skrapport_section_star:ccn + {c__skrapport_#1_indent_dim} + {__skrapport_#1_style:} + {#5} + }{ + \IfNoValueTF{#4}{ + \__skrapport_section_nostar:nnccnn + {#1}{#2} + {c__skrapport_#1_indent_dim} + {__skrapport_#1_style:} + {#5} + {#5} + }{ + \__skrapport_section_nostar:nnccnn + {#1}{#2} + {c__skrapport_#1_indent_dim} + {__skrapport_#1_style:} + {#5} + {#4} + } + } + \__skrapport_post_section:c{c__skrapport_#1_post_skip} +} +\end{MacroCode} + \end{macro} + + \paragraph{Public sectioning API} + It's time to define the public sectioning macros. They all follow + the same format: first, two skips and one dimension (used by + \cs{__skrapport_generic_section:nnnnn}) are defined, as well as + a macro defining the text style of the section. Then, the actual + macro is provided. + \begin{macro}{\section}[3] + {Star (tested with \cs{IfBooleanTF})} + {Optional short title (or \cs{NoValue})} + {Sectioning title} + \begin{macro*}{\c__skrapport_section_pre_skip} + This is the skip \emph{before} a section title. +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_section_pre_skip{-4ex~plus~1ex~minus~-1ex} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_section_post_skip} + This is the skip \emph{after} a section title. +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_section_post_skip{.5ex~plus~.5ex} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_section_indent_dim} + This is the \emph{indentation} of a section title. +\begin{MacroCode}{class} +\dim_const:Nn \c__skrapport_section_indent_dim{\c_zero_dim} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_section_style:} + This is the text style of a section title. +\begin{MacroCode}{class} +\cs_set_protected:Nn\__skrapport_section_style: + {\normalfont\LARGE\__skrapport_title_style:} +\end{MacroCode} + \end{macro*} + Finally, the public macro is provided. +\begin{MacroCode}{class} +\DeclareDocumentCommand\section{som}{ + \__skrapport_generic_section:nnnnn{section}{1}{#1}{#2}{#3} +} +\end{MacroCode} + \end{macro} + + The other sectioning macros (macros from section to subparagraph are + available) are defined in an analogous manner. + \begin{macro}{\subsection}[3] + {Star (tested with \cs{IfBooleanTF})} + {Optional short title (or \cs{NoValue})} + {Sectioning title} + \begin{macro*}{\c__skrapport_subsection_pre_skip} +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_subsection_pre_skip{-3ex~plus~1ex~minus~-1ex} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_subsection_post_skip} +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_subsection_post_skip{.25ex~plus~.25ex} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_subsection_indent_dim} +\begin{MacroCode}{class} +\dim_const:Nn \c__skrapport_subsection_indent_dim{\c_zero_dim} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_subsection_style:} +\begin{MacroCode}{class} +\cs_set_protected:Nn\__skrapport_subsection_style: + {\normalfont\Large\__skrapport_title_style:} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\DeclareDocumentCommand\subsection{som}{ + \__skrapport_generic_section:nnnnn{subsection}{2}{#1}{#2}{#3} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\subsubsection}[3] + {Star (tested with \cs{IfBooleanTF})} + {Optional short title (or \cs{NoValue})} + {Sectioning title} + \begin{macro*}{\c__skrapport_subsubsection_pre_skip} +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_subsubsection_pre_skip{-2ex~plus~.5ex~minus~-.5ex} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_subsubsection_post_skip} +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_subsubsection_post_skip{.125ex~plus~.125ex} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_subsubsection_indent_dim} +\begin{MacroCode}{class} +\dim_const:Nn \c__skrapport_subsubsection_indent_dim{\c_zero_dim} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_subsubsection_style:} +\begin{MacroCode}{class} +\cs_set_protected:Nn\__skrapport_subsubsection_style: + {\normalfont\large\__skrapport_title_style:} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\DeclareDocumentCommand\subsubsection{som}{ + \__skrapport_generic_section:nnnnn{subsubsection}{3}{#1}{#2}{#3} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\paragraph}[3] + {Star (tested with \cs{IfBooleanTF})} + {Optional short title (or \cs{NoValue})} + {Sectioning title} + \begin{macro*}{\c__skrapport_paragraph_pre_skip} +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_paragraph_pre_skip{1ex~plus~.25ex~minus~-.25ex} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_paragraph_post_skip} +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_paragraph_post_skip{-1em} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_paragraph_indent_dim} +\begin{MacroCode}{class} +\dim_const:Nn \c__skrapport_paragraph_indent_dim{\c_zero_dim} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_paragraph_style:} +\begin{MacroCode}{class} +\cs_set_protected:Nn\__skrapport_paragraph_style: + {\normalfont\normalsize\__skrapport_title_style:} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\DeclareDocumentCommand\paragraph{som}{ + \__skrapport_generic_section:nnnnn{paragraph}{4}{#1}{#2}{#3} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\subparagraph}[3] + {Star (tested with \cs{IfBooleanTF})} + {Optional short title (or \cs{NoValue})} + {Sectioning title} + \begin{macro*}{\c__skrapport_subparagraph_pre_skip} +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_subparagraph_pre_skip{1ex~plus~.25ex~minus~-.25ex} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_subparagraph_post_skip} +\begin{MacroCode}{class} +\skip_const:Nn\c__skrapport_subparagraph_post_skip{-1em} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_subparagraph_indent_dim} +\begin{MacroCode}{class} +\dim_const:Nn \c__skrapport_subparagraph_indent_dim{\parindent} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\c__skrapport_subparagraph_style:} +\begin{MacroCode}{class} +\cs_set_protected:Nn\__skrapport_subparagraph_style: + {\normalfont\normalsize\__skrapport_title_style:\itshape} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\DeclareDocumentCommand\subparagraph{som}{ + \__skrapport_generic_section:nnnnn{subparagraph}{5}{#1}{#2}{#3} +} +\end{MacroCode} + \end{macro} + + \subsubsection{Macros and environments from \pkg{article}} + \paragraph{List environments} + First, several dimensions are provided and three penalties defined. +\begin{MacroCode}{class} +\dim_gset:Nn\leftmargini{2em} +\dim_gset_eq:NN\leftmargin\leftmargini +\dim_gset:Nn\leftmarginii{2em} +\dim_gset:Nn\leftmarginiii{1.5em} +\dim_gset:Nn\leftmarginiv{1.5em} +\dim_gset:Nn\leftmarginv{1em} +\dim_gset:Nn\leftmarginvi{1em} +\dim_gset:Nn\labelsep{.5em} +\dim_gset_eq:NN\labelwidth\leftmargini +\dim_gsub:Nn\labelwidth{-\labelsep} +\int_gset:Nn\@beginparpenalty{-\@lowpenalty} +\int_gset:Nn\@endparpenalty {-\@lowpenalty} +\int_gset:Nn\@itempenalty {-\@lowpenalty} +\end{MacroCode} + + Then, we define the appearance of the item numbers. + \begin{macro*}{\theenumi} + The first level consists of arabic numbers (\(1,2,3,\dotsc\)). +\begin{MacroCode}{class} +\cs_set:Npn\theenumi {\arabic{enumi}} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\theenumii} + The second level consists of lower-case alphabetic characters + (\(\text{a},\text{b},\text{c},\dotsc\)). +\begin{MacroCode}{class} +\cs_set:Npn\theenumii {\alph{enumii}} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\theenumiii} + The third level consists of lower-case roman numerals + (\(\text{i},\text{ii},\text{iii},\dotsc\)). +\begin{MacroCode}{class} +\cs_set:Npn\theenumiii{\roman{enumiii}} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\theenumiv} + The fourth level consists of upper-case alphabetic characters + (\(\text{A},\text{B},\text{C},\dotsc\)). +\begin{MacroCode}{class} +\cs_set:Npn\theenumiv {\Alph{enumiv}} +\end{MacroCode} + \end{macro*} + We also need macros that typeset the actual labels. Here, different + levels have a different postfix: all levels except the second are + postfixed by a period, while the second level is postfixed by a + closing bracket. + \begin{macro*}{\labelenumi} +\begin{MacroCode}{class} +\cs_new:Npn\labelenumi{\theenumi.} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\labelenumii} +\begin{MacroCode}{class} +\cs_new:Npn\labelenumii{\theenumii)} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\labelenumiii} +\begin{MacroCode}{class} +\cs_new:Npn\labelenumiii{\theenumiii.} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\labelenumiv} +\begin{MacroCode}{class} +\cs_new:Npn\labelenumiv{\theenumiv.} +\end{MacroCode} + \end{macro*} + We also fix the referencing of lower-level items so that one can + refer to them properly (\emph{i.e.} as 1b(iii) and so on). + \begin{macro*}{\p@enumii} +\begin{MacroCode}{class} +\cs_set:Npn\p@enumii{\theenumi} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\p@enumiii} +\begin{MacroCode}{class} +\cs_set:Npn\p@enumiii{\theenumi(\theenumii)} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\p@enumiiv} +\begin{MacroCode}{class} +\cs_set:Npn\p@enumiv{\p@enumiii\theenumiii} +\end{MacroCode} + \end{macro*} + + All that was for numbered lists (\env{enumerate}). Now, we define + the \enquote{labels} of \env{itemize} items. Alternately, they + are a bullet (\textbullet) and a boldfaced dash + ({\normalfont\bfseries\textendash}). + \begin{macro*}{\labelitemi} +\begin{MacroCode}{class} +\cs_set:Npn\labelitemi{\textbullet} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\labelitemii} +\begin{MacroCode}{class} +\cs_set:Npn\labelitemii{\normalfont\bfseries\textendash} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\labelitemiii} +\begin{MacroCode}{class} +\cs_set:Npn\labelitemiii{\textbullet} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\labelitemiv} +\begin{MacroCode}{class} +\cs_set:Npn\labelitemiv{\normalfont\bfseries\textendash} +\end{MacroCode} + \end{macro*} + + The last of the commonly used list environments is \env{description}. + Defining it is fairly simple --- we define a list with empty item + labels and a bit of hackery for the \cs{makelabel} macro inside. + \begin{environment}{description} +\begin{MacroCode}{class} +\DeclareDocumentEnvironment{description}{}{ + \begin{list}{}{ + \dim_zero:N\labelwidth + \dim_set:Nn\itemindent{-\leftmargin} + \cs_set_eq:NN\makelabel\descriptionlabel + } +}{ + \end{list} +} +\end{MacroCode} + \begin{macro}{\descriptionlabel} + Additionally, the \cs{descriptionlabel} macro is defined. +\begin{MacroCode}{class} +\NewDocumentCommand\descriptionlabel{m}{ + \hspace{\labelsep}\normalfont\bfseries #1 +} +\end{MacroCode} + \end{macro} + \end{environment} + + \paragraph{Quotation environments} + The quotation environments are also fairly simple --- \env{quote} + is just a list with a single item, and \env{quotation} is a + \env{quote} with extra skips around it. + \begin{environment}{quote} +\begin{MacroCode}{class} +\NewDocumentEnvironment{quote}{}{ + \begin{list}{}{ + \dim_set_eq:NN\rightmargin\leftmargin + } + \item\itshape +}{ + \end{list} +} +\end{MacroCode} + \end{environment} + \begin{environment}{quotation} +\begin{MacroCode}{class} +\NewDocumentEnvironment{quotation}{}{ + \bigskip + \begin{quote} +}{ + \end{quote} + \bigskip +} +\end{MacroCode} + \end{environment} + There's a \env{verse} environment, too, but it's just \env{quote}. + \begin{environment}{verse} +\begin{MacroCode}{class} +\NewDocumentEnvironment{verse}{}{ + \begin{quote} +}{ + \end{quote} +} +\end{MacroCode} + \end{environment} + + \paragraph{Front- and backmatter} + We only define one front/backmatter macro; \cs{appendix}. + \begin{macro}{\appendix} +\begin{MacroCode}{class} +\NewDocumentCommand\appendix{}{ + \par + \setcounter{section}{0} + \setcounter{subsection}{0} + \cs_gset:Npn\thesection{\Alph{section}} +} +\end{MacroCode} + \end{macro} + + \paragraph{Old font macros} + The old font macros have been deprecated. Do not use! + \begin{macro}{\rm} + \changes{0.12}{Deprecated command} +\begin{MacroCode}{class} +\DeclareDocumentCommand\rm{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\rm}{\textrm}} +\end{MacroCode} + \end{macro} + \begin{macro}{\sf} + \changes{0.12}{Deprecated command} +\begin{MacroCode}{class} +\DeclareDocumentCommand\sf{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\sf}{\textsf}} +\end{MacroCode} + \end{macro} + \begin{macro}{\tt} + \changes{0.12}{Deprecated command} +\begin{MacroCode}{class} +\DeclareDocumentCommand\tt{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\tt}{\texttt}} +\end{MacroCode} + \end{macro} + \begin{macro}{\bf} + \changes{0.12}{Deprecated command} +\begin{MacroCode}{class} +\DeclareDocumentCommand\bf{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\bf}{\textbf}} +\end{MacroCode} + \end{macro} + \begin{macro}{\it} + \changes{0.12}{Deprecated command} +\begin{MacroCode}{class} +\DeclareDocumentCommand\it{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\it}{\textit}} +\end{MacroCode} + \end{macro} + \begin{macro}{\sl} + \changes{0.12}{Deprecated command} +\begin{MacroCode}{class} +\DeclareDocumentCommand\sl{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\sl}{\textsl}} +\end{MacroCode} + \end{macro} + \begin{macro}{\sc} + \changes{0.12}{Deprecated command} +\begin{MacroCode}{class} +\DeclareDocumentCommand\sc{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\sc}{\textsc}} +\end{MacroCode} + \end{macro} + + \paragraph{The emphasis macro} + \begin{macro}{\emph} + \changes{0.12}{Changed definition, may have introduced spacing issues} + Redefining the \cs{emph} style to be bold when nested. + \begin{macro*}{\em} + \changes{0.12}{Deprecated command} +\begin{MacroCode}{class} +\DeclareDocumentCommand\em{}{\msg_error:nnnn{skrapport}{old-font-deprecated}{\em}{\emph}} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\__skrapport_emphstyle:} +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_emphstyle:{ + \itshape + \dim_compare:nF{\fontdimen\c_one\font>\c_zero_dim}{\bfseries} +} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\DeclareDocumentCommand\emph{+m}{ + \ifmmode + \text{\__skrapport_emphstyle: #1} + \else + {\__skrapport_emphstyle: #1} + \fi +} +\end{MacroCode} + \end{macro} + + \paragraph{The footnote rule} + \begin{macro*}{\footnoterule} + \changes{0.12}{Removed footnote rule entirely} +\begin{MacroCode}{class} +\DeclareDocumentCommand\footnoterule{}{} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\@makefntext} +\begin{MacroCode}{class} +\DeclareDocumentCommand\@makefntext{+m}{ + \dim_set:Nn\parindent{1em}\noindent + \hbox_to_wd:nn{1.8em}{\hss\@makefnmark} + #1 +} +\end{MacroCode} + \end{macro*} + + \subsubsection{Floats} + \paragraph{Table- and box-related lengths} +\begin{MacroCode}{class} +\dim_gset:Nn\arraycolsep {5pt} +\dim_gset:Nn\tabcolsep {6pt} +\dim_gset:Nn\arrayrulewidth{.4pt} +\dim_gset:Nn\doublerulesep {2pt} +\dim_gset_eq:NN\tabbingsep\labelsep +\skip_gset_eq:NN{\skip\@mpfootins}{\skip\footins} +\dim_gset:Nn\fboxsep {3pt} +\dim_gset:Nn\fboxrule {.4pt} +\end{MacroCode} + + \paragraph{Counters} +\begin{MacroCode}{class} +\newcounter{figure} +\newcounter{table} +\end{MacroCode} + \begin{macro*}{\theequation} +\begin{MacroCode}{class} +\cs_set:Npn\theequation{\arabic{equation}} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\thefigure} +\begin{MacroCode}{class} +\cs_set:Npn\thefigure{\arabic{figure}} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\thetable} +\begin{MacroCode}{class} +\cs_set:Npn\thetable{\arabic{table}} +\end{MacroCode} + \end{macro*} + + \paragraph{Defaults} + The default placement, list extension and caption text of all floats. +\begin{MacroCode}{class} +\cs_new:Npn \fps@figure{tb} +\cs_new:Npn\ftype@figure{1} +\cs_new:Npn \ext@figure{lof} +\cs_new:Npn \fnum@figure{\figurename\ \thefigure} +\cs_new:Npn \fps@table {tb} +\cs_new:Npn\ftype@table {2} +\cs_new:Npn \ext@table {lot} +\cs_new:Npn \fnum@table {\tablename\ \thetable} +\end{MacroCode} + + \paragraph{Environments} + \begin{macro}{\__skrapport_xfloat:nn} + \begin{macro*}{\__skrapport_xfloat:nx} + This is a helper macro basically replacing the \cs{@float} macro + used by \LaTeXe. +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_xfloat:nn#1#2{\@xfloat{#1}[#2]} +\cs_generate_variant:Nn\__skrapport_xfloat:nn{nx} +\end{MacroCode} + \end{macro*} + \end{macro} + \begin{environment}{figure} + \changes{0.12a}{Figures are now \cs{centering}ed by default} + \begin{environment*}{figure*} +\begin{MacroCode}{class} +\DeclareDocumentEnvironment{figure}{o}{ + \__skrapport_xfloat:nx{figure} + {\IfNoValueTF{#1}{\fps@figure}{#1}} + \centering +}{ + \end@float +} +\DeclareDocumentEnvironment{figure*}{o}{ + \__skrapport_xfloat:nx{figure} + {\IfNoValueTF{#1}{tp}{#1}} + \centering +}{ + \end@float +} +\end{MacroCode} + \end{environment*} + \end{environment} + \begin{environment}{table} + \changes{0.12a}{Tables are now \cs{centering}ed by default} + \begin{environment*}{table*} +\begin{MacroCode}{class} +\DeclareDocumentEnvironment{table}{o}{ + \__skrapport_xfloat:nx{table} + {\IfNoValueTF{#1}{\fps@table}{#1}} + \centering +}{ + \end@float +} +\DeclareDocumentEnvironment{table*}{o}{ + \__skrapport_xfloat:nx{table} + {\IfNoValueTF{#1}{tp}{#1}} + \centering +}{ + \end@float +} +\end{MacroCode} + \end{environment*} + \end{environment} + + In addition to the \env{figure} and \env{table} environments, we + also provide a \env{figcenter} environment that enables centering + of figures or tables that are too wide for the page. + \begin{macro*}{\coffin_typeset:Nnnon} +\begin{MacroCode}{class} +\cs_generate_variant:Nn\coffin_typeset:Nnnnn{Nnnon} +\end{MacroCode} + \end{macro*} + \begin{environment}{figcenter} + \changes{0.12c}{Fixed the x-offset calculation} +\begin{MacroCode}{class} +\DeclareDocumentEnvironment{figcenter}{}{ + \cs_set_eq:NN\l__tmpa_cs\caption + \cs_set:Npn\caption{\msg_error:nn{skrapport}{caption-in-figcenter}} + \coffin_clear:N\l_tmpa_coffin + \hcoffin_set:Nw\l_tmpa_coffin +}{ + \hcoffin_set_end: + \dim_set:Nn\l_tmpa_dim{(\textwidth - \coffin_wd:N\l_tmpa_coffin)/2} + \coffin_typeset:Nnnon\l_tmpa_coffin{H}{l}{\dim_use:N\l_tmpa_dim}{0pt} + \cs_set_eq:NN\caption\l__tmpa_cs + \cs_undefine:N\l__tmpa_cs +} +\end{MacroCode} + \end{environment} + + \paragraph{Captions} + Before we begin, we pass options to \pkg{caption}, in case the user + is loading it or another package based upon it. This fixes an issue + where the custom caption style was overwritten with the ugly default + \pkg{article} caption style. +\begin{MacroCode}{class} +\PassOptionsToPackage{font=small,labelfont+=bf,textfont+=it}{caption} +\end{MacroCode} + \begin{macro*}{\__skrapport_caption_name_style:} +\begin{MacroCode}{class} +\cs_new_protected:Nn\__skrapport_caption_name_style:{\small\bfseries} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\__skrapport_caption_text_style:} +\begin{MacroCode}{class} +\cs_new_protected:Nn\__skrapport_caption_text_style:{\small\itshape} +\end{MacroCode} + \end{macro*} +\begin{MacroCode}{class} +\skip_new:N\abovecaptionskip +\skip_set:Nn\abovecaptionskip{10pt} +\skip_new:N\belowcaptionskip +\skip_set:Nn\belowcaptionskip{10pt} +\end{MacroCode} + \begin{macro*}{\@makecaption} + \changes{0.10c}{Fix missing coloring command for some captions} + \changes{0.12}{Split \cs{@captionstyle} into two macros} + \changes{0.12a}{Fix a bug which applied caption name styling to the + caption text} + This should possibly be redefined already at the \cs{caption} level. +\begin{MacroCode}{class} +\cs_new:Npn\@makecaption#1#2{ + \skip_vertical:N\abovecaptionskip + \hbox_set:Nn\l_tmpa_box{ + \color@setgroup % !!! + {\__skrapport_caption_name_style:#1:~} + {\__skrapport_caption_text_style:#2} + \color@endgroup % !!! + } + \dim_compare:nTF{\box_wd:N\l_tmpa_box>\hsize}{ + {\__skrapport_caption_name_style:#1:~} + {\__skrapport_caption_text_style:#2} + \par + }{ + \global\@minipagefalse % !!! + \hbox_to_wd:nn{\hsize}{ + \hfil + \box_use_drop:N\l_tmpa_box + \hfil + } + } + \skip_vertical:N\belowcaptionskip +} +\end{MacroCode} + \end{macro*} + + \subsubsection{Table of contents} +\begin{MacroCode}{class} +\cs_new:Npn\@pnumwidth{1.55em} +\cs_new:Npn\@tocrmarg{2em} +\cs_new:Npn\@dotsep{1.7} +\setcounter{tocdepth}{3} +\end{MacroCode} + \begin{macro}{\tableofcontents} + \changes{0.12}{Removed spacing and \cs{@mkboth} call} +\begin{MacroCode}{class} +\DeclareDocumentCommand\tableofcontents{}{ + \section*{\contentsname} + \makeatletter + \@starttoc{toc} + \makeatother +} +\end{MacroCode} + \end{macro} + + The following macros conspire to replace \cs{@dottedtocline}. + \begin{macro*}{\__skrapport_toc_line:nnnnnn}[6] + {TOC line character} + {Table of contents level of the line} + {Indentation at the start of the line} + {Width of the section number} + {Section title} + {Page number} +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_toc_line:nnnnnn#1#2#3#4#5#6{ + \int_compare:nF{#2>\value{tocdepth}}{ + \skip_vertical:n{0pt~plus~.2pt} + \group_begin: + \skip_set:Nn\leftskip{#3} + \skip_set_eq:NN\rightskip\@tocrmarg + \skip_set:Nn\parfillskip{-\rightskip} + \dim_set:Nn\parindent{#3} + \@afterindenttrue % !!! + \interlinepenalty\@M % !!! + \leavevmode +\end{MacroCode} + This here is pretty dumb. We can't use a \LaTeX3\ temporary skip + register (or skip the temporary), because \texttt{\#5} further down + will contain a \cs{hbox} based on \cs{@tempdima}. The proper thing + to do here would be to rewrite \cs{addcontentsline}, I guess. Bah. +\begin{MacroCode}{class} + \skip_set:Nn\@tempdima{#4} % !!! (dumb) + \skip_add:Nn\leftskip{\@tempdima} + \null\nobreak + \skip_horizontal:n{-\leftskip} + {#5}\nobreak + \str_if_eq:nnTF{#1}{}{ + \hfill + }{ + \leaders\hbox:n{ + \(\mkern\@dotsep mu\hbox{#1}\mkern\@dotsep mu\) % !!! + } + } + \hfill\nobreak + \hbox_to_wd:nn{\@pnumwidth}{ % !!! + \hfil\normalfont\normalcolor #6 + } + \par + \group_end: + } +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\__skrapport_toc_line:nnnnnn}[5] + {Table of contents level of the line} + {Indentation at the start of the line} + {Width of the section number} + {Section title} + {Page number} + This is a variant of \cs{__skrapport_toc_line:nnnnnn} which + implicitly sets empty space as its TOC line. +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_toc_line:nnnnn#1#2#3#4#5{ + \__skrapport_toc_line:nnnnnn{}{#1}{#2}{#3}{#4}{#5} +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\l@section} + \changes{0.12}{Now uses \cs{__skrapport_toc_line:nnnnn}} +\begin{MacroCode}{class} +\DeclareDocumentCommand\l@section{mm}{ + \group_begin: + \skip_vertical:n{.75ex} + \bfseries + \__skrapport_toc_line:nnnnn{1}{0em}{1.3em}{#1}{#2} + \group_end: +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\l@subsection} + \changes{0.12}{Now uses \cs{__skrapport_toc_line:nnnnnn}} +\begin{MacroCode}{class} +\DeclareDocumentCommand\l@subsection{mm}{ + \group_begin: + \skip_vertical:n{.35ex} + \penalty\@secpenalty % !!! + \__skrapport_toc_line:nnnnnn{.}{2}{1.3em}{2em}{#1}{#2} + \group_end: +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\l@subsubsection} + \changes{0.12}{Changed style to match \pkg{skdoc}} +\begin{MacroCode}{class} +\DeclareDocumentCommand\l@subsubsection{mm}{ + \skip_set:Nn\leftskip{3.3em} + \dim_set_eq:NN\parindent\c_zero_dim + \group_begin: + \cs_set_eq:NN\numberline\use_none:n + \small #1~[#2] + \group_end: +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\l@paragraph} +\begin{MacroCode}{class} +\DeclareDocumentCommand\l@paragraph{mm}{ + \int_compare:nF{4>\value{tocdepth}}{ + \msg_warning:nnnn{skrapport}{tocdepth-too-deep} + {4}{\l@paragraph} + } +} +\end{MacroCode} + \end{macro*} + \begin{macro*}{\l@subparagraph} +\begin{MacroCode}{class} +\DeclareDocumentCommand\l@subparagraph{mm}{ + \int_compare:nF{5>\value{tocdepth}}{ + \msg_warning:nnnn{skrapport}{tocdepth-too-deep} + {5}{\l@subparagraph} + } +} +\end{MacroCode} + \end{macro*} + + Fix for \emph{e.g.}~\pkg{tocloft} package. +\begin{MacroCode}{class} +\cs_set:Npn\l@figure{} +\cs_set:Npn\l@table{} +\end{MacroCode} + + \subsubsection{Basic bibliography support} +\begin{MacroCode}{class} +\dim_new:N\bibindent +\dim_set:Nn\bibindent{2em} +\end{MacroCode} + \begin{environment}{thebibliography} + \changes{0.12}{Removed \cs{@mkboth}, \cs{@openbib@code} and + \cs{@noitemerr}} +\begin{MacroCode}{class} +\DeclareDocumentEnvironment{thebibliography}{m}{ + \section*{\refname} + \list{\@biblabel{\arabic{enumiv}}}{ + \dim_set_to_wd:Nn\labelwidth{\@biblabel{#1}} + \dim_set_eq:NN\leftmargin\labelwidth + \dim_add:Nn\leftmargin{\labelsep} + \usecounter{enumiv} % !!! + \cs_set:Nn\p@enumiv{} + \RenewDocumentCommand\theenumiv{}{\arabic{enumiv}} + } + \sloppy + \int_set:Nn\clubpenalty{4000} + \int_set_eq:NN\@clubpenalty\clubpenalty + \int_set:Nn\widowpenalty{4000} +}{ + \cs_set:Nn\@noitemerr{} + \endlist +} +\end{MacroCode} + \end{environment} + \begin{macro*}{\newblock} +\begin{MacroCode}{class} +\DeclareDocumentCommand\newblock{}{ + \skip_horizontal:n{.11em~plus~.33em~minus~.07em} +} +\end{MacroCode} + \end{macro*} + \begin{environment}{theindex} + \changes{0.12}{Use \pkg{multicol} instead of \cs{twocolumn} mode, + removed \cs{@mkboth} call} +\begin{MacroCode}{class} +\DeclareDocumentEnvironment{theindex}{}{ + \begin{multicols}{2}[\section*{\indexname}] + \thispagestyle{plain} + \dim_zero:N\parindent + \skip_set:N\parskip{\c_zero_skip~plus~.3pt} + \dim_zero:N\columnseprule + \dim_set:Nn\columnsep{35pt} + \cs_set_eq:NN\item\@idxitem +}{ + \end{multicols} +} +\end{MacroCode} + \end{environment} + \begin{macro*}{\@idxitem} +\begin{MacroCode}{class} +\DeclareDocumentCommand\@idxitem{}{ + \par + \dim_set:Nn\hangindent{40pt} +} +\end{MacroCode} + \end{macro*} + \begin{macro}{\subitem} +\begin{MacroCode}{class} +\DeclareDocumentCommand\subitem{}{ + \@idxitem + \hspace*{20pt} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\subsubitem} +\begin{MacroCode}{class} +\DeclareDocumentCommand\subsubitem{}{ + \@idxitem + \hspace*{30pt} +} +\end{MacroCode} + \end{macro} + \begin{macro*}{\indexspace} +\begin{MacroCode}{class} +\DeclareDocumentCommand\indexspace{}{ + \par + \skip_vertical:n{10pt~plus~5pt~minus~3pt} +} +\end{MacroCode} + \end{macro*} + + \subsubsection{Miscellaneous} + A macro \cs{comment} (alias \cs{com}/\cs{note}) is defined to let + the user add comments and notes to the document. + \begin{macro}{\__skrapport_comment:n} +\begin{MacroCode}{class} +\cs_new:Npn\__skrapport_comment:n#1{ + {\textbf{\__skrapport_Comment_word: :}~#1} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\comment} + \changes{0.10}{Added macro for comments} + \changes{0.12b}{No longer uses \cs{colorbox} if no color package is loaded} +\begin{MacroCode}{class} +\DeclareDocumentCommand\comment{sm}{ + \IfBooleanTF{#1} + { + \cs_if_exist_use:NT\colorbox{{red!50}} + {\__skrapport_comment:n{#2}} + } + {\marginpar{\__skrapport_comment:n{#2}}} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\com} + \begin{macro}{\note} + \changes{0.10b}{Fixed a silly error in \cs{com} and \cs{note}} +\begin{MacroCode}{class} +\ProvideDocumentCommand\com{sm} + {\IfBooleanTF{#1}{\comment*{#2}}{\comment{#2}}} +\ProvideDocumentCommand\note{sm} + {\IfBooleanTF{#1}{\comment*{#2}}{\comment{#2}}} +\end{MacroCode} + \end{macro} + \end{macro} + + \begin{macro}{\__skrapport_space_if_not_punctuation:} +\begin{MacroCode}{class} +\cs_new:Nn\__skrapport_space_if_not_punctuation:{ + \clist_if_in:noF + {{,},:,;,!,?,-,),'} + {\token_to_meaning:N\l_peek_token} + {\ } +} +\end{MacroCode} + \end{macro} + \begin{macro}{\__skrapport_peek_punctuation:n} + \begin{macro*}{\__skrapport_peek_punctuation:x} +\begin{MacroCode}{class} +\cs_new_nopar:Nn\__skrapport_peek_punctuation:n{ + \mbox{#1} + \peek_meaning_remove:NTF.{}{ + \peek_meaning:NF\ { + \peek_after:Nw\__skrapport_space_if_not_punctuation: + } + } +} +\cs_generate_variant:Nn\__skrapport_peek_punctuation:n{x} +\end{MacroCode} + \end{macro*} + \end{macro} + \begin{macro}{\eg} +\begin{MacroCode}{class} +\DeclareDocumentCommand\eg{}{ + \__skrapport_peek_punctuation:x{\__skrapport_eg_word:} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\ie} +\begin{MacroCode}{class} +\DeclareDocumentCommand\ie{}{ + \__skrapport_peek_punctuation:x{\__skrapport_ie_word:} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\etc} +\begin{MacroCode}{class} +\DeclareDocumentCommand\etc{}{ + \__skrapport_peek_punctuation:x{\__skrapport_etc_word:} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\cf} +\begin{MacroCode}{class} +\DeclareDocumentCommand\cf{}{ + \__skrapport_peek_punctuation:x{\__skrapport_cf_word:} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\viz} +\begin{MacroCode}{class} +\DeclareDocumentCommand\viz{}{ + \__skrapport_peek_punctuation:x{\__skrapport_viz_word:} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\dash} +\begin{MacroCode}{class} +\DeclareDocumentCommand\dash{}{ + \cs_if_exist_use:NT\texorpdfstring + {\unskip\nobreak\thinspace\textemdash\thinspace\ignorespaces}{{ - }} +} +\cs_if_exist_use:NT\DeclareUnicodeCharacter{{2014}{\dash}} +\end{MacroCode} + \end{macro} + + \subsubsection{Color theme support} + Color theme setup. Start by patching commands and declaring + default colors. Not implemented: background colors for e.g. + quote environments and sections headings, different colors + for the different sectioning levels. +\begin{MacroCode}{class} +\bool_if:NT\g__skrapport_color_bool{ + \apptocmd{\bfseries} + {\color{skrapport@boldcolor}}{} + {\msg_warning:nnn{skrapport}{color-patch-failed}{\bfseries}} + \apptocmd{\itshape} + {\color{skrapport@italiccolor}}{} + {\msg_warning:nnn{skrapport}{color-patch-failed}{\itshape}} + \apptocmd{\__skrapport_title_style:} + {\color{skrapport@titlecolor}}{} + {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_title_style:}} + \apptocmd{\__skrapport_smallprint_style:} + {\color{skrapport@smallprintcolor}}{} + {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_smallprint_style:}} + \apptocmd{\__skrapport_abstract_style:} + {\color{skrapport@titlecolor}}{} + {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_abstract_style:}} + \apptocmd{\quote} + {\color{skrapport@quotecolor}}{} + {\msg_warning:nnn{skrapport}{color-patch-failed}{\quote}} + \apptocmd{\__skrapport_caption_name_style:} + {\color{skrapport@captioncolor}}{} + {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_caption_name_style:}} + \apptocmd{\__skrapport_emphstyle:} + {\color{skrapport@emphcolor}}{} + {\msg_warning:nnn{skrapport}{color-patch-failed}{\__skrapport_emphstyle:}} +\end{MacroCode} +% I have no idea why this was here or what difference it makes. These +% things should be using \__skrapport_title_style:. +% \ifskrapport@twocolumn\AtBeginDocument{% +% \renewcommand\section{\@startsection {section}{1}{\z@}% +% {-.999\baselineskip}{0.001\baselineskip}{\bfseries\mathversi%on{bold}\color{skrapport@titlecolor}}} +% \renewcommand\subsection{\@startsection{subsection}{2}{\z@}% +% {\baselineskip}{-.35\baselineskip}{\bfseries\color{skrapport@titlecolor}\unskip}} +% \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% +% {\baselineskip}{-.35\baselineskip}{\itshape\color{skrapport@titlecolor}\unskip}} +% }\fi +% \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% +% {1ex \@plus .25ex \@minus -.25ex}{-1em}{\normalfont\normalsize\bfseries\color{skrapport@titlecolor}}} +% \renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% +% {1ex \@plus .25ex \@minus -.25ex}{-1em}{\normalfont\normalsize\itshape\color{skrapport@titlecolor}}} +\begin{MacroCode}{class} + \AtBeginDocument{\@ifpackageloaded{hyperref}{% + \hypersetup{% + citebordercolor=skrapport@citecolor,citecolor=skrapport@citecolor,% + filebordercolor=skrapport@filecolor,filecolor=skrapport@filecolor,% + linkbordercolor=skrapport@linkcolor,linkcolor=skrapport@linkcolor,% + menubordercolor=skrapport@menucolor,menucolor=skrapport@menucolor,% + urlbordercolor=skrapport@urlcolor,urlcolor=skrapport@urlcolor,% + runbordercolor=skrapport@runcolor,runcolor=skrapport@runcolor% + } + }{}} + \AtBeginDocument{\color{skrapport@defaultcolor}} +\end{MacroCode} + \begin{macro}{\colortheme} + The \cs{colortheme} macro allows the end-user to load color themes + (described later) to customize the colors of the document when the + class is loaded with the \opt{color} option. +\begin{MacroCode}{class} + \DeclareDocumentCommand\colortheme{m}{ + \usepackage{skrapport-colortheme-#1} + } +\end{MacroCode} + \end{macro} +\begin{MacroCode}{class} + \colortheme{default} +} +\end{MacroCode} + + \subsection{Final class setup} + We end the document class by setting a few lengths along with the + page style and page numbering. Also, activate \cs{raggedbottom} and + \cs{onexolumn} (since we always do all the two-column stuff + ourselves anyway). +\begin{MacroCode}{class} +\dim_set:Nn\columnsep{10pt} +\dim_zero:N\columnseprule +\pagestyle{plain} +\pagenumbering{arabic} +\raggedbottom +\onecolumn +\endinput +\end{MacroCode} + + \subsection{Color themes} + As described earlier, the user can load color themes to customize + the appearance of the document if the class was loaded with the + \opt{color} option. Four themes are available by default. + + \subsubsection{Default color theme} + \begin{theme}{Default} + \changes{0.09}{Added default color theme} +\begin{MacroCode}{theme-default} +\RequirePackage{expl3} +\ProvidesExplPackage{skrapport-colortheme-default} + {2012/06/07}{1.0}{skrapport color theme default} +\definecolor{skrapport@citecolor}{named}{green} +\definecolor{skrapport@filecolor}{named}{teal} +\definecolor{skrapport@linkcolor}{named}{red} +\definecolor{skrapport@menucolor}{named}{red} +\definecolor{skrapport@urlcolor}{named}{cyan} +\definecolor{skrapport@runcolor}{named}{teal} +\definecolor{skrapport@boldcolor}{named}{black} +\definecolor{skrapport@titlecolor}{named}{black} +\definecolor{skrapport@italiccolor}{named}{black} +\definecolor{skrapport@smallprintcolor}{named}{black} +\definecolor{skrapport@quotecolor}{named}{black} +\definecolor{skrapport@captioncolor}{named}{black} +\definecolor{skrapport@emphcolor}{named}{black} +\definecolor{skrapport@defaultcolor}{named}{black} +\endinput +\end{MacroCode} + \end{theme} + + \subsubsection{Unscathed color theme} + \begin{theme}{Unscathed} + \changes{0.09}{Added \enquote{Unschathed} color theme} +\begin{MacroCode}{theme-unscathed} +\RequirePackage{expl3} +\ProvidesExplPackage{skrapport-colortheme-unscathed} + {2012/06/07}{1.0}{skrapport color theme unscathed} +\definecolor{skrapport@citecolor}{named}{skrapport@defaultcolor} +\definecolor{skrapport@filecolor}{named}{skrapport@defaultcolor} +\definecolor{skrapport@menucolor}{named}{skrapport@defaultcolor} +\definecolor{skrapport@runcolor}{named}{skrapport@defaultcolor} +\definecolor{skrapport@emphcolor}{HTML}{463335} +\definecolor{skrapport@linkcolor}{HTML}{CF5D3B} +\definecolor{skrapport@urlcolor}{named}{skrapport@linkcolor} +\definecolor{skrapport@titlecolor}{HTML}{B34430} +\definecolor{skrapport@captioncolor}{named}{skrapport@titlecolor} +\definecolor{skrapport@quotecolor}{HTML}{70524A} +\definecolor{skrapport@smallprintcolor}{named}{skrapport@quotecolor} +\endinput +\end{MacroCode} + \end{theme} + + \subsubsection{Cruelwater color theme} + \begin{theme}{Cruelwater} + \changes{0.09}{Added \enquote{Cruelwater} color theme} +\begin{MacroCode}{theme-cruelwater} +\RequirePackage{expl3} +\ProvidesExplPackage{skrapport-colortheme-cruelwater} + {2012/06/07}{1.0}{skrapport color theme cruelwater} +\definecolor{skrapport@citecolor}{named}{black} +\definecolor{skrapport@filecolor}{named}{black} +\definecolor{skrapport@linkcolor}{named}{black} +\definecolor{skrapport@menucolor}{named}{black} +\definecolor{skrapport@urlcolor}{named}{black} +\definecolor{skrapport@runcolor}{named}{black} +\definecolor{skrapport@boldcolor}{HTML}{030C22} +\definecolor{skrapport@titlecolor}{HTML}{20293F} +\definecolor{skrapport@italiccolor}{named}{black} +\definecolor{skrapport@smallprintcolor}{HTML}{A9B0B3} +\definecolor{skrapport@quotecolor}{HTML}{404749} +\definecolor{skrapport@captioncolor}{HTML}{030C22} +\definecolor{skrapport@emphcolor}{HTML}{20293F} +\definecolor{skrapport@defaultcolor}{named}{black} +\endinput +\end{MacroCode} + \end{theme} + + \subsubsection{Violet color theme} + \begin{theme}{Violet} +\changes{0.09}{Added \enquote{Violet} color theme} +\begin{MacroCode}{theme-violet} +\RequirePackage{expl3} +\ProvidesExplPackage{skrapport-colortheme-violet} + {2012/06/07}{1.0}{skrapport color theme violet} +\definecolor{skrapport@citecolor}{HTML}{932444} +\definecolor{skrapport@filecolor}{HTML}{932444} +\definecolor{skrapport@linkcolor}{HTML}{932444} +\definecolor{skrapport@menucolor}{HTML}{932444} +\definecolor{skrapport@urlcolor}{HTML}{932444} +\definecolor{skrapport@runcolor}{HTML}{932444} +\definecolor{skrapport@boldcolor}{HTML}{311A2A} +\definecolor{skrapport@titlecolor}{HTML}{311A2A} +\definecolor{skrapport@italiccolor}{named}{black} +\definecolor{skrapport@smallprintcolor}{HTML}{D6CBCF} +\definecolor{skrapport@quotecolor}{HTML}{463335} +\definecolor{skrapport@captioncolor}{HTML}{311A2A} +\definecolor{skrapport@emphcolor}{HTML}{98758D} +\definecolor{skrapport@defaultcolor}{named}{black} +\endinput +\end{MacroCode} + \end{theme} + + \subsubsection{skdoc color theme} + \begin{theme}{skdoc} +\changes{0.11a}{Added \enquote{skdoc} color theme} +\begin{MacroCode}{theme-skdoc} +\RequirePackage{expl3} +\ProvidesExplPackage{skrapport-colortheme-skdoc} + {2013/04/10}{1.0}{skrapport color theme skdoc} +\definecolor{skrapport@citecolor}{RGB}{140,35,24} +\definecolor{skrapport@filecolor}{RGB}{73,10,61} +\definecolor{skrapport@linkcolor}{RGB}{140,35,24} +\definecolor{skrapport@menucolor}{RGB}{140,35,24} +\definecolor{skrapport@urlcolor}{RGB}{73,10,61} +\definecolor{skrapport@runcolor}{RGB}{73,10,61} +\definecolor{skrapport@boldcolor}{RGB}{73,10,61} +\definecolor{skrapport@titlecolor}{RGB}{11,72,107} +\definecolor{skrapport@italiccolor}{named}{black} +\definecolor{skrapport@smallprintcolor}{RGB}{11,72,107} +\definecolor{skrapport@quotecolor}{RGB}{140,35,24} +\definecolor{skrapport@captioncolor}{RGB}{11,72,107} +\definecolor{skrapport@emphcolor}{RGB}{73,10,61} +\definecolor{skrapport@defaultcolor}{named}{black} +\endinput +\end{MacroCode} + \end{theme} + + \section{Point sizes} + The point size options are pretty much \LaTeX3 translations of the + standard \pkg{article} class option files. There's a lot of duplicate + code here which may be worth to consolidate a bit. + + \subsubsection{Common macros} + We first set up a package providing replacements for \LaTeXe\ macros, + common to all the point size files. +\begin{MacroCode}{size-common} +\RequirePackage{expl3} +\ProvidesExplPackage{skrapport-size-common} + {2013/04/29}{1.0}{skrapport point size option common macros} +\end{MacroCode} + \begin{macro}{\__skrapport_set_font_size:nn}[2] + {Font size} + {Baseline skip?} % !!! +\begin{MacroCode}{size-common} +\cs_new:Npn\__skrapport_set_font_size:nn#1#2{ + \fontsize{#1}{#2} % !!! + \selectfont +} +\end{MacroCode} + \end{macro} +\begin{MacroCode}{size-common} +\endinput +\end{MacroCode} + + \subsubsection{Actual point size files} +\begin{MacroCode}{size-10,size-11,size-12} +\RequirePackage{expl3} +\end{MacroCode} +\begin{MacroCode}{size-10} +\ProvidesExplFile{skrapport-size10pt.clo} + {2013/04/29}{1.0}{skrapport point size option 10pt} +\end{MacroCode} +\begin{MacroCode}{size-11} +\ProvidesExplFile{skrapport-size11pt.clo} + {2013/04/29}{1.0}{skrapport point size option 11pt} +\end{MacroCode} +\begin{MacroCode}{size-12} +\ProvidesExplFile{skrapport-size12pt.clo} + {2013/04/29}{1.0}{skrapport point size option 12pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +\RequirePackage{skrapport-size-common} +\end{MacroCode} + \begin{macro}{\normalsize} +\begin{MacroCode}{size-10,size-11,size-12} +\RenewDocumentCommand\normalsize{}{ +\end{MacroCode} +\begin{MacroCode}{size-10} + \__skrapport_set_font_size:nn{10}{12} + \skip_gset:Nn \abovedisplayskip {10pt~plus~2pt~minus~5pt} + \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~3pt} + \skip_gset:Nn \belowdisplayshortskip {6pt ~plus~3pt~minus~3pt} +\end{MacroCode} +\begin{MacroCode}{size-11} + \__skrapport_set_font_size:nn{11}{13.2} + \skip_gset:Nn \abovedisplayskip {11pt ~plus~3pt ~minus~6pt} + \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~3pt} + \skip_gset:Nn \belowdisplayshortskip {6.5pt~plus~3.5pt~minus~3pt} +\end{MacroCode} +\begin{MacroCode}{size-12} + \__skrapport_set_font_size:nn{12}{14.5} + \skip_gset:Nn \abovedisplayskip {12pt ~plus~3pt ~minus~7pt} + \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~3pt} + \skip_gset:Nn \belowdisplayshortskip {6.5pt~plus~3.5pt~minus~3pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} + \skip_gset_eq:NN\belowdisplayskip \abovedisplayskip + \cs_gset_eq:NN\@listi\@listI +} +\end{MacroCode} + \end{macro} +\begin{MacroCode}{size-10,size-11,size-12} +\normalsize +\end{MacroCode} + \begin{macro}{\small} +\begin{MacroCode}{size-10,size-11,size-12} +\NewDocumentCommand\small{}{ +\end{MacroCode} +\begin{MacroCode}{size-10} + \__skrapport_set_font_size:nn{9}{11} + \skip_gset:Nn \abovedisplayskip {8.5pt~plus~3pt~minus~4pt} + \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~2pt} + \skip_gset:Nn \belowdisplayshortskip {4pt ~plus~2pt~minus~2pt} +\end{MacroCode} +\begin{MacroCode}{size-11} + \__skrapport_set_font_size:nn{10}{12} + \skip_gset:Nn \abovedisplayskip {10pt~plus~2pt~minus~5pt} + \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~2pt} + \skip_gset:Nn \belowdisplayshortskip {6pt ~plus~3pt~minus~3pt} +\end{MacroCode} +\begin{MacroCode}{size-12} + \__skrapport_set_font_size:nn{11}{13.6} + \skip_gset:Nn \abovedisplayskip {11pt ~plus~3pt ~minus~6pt} + \skip_gset:Nn \abovedisplayshortskip {0pt ~plus~3pt} + \skip_gset:Nn \belowdisplayshortskip {6.5pt~plus~3.5pt~minus~3pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} + \skip_gset_eq:NN\belowdisplayskip \abovedisplayskip + \cs_gset:Npn\@listi{ + \dim_gset_eq:NN\leftmargin\leftmargini +\end{MacroCode} +\begin{MacroCode}{size-10} + \skip_gset:Nn\topsep{4pt~plus~2pt~minus~2pt} + \skip_gset:Nn\parsep{2pt~plus~1pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-11} + \skip_gset:Nn\topsep{6pt~plus~2pt~minus~2pt} + \skip_gset:Nn\parsep{3pt~plus~2pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-12} + \skip_gset:Nn\topsep{ 9pt~plus~3pt~minus~5pt} + \skip_gset:Nn\parsep{4.5pt~plus~2pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} + \skip_gset_eq:NN\itemsep\parsep + } +} +\end{MacroCode} + \end{macro} + \begin{macro}{\footnotesize} +\begin{MacroCode}{size-10,size-11,size-12} +\NewDocumentCommand\footnotesize{}{ +\end{MacroCode} +\begin{MacroCode}{size-10} + \__skrapport_set_font_size:nn{8}{9.5} + \skip_gset:Nn \abovedisplayskip {6pt~plus~2pt~minus~4pt} + \skip_gset:Nn \abovedisplayshortskip {0pt~plus~1pt} + \skip_gset:Nn \belowdisplayshortskip {3pt~plus~1pt~minus~2pt} +\end{MacroCode} +\begin{MacroCode}{size-11} + \__skrapport_set_font_size:nn{9}{11} + \skip_gset:Nn \abovedisplayskip {8pt~plus~2pt~minus~4pt} + \skip_gset:Nn \abovedisplayshortskip {0pt~plus~1pt} + \skip_gset:Nn \belowdisplayshortskip {4pt~plus~2pt~minus~2pt} +\end{MacroCode} +\begin{MacroCode}{size-12} + \__skrapport_set_font_size:nn{10}{12} + \skip_gset:Nn \abovedisplayskip {10pt~plus~2pt~minus~5pt} + \skip_gset:Nn \abovedisplayshortskip { 0pt~plus~3pt} + \skip_gset:Nn \belowdisplayshortskip { 6pt~plus~3pt~minus~3pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} + \skip_gset_eq:NN\belowdisplayskip \abovedisplayskip + \cs_gset:Npn\@listi{ + \dim_gset_eq:NN\leftmargin\leftmargini +\end{MacroCode} +\begin{MacroCode}{size-10} + \skip_gset:Nn\topsep{3pt~plus~1pt~minus~1pt} + \skip_gset:Nn\parsep{2pt~plus~1pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-11} + \skip_gset:Nn\topsep{4pt~plus~2pt~minus~2pt} + \skip_gset:Nn\parsep{2pt~plus~1pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-12} + \skip_gset:Nn\topsep{6pt~plus~2pt~minus~2pt} + \skip_gset:Nn\parsep{3pt~plus~2pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} + \skip_gset_eq:NN\itemsep\parsep + } +} +\end{MacroCode} + \end{macro} + \begin{macro}{\scriptsize} +\begin{MacroCode}{size-10,size-11,size-12} +\NewDocumentCommand\scriptsize{}{ +\end{MacroCode} +\begin{MacroCode}{size-10} + \__skrapport_set_font_size:nn{7}{8} +\end{MacroCode} +\begin{MacroCode}{size-11,size-12} + \__skrapport_set_font_size:nn{8}{9.5} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\tiny} +\begin{MacroCode}{size-10,size-11,size-12} +\NewDocumentCommand\tiny{}{ +\end{MacroCode} +\begin{MacroCode}{size-10} + \__skrapport_set_font_size:nn{5}{6} +\end{MacroCode} +\begin{MacroCode}{size-11,size-12} + \__skrapport_set_font_size:nn{6}{7} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\large} +\begin{MacroCode}{size-10,size-11,size-12} +\NewDocumentCommand\large{}{ +\end{MacroCode} +\begin{MacroCode}{size-10,size-11} + \__skrapport_set_font_size:nn{12}{14} +\end{MacroCode} +\begin{MacroCode}{size-12} + \__skrapport_set_font_size:nn{14}{18} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\Large} +\begin{MacroCode}{size-10,size-11,size-12} +\NewDocumentCommand\Large{}{ +\end{MacroCode} +\begin{MacroCode}{size-10,size-11} + \__skrapport_set_font_size:nn{14}{18} +\end{MacroCode} +\begin{MacroCode}{size-12} + \__skrapport_set_font_size:nn{17}{22} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\LARGE} +\begin{MacroCode}{size-10,size-11,size-12} +\NewDocumentCommand\LARGE{}{ +\end{MacroCode} +\begin{MacroCode}{size-10,size-11} + \__skrapport_set_font_size:nn{17}{22} +\end{MacroCode} +\begin{MacroCode}{size-12} + \__skrapport_set_font_size:nn{20}{25} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\huge} +\begin{MacroCode}{size-10,size-11,size-12} +\NewDocumentCommand\huge{}{ +\end{MacroCode} +\begin{MacroCode}{size-10,size-11} + \__skrapport_set_font_size:nn{20}{25} +\end{MacroCode} +\begin{MacroCode}{size-12} + \__skrapport_set_font_size:nn{25}{30} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +} +\end{MacroCode} + \end{macro} + \begin{macro}{\Huge} +\begin{MacroCode}{size-10,size-11,size-12} +\NewDocumentCommand\Huge{}{ +\end{MacroCode} +\begin{MacroCode}{size-10,size-11} + \__skrapport_set_font_size:nn{25}{30} +\end{MacroCode} +\begin{MacroCode}{size-12} + \__skrapport_set_font_size:nn{30}{36} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +} +\end{MacroCode} + \end{macro} +\begin{MacroCode}{size-10} +\dim_set:Nn\parindent {15pt} +\end{MacroCode} +\begin{MacroCode}{size-11} +\dim_set:Nn\parindent {17pt} +\end{MacroCode} +\begin{MacroCode}{size-12} +\dim_set:Nn\parindent {1.5em} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +\skip_set:Nn\smallskipamount{ 3pt~plus~1pt~minus~1pt} +\skip_set:Nn\medskipamount { 6pt~plus~2pt~minus~2pt} +\skip_set:Nn\bigskipamount {12pt~plus~4pt~minus~4pt} +\dim_set:Nn\headheight{12pt} +\dim_set:Nn\headsep {25pt} +\dim_set:Nn\topskip {10pt} +\dim_set:Nn\footskip {30pt} +\dim_set:Nn\maxdepth { 5pt} +\end{MacroCode} + These (\emph{i.e.} text width and height) are hopefully overwritten + by \pkg{typearea} later, so we don't bother much with them. +\begin{MacroCode}{size-10,size-11,size-12} +\dim_set:Nn\textwidth {\paperwidth-2cm} +\dim_set:Nn\textheight{\paperheight-2cm} +\dim_set:Nn\oddsidemargin {.2cm} +\dim_set:Nn\evensidemargin {1cm} +\dim_set:Nn\marginparsep {11pt} +\dim_set:Nn\marginparpush {5pt} +\dim_set:Nn\marginparwidth {.8cm-\marginparsep} +\dim_set:Nn\topmargin{\paperheight-1cm + -\headheight-\headsep + -\textheight-\footskip + -.5\topmargin} +\end{MacroCode} +\begin{MacroCode}{size-10} +\dim_set:Nn\footnotesep{6.65pt} +\skip_set:Nn{\skip\footins} { 9pt~plus~4pt~minus~2pt} +\skip_set:Nn\floatsep {12pt~plus~2pt~minus~2pt} +\skip_set:Nn\textfloatsep {20pt~plus~2pt~minus~4pt} +\skip_set:Nn\intextsep {12pt~plus~2pt~minus~2pt} +\skip_set:Nn\dblfloatsep {12pt~plus~2pt~minus~2pt} +\skip_set:Nn\dbltextfloatsep{20pt~plus~2pt~minus~4pt} +\end{MacroCode} +\begin{MacroCode}{size-11} +\dim_set:Nn\footnotesep{7.7pt} +\skip_set:Nn{\skip\footins} {10pt~plus~4pt~minus~2pt} +\skip_set:Nn\floatsep {12pt~plus~2pt~minus~2pt} +\skip_set:Nn\textfloatsep {20pt~plus~2pt~minus~4pt} +\skip_set:Nn\intextsep {12pt~plus~2pt~minus~2pt} +\skip_set:Nn\dblfloatsep {12pt~plus~2pt~minus~2pt} +\skip_set:Nn\dbltextfloatsep{20pt~plus~2pt~minus~4pt} +\end{MacroCode} +\begin{MacroCode}{size-12} +\dim_set:Nn\footnotesep{8.4pt} +\skip_set:Nn{\skip\footins} {10.8pt~plus~4pt~minus~2pt} +\skip_set:Nn\floatsep {12pt ~plus~2pt~minus~4pt} +\skip_set:Nn\textfloatsep {20pt ~plus~2pt~minus~4pt} +\skip_set:Nn\intextsep {14pt ~plus~4pt~minus~4pt} +\skip_set:Nn\dblfloatsep {14pt ~plus~2pt~minus~4pt} +\skip_set:Nn\dbltextfloatsep{20pt ~plus~2pt~minus~4pt} +\end{MacroCode} + These six have been changed slightly compared to \LaTeXe. +\begin{MacroCode}{size-10,size-11,size-12} +\skip_set:Nn\@fptop{ 5pt} +\end{MacroCode} +\begin{MacroCode}{size-10} +\skip_set:Nn\@fpsep{10pt~plus~2fil} +\end{MacroCode} +\begin{MacroCode}{size-11} +\skip_set:Nn\@fpsep{11pt~plus~2fil} +\end{MacroCode} +\begin{MacroCode}{size-12} +\skip_set:Nn\@fpsep{12pt~plus~2fil} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +\skip_set:Nn\@fpbot{ 5pt} +\skip_set:Nn\@dblfptop{ 5pt} +\end{MacroCode} +\begin{MacroCode}{size-10} +\skip_set:Nn\@dblfpsep{10pt~plus~2fil} +\end{MacroCode} +\begin{MacroCode}{size-11} +\skip_set:Nn\@dblfpsep{11pt~plus~2fil} +\end{MacroCode} +\begin{MacroCode}{size-12} +\skip_set:Nn\@dblfpsep{12pt~plus~2fil} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +\skip_set:Nn\@dblfpbot{ 5pt} +\end{MacroCode} +\begin{MacroCode}{size-10} +\skip_set:Nn\partopsep{2pt~plus~1pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-11} +\skip_set:Nn\partopsep{3pt~plus~1pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-12} +\skip_set:Nn\partopsep{3pt~plus~2pt~minus~2pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +\cs_set:Npn\@listi{ + \dim_set_eq:NN\leftmargin\leftmargini +\end{MacroCode} +\begin{MacroCode}{size-10} + \skip_set:Nn\parsep {4pt~plus~2pt~minus~1pt} + \skip_set:Nn\topsep {8pt~plus~2pt~minus~4pt} + \skip_set:Nn\itemsep{4pt~plus~2pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-11} + \skip_set:Nn\parsep {4.5pt~plus~2pt~minus~1pt} + \skip_set:Nn\topsep { 9pt~plus~3pt~minus~5pt} + \skip_set:Nn\itemsep{4.5pt~plus~2pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-12} + \skip_set:Nn\parsep { 5pt~plus~2.5pt~minus~1pt} + \skip_set:Nn\topsep {10pt~plus~4pt ~minus~6pt} + \skip_set:Nn\itemsep{ 5pt~plus~2.5pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +} +\cs_set_eq:NN\@listI\@listi +\dim_gset_eq:NN\leftmargin\leftmargini +\end{MacroCode} +\begin{MacroCode}{size-10} +\skip_gset:Nn\parsep {4pt~plus~2pt~minus~1pt} +\skip_gset:Nn\topsep {8pt~plus~2pt~minus~4pt} +\skip_gset:Nn\itemsep{4pt~plus~2pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-11} +\skip_gset:Nn\parsep {4.5pt~plus~2pt~minus~1pt} +\skip_gset:Nn\topsep { 9pt~plus~3pt~minus~5pt} +\skip_gset:Nn\itemsep{4.5pt~plus~2pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-12} +\skip_gset:Nn\parsep { 5pt~plus~2.5pt~minus~1pt} +\skip_gset:Nn\topsep {10pt~plus~4pt ~minus~6pt} +\skip_gset:Nn\itemsep{ 5pt~plus~2.5pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} +\cs_set:Npn\@listii{ + \dim_set_eq:NN\leftmargin\leftmarginii + \dim_set:Nn\labelwidth{\leftmarginii-\labelsep} +\end{MacroCode} +\begin{MacroCode}{size-10} + \skip_set:Nn\parsep {2pt~plus~1pt~minus~1pt} + \skip_set:Nn\topsep {4pt~plus~2pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-11} + \skip_set:Nn\parsep { 2pt~plus~1pt~minus~1pt} + \skip_set:Nn\topsep {4.5pt~plus~2pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-12} + \skip_set:Nn\parsep {2.5pt~plus~1pt ~minus~1pt} + \skip_set:Nn\topsep { 5pt~plus~2.5pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} + \skip_set_eq:NN\itemsep\parsep +} +\cs_set:Npn\@listiii{ + \dim_set_eq:NN\leftmargin\leftmarginiii + \dim_set:Nn\labelwidth{\leftmarginiii-\labelsep} + \skip_set_eq:NN\parsep\c_zero_skip +\end{MacroCode} +\begin{MacroCode}{size-10,size-11} + \skip_set:Nn\topsep {2pt~plus~1pt~minus~1pt} + \skip_set:Nn\partopsep{1pt~plus~0pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-12} + \skip_set:Nn\topsep {2.5pt~plus~1pt~minus~1pt} + \skip_set:Nn\partopsep{ 1pt~plus~0pt~minus~1pt} +\end{MacroCode} +\begin{MacroCode}{size-10,size-11,size-12} + \skip_set_eq:NN\itemsep\topsep +} +\cs_set:Npn\@listiv{ + \dim_set_eq:NN\leftmargin\leftmarginiv + \dim_set:Nn\labelwidth{\leftmarginiv-\labelsep} +} +\cs_set:Npn\@listv{ + \dim_set_eq:NN\leftmargin\leftmarginv + \dim_set:Nn\labelwidth{\leftmarginv-\labelsep} +} +\cs_set:Npn\@listvi{ + \dim_set_eq:NN\leftmargin\leftmarginvi + \dim_set:Nn\labelwidth{\leftmarginvi-\labelsep} +} +\endinput +\end{MacroCode} + + \Finale + \section{Installation} + The easiest way to install this package is using the package + manager provided by your \LaTeX\ installation if such a program + is available. Failing that, provided you have obtained the package + source (\file{skrapport.tex} and \file{Makefile}) from either CTAN + or Github, running \texttt{make install} inside the source directory + works well. This will extract the documentation and code from + \file{skrapport.tex}, install all files into the TDS tree at + \texttt{TEXMFHOME} and run \texttt{mktexlsr}. + + If you want to extract code and documentation without installing + the package, run \texttt{make all} instead. If you insist on not + using \texttt{make}, remember that packages distributed using + \pkg{skdoc} must be extracted using \texttt{pdflatex}, \emph{not} + \texttt{tex} or \texttt{latex}. + + \PrintChanges + \PrintIndex + \printbibliography +\end{document} -- cgit v1.2.3