%% regulatory.tex
%% Copyright 2024 E. Nijenhuis
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% 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.3c 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 E. Nijenhuis.
%
% This work consists of the files listed in the meta-comment of
% regulatory-struct.dtx.
\translation{%
    \title{Package \package{regulatory}\thanks{This document corresponds to \textsf{regulatory}~\packageversion, released on \packagedate.}}
}{%
    \title{Het \package{regulatory} pakket\thanks{Dit document hoort bij \textsf{regulatory}~\packageversion, uitgebracht op \packagedate.}}%
}
% The standing notice on the title page comes from the packaging tree and is written
% in English there. The Dutch manual says the same thing in Dutch; the address and
% the name of the maintainer are the same either way.
\translation{}{%
    \MaintainedBy{Dit bestand wordt onderhouden door \Xerdi.\\%
    Foutmeldingen kunnen worden gemeld op\\%
    \url{\projecturl}.}%
}
\author{Erik Nijenhuis\\
\href{mailto:erik@xerdi.com}{erik@xerdi.com}}
\hypersetup{pdfauthor={Erik Nijenhuis <erik@xerdi.com>}}
\date{\packagedate}
\maketitle
\begin{abstract}
    % Structuur %
    \translation{%
        The \package{regulatory} package is written for legal professionals in a broad sense. It provides the
        structures such a document is built from\,---\,articles, paragraphs, points and definitions\,---\,without
        taking any of \LaTeX{} away.%
    }{%
        Het \package{regulatory} pakket is geschreven voor juristen in brede zin.
        Het biedt de structuren waaruit zo'n document is opgebouwd\,---\,artikelen, leden, onderdelen en
        definities\,---\,zonder iets van \LaTeX{} weg te nemen.%
    }

    % Verwijzen %
    \translation{%
        Referring within the legal domain is a good deal harder than it looks, so this package refers the way
        \LaTeX{} does: by labelling what is referred to and naming the label. The \cmd{\rref}, \cmd{\nref} and
        \cmd{\aref} families word the reference from there, in Dutch or in English.%
    }{%
        Verwijzen binnen het juridisch domein is lastiger dan het lijkt, en daarom verwijst dit pakket zoals
        \LaTeX{} dat doet: door te labelen waarnaar verwezen wordt en dat label te noemen. De macrofamilies
        \cmd{\rref}, \cmd{\nref} en \cmd{\aref} verwoorden de verwijzing van daaruit, in het Nederlands of in
        het Engels.%
    }

    % Definities %
    \translation{%
        Definitions are kept in one \BibTeX{} file that serves every document citing the same terms, and they
        are cited with the \cmd{\gls} family of \package{glossaries}, which this package builds on rather than
        replaces.%
    }{%
        Definities worden in één \BibTeX{}-bestand bijgehouden dat ieder document bedient dat dezelfde
        begrippen aanhaalt, en ze worden aangehaald met de \cmd{\gls} familie van \package{glossaries}, waarop
        dit pakket voortbouwt in plaats van hem te vervangen.%
    }
    % Externe Documenten %
    \translation{%
        Articles, paragraphs, points and definitions of \emph{another} document written with this package are
        referred to the same way, so two documents can name each other's provisions and share each other's
        terms\,---\,terms and conditions and a maintenance agreement, say. The document referred to can be
        embedded in the PDF file as an attachment, so that the reader has it in hand.%
    }{%
        Naar artikelen, leden, onderdelen en definities van een \emph{ander} document dat met dit pakket
        geschreven is wordt op dezelfde manier verwezen, zodat twee documenten elkaars bepalingen kunnen
        noemen en elkaars begrippen kunnen delen\,---\,algemene voorwaarden en een onderhoudsovereenkomst,
        b\ij{}voorbeeld. Het document waarnaar verwezen wordt kan als bijlage in het PDF-bestand worden
        ingesloten, zodat de lezer het bij de hand heeft.%
    }
\end{abstract}

\clearpage
% A listing cannot go inside the argument of \translation -- lstlisting reads its
% own body -- so a listing whose content has to differ between the two manuals is
% guarded with this instead of passed to that macro.
\newif\ifenglishmanual
\ifthenelse{\equal{\translation{en}{nl}}{en}}{\englishmanualtrue}{\englishmanualfalse}
% The implementation is documented down to subsubsection level, which has no place
% in the table of contents of the manual.
\setcounter{tocdepth}{2}
\tableofcontents
\clearpage

\section{\translation{Usage}{Gebruik}}\label{sec:usage}
\translation{%
    This bundle writes PDF, so the engine is \texttt{pdflatex} or \texttt{lualatex}.
    There is an HTML conversion as well, which runs on \texttt{make4ht} and needs a configuration of its
    own; see \zcref{sec:html}.%
}{%
    Deze bundel schrijft PDF, dus de engine is \texttt{pdflatex} of \texttt{lualatex}.
    Er is ook een HTML-conversie, die op \texttt{make4ht} draait en een eigen configuratie nodig heeft;
    zie \zcref{sec:html}.%
}
\begin{lstlisting}[style=tex,caption={main.tex},label=code:simple]
\documentclass[dutch]{article}
\usepackage{regulatory}
\begin{document}
    \article{...}
\end{document}
\end{lstlisting}
\translation{%
    \package{regulatory} itself is a wrapper and nothing more: it loads the six modules below and hands
    every option to the first of them.
    Each module can be loaded on its own, and each asks for what it needs, so the order below is the
    dependency chain rather than a requirement.%
}{%
    \package{regulatory} zelf is niet meer dan een omhulsel: het laadt de zes modules hieronder en geeft
    iedere optie door aan de eerste ervan.
    Elke module is ook afzonderlijk te laden, en elke module vraagt zelf om wat hij nodig heeft, dus de
    volgorde hieronder is de afhankelijkheidsketen en geen eis.%
}
\begin{labeling}{\package{regulatory-attachments}}
    \addtokomafont{labelinglabel}{\ttfamily}
    \item[regulatory-struct] \translation{%
        the structures of \zcref{sec:struct}. This module is the base of the bundle: it holds the options
        of all of them and reads \file{regulatory.cfg}.%
    }{%
        de structuren van \zcref{sec:struct}. Deze module vormt de basis van de bundel: hij bevat de
        opties van alle modules en leest \file{regulatory.cfg}.%
    }
    \item[regulatory-defs] \translation{%
        the definitions and definition lists of \zcref{sec:defs}.%
    }{%
        de definities en definitielijsten van \zcref{sec:defs}.%
    }
    \item[regulatory-ref] \translation{%
        the reference macro families of \zcref{sec:ref} and the language support of \zcref{sec:lang}.%
    }{%
        de verwijsmacrofamilies van \zcref{sec:ref} en de taalondersteuning van \zcref{sec:lang}.%
    }
    \item[regulatory-attachments] \translation{%
        the interdocument references and PDF attachments of \zcref{sec:extern}, which loads
        \package{regulatory-ref} and \package{regulatory-defs} in turn.%
    }{%
        de interdocumentaire verwijzingen en PDF-bijlagen van \zcref{sec:extern}, die op zijn beurt
        \package{regulatory-ref} en \package{regulatory-defs} laadt.%
    }
    \item[regulatory-sign] \translation{%
        the signature fields of \zcref{sec:sign}. It emits nothing until one of its two commands is used.%
    }{%
        de handtekeningvelden van \zcref{sec:sign}. Deze drukt niets af totdat een van zijn twee
        commando's gebruikt wordt.%
    }
    \item[regulatory-sources] \translation{%
        the citations of legislation outside the document of \zcref{sec:sources}.%
    }{%
        de aanhalingen van regelgeving buiten het document van \zcref{sec:sources}.%
    }
\end{labeling}
\translation{%
    A seventh module, \package{regulatory-md}, comes on top of these as soon as \package{markdown} is
    loaded, whichever order the two are in (see \zcref{sec:md}).
    The HTML conversion is not a module but a \package{tex4ht} configuration, \file{regulatory.4ht}, which
    \texttt{make4ht} finds by itself.%
}{%
    Een zevende module, \package{regulatory-md}, komt daar bovenop zodra \package{markdown} geladen is, in
    welke volgorde de twee ook staan (zie \zcref{sec:md}).
    De HTML-conversie is geen module maar een \package{tex4ht}-configuratie, \file{regulatory.4ht}, die
    \texttt{make4ht} zelf vindt.%
}\\

\noindent
\translation{%
    Every option is a key of the \texttt{/regulatory} family, administered by
    \package{regulatory-struct} for the whole bundle.
    The example above passes none, which means these defaults hold:%
}{%
    Iedere optie is een sleutel van de familie \texttt{/regulatory}, die
    \package{regulatory-struct} voor de hele bundel bijhoudt.
    Het voorbeeld hierboven geeft er geen mee, wat inhoudt dat deze standaardwaarden gelden:%
}
\begin{labeling}{\option{sourcestyle}\quad\texttt{alttree}}
    \addtokomafont{labelinglabel}{\ttfamily}
    \item[bib2gls\quad true] \DescribeOption[noprint]{bib2gls}\translation{%
        definition lists are built with \texttt{bib2gls}. Pass \option{bib2gls=false} to have them written
        as \TeX{} code instead.%
    }{%
        definitielijsten worden met \texttt{bib2gls} gebouwd. Geef \option{bib2gls=false} mee om ze in
        plaats daarvan als \TeX{}-code te laten schrijven.%
    }
    \item[md\quad false] \DescribeOption[noprint]{md}\translation{%
        loading \package{markdown} is left to the document. With \option{md} the package loads it, which
        it has to do before \package{enumitem}.%
    }{%
        het laden van \package{markdown} wordt aan het document gelaten. Met \option{md} laadt het pakket
        het zelf, wat vóór \package{enumitem} moet gebeuren.%
    }
    \item[alldefs\quad false] \DescribeOption[noprint]{alldefs}\translation{%
        a definition list holds the definitions the document uses. With \option{alldefs} it holds every
        declared definition, which is what Terms and Conditions want, where not every term necessarily
        appears in the text.%
    }{%
        een definitielijst bevat de definities die het document gebruikt. Met \option{alldefs} bevat hij
        iedere gedeclareerde definitie, wat Algemene Voorwaarden willen, waarin niet ieder begrip per se
        in de tekst voorkomt.%
    }
    \item[legacy\quad false] \DescribeOption[noprint]{legacy}\translation{%
        the conjunction of \zcref{sec:ref}. With \option{legacy} the older one is used, see
        \cmd{\setjuncto}.%
    }{%
        de conjunctie van \zcref{sec:ref}. Met \option{legacy} wordt de verouderde gebruikt, zie
        \cmd{\setjuncto}.%
    }
    \item[nameinlink\quad true] \DescribeOption[noprint]{nameinlink}\translation{%
        the hyperlink of a reference is drawn around the label as a whole. With
        \option{nameinlink=false} it is drawn around the number only.%
    }{%
        de hyperlink van een verwijzing wordt om het gehele label heen getrokken. Met
        \option{nameinlink=false} alleen om het nummer.%
    }
    \item[defstyle\quad alttree] \DescribeOption[noprint]{defstyle}\translation{%
        the glossary style \cmd{\printdefs} falls back on when it is given none; see \zcref{sec:defs}.%
    }{%
        de woordenlijststijl waar \cmd{\printdefs} op terugvalt als hij er geen krijgt; zie
        \zcref{sec:defs}.%
    }
    \item[sourcestyle\quad full] \DescribeOption[noprint]{sourcestyle}\translation{%
        whether a citation of an external source is written out (\texttt{full}) or abbreviated
        (\texttt{short}); see \zcref{sec:sources}. It answers to \option{bronstijl} as well, and to
        \texttt{voluit} and \texttt{verkort} as values. A value that is none of the four is refused where
        it is given rather than emptying every lookup that reads it.%
    }{%
        of een aanhaling van een externe bron voluit (\texttt{full}) of verkort (\texttt{short})
        geschreven wordt; zie \zcref{sec:sources}. Hij luistert ook naar \option{bronstijl}, en naar
        \texttt{voluit} en \texttt{verkort} als waarden. Een waarde die geen van de vier is wordt
        geweigerd waar hij gegeven wordt in plaats van iedere opzoeking die hem leest leeg te maken.%
    }
    \item[attachmentlink\quad goto] \DescribeOption[noprint]{attachmentlink}\translation{%
        how an attachment of \zcref{sec:extern} is opened from the page: with an embedded go-to
        action (\texttt{goto}) or with a file attachment annotation
        (\option{attachmentlink=annotation}). The two differ in what they mean, in which viewers
        act on them and in what the PDF standards ask of them; \zcref{sec:attachmentlink} sets them
        side by side. Either way the file is also in the attachment pane of the viewer, which needs
        neither.%
    }{%
        hoe een bijlage uit \zcref{sec:extern} vanaf de pagina geopend wordt: met een embedded go-to
        action (\texttt{goto}) of met een file attachment annotatie
        (\option{attachmentlink=annotation}). De twee verschillen in wat ze betekenen, in welke
        viewers eraan gehoor geven en in wat de PDF-standaarden ervan vragen;
        \zcref{sec:attachmentlink} zet ze naast elkaar. Hoe dan ook staat het bestand ook in het
        bijlagenpaneel van de viewer, dat geen van beide nodig heeft.%
    }
\end{labeling}
\translation{%
    Coloured borders around hyperlinks are hidden with \cmd{\hypersetup}\marg{hidelinks}, since this
    package loads \package{hyperref} itself.
    A file \file{regulatory.cfg} next to the document is read before the options given to the package are
    processed, so it can set other defaults for a whole directory of documents at once; the log says which
    of the two happened. It is read while the package loads, so it may require a package a house depends
    on as well.

    That is worth knowing for one thing this release takes away. \package{xifthen} used to be a
    prerequisite and is not one any more, since nothing here uses a command of it that plain
    \package{ifthen} does not have. It pulled in \package{calc}, which this bundle never used either, so
    \package{calc} is no longer there for the asking. A document that writes \cmd{\widthof},
    \cmd{\heightof} or one of the \package{calc} arithmetic forms was leaning on that and stops with an
    undefined command; it loads \cmd{\usepackage}\marg{calc} itself from here on, or a whole directory of
    documents answers it once in \file{regulatory.cfg}.%
}{%
    Gekleurde kaders van hyperlinks worden verborgen met \cmd{\hypersetup}\marg{hidelinks}, aangezien dit
    pakket \package{hyperref} zelf laadt.
    Een bestand \file{regulatory.cfg} naast het document wordt gelezen vóór de opties die aan het pakket
    meegegeven zijn verwerkt worden, zodat het andere standaardwaarden kan zetten voor een hele map met
    documenten tegelijk; de log vermeldt welke van de twee er was. Het wordt gelezen terwijl het pakket
    laadt, dus het mag ook een pakket vereisen waar een huis van afhangt.

    Dat is het weten waard voor één ding dat deze uitgave weghaalt. \package{xifthen} was een vereiste en
    is dat niet meer, aangezien niets hier een commando van dat pakket gebruikt dat het gewone
    \package{ifthen} niet heeft. Het trok \package{calc} mee, dat deze bundel evenmin ooit gebruikte, dus
    \package{calc} is er niet langer vanzelf. Een document dat \cmd{\widthof}, \cmd{\heightof} of een van
    de rekenvormen van \package{calc} schrijft leunde daarop en houdt op met een ongedefinieerd commando;
    het laadt voortaan zelf \cmd{\usepackage}\marg{calc}, of een hele map documenten beantwoordt het in
    één keer in \file{regulatory.cfg}.%
}\\

\noindent
\translation{%
    A document that attaches other documents (see \zcref{sec:extern}) needs the PDF management of
    \LaTeX{}, which is activated with \cmd{\DocumentMetadata}\marg{} in front of \cmd{\documentclass}.
    Without it, every attachment is typeset as plain text and the package says so once.

    A source that is also converted to HTML declares it conditionally, and this is the one line to
    write. Under \package{tex4ht} the same declaration pulls in the list code of \LaTeX{} and leaves
    the conversion nothing to turn a \texttt{paras} item into, so the items come out as running text;
    \zcref{sec:html} has the measurement. \package{tex4ht} defines \cmd{\HCode} before it reads the
    document, so that is what the line asks. Every example of this bundle is written this way, and a
    run that gets it wrong is told so rather than left to the result.%
}{%
    Een document dat andere documenten als bijlage voegt (zie \zcref{sec:extern}) heeft de
    PDF-administratie van \LaTeX{} nodig, die geactiveerd wordt met \cmd{\DocumentMetadata}\marg{}
    vóór \cmd{\documentclass}.
    Zonder dat wordt iedere bijlage als platte tekst gezet en meldt het pakket dat eenmalig.

    Een bron die ook naar HTML wordt omgezet declareert hem voorwaardelijk, en dat is de ene regel om
    te schrijven. Onder \package{tex4ht} haalt diezelfde declaratie de lijstcode van \LaTeX{} binnen
    en laat de omzetting niets om een \texttt{paras} onderdeel in om te zetten, zodat de onderdelen
    als lopende tekst verschijnen; \zcref{sec:html} bevat de meting. \package{tex4ht} definieert
    \cmd{\HCode} voordat het het document leest, en daar vraagt de regel naar. Ieder voorbeeld van
    deze bundel is zo geschreven, en een bouw die het misdoet krijgt dat te horen in plaats van dat
    het aan de uitkomst wordt overgelaten.%
}
\begin{lstlisting}[style=tex,caption={\translation{One source, both outputs}{Eén bron, beide uitvoerformaten}},label=code:metadata]
\ifdefined\HCode\else\IfDocumentMetadataTF{}{\DocumentMetadata{}}\fi
\documentclass[dutch]{article}
\usepackage{regulatory}
\end{lstlisting}
\translation{%
    The \cmd{\IfDocumentMetadataTF} guard leaves a declaration that is already there alone, which is
    what lets the same source be built once more with a PDF standard declared in front of it; that is
    how the cases of \zcref{sec:conformance} are made.%
}{%
    De wacht \cmd{\IfDocumentMetadataTF} laat een declaratie die er al staat met rust, en dat is wat
    dezelfde bron nog een keer laat bouwen met een PDF-standaard ervóór gedeclareerd; zo zijn de
    gevallen van \zcref{sec:conformance} gemaakt.%
}\\

\noindent
\translation{%
    The example of \zcref{code:simple} can be generated to PDF as follows:%
}{%
    Het voorbeeld van \zcref{code:simple} kan als volgt gegenereerd worden naar PDF:%
}
\begin{lstlisting}[style=bash,caption={\translation{Commandline examples}{Commandline voorbeelden}}]
pdflatex main
# Or
lualatex main
# Or keep generating
latexmk -pvc -lualatex -interaction=nonstopmode main
\end{lstlisting}

\noindent
\translation{%
    A document with definition lists adds a step between the \LaTeX{} runs:%
}{%
    Een document met definitielijsten voegt een stap tussen de \LaTeX{}-draaien toe:%
}
\begin{lstlisting}[style=bash,caption={\translation{Commandline with definitions}{Commandline met definities}}]
lualatex main
bib2gls main
lualatex main
lualatex main
# Or for bibtex
lualatex main
makeglossaries main
lualatex main
lualatex main
\end{lstlisting}
\translation{%
    Under \texttt{latexmk}, \texttt{bib2gls} or \texttt{makeglossaries} can be run in a terminal of its
    own: \texttt{latexmk} sees the files change and typesets the document again.%
}{%
    Onder \texttt{latexmk} kunnen \texttt{bib2gls} en \texttt{makeglossaries} in een eigen terminal
    draaien: \texttt{latexmk} ziet de bestanden wijzigen en zet het document opnieuw.%
}

\clearpage

\section{\translation{Before you start}{Voordat u begint}}\label{sec:requirements}
\translation{%
    What this bundle needs, what it is measured on, and what it cannot do. Everything here is treated at
    length further on; this section is the short answer to whether \package{regulatory} fits a document
    before it is written around it.%
}{%
    Wat deze bundel nodig heeft, waaraan hij gemeten is, en wat hij niet kan. Alles hier komt verderop
    uitgebreid aan bod; dit onderdeel is het korte antwoord op de vraag of \package{regulatory} bij een
    document past voordat dat document eromheen geschreven wordt.%
}

\subsection{\translation{Engines and prerequisites}{Engines en vereisten}}
\translation{%
    The engine is \texttt{pdflatex} or \texttt{lualatex}: both produce PDF directly, and every example of
    this bundle is typeset with both on every run of the suite. Nothing here depends on either of the two,
    and no difference between them is known to this manual. \texttt{xelatex} and a DVI route are not
    tested and are not claimed.

    The \option{md} route is the exception: \cmd{\markdownInput} reads its source through the Lua
    interpreter under \texttt{lualatex} and reaches for shell escape under \texttt{pdflatex}, so a Markdown
    document is more comfortable under \texttt{lualatex}.

    All \TeX{} dependencies of the bundle are available in \TeX{} Live and MiK\kern-.1em\TeX{}:
    \package{enumitem}, \package{fmtcount}, \package{glossaries} and \package{glossaries-extra},
    \package{hyperref}, \package{scrextend}, \package{titlesec} (only while the new heading interface is
    unavailable), \package{translations}, \package{xcolor}, \package{xstring} and the \package{zref}
    family. Two packages that earlier releases pulled in are gone; see \zcref{sec:migration}.

    Outside \TeX{} there is one prerequisite, and only on one route: the default definition route runs
    \texttt{bib2gls}, which needs Java. \zcref[S]{sec:defs} has the three routes that do not.%
}{%
    De engine is \texttt{pdflatex} of \texttt{lualatex}: beide leveren rechtstreeks PDF, en ieder voorbeeld
    van deze bundel wordt bij iedere draai van de suite met allebei gezet. Niets hier hangt van een van de
    twee af, en deze handleiding kent geen verschil tussen beide. \texttt{xelatex} en een DVI-route zijn
    niet getest en worden niet geclaimd.

    De route \option{md} is de uitzondering: \cmd{\markdownInput} leest zijn bron via de Lua-interpreter
    onder \texttt{lualatex} en grijpt onder \texttt{pdflatex} naar shell escape, dus een Markdown-document
    zit onder \texttt{lualatex} ruimer in zijn jas.

    Alle \TeX{}-afhankelijkheden van de bundel zijn beschikbaar in \TeX{} Live en MiK\kern-.1em\TeX{}:
    \package{enumitem}, \package{fmtcount}, \package{glossaries} en \package{glossaries-extra},
    \package{hyperref}, \package{scrextend}, \package{titlesec} (alleen zolang de nieuwe kopinterface er
    niet is), \package{translations}, \package{xcolor}, \package{xstring} en de \package{zref} familie.
    Twee pakketten die eerdere uitgaven meetrokken zijn weg; zie \zcref{sec:migration}.

    Buiten \TeX{} is er één vereiste, en maar op één route: de standaardroute voor definities draait
    \texttt{bib2gls}, dat Java nodig heeft. \zcref[S]{sec:defs} bevat de drie routes die dat niet doen.%
}

\subsection{\translation{Definitions}{Definities}}
\translation{%
    Four routes lead to a definition list, and the choice decides what has to run between the \LaTeX{} runs.
    \zcref[S]{sec:defs} has them in full; in one line each:%
}{%
    Er leiden vier wegen naar een definitielijst, en de keuze bepaalt wat er tussen de \LaTeX{}-draaien moet
    lopen. \zcref[S]{sec:defs} behandelt ze voluit; in één regel per stuk:%
}
\begin{labeling}{\option{bib2gls=false}}
    % Dense typewriter names in a narrowed measure. \emergencystretch rather than
    % \sloppy: it is only reached for by a paragraph that cannot otherwise be set, so
    % the lines that do fit are set as tightly as everywhere else.
    \emergencystretch=3em\relax
    \addtokomafont{labelinglabel}{\ttfamily}
    \item[bib2gls] \translation{%
        the default. One \BibTeX{} file serves every document that cites the same terms, sorted and
        selected from, and it is what lets \cmd{\masterdocument} pull another document's definitions in.
        It needs Java.%
    }{%
        de standaard. Eén \BibTeX{}-bestand bedient ieder document dat dezelfde begrippen aanhaalt,
        gesorteerd en geselecteerd, en het is wat \cmd{\masterdocument} de definities van een ander
        document laat binnenhalen. Het vraagt Java.%
    }
    \item[{bib2gls=false}] \translation{%
        \texttt{makeglossaries} and \texttt{makeindex} instead, reading a file of
        \cmd{\newglossaryentry}. No Java, still a program between the runs, and of the four the least
        exercised.%
    }{%
        in plaats daarvan \texttt{makeglossaries} en \texttt{makeindex}, die een bestand met
        \cmd{\newglossaryentry} lezen. Geen Java, nog steeds een programma tussen de draaien, en van de
        vier de minst beproefde.%
    }
    \item[\textbackslash newdefinition] \translation{%
        definitions declared in the document itself. One \LaTeX{} run and nothing else. No other
        document can cite them, and they are printed in the order they were declared in.%
    }{%
        definities die in het document zelf gedeclareerd worden. Eén \LaTeX{}-draai en verder niets, tegen
        de prijs dat geen ander document ze kan aanhalen en dat ze in declaratievolgorde worden afgedrukt.%
    }
    \item[\translation{by hand}{met de hand}] \translation{%
        the list written out with \cmd{\describe}, which decides what it lists and in what order. The
        entries still come from one of the three above.%
    }{%
        de lijst zelf uitgeschreven met \cmd{\describe}, die bepaalt wat er opgesomd wordt en in welke
        volgorde. De definities komen nog steeds uit een van de drie hierboven.%
    }
\end{labeling}

\subsection{HTML}
\translation{%
    A document converts with \texttt{make4ht}, which drives \package{tex4ht}. \package{tex4ht} carries no
    configuration for this package, so this one ships \file{regulatory.4ht} next to the package files: a
    document that finds \package{regulatory} finds it too, and without it a conversion succeeds and
    produces a document with no headings and no sections at all.

    One condition: \cmd{\DocumentMetadata} must \emph{not} be active in an HTML run, or the list markup of
    \texttt{paras} goes away. \zcref[S]{code:metadata} is the line to write, and \zcref{sec:html} has the
    measurements.%
}{%
    Een document wordt omgezet met \texttt{make4ht}, dat \package{tex4ht} aanstuurt. \package{tex4ht}
    levert voor dit pakket geen configuratie, dus levert dit pakket \file{regulatory.4ht} naast de
    pakketbestanden mee: een document dat \package{regulatory} vindt, vindt dat er meteen bij, en zonder
    dat bestand slaagt een omzetting en levert een document zonder ook maar één kop of sectie.

    Eén voorwaarde: \cmd{\DocumentMetadata} mag in een HTML-bouw \emph{niet} actief zijn, anders verdwijnt
    de lijstopmaak van \texttt{paras}. \zcref[S]{code:metadata} is de regel om te schrijven, en
    \zcref{sec:html} bevat de metingen.%
}

\subsection{\translation{Attachments}{Bijlagen}}
\translation{%
    Embedding another document in the PDF file needs the PDF management of \LaTeX{}, activated with
    \cmd{\DocumentMetadata} in front of \cmd{\documentclass}. Without it every attachment is typeset as
    plain text and the package says so once.

    How the attachment is opened from the page is the \option{attachmentlink} option, and neither value is
    right for everybody: \texttt{goto} is the semantically correct embedded go-to action, which
    \package{poppler} does not implement, and \option{attachmentlink=annotation} is a file attachment
    annotation, which every measured viewer opens. \zcref[S]{sec:attachmentlink} sets the two side by side.
    Either way the file is in the attachment pane of the viewer, which needs neither.%
}{%
    Een ander document in het PDF-bestand insluiten vraagt de PDF-administratie van \LaTeX{}, geactiveerd
    met \cmd{\DocumentMetadata} vóór \cmd{\documentclass}. Zonder dat wordt iedere bijlage als platte tekst
    gezet en meldt het pakket dat eenmalig.

    Hoe de bijlage vanaf de pagina geopend wordt is de optie \option{attachmentlink}, en geen van beide
    waarden is voor iedereen de goede: \texttt{goto} is de semantisch juiste embedded go-to action, die
    \package{poppler} niet implementeert, en \option{attachmentlink=annotation} is een file attachment
    annotatie, die iedere gemeten viewer wel opent. \zcref[S]{sec:attachmentlink} zet de twee naast elkaar.
    Hoe dan ook staat het bestand in het bijlagenpaneel van de viewer, dat geen van beide nodig heeft.%
}

\subsection{\translation{Languages}{Talen}}
\translation{%
    Dutch and English are fully supported. German and French ship the designations and the citation
    register of an act of the Union, both measured, and \emph{not} the wording of an internal reference: a
    German document gets German words in the English arrangement. Any other language falls back on English
    entirely, and is told so once. \zcref[S]{sec:lang} has the table and what each case looks like on the
    page.%
}{%
    Het Nederlands en het Engels zijn volledig ondersteund. Het Duits en het Frans leveren de benamingen en
    het citeerregister van een handeling van de Unie mee, allebei gemeten, en \emph{niet} de verwoording
    van een interne verwijzing: een Duits document krijgt Duitse woorden in de Engelse opbouw. Iedere
    andere taal valt volledig terug op het Engels, en krijgt dat één keer te horen. \zcref[S]{sec:lang} bevat
    de tabel en hoe ieder geval er op de pagina uitziet.%
}

\subsection{\translation{PDF conformance}{PDF-conformiteit}}
\translation{%
    Which standard a document can carry is not a property of this package but of the document: of its
    tagging, of what it attaches, and of what it refers to. \zcref[S]{sec:conformance} is the measurement, run
    by veraPDF pinned by digest, and it is what the claims below are worth. In summary, for the documents
    of this bundle:%
}{%
    Welke standaard een document kan dragen is geen eigenschap van dit pakket maar van het document: van
    zijn tagging, van wat het bijvoegt, en van waar het naar verwijst. \zcref[S]{sec:conformance} is de meting,
    gedraaid door een op digest gepinde veraPDF, en dat is wat de claims hieronder waard zijn. Samengevat,
    voor de documenten van deze bundel:%
}
\begin{center}
    \begin{tabular}{@{}lll@{}}
        \translation{\textbf{Profile}}{\textbf{Profiel}} &
        \translation{\textbf{Measured}}{\textbf{Gemeten}} &
        \translation{\textbf{On what}}{\textbf{Waarop}} \\
        \hline
        PDF/A-1 & \translation{out of reach}{buiten bereik}
            & \translation{forbids embedded files outright}{verbiedt ingesloten bestanden categorisch} \\
        PDF/A-2b & \translation{pass}{slaagt}
            & \translation{plain, and signed}{gewoon, en ondertekend} \\
        PDF/A-2b & \translation{fail}{faalt}
            & \translation{with a non-PDF attachment}{met een bijlage die geen PDF is} \\
        PDF/A-2a + UA-1 & \translation{pass}{slaagt}
            & \translation{tagged, with \texttt{attach-css=false}}{getagd, met \texttt{attach-css=false}} \\
        PDF/A-3 & \translation{out of reach}{buiten bereik}
            & \translation{referring to provisions of another document}{verwijzend naar bepalingen van een ander document} \\
        PDF/A-3a + UA-1 & \translation{pass}{slaagt}
            & \translation{tagged, attaching a PDF}{getagd, met een PDF als bijlage} \\
        PDF/A-4 & \translation{pass}{slaagt}
            & \translation{tagged, with \texttt{attach-css=false}}{getagd, met \texttt{attach-css=false}} \\
        PDF/A-4f + UA-2 & \translation{pass}{slaagt}
            & \translation{tagged, attaching anything}{getagd, met welke bijlage dan ook} \\
    \end{tabular}
\end{center}
\noindent
\translation{%
    Read that as: \emph{this document in this configuration was measured to pass}, and never as
    \enquote{\package{regulatory} is PDF/A compatible}. The rows differ in one thing each, which is what
    makes them worth anything.%
}{%
    Lees dat als: \emph{dit document in deze samenstelling is gemeten en slaagde}, en nooit als
    \enquote{\package{regulatory} is PDF/A-compatibel}. De regels verschillen elk in één ding, en dat is
    wat ze iets waard maakt.%
}

\subsection{\translation{Known limitations}{Bekende beperkingen}}\label{sec:limits}
\begin{labeling}{XX}
    \emergencystretch=2em\relax
    \item[PDF/A-3] \translation{%
        a document that refers to the \emph{provisions} of an external document cannot reach it: the
        \texttt{/GoToR} link is written with a file specification that fails ISO 19005-3 rule 6.8-4, and
        that specification is not written by this package. Attaching another document and citing its
        definitions costs nothing. See \zcref{sec:extern,sec:conformance}.%
    }{%
        een document dat naar de \emph{bepalingen} van een extern document verwijst haalt het niet: de
        \texttt{/GoToR}-link wordt geschreven met een bestandsspecificatie die faalt op regel 6.8-4 van
        ISO 19005-3, en die specificatie wordt niet door dit pakket geschreven. Een ander document
        bijvoegen en zijn definities aanhalen kost niets. Zie \zcref{sec:extern,sec:conformance}.%
    }
    \item[\translation{Languages}{Talen}] \translation{%
        German and French cannot word an internal reference or the name of another document; see
        \zcref{sec:lang}. Neither has a national citation register.%
    }{%
        het Duits en het Frans kunnen een interne verwijzing en de naam van een ander document niet
        verwoorden; zie \zcref{sec:lang}. Geen van beide heeft een nationaal citeerregister.%
    }
    \item[\translation{Sorting}{Sorteren}] \translation{%
        \cmd{\loadglsdefs} sorts under the Dutch collation \texttt{nl-NL} whatever language the document
        is in. A document in another language that wants its own collation prints its list with
        \cmd{\printunsrtglossary} after a \cmd{\GlsXtrLoadResources} of its own, or lays it out by hand
        with \cmd{\describe}.%
    }{%
        \cmd{\loadglsdefs} sorteert onder de Nederlandse collatie \texttt{nl-NL}, in welke taal het
        document ook geschreven is. Een document in een andere taal dat een eigen collatie wil, drukt zijn
        lijst af met \cmd{\printunsrtglossary} na een eigen \cmd{\GlsXtrLoadResources}, of maakt hem met de
        hand op met \cmd{\describe}.%
    }
    \item[HTML] \translation{%
        the conversion needs \cmd{\DocumentMetadata} to be absent, which is the same declaration the
        attachments need, so one source cannot be converted and carry attachments in the same run. The
        \texttt{alttree} definition style carries no list markup at all in HTML; \texttt{labeling} and
        \texttt{description} do. See \zcref{sec:html}.%
    }{%
        de omzetting vraagt dat \cmd{\DocumentMetadata} er niet is, en dat is dezelfde declaratie die de
        bijlagen nodig hebben, dus één bron kan niet in dezelfde draai omgezet worden én bijlagen dragen.
        De definitiestijl \texttt{alttree} levert in HTML geen enkele lijstopmaak; \texttt{labeling} en
        \texttt{description} wel. Zie \zcref{sec:html}.%
    }
    \item[Markdown] \translation{%
        a Markdown source holds no \TeX{}: a backslash is printed rather than obeyed, silently. Only the
        constructs of \zcref{sec:md} have a counterpart, and a bracketed span may not hold a second span or
        a bracketed link, which is what the identifier of \zcref{sec:syntax} is for.%
    }{%
        een Markdown-bron bevat geen \TeX{}: een backslash wordt afgedrukt in plaats van uitgevoerd, en dat
        zonder melding. Alleen de onderdelen van \zcref{sec:md} hebben een tegenhanger, en een bracketed
        span mag geen tweede span en geen link met blokhaken bevatten, en daar is de identifier van
        \zcref{sec:syntax} voor.%
    }
    \item[\cmd{\aref}] \translation{%
        with more than one label, \option{nameinlink} has no effect and the hyperlink is drawn around the
        numbers alone.%
    }{%
        bij meer dan één label heeft \option{nameinlink} geen effect en wordt de hyperlink alleen om de
        nummers getrokken.%
    }
    \item[\cmd{\loadsources}] \translation{%
        the \file{bib} reader takes a restricted, line-based syntax and is not a \BibTeX{} parser; a
        perfectly ordinary \file{bib} file may well be refused. \zcref[S]{sec:sources} states the grammar.%
    }{%
        de \file{bib} lezer neemt een beperkte, regelgebaseerde syntaxis aan en is geen \BibTeX{}-parser;
        een volstrekt gewoon \file{bib}-bestand kan best geweigerd worden. \zcref[S]{sec:sources} geeft de
        grammatica.%
    }
    \item[Juriconnect] \translation{%
        this release records and guards the date a citation speaks as of, and does not print it and does
        not build a Juriconnect reference. See \cmd{\sourcedate} in \zcref{sec:sources}.%
    }{%
        deze uitgave legt de datum waarop een aanhaling spreekt vast en bewaakt hem, en drukt hem niet af
        en bouwt geen Juriconnect-verwijzing. Zie \cmd{\sourcedate} in \zcref{sec:sources}.%
    }
    \item[\translation{Legislation}{Regelgeving}] \translation{%
        no legislation ships with this bundle. It holds the machinery for citing instruments and not the
        instruments: a citation title changes on its own clock and a package on CTAN does not.%
    }{%
        er komt geen regelgeving met deze bundel mee. Hij bevat het gereedschap om instrumenten aan te
        halen en niet de instrumenten: een citeertitel verandert op zijn eigen klok en een pakket op CTAN
        niet.%
    }
\end{labeling}

\subsection{\translation{What the tests establish}{Wat de tests vaststellen}}
\translation{%
    One thing is worth saying this early, because it is what the claims in this manual rest on. A document
    that is generated without an error is not thereby correct. Nearly everything this bundle can get wrong
    comes out as a finished document all the same: a citation worded in the wrong register, a definition
    that quietly did not arrive, a label that resolved to nothing, a heading that became a bold sentence.

    So the suite does not check that a build succeeds. It reads the result back\,---\,references and the
    labels they resolve to, definitions and the order a program sorted them into, the wording of forty
    citations word for word, the sections and headings of the HTML conversion, the annotations and
    structure elements in the PDF file itself, and the warnings the package did and did not give. Two
    documents are there to \emph{fail} and two more to \emph{warn}, because a guarantee is worth what its
    refusal is worth. \zcref[S]{sec:tests} is the whole of it.%
}{%
    Eén ding is het waard om nu al te zeggen, want het is waar de beweringen in deze handleiding op rusten.
    Een document dat zonder fout gegenereerd wordt is daarmee nog niet correct. Vrijwel alles wat deze
    bundel verkeerd kan doen komt er evengoed als afgerond document uit: een aanhaling in het verkeerde
    register, een definitie die stilzwijgend niet aankwam, een label dat nergens heen wees, een kop die een
    vetgedrukte zin werd.

    De suite controleert dus niet of een bouw slaagt. Zij leest de uitkomst terug\,---\,verwijzingen en de
    labels waar ze op uitkomen, definities en de volgorde waarin een programma ze sorteerde, de bewoording
    van veertig aanhalingen woord voor woord, de secties en koppen van de HTML-omzetting, de annotaties en
    structuurelementen in het PDF-bestand zelf, en de waarschuwingen die het pakket wel en niet gaf. Twee
    documenten staan er om te \emph{falen} en twee om te \emph{waarschuwen}, want een garantie is zoveel
    waard als haar weigering. \zcref[S]{sec:tests} behandelt het geheel.%
}

\subsection{\translation{Public, extension and internal}{Publiek, uitbreiding en intern}}\label{sec:api}
\translation{%
    Three kinds of name occur in this manual, and they carry different promises for the 1.x releases.%
}{%
    Er komen in deze handleiding drie soorten namen voor, en ze dragen verschillende beloften voor de
    1.x-uitgaven.%
}

\begin{sloppypar}
\noindent
\translation{\textbf{Public API}}{\textbf{Publieke API}}\quad
\translation{%
        what an ordinary document writes: the environments \texttt{paras}, \texttt{provisions},
        \texttt{definitions} and \texttt{externals}; \cmd{\article} and \cmd{\para}; the \cmd{\rref},
        \cmd{\nref} and \cmd{\aref} families and the conjunction commands; \cmd{\loadglsdefs},
        \cmd{\newdefinition}, \cmd{\printdefs} and \cmd{\describe}; \cmd{\refdocument},
        \cmd{\masterdocument}, \cmd{\newartifact} and the \cmd{\document\ldots} commands;
        \cmd{\signaturefield}; \cmd{\loadsources}, \cmd{\newsource}, \cmd{\srcref}, \cmd{\srcfield},
        \cmd{\srctype}, \cmd{\ifsourceexists} and \cmd{\sourcedate}; \cmd{\autocitedefs} and the Markdown
        constructs; and the package options. These keep working through 1.x, and where one has to change,
        the old spelling stays as an alias.%
    }{%
        wat een gewoon document schrijft: de omgevingen \texttt{paras}, \texttt{provisions},
        \texttt{definitions} en \texttt{externals}; \cmd{\article} en \cmd{\para}; de families
        \cmd{\rref}, \cmd{\nref} en \cmd{\aref} en de koppelcommando's; \cmd{\loadglsdefs},
        \cmd{\newdefinition}, \cmd{\printdefs} en \cmd{\describe}; \cmd{\refdocument},
        \cmd{\masterdocument}, \cmd{\newartifact} en de \cmd{\document\ldots} commando's;
        \cmd{\signaturefield}; \cmd{\loadsources}, \cmd{\newsource}, \cmd{\srcref}, \cmd{\srcfield},
        \cmd{\srctype}, \cmd{\ifsourceexists} en \cmd{\sourcedate}; \cmd{\autocitedefs} en de
        Markdown-constructies; en de pakketopties. Die blijven de hele 1.x-reeks werken, en waar er een
        moet veranderen blijft de oude schrijfwijze als alias staan.%
    }
\end{sloppypar}

\begin{sloppypar}
\noindent
\textbf{Extension API}\quad
\translation{%
        what a language file, a citation register or an integration writes:
        \cmd{\ProvidesRegulatoryLanguage} and \cmd{\RegulatoryLoadLanguage}; \cmd{\rref@setup} and the
        format commands it is given, \cmd{\rref@refformat@\ldots}, \cmd{\rref@label@\ldots} and
        \cmd{\rref@group@braced}; \cmd{\newsourceregister}, \cmd{\newsourcedeterminer},
        \cmd{\newsourcetype}, \cmd{\newsourcetypealias}, \cmd{\newsourcefieldalias} and the
        \cmd{\regulatory@src@\ldots} formats a register is built from; \cmd{\regulatorysetup} and
        \file{regulatory.cfg}; and \cmd{\regulatory@ifmodule}. Several of these carry an at sign, which is
        not an oversight: they are meant to be written in a \file{.def} file, which is read with the at
        sign made a letter. They are supported through 1.x as they stand.%
    }{%
        wat een taalbestand, een citeerregister of een integratie schrijft:
        \cmd{\ProvidesRegulatoryLanguage} en \cmd{\RegulatoryLoadLanguage}; \cmd{\rref@setup} en de
        formaatcommando's die hij meekrijgt, \cmd{\rref@refformat@\ldots}, \cmd{\rref@label@\ldots} en
        \cmd{\rref@group@braced}; \cmd{\newsourceregister}, \cmd{\newsourcedeterminer},
        \cmd{\newsourcetype}, \cmd{\newsourcetypealias}, \cmd{\newsourcefieldalias} en de
        \cmd{\regulatory@src@\ldots} formaten waaruit een register wordt opgebouwd;
        \cmd{\regulatorysetup} en \file{regulatory.cfg}; en \cmd{\regulatory@ifmodule}. Verscheidene
        daarvan dragen een apenstaartje, en dat is geen slordigheid: ze zijn bedoeld om in een
        \file{.def} bestand geschreven te worden, dat gelezen wordt met het apenstaartje als letter. Ze
        worden zoals ze zijn de hele 1.x-reeks ondersteund.%
    }
\end{sloppypar}

\begin{sloppypar}
\noindent
\translation{\textbf{Internal}}{\textbf{Intern}}\quad
\translation{%
        everything else, including every \cmd{\regulatory@\ldots}, \cmd{\artifact@\ldots} and
        \cmd{\rref@\ldots} not named above, and every \pkg{l3} name with a double underscore. These are
        documented in \zcref{sec:impl} because the implementation is documented, and not because they may
        be used; they change without notice. Two artifact fields belong here as well and are described
        under \cmd{\refdocument}: \texttt{referred}, which the package sets itself, and \texttt{url},
        which is reserved and does nothing.%
    }{%
        al het overige, waaronder iedere \cmd{\regulatory@\ldots}, \cmd{\artifact@\ldots} en
        \cmd{\rref@\ldots} die hierboven niet genoemd is, en iedere \pkg{l3} naam met een dubbele
        underscore. Die staan in \zcref{sec:impl} omdat de implementatie gedocumenteerd is en niet omdat
        ze gebruikt mogen worden; ze veranderen zonder aankondiging. Twee artefactvelden horen hier ook
        en staan beschreven bij \cmd{\refdocument}: \texttt{referred}, dat het pakket zelf zet, en
        \texttt{url}, dat gereserveerd is en niets doet.%
    }
\end{sloppypar}
\clearpage

\section{\translation{Migration to 1.0}{Overstappen naar 1.0}}\label{sec:migration}
\translation{%
    What a document written for an earlier release runs into. Everything below is a change that can be seen
    from outside the package; the rest of 1.0 is addition.%
}{%
    Waar een document dat voor een eerdere uitgave geschreven is tegenaan loopt. Alles hieronder is een
    verandering die van buiten het pakket te zien is; de rest van 1.0 is aanvulling.%
}
\begin{labeling}{\translation{Markdown}{Markdown}}
    \emergencystretch=2em\relax
    \item[\package{calc}] \translation{%
        \textbf{This is the one that stops a build.} \package{xifthen} is no longer a prerequisite, since
        nothing here used a command of it that plain \package{ifthen} does not have. It pulled in
        \package{calc}, which this bundle never used either, so \package{calc} is no longer there for the
        asking. A document that writes \cmd{\widthof}, \cmd{\heightof} or one of the \package{calc}
        arithmetic forms was leaning on that and now stops with an undefined command. The fix is
        \cmd{\usepackage}\marg{calc} in the document, or \cmd{\RequirePackage}\marg{calc} in a
        \file{regulatory.cfg} for a whole directory of them. This manual is one of the documents it caught,
        and asks for \package{calc} itself.%
    }{%
        \textbf{Dit is degene die een bouw stopt.} \package{xifthen} is geen vereiste meer, aangezien niets
        hier een commando van dat pakket gebruikte dat het gewone \package{ifthen} niet heeft. Het trok
        \package{calc} mee, dat deze bundel evenmin ooit gebruikte, dus \package{calc} is er niet langer
        vanzelf. Een document dat \cmd{\widthof}, \cmd{\heightof} of een van de rekenvormen van
        \package{calc} schrijft leunde daarop en houdt nu op met een ongedefinieerd commando. De oplossing
        is \cmd{\usepackage}\marg{calc} in het document, of \cmd{\RequirePackage}\marg{calc} in een
        \file{regulatory.cfg} voor een hele map ervan. Deze handleiding is een van de documenten die het
        betrapte, en vraagt zelf om \package{calc}.%
    }
    \item[Markdown] \translation{%
        the module used to be loaded with the \option{hybrid} option of \package{markdown}, which let every
        backslash through, and sources written that way wrote their labels and references as \TeX{}.
        \package{markdown} has deprecated that option. Without it a backslash is \emph{printed} rather than
        obeyed, so such a source loses its references without a single error being raised. Everything that
        needed it is written in Markdown now; see \zcref{sec:md}, and read an older source through once.%
    }{%
        de module werd geladen met de optie \option{hybrid} van \package{markdown}, die iedere backslash
        doorliet, en bronnen die zo geschreven waren schreven hun labels en verwijzingen als \TeX{}.
        \package{markdown} heeft die optie afgeschaft. Zonder haar wordt een backslash \emph{afgedrukt} in
        plaats van uitgevoerd, dus zo'n bron verliest zijn verwijzingen zonder dat er ook maar iets
        misgaat. Alles wat die optie nodig had wordt nu in Markdown geschreven; zie \zcref{sec:md}, en lees
        een oudere bron één keer door.%
    }
    \item[\translation{Languages}{Talen}] \translation{%
        an unsupported language no longer borrows the words of the last language file that happened to be
        loaded. Measured on the same Spanish document: an earlier release gave it Dutch headings and
        silently dropped the designations from its references, where 1.0 words everything in English and
        says once which language it has no definitions for. A document that was quietly relying on the
        first behaviour looks different and now says why.%
    }{%
        een niet-ondersteunde taal leent niet langer de woorden van het taalbestand dat toevallig als
        laatste geladen was. Gemeten aan hetzelfde Spaanse document: een eerdere uitgave gaf het
        Nederlandse koppen en liet de benamingen stilzwijgend uit de verwijzingen weg, waar 1.0 alles in
        het Engels verwoordt en één keer zegt voor welke taal het geen definities heeft. Een document dat
        stilzwijgend op het eerste leunde ziet er anders uit en zegt nu waarom.%
    }
    \item[\translation{Structure}{Structuur}] \translation{%
        one package became a bundle. Earlier releases shipped a single \file{regulatory.sty}; 1.0 ships
        eight, of which \package{regulatory} loads six, plus \file{regulatory.4ht} and the language files.
        A document that says \cmd{\usepackage}\marg{regulatory} notices nothing, and one that installs by
        hand copies more files.%
    }{%
        één pakket werd een bundel. Eerdere uitgaven leverden één \file{regulatory.sty}; 1.0 levert er
        acht, waarvan \package{regulatory} er zes laadt, plus \file{regulatory.4ht} en de
        taalbestanden. Een document dat het pakket zoals altijd laadt merkt er niets van, en wie met
        de hand installeert kopieert meer bestanden.%
    }
    \item[\translation{Signatures}{Handtekeningen}] \translation{%
        \package{regulatory-sign} is where \package{xdp-sign} went. \cmd{\SignatureField} still answers, so
        a document written for that package keeps working when it moves over. A signature no longer costs
        the document its PDF/A-2b conformance.%
    }{%
        \package{regulatory-sign} is waar \package{xdp-sign} heen ging. \cmd{\SignatureField} luistert nog
        steeds, zodat een document dat voor dat pakket geschreven is blijft werken wanneer het overkomt.
        Een handtekening kost het document zijn PDF/A-2b conformiteit niet meer.%
    }
    \item[\translation{Source keys}{Bronsleutels}] \translation{%
        the types and fields of \zcref{sec:sources} are named in English, and every Dutch name is an alias
        on top of it, so a \file{bib} file written either way is read either way. Two names changed, and
        they differ in what became of the old one. The option \option{bronstijl} became
        \option{sourcestyle} and \emph{is} aliased: \option{bronstijl} still answers, and so do the values
        \texttt{voluit} and \texttt{verkort}, so a document that used it needs no change. The translation
        key \texttt{subparagraph} became \texttt{point} and is \emph{not} aliased, since nothing outside
        this bundle had asked for it yet: a document that asked for that translation by name asks for
        \texttt{point} now.%
    }{%
        de types en velden van \zcref{sec:sources} hebben Engelse namen, en iedere Nederlandse naam is
        daar een alias op, dus een \file{bib}-bestand dat op de ene manier geschreven is wordt op beide
        manieren gelezen. Twee namen zijn veranderd, en ze verschillen in wat er van de oude geworden is.
        De optie \option{bronstijl} werd \option{sourcestyle} en heeft \emph{wel} een alias:
        \option{bronstijl} luistert nog steeds, en de waarden \texttt{voluit} en \texttt{verkort} ook,
        dus een document dat hem gebruikte hoeft niets te veranderen. De vertaalsleutel
        \texttt{subparagraph} werd \texttt{point} en heeft \emph{geen} alias, want buiten deze bundel had
        nog niemand hem opgevraagd: een document dat die vertaling bij naam opvroeg vraagt nu om
        \texttt{point}.%
    }
\end{labeling}
\clearpage

\section{\translation{Structure}{Structuur}}\label{sec:struct}
\translation{%
    This package provides familiar structures without taking anything of \LaTeX{} away.
    The three levels are called \emph{article}, \emph{paragraph} and \emph{point}, after the Dutch
    ``artikel, lid en onderdeel'' this package started out with.\footnote{%
        The English names are shortened where \LaTeX{} already speaks for them: a heading of the second
        level is \cmd{\para} rather than \cmd{\paragraph}, and its list is \texttt{paras} rather than
        \texttt{paragraphs}. Which of ``section'' and ``paragraph'' names which level differs per
        jurisdiction, and neither reading is the one \LaTeX{} means by it.%
    }%
}{%
    Dit pakket levert bekende structuren, zonder iets van \LaTeX{} weg te nemen.
    De drie niveaus heten \emph{artikel}, \emph{lid} en \emph{onderdeel}, waar dit pakket mee begonnen
    is.\footnote{%
        De Engelse namen zijn ingekort waar \LaTeX{} de volledige al bezet houdt: een kop van het tweede
        niveau is \cmd{\para} en niet \cmd{\paragraph}, en zijn lijst heet \texttt{paras} en niet
        \texttt{paragraphs}. Welk van de twee woorden `section' en `paragraph' welk niveau aanduidt,
        verschilt per rechtsorde, en geen van beide lezingen is die welke \LaTeX{} ermee bedoelt.%
    }%
}\\

\noindent
\DescribeMacro{\article}
\DescribeMacro{\para}
\translation{%
    \cmd{\article}\marg{title} and \cmd{\para}\marg{title} are the two headings.
    They are defined as separate macros and formatted with \package{titlesec}, or, whenever the new
    \LaTeX{} heading interface is available, with a \texttt{heading} instance.
    Both take part in the table of contents, at the level of subsections and subsubsections.%
}{%
    \cmd{\article}\marg{titel} en \cmd{\para}\marg{titel} zijn de twee koppen.
    Deze zijn als aparte macro's gedefinieerd en opgemaakt met \package{titlesec}, of, zodra de nieuwe
    \LaTeX{}-kopinterface beschikbaar is, met een \texttt{heading}-instantie.
    Beide doen mee in de inhoudsopgave, op het niveau van subsecties en subsubsecties.%
}\\

\noindent
\DescribeEnv{paras}
\translation{%
    The \texttt{paras} environment holds the two levels below an article, built with \package{enumitem}.
    A paragraph is labelled \texttt{\textbackslash thearticle.\textbackslash arabic*.}, so it repeats the
    number of the article it belongs to, and a point is labelled
    \texttt{\textbackslash abalphnum\{\textbackslash arabic*\})}.%
}{%
    De omgeving \texttt{paras} bevat de twee niveaus onder een artikel, gebouwd met \package{enumitem}.
    Een lid krijgt het label \texttt{\textbackslash thearticle.\textbackslash arabic*.}, en herhaalt
    daarmee het nummer van het artikel waar het bij hoort, en een onderdeel het label
    \texttt{\textbackslash abalphnum\{\textbackslash arabic*\})}.%
}\\

\noindent
\translation{%
    That \cmd{\abalphnum} comes from \package{fmtcount}\footnote{%
        The Dutch language definition is part of
        \href{https://github.com/Xerdi/fmtcount}{\package{fmtcount}} itself now. Update the package when
        \texttt{fc-dutch.def} is missing.%
    } and is what lets an article run past 26 points: \cmd{\alph} stops there, whereas \cmd{\abalphnum}
    of, say, 125 is `\texttt{du}'.%
}{%
    Die \cmd{\abalphnum} komt uit \package{fmtcount}\footnote{%
        De Nederlandse taaldefinitie is nu inbegrepen in
        \href{https://github.com/Xerdi/fmtcount}{\package{fmtcount}} zelf.
            Werk het pakket bij wanneer \texttt{fc-dutch.def} ontbreekt.%
    } en is wat een artikel voorbij 26 onderdelen laat lopen: \cmd{\alph} houdt daar op, terwijl
    \cmd{\abalphnum} van b\ij{}voorbeeld 125 `\texttt{du}' is.%
}\\

\noindent
\DescribeEnv{provisions}
\translation{%
    Not every document is divided into articles.
    The \texttt{provisions} environment is a flat enumeration, numbered within the \cmd{\section} it
    stands in rather than within an article, for a text that has one level and no headings of its own.%
}{%
    Niet ieder document is in artikelen verdeeld.
    De omgeving \texttt{provisions} is een vlakke opsomming, genummerd binnen de \cmd{\section}
    waarin hij staat in plaats van binnen een artikel, voor een tekst met één niveau en zonder eigen
    koppen.%
}

\begin{lstlisting}[style=tex]
\article{...}
\begin{paras}
    \item ...
    \begin{paras}
        \item ...
        \item ...
    \end{paras}
    \item ...
\end{paras}

\article{...}
...

\para{...}
...

\section{...}
\begin{provisions}
    \item ...
    \item ...
\end{provisions}
\end{lstlisting}
\translation
{See \zcref{code:example1,code:example2} in \zcref{sec:example} for more \LaTeX{} examples.}
{Zie \zcref{code:example1,code:example2} in \zcref{sec:example} voor meer \LaTeX{}-voorbeelden.}
\clearpage

\section{\translation{Definitions}{Definities}}\label{sec:defs}
\translation{%
    Definitions are cited with the \cmd{\gls}\marg{label} family of \package{glossaries-extra}, which this
    module loads and configures.%
}{%
    Definities worden aangehaald met de \cmd{\gls}\marg{label} familie van \package{glossaries-extra}, die
    deze module laadt en instelt.%
}\\

\noindent
\DescribeEnv{definitions}
\DescribeEnv{externals}
\translation{%
    So that terms, abbreviations and definitions do not collide, this package adds two glossary types.
    Definitions of this document go under \option{definitions}; definitions of another document go under
    \option{externals} (see \zcref{sec:extern}).%
}{%
    Opdat begrippen, afkortingen en definities niet botsen voegt dit pakket twee glossary-types toe.
    Definities van dit document komen onder \option{definitions}; definities van een ander document onder
    \option{externals} (zie \zcref{sec:extern}).%
}\\

\noindent
\translation{%
    Where the definitions come from is a question of its own, and the answer is not forced.
    Four routes are open, and how the entries arrive is independent of how the list is printed:%
}{%
    Waar de definities vandaan komen is een vraag op zich, en het antwoord ligt niet vast.
    Er staan vier wegen open, en hoe de definities binnenkomen staat los van hoe de lijst gezet wordt:%
}
\begin{labeling}{\cmd{\newdefinition}}
    \item[\package{bib2gls}] \translation{%
        the default. \cmd{\loadglsdefs}\marg{src} reads a \BibTeX{} file, which \package{bib2gls} sorts
        and selects from.
        \emph{For:} one file serves every document that cites the same terms, the listing is sorted
        against the dictionary of the language, and only the definitions the document actually uses
        appear\,---\,or all of them with \option{alldefs}. It is also what lets \cmd{\masterdocument}
        pull another document's definitions in.
        \emph{Against:} it needs Java and a \texttt{bib2gls} run between the two \LaTeX{} runs.%
    }{%
        de standaard. \cmd{\loadglsdefs}\marg{src} leest een \BibTeX{}-bestand, dat \package{bib2gls}
        sorteert en waaruit het selecteert.
        \emph{Voor:} één bestand bedient ieder document dat dezelfde begrippen aanhaalt, de opsomming
        wordt gesorteerd tegen het woordenboek van de taal, en alleen de definities die het document
        werkelijk gebruikt verschijnen\,---\,of allemaal met \option{alldefs}. Het is ook wat
        \cmd{\masterdocument} in staat stelt de definities van een ander document binnen te halen.
        \emph{Tegen:} het vraagt Java en een \texttt{bib2gls} draai tussen de twee \LaTeX{}-draaien.%
    }
    \item[\option{bib2gls=false}] \translation{%
        \cmd{\loadglsdefs}\marg{src} then reads a file of \cmd{\newglossaryentry} instead.
        \emph{For:} no Java.
        \emph{Against:} the sorting is left to \texttt{makeindex}, so there is still a program to run in
        between, and of the four this is the route the package is exercised on least.%
    }{%
        \cmd{\loadglsdefs}\marg{src} leest dan een bestand met \cmd{\newglossaryentry} regels.
        \emph{Voor:} geen Java.
        \emph{Tegen:} het sorteren blijft aan \texttt{makeindex}, dus er staat nog steeds een programma
        tussen, en van de vier is dit de weg waarop het pakket het minst beproefd is.%
    }
    \item[\cmd{\newdefinition}] \translation{%
        \cmd{\newdefinition}\marg{label}\marg{name}\marg{description} declares a definition in the
        document itself.
        \emph{For:} no second file and no second program at all\,---\,one \LaTeX{} run is enough.
        \emph{Against:} the definitions belong to this document, so no other document can cite them, and
        they are printed in the order they were declared rather than sorted.%
    }{%
        \cmd{\newdefinition}\marg{label}\marg{naam}\marg{omschrijving} declareert een definitie in het
        document zelf.
        \emph{Voor:} geen tweede bestand en geen tweede programma\,---\,één \LaTeX{}-draai volstaat.
        \emph{Tegen:} de definities horen bij dit document, dus geen ander document kan ze aanhalen, en
        ze worden gezet in de volgorde waarin ze gedeclareerd zijn in plaats van gesorteerd.%
    }
    \item[\translation{by hand}{met de hand}] \translation{%
        the list itself is written out, with \cmd{\describe}\marg{label} where each description belongs.
        The entries still come from one of the three routes above.
        \emph{For:} the article decides which terms it lists, in what order, and what stands between
        them.
        \emph{Against:} the list is maintained by hand, so a new definition does not appear in it of its
        own accord.%
    }{%
        de lijst wordt zelf uitgeschreven, met \cmd{\describe}\marg{label} waar iedere omschrijving
        hoort. De definities zelf komen nog steeds uit een van de drie wegen hierboven.
        \emph{Voor:} het artikel bepaalt welke begrippen het opsomt, in welke volgorde, en wat er
        tussen staat.
        \emph{Tegen:} de lijst wordt met de hand onderhouden, dus een nieuwe definitie verschijnt er
        niet vanzelf in.%
    }
\end{labeling}
\translation{%
    Only the second route asks for a program between the \LaTeX{} runs. The other two hand over entries
    that are already in the order they are to be printed in, which is why \cmd{\printdefs} reaches for a
    different printing command there\,---\,see \zcref{sec:impl}.%
}{%
    Alleen de tweede weg vraagt om een programma tussen de \LaTeX{}-draaien. De andere twee leveren
    definities aan die al in de volgorde staan waarin ze gezet moeten worden, en daarom grijpt
    \cmd{\printdefs} daar naar een ander zetcommando\,---\,zie \zcref{sec:impl}.%
}\\

\noindent
\translation{%
    How the listing is laid out is a second choice, independent of the first.
    \cmd{\printdefs} takes the style as an optional argument and the \option{defstyle} option sets the
    default for the document. Three are on offer: \texttt{alttree}, the default that \package{glossaries}
    brings, which sets a name above its description; \texttt{labeling}, which aligns every description on
    the width handed to \cmd{\printdefs}; and \texttt{description}, which leaves the alignment to the
    class. Any other style \package{glossaries} knows can be named just as well.
    Writing the list out by hand, the fourth route above, uses the same two environments, so the layout
    matches whichever way the list is produced.%
}{%
    Hoe de opsomming eruitziet is een tweede keuze, los van de eerste.
    \cmd{\printdefs} neemt de stijl als optioneel argument en de optie \option{defstyle} zet de standaard
    voor het document. Er zijn er drie: \texttt{alttree}, de standaard die \package{glossaries} meebrengt
    en die een naam boven zijn omschrijving zet; \texttt{labeling}, dat iedere omschrijving uitlijnt op de
    breedte die aan \cmd{\printdefs} is meegegeven; en \texttt{description}, dat de uitlijning aan de
    klasse laat. Iedere andere stijl die \package{glossaries} kent kan net zo goed genoemd worden.
    De lijst met de hand uitschrijven, de vierde weg hierboven, gebruikt dezelfde twee omgevingen, dus de
    opmaak komt overeen hoe de lijst ook tot stand komt.%
}\\

\noindent
\translation{%
    That choice reaches further than the printed page. Measured on a two-entry list converted with
    \texttt{make4ht}: \texttt{alttree} carries no list markup at all, while \texttt{labeling} and
    \texttt{description} both give a \texttt{<dl>} with a \texttt{<dt>} and a \texttt{<dd>} per
    definition. A document that is published as HTML as well (\zcref{sec:html}) has a reason to pick one
    of the two.%
}{%
    Die keuze reikt verder dan de gedrukte pagina. Gemeten aan een lijst van twee definities, omgezet met
    \texttt{make4ht}: \texttt{alttree} levert in het geheel geen lijstopmaak, terwijl \texttt{labeling} en
    \texttt{description} beide een \texttt{<dl>} geven met per definitie een \texttt{<dt>} en een
    \texttt{<dd>}. Een document dat ook als HTML verschijnt (\zcref{sec:html}) heeft daarmee een reden om
    een van de twee te kiezen.%
}\\

\noindent
\DescribeMacro{\printdefs\\\oarg{style}\\\marg{width of text}}
\translation{%
    \cmd{\printdefs}\marg{width of text} prints the definition list. The \meta{width of text} is the widest
    name the list has to align on, which is what the \texttt{labeling} style uses; the other styles ignore
    it.%
}{%
    \cmd{\printdefs}\marg{breedte van tekst} drukt de definitielijst af. De \meta{breedte van tekst} is de
    breedste naam waarop de lijst moet uitlijnen, en dat is wat de stijl \texttt{labeling} gebruikt; de
    andere stijlen doen er niets mee.%
}\\

\noindent
\DescribeMacro{\describe}
\translation{%
    \cmd{\describe}\marg{label} prints the description of one definition where it stands, which is the way
    to lay out a definitions article by hand rather than as a list.
    It adds the anchor point the hyperlinks of \cmd{\gls} need, which is what distinguishes it from
    printing the description with \cmd{\glsentrydesc}.
    A list built this way is aligned by whatever surrounds it, so \cmd{\glssetwidest} is only of interest
    when that surrounding is a \texttt{labeling} environment of one's own.%
}{%
    \cmd{\describe}\marg{label} drukt de beschrijving van één definitie af op de plek waar hij staat, wat
    de manier is om een definitieartikel met de hand op te maken in plaats van als lijst.
    Hij voegt het ankerpunt toe dat de hyperlinks van \cmd{\gls} nodig hebben, en dat is wat hem
    onderscheidt van het afdrukken van de beschrijving met \cmd{\glsentrydesc}.
    Een zo opgebouwde lijst wordt uitgelijnd door wat eromheen staat, dus \cmd{\glssetwidest} is alleen van
    belang wanneer dat een eigen \texttt{labeling} omgeving is.%
}\\

\noindent
\DescribeMacro{\newdefinition\\\marg{label}\\\marg{name}\\\marg{description}}
\translation{%
    \cmd{\newdefinition} declares one definition in the document itself, under the same type and
    category as the ones read from a file, so it lands in the same listing.%
}{%
    \cmd{\newdefinition} declareert één definitie in het document zelf, onder hetzelfde type en dezelfde
    categorie als die uit een bestand, zodat hij in dezelfde opsomming terechtkomt.%
}\\

\noindent
\DescribeMacro{\loadglsdefs}
\translation{%
    \cmd{\loadglsdefs}\marg{src} reads a \BibTeX{} file into the \option{definitions} type under the
    \option{definitions} category. The definitions the document uses are listed when \cmd{\printdefs} is
    called, or all of them with the \option{alldefs} option.
    The listing is sorted under the Dutch collation, \texttt{nl-NL}, whatever language the document is
    in\,---\,see \zcref{sec:limits}, which says what to do about it.%
}{%
    \cmd{\loadglsdefs}\marg{src} leest een \BibTeX{}-bestand in onder het type \option{definitions} en de
    categorie \option{definitions}.
    De definities die het document gebruikt worden opgesomd zodra \cmd{\printdefs} wordt aangeroepen, of
    allemaal met de optie \option{alldefs}.
    De opsomming wordt gesorteerd volgens de Nederlandse collatie, \texttt{nl-NL}, in welke taal het
    document ook geschreven is\,---\,zie \zcref{sec:limits}, waar staat wat eraan te doen is.%
}\\

\noindent
\DescribeMacro{\loadextdefs}
\translation{%
    \cmd{\loadextdefs}\oarg{category}\marg{src} reads the definitions of another document, under a category
    of their own so that definitions from different sources stay apart. \cmd{\masterdocument} calls it with
    the right category already, so a document rarely calls it itself. It belongs to
    \package{regulatory-attachments} and is described in \zcref{sec:extern}.
}{%
    \cmd{\loadextdefs}\oarg{categorie}\marg{src} leest de definities van een ander document in, onder een
    eigen categorie zodat definities uit verschillende bronnen uit elkaar blijven.
    \cmd{\masterdocument} roept hem al met de juiste categorie aan, dus een document roept hem zelden zelf
    aan. Hij hoort bij \package{regulatory-attachments} en wordt beschreven in \zcref{sec:extern}.
}
\clearpage

\section{\translation{References}{Verwijzingen}}\label{sec:ref}
\translation{%
    References to articles, paragraphs and points are built on \package{zref}, for which every structure of
    \zcref{sec:struct} is configured. \package{zref} on its own offers less control over the wording than
    \package{cleveref} does.
}{%
    Verwijzingen naar artikelen, leden en onderdelen zijn gebouwd op \package{zref}, waarvoor iedere
    structuur uit \zcref{sec:struct} is ingesteld. \package{zref} zelf biedt minder greep op de bewoording
    dan \package{cleveref}.
}

\DescribeMacro{\rref}
\DescribeMacro{\Rref}
\translation{%
    That is why this bundle words its own, starting with \cmd{\rref}\marg{label}, which refers to an article
    the way \cmd{\ref} refers to a \cmd{\section}. The family has four members:%
}{%
    Daarom verwoordt deze bundel zijn eigen verwijzingen, te beginnen met \cmd{\rref}\marg{label}, die naar
    een artikel verwijst zoals \cmd{\ref} naar een \cmd{\section} verwijst. De familie heeft vier leden:%
}
\begin{labeling}{\textbackslash{}Rref*\quad}
    \cmditem{rref} \translation
    {Starting with a lowercase letter and with a hyperlink.}
    {Beginnend met een kleine letter en met hyperlink.}\\
    \begin{tabularx}{\linewidth}{@{}X X X@{}}
        \textbf{\translation{Article}{Artikel}} & \textbf{\translation{Paragraph}{Lid}} & \textbf{\translation{Point}{Onderdeel}} \\
        \rref{ex1-art:lorem}                    & \rref{ex1-lid:lorem}                  & \rref{ex1-sub:lorem}                           \\
    \end{tabularx}
    \cmditem{rref*} \translation
    {Starting with a lowercase letter and without a hyperlink.}
    {Beginnend met een kleine letter en zonder hyperlink.}\\
    \begin{tabularx}{\linewidth}{@{}X X X@{}}
        \textbf{\translation{Article}{Artikel}} & \textbf{\translation{Paragraph}{Lid}} & \textbf{\translation{Point}{Onderdeel}} \\
        \rref*{ex1-art:lorem}                   & \rref*{ex1-lid:lorem}                 & \rref*{ex1-sub:lorem}                          \\
    \end{tabularx}
    \cmditem{Rref} \translation
    {Starting with an uppercase letter and with a hyperlink.}
    {Beginnend met een hoofdletter en met hyperlink.}\\
    \begin{tabularx}{\linewidth}{@{}X X X@{}}
        \textbf{\translation{Article}{Artikel}} & \textbf{\translation{Paragraph}{Lid}} & \textbf{\translation{Point}{Onderdeel}} \\
        \Rref{ex1-art:lorem}                    & \Rref{ex1-lid:lorem}                  & \Rref{ex1-sub:lorem}                           \\
    \end{tabularx}
    \cmditem{Rref*} \translation
    {Starting with an uppercase letter and without a hyperlink.}
    {Beginnend met een hoofdletter en zonder hyperlink.}\\
    \begin{tabularx}{\linewidth}{@{}X X X@{}}
        \textbf{\translation{Article}{Artikel}} & \textbf{\translation{Paragraph}{Lid}} & \textbf{\translation{Point}{Onderdeel}} \\
        \Rref*{ex1-art:lorem}                   & \Rref*{ex1-lid:lorem}                 & \Rref*{ex1-sub:lorem}                          \\
    \end{tabularx}
\end{labeling}
\translation{%
    The examples above already show where this differs from \cmd{\zref}: a reference is not the number the
    heading carries. The paragraph \texttt{ex1-lid:lorem} is numbered `2.1' on the page and referred to as
    \rref*{ex1-lid:lorem}.%
}{%
    De voorbeelden hierboven laten al zien waarin dit van \cmd{\zref} verschilt: een verwijzing is niet het
    nummer dat de kop draagt. Het lid \texttt{ex1-lid:lorem} is op de pagina genummerd als `2.1' en wordt
    aangehaald als \rref*{ex1-lid:lorem}.%
}\\

\noindent
\DescribeMacro{\nref}
\DescribeMacro{\Nref}
\translation{%
    The \cmd{\nref}\marg{label} family adds the designation to the number, and has the same four members as
    \cmd{\rref}. The table below shows \cmd{\Nref} alone.%
}{%
    De familie \cmd{\nref}\marg{label} zet de benaming bij het nummer, en heeft dezelfde vier leden als
    \cmd{\rref}. De tabel hieronder toont alleen \cmd{\Nref}.%
}\\

\noindent
\begin{tabularx}{\linewidth}{@{}p{\widthof{EN}} X X X@{}}
    & \textbf{\translation{Article}{Artikel}} & \textbf{\translation{Paragraph}{Lid}} & \textbf{\translation{Point}{Onderdeel}} \\
    \translation{EN}{NL} & \Nref{ex1-art:lorem}                    & \Nref{ex1-lid:lorem}                  & \Nref{ex1-sub:lorem}                           \\
\end{tabularx}\translation{\selectlanguage{dutch}}{\selectlanguage{english}}\\
\begin{tabularx}{\linewidth}{@{}p{\widthof{EN}} X X X@{}}
    \translation{NL}{EN} & \Nref{ex1-art:lorem} & \Nref{ex1-lid:lorem} & \Nref{ex1-sub:lorem}\\
\end{tabularx}\translation{\selectlanguage{english}}{\selectlanguage{dutch}}\\

\noindent
\translation{%
    Where \cmd{\nref} differs from \cmd{\zcref} is that the designation need not stand in front of its
    number: Dutch writes a paragraph as \meta{ordinal} \meta{designation} and a point as
    \meta{designation} \meta{letter}, and the language decides which.%
}{%
    Waarin \cmd{\nref} van \cmd{\zcref} verschilt, is dat de benaming niet vóór zijn nummer hoeft te staan:
    het Nederlands schrijft een lid als \meta{rangtelwoord} \meta{benaming} en een onderdeel als
    \meta{benaming} \meta{letter}, en de taal bepaalt welke van de twee.%
}\\

\noindent
\translation{%
    \cmd{\rref} and \cmd{\nref} carry one level each. \cmd{\nref} gives a paragraph its designation but not
    the article it belongs to, and a reference to a paragraph that does not name its article names half of
    what it means.%
}{%
    \cmd{\rref} en \cmd{\nref} dragen elk één niveau. \cmd{\nref} geeft een lid zijn benaming maar niet het
    artikel waar het bij hoort, en een verwijzing naar een lid die zijn artikel niet noemt, noemt de helft
    van wat ze bedoelt.%
}
\DescribeMacro{\aref}
\DescribeMacro{\Aref}
\translation{%
    \cmd{\aref}\marg{labels\ldots} writes the whole reference: every level down to the one named, in the
    order and the wording the language asks for. It takes more than one label and joins them, as a list,
    \aref{ex1-sub:lorem,ex1-sub:lorem3,ex1-sub:lorem4}, or as a run,
    \aref{ex1-sub:lorem,ex1-sub:lorem2,ex1-sub:lorem3,ex1-sub:lorem4}. One limitation: with more than one
    label, \option{nameinlink} has no effect, and the hyperlink is drawn around the numbers alone. The same
    labels read as the language of the document does:%
}{%
    \cmd{\aref}\marg{labels\ldots} schrijft de hele verwijzing uit: ieder niveau tot aan het genoemde, in de
    volgorde en de bewoording die de taal vraagt. Hij neemt meer dan één label en koppelt ze, als opsomming,
    \aref{ex1-sub:lorem,ex1-sub:lorem3,ex1-sub:lorem4}, of als reeks,
    \aref{ex1-sub:lorem,ex1-sub:lorem2,ex1-sub:lorem3,ex1-sub:lorem4}. Eén beperking: bij meer dan één label
    heeft \option{nameinlink} geen effect en wordt de hyperlink alleen om de nummers getrokken. Dezelfde
    labels lezen zoals de taal van het document dat doet:%
}\\
\begin{lstlisting}[style=tex]
\selectlanguage{dutch} / \selectlanguage{english}
Zie / See \aref{ex1-sub:lorem,ex1-sub:lorem3,ex1-sub:lorem4}
en / and \aref{ex1-sub:lorem,ex1-sub:lorem2,ex1-sub:lorem3,ex1-sub:lorem4}.
\end{lstlisting}%
\translation{\selectlanguage{dutch}}{\selectlanguage{english}}~\\
\vspace*{-4em}
\begin{center}
    \large
    \translation{Zie}{See} \aref{ex1-sub:lorem,ex1-sub:lorem3,ex1-sub:lorem4}
    \translation{en}{and} \aref{ex1-sub:lorem,ex1-sub:lorem2,ex1-sub:lorem3,ex1-sub:lorem4}.
\end{center}
\translation{\selectlanguage{english}}{\selectlanguage{dutch}}
\translation{%
    What does not follow the language is the wording that names \emph{another} document: that is the
    \texttt{ref label} of \zcref{sec:extern}, which is written once and stays as it is written.%
}{%
    Wat de taal niet volgt is de verwoording die een \emph{ander} document noemt: dat is de
    \texttt{ref label} van \zcref{sec:extern}, die één keer geschreven wordt en blijft zoals ze
    geschreven is.%
}

\subsection{\translation{Conjunction}{Conjunctie}}
\DescribeMacro{\setmiddleconjunction\\\marg{format}}
\DescribeMacro{\setlastconjunction}
\DescribeMacro{\setrangeconjunction}
\DescribeMacro{\setconjunction\\\marg{middle}\\\marg{last}\\\marg{range}\\}
\translation{%
    Labels are joined through \package{zref}, and which words join them is set the way \package{cleveref}
    sets it:%
}{%
    Labels worden via \package{zref} gekoppeld, en welke woorden ze koppelen wordt ingesteld zoals
    \package{cleveref} dat doet:%
}
\begin{lstlisting}[style=tex]
\setmiddleconjunction{, }
\setlastconjunction{ \GetTranslation{and} }
\setrangeconjunction{ \GetTranslation{to} }
\setconjunction{, }{ \GetTranslation{and} }{ \GetTranslation{to} }
\end{lstlisting}
\DescribeMacro{\setjuncto}
\DescribeMacro{\unsetjuncto}
\translation{%
    Two more switch to the older notation and back. \cmd{\setjuncto} makes the last conjunction
    `\texttt{ jo.\textbackslash\ }' from that point on, and \cmd{\unsetjuncto} puts `\texttt{ and }' back.
    Both overwrite whatever \cmd{\setlastconjunction} was given earlier, so a document that set its own
    wording restores it with \cmd{\setlastconjunction}\marg{value} rather than with \cmd{\unsetjuncto}. The
    package option \option{legacy} calls \cmd{\setjuncto} at once.
}{%
    Twee andere schakelen naar de oudere notatie en terug. \cmd{\setjuncto} maakt het laatste koppelwoord
    vanaf dat punt `\texttt{ jo.\textbackslash\ }', en \cmd{\unsetjuncto} zet `\texttt{ en }' terug.
    Beide overschrijven wat er eerder met \cmd{\setlastconjunction} is meegegeven, dus een document dat een
    eigen bewoording heeft gezet herstelt die met \cmd{\setlastconjunction}\marg{waarde} en niet met
    \cmd{\unsetjuncto}. De pakketoptie \option{legacy} roept \cmd{\setjuncto} meteen aan.
}
\clearpage

\section{\translation{Interdocument references}{Interdocumentaire verwijzingen}}\label{sec:extern}
\translation{%
    A document written with this package refers to the articles, paragraphs, points and definitions of
    another one written with it.%
}{%
    Een document dat met dit pakket geschreven is verwijst naar de artikelen, leden, onderdelen en
    definities van een ander document dat daarmee geschreven is.%
}

\noindent
\fbox{\parbox{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{%
    \translation{%
        \textbf{Before building a document architecture on this.} A document that refers to the
        provisions of an external document cannot reach \textbf{PDF/A-3}. Every such reference becomes a
        \texttt{/GoToR} action pointing at a file specification that carries \texttt{/AFRelationship
        /Unspecified}, has no \texttt{/EF} and is not listed in \texttt{/AF}, which fails ISO 19005-3
        rule 6.8-4. The specification is written for the link, by the PDF management of \LaTeX{} and not
        by this package, so the profile stays out of reach until that is settled upstream.

        Measured on the two example documents: \file{example1-nl} makes eleven such references and
        carries one such specification, and fails PDF/A-3b on that rule; \file{example2-nl} refers to no
        provisions of another document, \emph{attaches} one and cites its definitions, has no
        \texttt{/GoToR} at all, and reaches PDF/A-3a. So attaching another document and citing its
        definitions is not what costs the profile\,---\,referring to its articles, paragraphs and points
        is. Every other profile in \zcref{sec:conformance} is unaffected either way.%
    }{%
        \textbf{Voordat u een documentarchitectuur hierop bouwt.} Een document dat naar de bepalingen
        van een extern document verwijst haalt \textbf{PDF/A-3} niet. Iedere zo'n verwijzing wordt een
        \texttt{/GoToR}-actie die naar een bestandsspecificatie wijst die \texttt{/AFRelationship
        /Unspecified} draagt, geen \texttt{/EF} heeft en niet in \texttt{/AF} staat, wat faalt op regel
        6.8-4 van ISO 19005-3. Die specificatie wordt voor de link geschreven, door de
        PDF-administratie van \LaTeX{} en niet door dit pakket, dus het profiel blijft buiten bereik tot
        dat verderop opgelost is.

        Gemeten aan de twee voorbeelddocumenten: \file{example1-nl} maakt elf van zulke verwijzingen en
        draagt één zo'n specificatie, en faalt daarop voor PDF/A-3b; \file{example2-nl} verwijst naar
        geen enkele bepaling van een ander document, \emph{voegt} er een bij en haalt diens definities
        aan, heeft geen enkele \texttt{/GoToR}, en haalt PDF/A-3a. Een ander document bijvoegen en zijn
        definities aanhalen kost het profiel dus niet\,---\,naar zijn artikelen, leden en onderdelen
        verwijzen wel. Ieder ander profiel in \zcref{sec:conformance} blijft hoe dan ook ongemoeid.%
    }}}\\

\noindent
\DescribeMacro{\refdocument\\\oarg{prefix}\\\marg{name}\\\marg{opts...}}
\translation{%
    \cmd{\refdocument} in the preamble is what makes the articles, paragraphs and points of another document
    referable; \cmd{\aref} then reads its labels through \cmd{\zexternaldocument} of \package{zref-xr}.
    Both documents may well use the same label, so every label of the other one is given a \option{prefix},
    \texttt{ext-} unless another is named: \texttt{lid:lorem} is referred to as \texttt{ext-lid:lorem}. The
    prefix is for references and not for definitions, which \cmd{\gls} cites under their own label.%
}{%
    \cmd{\refdocument} in de preamble is wat de artikelen, leden en onderdelen van een ander document
    aanhaalbaar maakt; \cmd{\aref} leest diens labels dan via \cmd{\zexternaldocument} van
    \package{zref-xr}.
    Beide documenten kunnen hetzelfde label gebruiken, dus ieder label van het andere krijgt een
    \option{prefix}, \texttt{ext-} tenzij er een andere genoemd wordt: naar \texttt{lid:lorem} wordt
    verwezen als \texttt{ext-lid:lorem}. De prefix geldt voor verwijzingen en niet voor definities, die
    \cmd{\gls} onder hun eigen label aanhaalt.%
}\\

\noindent
\DescribeMacro{\masterdocument\\\oarg{prefix}\\\marg{name}\\\marg{opts...}\\}
\translation{%
    \cmd{\masterdocument} is the whole link rather than half of one. It does what \cmd{\refdocument} does and
    three things more:%
}{%
    \cmd{\masterdocument} legt de hele koppeling en niet de helft ervan. Hij doet wat \cmd{\refdocument}
    doet en daarbij nog drie dingen:%
}
\begin{enumerate}
    \item \translation{references with the \cmd{\aref} family}{verwijzen met de \cmd{\aref} familie};
    \item \translation{definitions of that document, cited with the \cmd{\gls} family}{definities van dat document, aangehaald met de \cmd{\gls} familie};
    \item \translation{the document named in the sentence that cites it}{het document genoemd in de zin die het aanhaalt};
    \item \translation{a footnote at the first reference or definition, with the document itself embedded in the PDF file as an attachment}{een voetnoot bij de eerste verwijzing of definitie, met het document zelf als bijlage ingesloten in het PDF-bestand}.
\end{enumerate}
\translation{%
    A document may have more than one master document, as this manual has:%
}{%
    Een document kan meer dan één masterdocument hebben, zoals deze handleiding:%
}
\ifenglishmanual
\begin{lstlisting}[style=tex]
\newcommand\definitionlabel[1]{~(see #1)}
\masterdocument[ex1-]{example1-en}{
    path=../test/,
    defs=example1,
    author=E. Nijenhuis,
    subject=Example One,
    description=The first example document,
    ref label=of Example One,
    def label=\definitionlabel
}

\masterdocument[ex2-]{example2-en}{
    path=../test/,
    defs=example2,
    author=E. Nijenhuis,
    subject=Example Two,
    description=The second example document,
    ref label=of Example Two,
    def label=\definitionlabel
}
\end{lstlisting}
\else
\begin{lstlisting}[style=tex]
\newcommand\definitionlabel[1]{~(zie #1)}
\masterdocument[ex1-]{example1-nl}{
    path=../test/,
    defs=example1,
    author=E. Nijenhuis,
    subject=Voorbeeld Één,
    description=Het éérste voorbeeld document,
    ref label=van Voorbeeld Één,
    def label=\definitionlabel
}

\masterdocument[ex2-]{example2-nl}{
    path=../test/,
    defs=example2,
    author=E. Nijenhuis,
    subject=Voorbeeld Twee,
    description=Het tweede voorbeeld document,
    ref label=van Voorbeeld Twee,
    def label=\definitionlabel
}
\end{lstlisting}
\fi

\translation{%
    The third argument of \cmd{\refdocument} and \cmd{\masterdocument} holds the fields below. A field this
    package does not know is an error where it is given rather than a value stored under a name nothing
    reads back.
}{%
    Het derde argument van \cmd{\refdocument} en \cmd{\masterdocument} bevat de velden hieronder. Een veld
    dat dit pakket niet kent is een fout waar het gegeven wordt, en niet een waarde die onder een naam
    wordt opgeslagen die niemand terugleest.%
}
\begin{labeling}{\texttt{footnote label}}
    \addtokomafont{labelinglabel}{\ttfamily}
    \item[name] \translation{%
        the first argument of the macro by default. It is the name the aux file of the other document is
        read under.%
    }{%
        standaard het eerste argument van de macro. Het is de naam waaronder het aux-bestand van het andere
        document gelezen wordt.%
    }
    \item[filename] \translation{%
        the \texttt{name} with \texttt{.pdf} after it by default, for a document whose file is not named
        after it.%
    }{%
        standaard de \texttt{name} met \texttt{.pdf} erachter, voor een document waarvan het bestand niet
        naar hem genoemd is.%
    }
    \item[path] \translation{%
        \texttt{./} by default, put in front of both the name and the filename, for documents kept in
        another directory.%
    }{%
        standaard \texttt{./}, geplaatst vóór zowel de naam als de bestandsnaam, voor documenten die in een
        andere map staan.%
    }
    \item[ref label] \translation{%
        the wording that names the other document in a sentence, as in \enquote{article 2 \emph{of the
        general terms}}. It is empty by default, and \cmd{\documentlabel} then composes one from the
        \texttt{subject}:%
    }{%
        de verwoording die het andere document in een zin noemt, zoals in \enquote{artikel 2 \emph{van de
        algemene voorwaarden}}. Hij is standaard leeg, en \cmd{\documentlabel} stelt er dan zelf een samen
        uit de \texttt{subject}:%
    } \lstinline|\GetTranslation{of the} \artifactsubject{#1}|.
    \translation{%
        Not every language can compose it; see \zcref{sec:lang}, where German and French say so out loud.%
    }{%
        Niet iedere taal kan die samenstellen; zie \zcref{sec:lang}, waar het Duits en het Frans dat hardop
        zeggen.%
    }
    \item[def label] \translation{%
        what stands behind a definition that comes from the other document. The default is%
    }{%
        wat er achter een definitie staat die uit het andere document komt. De standaardwaarde is%
    } \lstinline|~(\GetTranslation{see} #1)|.
    \translation{%
        Its argument is the \texttt{subject}, with the footnote of the first occurrence attached to it.%
    }{%
        Het argument is de \texttt{subject}, met de voetnoot van de eerste verschijning eraan vast.%
    }
    \item[footnote] \translation{%
        \texttt{true} by default, so that the first reference or definition carries a footnote with the
        document attached to it. \texttt{false} leaves the footnote out.%
    }{%
        standaard \texttt{true}, zodat de eerste verwijzing of definitie een voetnoot draagt met het
        document eraan gehecht. Met \texttt{false} blijft de voetnoot achterwege.%
    }
    \item[footnote label] \translation{%
        what that footnote says. Its argument is the attachment, with the \texttt{subject} as the text it
        is offered under; by default the macro prints that argument and nothing else.%
    }{%
        wat die voetnoot zegt. Het argument is de bijlage, met de \texttt{subject} als de tekst waaronder
        hij wordt aangeboden; standaard drukt de macro dat argument af en verder niets.%
    }
    \item[defs] \translation{%
        the definitions of the other document, loaded under it, so that a definition cited from it names
        where it comes from.%
    }{%
        de definities van het andere document, onder dat document ingeladen, zodat een definitie die
        eruit wordt aangehaald noemt waar hij vandaan komt.%
    }
    \item[author] \translation{%
        the author of the embedded file, which a PDF viewer shows beside the attachment.%
    }{%
        de auteur van het ingesloten bestand, die een PDF-viewer bij de bijlage toont.%
    }
    \item[subject] \translation{%
        the name this document calls the other one by. It is what \texttt{ref label} and \texttt{def label}
        fall back on, and it is the description of the embedded file.%
    }{%
        de naam waarmee dit document het andere aanduidt. Het is waar \texttt{ref label} en
        \texttt{def label} op terugvallen, en het is de omschrijving van het ingesloten bestand.%
    }
    \item[description] \translation{%
        a longer description of the embedded file, shown by a viewer beside the attachment.%
    }{%
        een langere omschrijving van het ingesloten bestand, die een viewer bij de bijlage toont.%
    }
\end{labeling}
\translation{%
    Two more fields are accepted and are not for a document to set;
    see \zcref{sec:api} for what that means for a release.
    \texttt{referred} records that an artifact has had its footnote, which \cmd{\documentfootnote} sets and
    a document that sets it by hand only uses to suppress a footnote it never saw. \texttt{url} is
    reserved: it is stored, it is readable with \cmd{\artifacturl}, and nothing in this bundle reads it. It
    was meant to name where the other document may be found, in the footnote beside the attachment, and
    that is not implemented. The name is kept free for exactly that.%
}{%
    Er worden nog twee velden aanvaard die niet door een document gezet horen te worden;
    zie \zcref{sec:api} voor wat dat voor een uitgave betekent.
    \texttt{referred} legt vast dat een artefact zijn voetnoot gehad heeft, wat \cmd{\documentfootnote}
    zet en waarmee een document dat het met de hand zet enkel een voetnoot onderdrukt die het nooit gezien
    heeft. \texttt{url} is gereserveerd: hij wordt opgeslagen, hij is met \cmd{\artifacturl} te lezen, en
    niets in deze bundel leest hem. Het was de bedoeling dat hij de vindplaats van het andere document zou
    noemen, in de voetnoot naast de bijlage, en dat is niet geïmplementeerd. De naam blijft daarvoor
    vrijgehouden.%
}

\noindent
\DescribeMacro{\documentlabel\\\marg{label}}
\DescribeMacro{\documentfootnote\\\oarg{link text}\\\marg{label}}
\DescribeMacro{\documentattachment\\\marg{label}\\\marg{link text}}
\DescribeMacro{\attachdocument\\\oarg{description}\\\marg{filename}\\\marg{link text}}
\translation{%
    A reference or a definition that comes from another document names that document, and the first one of
    either carries a footnote with the document embedded in it. Three commands do that between them:
    \cmd{\documentlabel}\footnote{This one words the name for a reference and not for a definition, which
    has a \texttt{def label} of its own.} words the name, \cmd{\documentfootnote} places the footnote, and
    \cmd{\documentattachment} embeds the file and offers it under the text it is given. Any other file is
    embedded with \cmd{\attachdocument}, which needs no artifact of its own.%
}{%
    Een verwijzing of een definitie die uit een ander document komt noemt dat document, en de eerste van
    beide draagt een voetnoot met dat document erin ingesloten. Drie commando's doen dat samen:
    \cmd{\documentlabel}\footnote{Deze verwoordt de naam voor een verwijzing en niet voor een definitie, die
    een eigen \texttt{def label} heeft.} verwoordt de naam, \cmd{\documentfootnote} plaatst de voetnoot, en
    \cmd{\documentattachment} sluit het bestand in en biedt het aan onder de tekst die hij meekrijgt. Ieder
    ander bestand wordt ingesloten met \cmd{\attachdocument}, die geen eigen artefact nodig heeft.%
}\\

\noindent
\translation{These commands can also be called by hand.}{Deze commando's kunnen ook met de hand aangeroepen worden.}
\translation{For example,}{Neem b\ij{}voorbeeld} \lstinline[style=tex]|\documentfootnote{example2}|\translation{, which gives}{, wat geeft}:
`\documentfootnote{example2-\translation{en}{nl}}'.

\subsection{\translation{Which link opens an attachment}{Welke link een bijlage opent}}\label{sec:attachmentlink}
\translation{%
    The \option{attachmentlink} option decides what \cmd{\documentattachment} puts on the page. The file
    itself is embedded either way and appears in the attachment pane of the viewer, which needs no link at
    all; what differs is what happens where the text stands.

    \texttt{goto}, the default, makes that text a hyperlink carrying an embedded go-to action, which names
    a file \emph{inside this document}. That is the thing there is to say, and it is the one action
    \package{poppler} does not implement. Measured in the shared library rather than read out of a manual:
    it names \texttt{GoTo}, \texttt{GoToR}, \texttt{Launch} and \texttt{Named} among its actions and
    \texttt{GoToE} nowhere, and \texttt{FileAttachment} among its annotations. \package{poppler} is the
    engine under most viewers on a free desktop, so there that link does nothing.

    \option{attachmentlink=annotation} places a file attachment annotation over the same text instead,
    which Acrobat and \package{poppler} both act on. It shows nothing of its own\,---\,the text stays the
    only thing on the page\,---\,and it is the annotation that opens.%
}{%
    De optie \option{attachmentlink} bepaalt wat \cmd{\documentattachment} op de pagina zet. Het bestand
    zelf wordt hoe dan ook ingesloten en verschijnt in het bijlagenpaneel van de viewer, dat helemaal geen
    link nodig heeft; wat verschilt is wat er gebeurt waar de tekst staat.

    \texttt{goto}, de standaard, maakt van die tekst een hyperlink met een embedded go-to action, die een
    bestand \emph{binnen dit document} noemt. Dat is wat er te zeggen valt, en het is de ene actie die
    \package{poppler} niet implementeert. Gemeten in de gedeelde bibliotheek in plaats van gelezen in een
    handleiding: die noemt \texttt{GoTo}, \texttt{GoToR}, \texttt{Launch} en \texttt{Named} onder zijn
    acties en \texttt{GoToE} nergens, en \texttt{FileAttachment} onder zijn annotaties. \package{poppler}
    is de motor onder de meeste viewers op een vrij bureaublad, dus daar doet die link niets.

    \option{attachmentlink=annotation} legt in plaats daarvan een file attachment annotatie over dezelfde
    tekst, waar Acrobat en \package{poppler} allebei gehoor aan geven. Hij laat zelf niets zien\,---\,de
    tekst blijft het enige op de pagina\,---\,en de annotatie is wat opent.%
}

\begin{center}
    \begin{tabular}{@{}lll@{}}
        & \texttt{goto} & \texttt{annotation} \\
        \hline
        \translation{PDF construct}{PDF-constructie}
            & \translation{embedded go-to action}{embedded go-to action}
            & \translation{file attachment annotation}{file attachment annotatie} \\
        \translation{opens in Acrobat}{opent in Acrobat}            & \translation{yes}{ja}   & \translation{yes}{ja} \\
        \translation{opens in \package{poppler}}{opent in \package{poppler}} & \translation{no}{nee} & \translation{yes}{ja} \\
        \translation{in the attachment pane}{in het bijlagenpaneel} & \translation{yes}{ja}   & \translation{yes}{ja} \\
        \translation{structure element}{structuurelement}           & \texttt{Link}           & \texttt{Annot} \\
        \translation{link text inside it}{linktekst erin}           & \translation{yes}{ja}   & \translation{no, beside it}{nee, ernaast} \\
        \translation{measured PDF/A-4f}{gemeten PDF/A-4f}           & \translation{pass}{slaagt} & \translation{pass}{slaagt} \\
        \translation{measured PDF/UA-2}{gemeten PDF/UA-2}           & \translation{pass}{slaagt} & \translation{pass}{slaagt} \\
    \end{tabular}
\end{center}
\noindent
\translation{%
    The two viewer rows are what the two constructs are; the two structure rows are measured, and they are
    why the default did not change for this release. A file attachment is a markup annotation, and PDF/UA
    asks that one be enclosed in an \texttt{Annot} structure element. The annotation route puts it there,
    and the text it stands beside remains a sibling of it rather than its content, where the \texttt{goto}
    route makes that text the content of its \texttt{Link} element. Measured on the same document:
    \texttt{goto} gives a \texttt{Link} with two kids, the marked content of the text and the object
    reference; \texttt{annotation} gives an \texttt{Annot} with one. Joining the two on the annotation
    route is a job of its own and is not in this release.

    Do not take a validator's word for that either way. The veraPDF this manual is measured with reported
    nothing when the \texttt{Annot} element was missing altogether and an older one did, so the suite reads
    the structure tree out of the PDF file itself rather than asking for a verdict; \zcref{sec:checks} has
    that assertion.

    What is left is a question about documents rather than about PDF. A reference a reader meets in the
    flow of a sentence is not the same offer as one that stands beside it, and \texttt{goto} is the route
    that makes the offer in the sentence. A document whose readers are on a free desktop and who are meant
    to open the attachment from the page says \option{attachmentlink=annotation} and gets the other trade.%
}{%
    De twee viewerregels zijn wat de twee constructies zijn; de twee structuurregels zijn gemeten, en zij
    zijn de reden dat de standaard voor deze uitgave niet veranderd is. Een bijlage-annotatie is een
    markup-annotatie, en PDF/UA vraagt dat zo een in een \texttt{Annot}-structuurelement zit. De
    annotatieroute zet hem daarin, en de tekst waar hij naast staat blijft daarvan een broer in plaats van
    zijn inhoud, terwijl de route \texttt{goto} van die tekst juist de inhoud van zijn
    \texttt{Link}-element maakt. Gemeten aan hetzelfde document: \texttt{goto} geeft een \texttt{Link} met
    twee kinderen, de gemarkeerde inhoud van de tekst en de objectverwijzing; \texttt{annotation} geeft een
    \texttt{Annot} met één. Die twee op de annotatieroute samenbrengen is een klus op zich en zit niet in
    deze uitgave.

    Neem een validator daarin niet op zijn woord, welke kant ook op. De veraPDF waarmee deze handleiding
    gemeten is meldde niets toen het \texttt{Annot}-element helemaal ontbrak en een oudere meldde het wel,
    dus de suite leest de structuurboom zelf uit het PDF-bestand in plaats van om een oordeel te vragen;
    \zcref{sec:checks} bevat die controle.

    Wat overblijft is een vraag over documenten en niet over PDF. Een verwijzing die een lezer in de loop
    van een zin tegenkomt is een ander aanbod dan een die ernaast staat, en \texttt{goto} is de route die
    het aanbod in de zin doet. Een document waarvan de lezers op een vrij bureaublad zitten en de bijlage
    vanaf de pagina horen te openen zegt \option{attachmentlink=annotation} en krijgt de andere ruil.%
}

\clearpage

\section{\translation{Signatures}{Handtekeningen}}\label{sec:sign}
\translation{%
    An agreement is signed, and a PDF can carry the field to sign it in. The
    \package{regulatory-sign} module draws such a field and puts a signature widget over it, so that a
    reader who opens the document in a viewer that can sign is offered the field where the line is.

    It comes from \package{xdp-sign} of Xerdi's Documentation Project and is maintained here, so that a
    document that needs a signature does not depend on a package that is in no distribution.%
}{%
    Een overeenkomst wordt ondertekend, en een PDF kan het veld dragen om dat in te doen. De module
    \package{regulatory-sign} tekent zo'n veld en legt er een handtekeningwidget overheen, zodat een lezer
    die het document opent in een viewer die kan ondertekenen het veld aangeboden krijgt waar de lijn
    staat.

    De module komt uit \package{xdp-sign} van Xerdi's Documentation Project en wordt hier onderhouden,
    zodat een document dat een handtekening nodig heeft niet afhangt van een pakket dat in geen enkele
    distributie zit.%
}\\

\noindent
\DescribeMacro{\signaturefield\\\oarg{tooltip}\\\marg{name}\\\marg{width}\\\marg{height}}
\translation{%
    Draws a signature field of \meta{width} by \meta{height}. The \meta{name} is what a viewer stores the
    signature under and what a signing tool asks for, so it is worth giving a telling one. The optional
    \meta{tooltip} says what the field is for, which is also what a screen reader announces.

    The field is placed through the kernel when \cmd{\DocumentMetadata} is declared, and through the
    engine otherwise. A document that offers neither gets a warning and a drawn box without a field: a
    line to sign on paper, but nothing to sign in a viewer.%
}{%
    Tekent een handtekeningveld van \meta{breedte} bij \meta{hoogte}. De \meta{naam} is waaronder een
    viewer de handtekening bewaart en waar een ondertekentool om vraagt, dus een sprekende naam loont. De
    optionele \meta{tooltip} zegt waar het veld voor is, en dat is ook wat een schermlezer voorleest.

    Het veld wordt via de kernel geplaatst wanneer \cmd{\DocumentMetadata} is gedeclareerd, en anders via
    de engine. Een document dat geen van beide biedt krijgt een waarschuwing en een getekend kader zonder
    veld: een lijn om op papier te tekenen, maar niets om in een viewer te ondertekenen.%
}
\ifenglishmanual
\begin{lstlisting}[style=tex]
\article{Signatures}
\begin{paras}
    \item The client signs below.\\
        \signaturefield[Signature of the client]{client}{6cm}{2cm}
\end{paras}
\end{lstlisting}
\else
\begin{lstlisting}[style=tex]
\article{Ondertekening}
\begin{paras}
    \item De opdrachtgever tekent hieronder.\\
        \signaturefield[Handtekening van de opdrachtgever]{opdrachtgever}{6cm}{2cm}
\end{paras}
\end{lstlisting}
\fi
\translation{%
    \cmd{\SignatureField} is the name this command had in \package{xdp-sign} and still answers to, so a
    document written for that package keeps working when it moves over.

    A signature used to cost the document its PDF/A-2b conformance, and no longer does. Rule 6.3.3-1
    asks every annotation that is not a \texttt{Popup}, a \texttt{Link} or of zero size to carry an
    appearance dictionary, and a \texttt{Widget} is asked as well; veraPDF said of a field without one
    \enquote{An annotation does not contain an appearance dictionary}. Every field now points at one
    empty appearance, shared between all of them: the line to sign on is drawn on the page and not by the
    annotation, so an appearance that drew anything would draw it twice, and a signing tool replaces the
    normal appearance with its own the moment the field is signed. The case is in the table of
    \zcref{sec:conformance} and passes; the harness turns an unexpected pass into a failure, which is how
    this one announced itself.%
}{%
    \cmd{\SignatureField} is de naam die dit commando in \package{xdp-sign} had en waar het nog steeds op
    luistert, zodat een document dat voor dat pakket geschreven is blijft werken wanneer het overkomt.

    Een handtekening kostte het document zijn PDF/A-2b conformiteit en doet dat niet meer. Regel 6.3.3-1
    vraagt van iedere annotatie die geen \texttt{Popup}, geen \texttt{Link} en niet van nulformaat is een
    appearance dictionary, en een \texttt{Widget} wordt dat ook gevraagd; veraPDF zei van een veld zonder
    \enquote{An annotation does not contain an appearance dictionary}. Ieder veld wijst nu naar één lege
    verschijning, die ze allemaal delen: de lijn om op te tekenen wordt op de pagina gezet en niet door de
    annotatie, dus een verschijning die iets tekende zou het dubbel tekenen, en een ondertekentool vervangt
    de normale verschijning door de zijne zodra het veld getekend wordt. Het geval staat in de tabel van
    \zcref{sec:conformance} en slaagt; het harnas maakt van een onverwacht geslaagd geval een fout, en zo
    heeft dit geval zich gemeld.%
}
\clearpage

\section{\translation{External sources}{Externe bronnen}}\label{sec:sources}
\translation{%
    A regulatory document cites instruments that are not this document: a statute, a regulation of the
    Union. \package{regulatory-sources} holds the ones a document cites and words the citations of them,
    so that how a citation reads is a property of the source and of the document rather than of the
    sentence it happens to stand in.

    The module does three things. It \emph{reads} sources, from a \file{bib} file
    (\cmd{\loadsources}) or from the document itself (\cmd{\newsource}), and holds them against the fields
    their type requires. It \emph{stores} them, so that \cmd{\srcfield} and \cmd{\srctype} give back what
    was declared. And it \emph{words} a citation of one, whole or down to a provision, with
    \cmd{\srcref}\,---\,which is where the citation registers below come in.

    Two things are deliberately elsewhere. The registers themselves live in the language definition files
    of \zcref{sec:lang}, since how a legal order words a citation is the same knowledge as what that
    language calls a paragraph. And no legislation ships with this bundle: a citation title changes on its
    own clock and a package on CTAN does not.%
}{%
    Een regulatoir document haalt instrumenten aan die dit document niet zijn: een wet, een verordening
    van de Unie. \package{regulatory-sources} houdt de bronnen bij die een document aanhaalt en verwoordt
    de aanhalingen ervan, zodat hoe een aanhaling luidt een eigenschap is van de bron en van het document
    en niet van de zin waar hij toevallig in staat.

    De module doet drie dingen. Hij \emph{leest} bronnen, uit een \file{bib}-bestand
    (\cmd{\loadsources}) of uit het document zelf (\cmd{\newsource}), en legt ze naast de velden die hun
    type vereist. Hij \emph{bewaart} ze, zodat \cmd{\srcfield} en \cmd{\srctype} teruggeven wat er
    gedeclareerd is. En hij \emph{verwoordt} een aanhaling ervan, in zijn geheel of tot op een bepaling,
    met \cmd{\srcref}\,---\,en daar komen de citeerregisters hieronder bij kijken.

    Twee dingen staan met opzet elders. De registers zelf staan in de taaldefinitiebestanden van
    \zcref{sec:lang}, aangezien hoe een rechtsorde een aanhaling verwoordt dezelfde kennis is als wat die
    taal een lid noemt. En er komt geen regelgeving met deze bundel mee: een citeertitel verandert op zijn
    eigen klok en een pakket op CTAN niet.%
}\\

\noindent
\DescribeMacro{\loadsources\\\marg{file}}
\translation{%
    Reads \meta{file}\texttt{.bib}. The reader is this module's own, so that a document needs no second
    program for a handful of records\,---\,and it is \textbf{not a \BibTeX{} parser}. It reads a file line
    by line and knows four shapes, each of which is a whole line:%
}{%
    Leest \meta{bestand}\texttt{.bib}. De lezer is van deze module zelf, zodat een document voor een
    handvol records geen tweede programma nodig heeft\,---\,en hij is \textbf{geen \BibTeX{}-parser}. Hij
    leest een bestand regel voor regel en kent vier vormen, die elk een hele regel beslaan:%
}
\begin{labeling}{\translation{entry header}{entry-kop}}
    \item[\translation{comment}{commentaar}] \translation{%
        an empty line, or one whose first non-blank character is \texttt{\%}. That character is this
        reader's, not \BibTeX{}'s, which has no comment character at all.%
    }{%
        een lege regel, of een regel waarvan het eerste niet-blanco teken \texttt{\%} is. Dat teken is van
        deze lezer en niet van \BibTeX{}, dat helemaal geen commentaarteken kent.%
    }
    \item[\translation{entry header}{entry-kop}]
        \texttt{@}\meta{type}\texttt{\{}\meta{key}\texttt{,} \translation{%
        and nothing after it on the line. The key holds no comma, no space and no brace.%
    }{%
        en verder niets op die regel. De sleutel bevat geen komma, geen spatie en geen accolade.%
    }
    \item[\translation{field}{veld}]
        \meta{name} \texttt{= \{}\meta{value}\texttt{\},} \translation{%
        and nothing after it on the line. The value is between braces, and the comma at the end is
        optional.%
    }{%
        en verder niets op die regel. De waarde staat tussen accolades, en de komma aan het eind is
        optioneel.%
    }
    \item[\translation{closing brace}{sluitaccolade}] \texttt{\}} \translation{%
        alone on a line, which ends the entry.%
    }{%
        alleen op een regel, wat de entry afsluit.%
    }
\end{labeling}
\translation{%
    A line that is none of the four stops the run and names the file, the line number and the line itself.
    That is the point of the restriction: a reader that skips what it cannot read leaves a citation empty
    in a document that is otherwise fine, and \zcref{sec:testdocs} has the two documents that hold it to
    that.

    So these, all of which are ordinary \BibTeX{}, are rejected here: a value in double quotes
    (\texttt{title = "X"}); a bare value (\texttt{year = 2024}); a whole entry on one line; a field spread
    over several lines; anything after the closing brace of a value on the same line; \texttt{@string}
    abbreviations and \texttt{\#} concatenation; and \texttt{@comment} blocks. A value is stored as it
    stands and is never expanded, so a macro written in a file comes back as that macro.%
}{%
    Een regel die geen van de vier is stopt de draai, met het bestand, het regelnummer en de regel zelf
    erbij. Dat is de bedoeling van de beperking: een lezer die overslaat wat hij niet lezen kan laat een
    aanhaling leeg in een document dat er verder goed uitziet, en \zcref{sec:testdocs} bevat de twee
    documenten die hem daaraan houden.

    Dit wordt hier dus geweigerd, terwijl het allemaal gewoon \BibTeX{} is: een waarde tussen dubbele
    aanhalingstekens (\texttt{title = "X"}); een kale waarde (\texttt{year = 2024}); een hele entry op één
    regel; een veld over meerdere regels; iets achter de sluitaccolade van een waarde op dezelfde regel;
    \texttt{@string}-afkortingen en samenvoeging met \texttt{\#}; en \texttt{@comment}-blokken. Een waarde
    wordt bewaard zoals hij er staat en wordt nooit geëxpandeerd, dus een macro die in een bestand staat
    komt als die macro terug.%
}
\begin{lstlisting}[style=tex]
@regulation{bw6,
  citetitle   = {Burgerlijk Wetboek},
  abbreviation = {BW},
  book         = {6},
  bwbid        = {BWBR0005289},
  valid        = {2024-01-01},
}
\end{lstlisting}

\noindent
\DescribeMacro{\newsource\\\marg{key}\\\marg{type}\\\marg{fields}}
\translation{%
    Declares one source in the document itself, which is the route that needs no file at all. It ends in
    the same store as a line read from a file, so nothing downstream can tell the two apart.%
}{%
    Declareert één bron in het document zelf, de route die helemaal geen bestand nodig heeft. Hij komt in
    dezelfde opslag terecht als een regel uit een bestand, dus verderop is het verschil niet te zien.%
}\\

\noindent
\DescribeMacro{\newsourcetypealias\\\marg{alias}\\\marg{type}}
\DescribeMacro{\newsourcefieldalias\\\marg{alias}\\\marg{field}}
\translation{%
    The types and fields are named in English, as the rest of this bundle is, and every one of them
    answers to a Dutch name as well: \texttt{regeling} and \texttt{euhandeling} for the types, and
    \texttt{citeertitel}, \texttt{afkorting}, \texttt{boek}, \texttt{geldig}, \texttt{soort},
    \texttt{nummer}, \texttt{roepnaam}, \texttt{titel}, \texttt{pb} and \texttt{lidwoord} for the fields.
    A file may use either, and so may a document reading one back: the Dutch name resolves to the English
    one before anything is stored. Another language is a line each.%
}{%
    De types en velden hebben Engelse namen, zoals de rest van deze bundel, en luisteren allemaal ook naar
    een Nederlandse: \texttt{regeling} en \texttt{euhandeling} voor de types, en \texttt{citeertitel},
    \texttt{afkorting}, \texttt{boek}, \texttt{geldig}, \texttt{soort}, \texttt{nummer},
    \texttt{roepnaam}, \texttt{titel}, \texttt{pb} en \texttt{lidwoord} voor de velden. Een bestand mag
    beide gebruiken, en een document dat ze terugleest ook: de Nederlandse naam wordt naar de Engelse
    herleid voordat er iets opgeslagen wordt. Nog een taal is een regel per naam.%
}\\

\noindent
\DescribeMacro{\newsourcetype\\\marg{type}\\\marg{required fields}\\\marg{register}}
\translation{%
    Declares a type, the fields an entry of it cannot do without, and the register its citations are
    worded in. Two are declared already: \texttt{regulation}, which needs a \texttt{citetitle}, and
    \texttt{euact}, which needs a \texttt{kind} and a \texttt{number}. A source that misses one of them stops the run, which is what
    lets everything downstream read a field without asking whether it is there.%
}{%
    Declareert een type, de velden waar een entry van dat type niet zonder kan, en het register waarin zijn
    verwijzingen verwoord worden. Er zijn er twee gedeclareerd: \texttt{regulation}, dat een
    \texttt{citetitle} nodig heeft, en \texttt{euact}, dat een \texttt{kind} en een \texttt{number} nodig
    heeft. Een bron die er één mist stopt de draai, en
    dat is precies wat alles verderop toestaat een veld te lezen zonder te vragen of het er is.%
}\\

\noindent
\DescribeMacro{\srcfield\\\marg{key}\\\marg{field}}
\DescribeMacro{\srctype\\\marg{key}}
\DescribeMacro{\ifsourceexists\\\marg{key}\\\marg{true}\\\marg{false}}
\translation{%
    Read what was declared. A value is data and not \TeX{}: it comes back as it stands in the file.%
}{%
    Lezen wat er gedeclareerd is. Een waarde is data en geen \TeX{}: hij komt terug zoals hij in het
    bestand staat.%
}\\

\noindent
\DescribeMacro{\sourcedate\\\marg{YYYY-MM-DD}}
\translation{%
    A citation of legislation is a citation of a \emph{version} of it: the same article read a year apart
    is not necessarily the same article, and the Juriconnect standard carries the date in the reference for
    that reason.

    What this release does with that, exactly, so that nothing here is read as more than it is. It
    \textbf{records} as of when a document cites, with \cmd{\sourcedate} for the whole document or
    \texttt{date=\meta{YYYY-MM-DD}} for one citation, which also answers to \texttt{datum}. It
    \textbf{warns} when a document says neither, and when a document speaks as of a later date than the
    \texttt{valid} field of a source it cites. It does \textbf{not} print that date in a citation, and it
    does \textbf{not} build a Juriconnect URI or a link to one. A \texttt{bwbid} or a \texttt{celex} field
    is stored and can be read back with \cmd{\srcfield}; nothing in this bundle turns one into a reference.
    So: \package{regulatory}~1.0 has the date discipline a Juriconnect citation needs and not Juriconnect
    output.

    A document that says neither is told once, as a warning and not an error: citing without a date is
    defective, but it is not broken, and a package that cannot be added to an existing document without
    stopping it is a package that does not get added.

    Every entry says when it was last held against the text it describes, in a \texttt{valid} field. When
    the document speaks as of a later date than that, the entry cannot vouch for itself and says so, once
    per source. An entry that leaves the field out is told so, because it could then never be reported out
    of date at all: \enquote{not looked at yet} and \enquote{looked at and current} would be the same
    silence, and a guard whose off switch is an absent field is switched off by accident rather than by
    decision. The decision has a word of its own, \texttt{valid = unverified}, which is silent.
    That is what makes a shared file of sources safe to use at all, wherever it is kept: the identifiers in
    it never age, the dates do, and a document that outruns the data it was handed is told rather than
    quietly given whatever the last update to that file happened to contain. This bundle ships no
    legislation itself and is not the place for it\,---\,a citation title changes on its own clock and a
    package on CTAN does not\,---\,but it is the place for the machinery that says when the two have come
    apart.%
}{%
    Een aanhaling van regelgeving is een aanhaling van een \emph{versie} ervan: hetzelfde artikel een jaar
    later gelezen is niet per se hetzelfde artikel, en de Juriconnect-standaard draagt de datum daarom in
    de verwijzing zelf.

    Wat deze uitgave daar precies mee doet, zodat niets hier voor meer wordt gelezen dan het is. Zij
    \textbf{legt vast} per wanneer een document aanhaalt, met \cmd{\sourcedate} voor het hele document of
    met \texttt{date=\meta{JJJJ-MM-DD}} voor één aanhaling, wat ook naar \texttt{datum} luistert. Zij
    \textbf{waarschuwt} wanneer een document geen van beide zegt, en wanneer een document spreekt per een
    latere datum dan het veld \texttt{valid} van een bron die het aanhaalt. Zij drukt die datum
    \textbf{niet} af in een aanhaling, en zij bouwt \textbf{geen} Juriconnect-URI en geen link daarnaartoe.
    Een veld \texttt{bwbid} of \texttt{celex} wordt opgeslagen en is met \cmd{\srcfield} terug te lezen;
    niets in deze bundel maakt daar een verwijzing van. Kortom: \package{regulatory}~1.0 heeft de
    datumdiscipline die een Juriconnect-aanhaling vraagt en geen Juriconnect-uitvoer.

    Een document dat geen van beide zegt krijgt dat eenmalig te horen, als waarschuwing en niet als fout:
    aanhalen zonder datum is gebrekkig, maar niet stuk, en een pakket dat niet aan een bestaand document
    toegevoegd kan worden zonder het te stoppen is een pakket dat niet toegevoegd wordt.

    Iedere entry zegt wanneer hij voor het laatst naast de tekst gelegd is die hij beschrijft, in een veld
    \texttt{valid}. Spreekt het document per een latere datum, dan kan de entry niet voor zichzelf instaan
    en zegt dat, één keer per bron. Een entry die het veld weglaat krijgt dat te horen, want hij zou dan
    nooit als verouderd gemeld kunnen worden: \enquote{nog niet bekeken} en \enquote{bekeken en actueel}
    zouden dezelfde stilte zijn, en een wacht waarvan de uitschakelaar een ontbrekend veld is wordt per
    ongeluk uitgezet in plaats van met opzet. Dat besluit heeft een eigen woord, \texttt{valid = unverified},
    en dat blijft stil. Dat is wat een gedeeld bronbestand überhaupt veilig maakt om te gebruiken, waar het
    ook bijgehouden wordt: de identifiers erin verouderen nooit, de datums wel, en een document dat de
    gegevens voorbijloopt die het gekregen heeft wordt dat verteld in plaats van stilletjes bediend met wat
    de laatste wijziging aan dat bestand toevallig bevatte. Deze bundel levert zelf geen regelgeving mee en
    is daar ook niet de plek voor\,---\,een citeertitel verandert op zijn eigen klok en een pakket op CTAN
    niet\,---\,maar hij is wel de plek voor het gereedschap dat zegt wanneer die twee uit elkaar gelopen
    zijn.%
}\\

\noindent
\DescribeMacro{\srcref\\\oarg{provision}\\\marg{key}}
\translation{%
    Cites a source, either as a whole or down to one of its provisions. The optional argument holds the
    provision\,---\,\texttt{article}, \texttt{paragraph}, \texttt{point} and \texttt{subpoint}, which answer
    to \texttt{artikel}, \texttt{lid}, \texttt{onderdeel} and \texttt{onder} as well\,---\,and stands
    before the key, as it does in \cmd{\cite}, so that a bracket in the sentence after a citation is not
    mistaken for it.%
}{%
    Haalt een bron aan, in zijn geheel of tot op een van zijn bepalingen. Het optionele argument bevat de
    bepaling\,---\,\texttt{article}, \texttt{paragraph}, \texttt{point} en \texttt{subpoint}, die ook naar
    \texttt{artikel}, \texttt{lid}, \texttt{onderdeel} en \texttt{onder} luisteren\,---\,en staat
    vóór de sleutel, zoals bij \cmd{\cite}, zodat een blokhaak in de zin ná een verwijzing er niet voor
    wordt aangezien.%
}
\begin{lstlisting}[style=tex]
\srcref[article=96, paragraph=2, point=c]{bw6}
    artikel 96, tweede lid, onderdeel c, van Boek 6 van het Burgerlijk Wetboek
\srcref[article=3.126, paragraph=1, point={c,d}]{wetib}
    artikel 3.126, eerste lid, onderdelen c en d, van de Wet inkomstenbelasting 2001
\srcref[article={162--164}]{bw6}
    artikelen 162 tot en met 164, van Boek 6 van het Burgerlijk Wetboek
\srcref*[article={162--164}]{bw6}
    art. 6:162-164 BW
\srcref*[article=96, paragraph=2, point=c]{bw6}
    art. 6:96 lid 2 onder c BW
\srcref{avg}
    de Algemene verordening gegevensbescherming
\srcref[article=6, paragraph=1, point=a]{avg}
    artikel 6, lid 1, punt a), van de Algemene verordening gegevensbescherming
\srcref[article=6, paragraph=1, point=a]{avgen}
    point (a) of Article 6(1) of the General Data Protection Regulation
\end{lstlisting}
\translation{%
    The keys are the same in every line and the wording is not: what changes is the source, and with it
    the register it is cited in. The last two are the same provision of the same regulation, entered as
    \texttt{avg} with the Dutch register and as \texttt{avgen} with the English one\,---\,both stand in
    \zcref{code:source-example}. The Dutch key names \texttt{artikel}, \texttt{lid}, \texttt{onderdeel} and
    \texttt{onder} are aliases of these and produce the same citation word for word, which
    \zcref{sec:checks} reads back.%
}{%
    De sleutels zijn in iedere regel dezelfde en de bewoording niet: wat verandert is de bron, en daarmee
    het register waarin hij wordt aangehaald. De laatste twee zijn dezelfde bepaling van dezelfde
    verordening, ingevoerd als \texttt{avg} met het Nederlandse register en als \texttt{avgen} met het
    Engelse\,---\,beide staan in \zcref{code:source-example}. De Nederlandse sleutelnamen \texttt{artikel},
    \texttt{lid}, \texttt{onderdeel} en \texttt{onder} zijn aliassen van deze en leveren woord voor woord
    dezelfde aanhaling op, wat \zcref{sec:checks} terugleest.%
}
\translation{%
    Two things decide how that reads, and neither of them is the language of the document.

    The first is the \emph{register}, which belongs to the source: a citation is worded the way the legal
    order of the instrument words it. A Dutch contract that cites a regulation of the Union writes
    \enquote{lid 1, punt a)}, because that regulation writes it so itself\,---\,counted in the Dutch text
    of the General Data Protection Regulation: \texttt{punt~a)} thirty-six times, \texttt{onderdeel~a)}
    and \texttt{sub~a)} not once. The register comes from the type of the entry and can be overridden per
    source with a \texttt{register} field.

    The second is the \emph{system}: written out in full, or shortened. The running text of a document is
    in full; a footnote is shortened, and so is a citation that stands between brackets in the running
    text. The \option{sourcestyle} option sets which of the two a document uses, with \texttt{full} or
    \texttt{short}, and the star asks for the other one. The full form is the one the Aanwijzingen voor de regelgeving prescribe for regulations
    themselves\,---\,a model rather than a rule here, since those instructions bind ministries and not
    contracts\,---\,and the shortened form is the one of the Leidraad voor juridische auteurs.%
}{%
    Twee dingen bepalen hoe dat eruitziet, en geen van beide is de taal van het document.

    Het eerste is het \emph{register}, en dat hoort bij de bron: een verwijzing wordt verwoord zoals de
    rechtsorde van het instrument hem verwoordt. Een Nederlands contract dat een verordening van de Unie
    aanhaalt schrijft \enquote{lid 1, punt a)}, omdat die verordening dat zelf zo schrijft\,---\,geteld in
    de Nederlandse tekst van de Algemene verordening gegevensbescherming: \texttt{punt~a)} zesendertig
    keer, \texttt{onderdeel~a)} en \texttt{sub~a)} geen enkele keer. Het register komt van het type van de
    entry en is per bron te overschrijven met een veld \texttt{register}.

    Het tweede is het \emph{systeem}: voluit of verkort. De lopende tekst van een document is voluit; een
    voetnoot is verkort, en een verwijzing die in de lopende tekst tussen haakjes staat ook. De optie
    \option{sourcestyle} zet welke van de twee een document gebruikt, met \texttt{full} of
    \texttt{short}, en de ster vraagt om de andere. De
    voluit-vorm is de vorm die de Aanwijzingen voor de regelgeving voor regelingen zelf voorschrijven\,---\,
    hier een model en geen voorschrift, want die aanwijzingen binden ministeries en geen
    contracten\,---\,en de verkorte is die van de Leidraad voor juridische auteurs.%
}\\

\noindent
\DescribeMacro{\newsourcedeterminer\\\marg{register}\\\marg{kind}\\\marg{article}}
\translation{%
    Says which article a kind of instrument takes in a register. It is not a property of the register: in
    French \enquote{de la directive} occurs sixteen times against \enquote{du règlement} seven, so one
    default would be wrong more often than right, and \enquote{du directive} is not a matter of style but
    of grammar. The \texttt{determiner} field of an entry overrides it for the case no table can know.%
}{%
    Zegt welk lidwoord een soort instrument in een register krijgt. Het is geen eigenschap van het
    register: in het Frans komt \enquote{de la directive} zestien keer voor tegenover \enquote{du
    règlement} zeven, dus één standaard zou vaker fout dan goed zijn, en \enquote{du directive} is geen
    kwestie van stijl maar van grammatica. Het veld \texttt{determiner} van een entry overschrijft het
    voor het geval dat geen tabel kan kennen.%
}\\

\noindent
\DescribeMacro{\newsourceregister\\\marg{name}\\\marg{full}\\\marg{short}}
\translation{%
    Declares a register: a set of keys for the full form and the same set for the shortened one. A register
    is not a language: the same document may cite in more than one, and it does so the moment it cites a
    Dutch statute next to a regulation of the Union. Five are shipped, each in the definition file of the
    language it belongs to and under the key it is named by here:%
}{%
    Declareert een register: een stel sleutels voor de voluit-vorm en hetzelfde stel voor de verkorte. Een
    register is geen taal: hetzelfde document kan in meer dan één aanhalen, en doet dat zodra het naast een
    Nederlandse wet een verordening van de Unie noemt. Er worden er vijf meegeleverd, elk in het
    definitiebestand van de taal waar hij bij hoort en onder de sleutel waarmee hij hier genoemd wordt:%
}
\begin{labeling}{\texttt{german\_eu}}
    \addtokomafont{labelinglabel}{\ttfamily}
    \item[dutch] \translation{%
        a Dutch national instrument, cited in Dutch. In full it is the form the Aanwijzingen voor de
        regelgeving lay down for regulations themselves; shortened it is the form of the Leidraad voor
        juridische auteurs. It is the register the type \texttt{regulation} takes when an entry names
        none. Declared in \file{regulatory-dutch.def}.%
    }{%
        een Nederlands nationaal instrument, aangehaald in het Nederlands. Voluit is het de vorm die de
        Aanwijzingen voor de regelgeving voor regelingen zelf voorschrijven; verkort die van de Leidraad
        voor juridische auteurs. Het is het register dat het type \texttt{regulation} krijgt wanneer een
        entry er geen noemt. Gedeclareerd in \file{regulatory-dutch.def}.%
    }
    \item[dutch\_eu] \translation{%
        an act of the Union, cited in Dutch, which is a register of its own and not a variant of the
        first. It is the register the type \texttt{euact} takes by default. Declared in
        \file{regulatory-dutch.def}.%
    }{%
        een handeling van de Unie, aangehaald in het Nederlands, wat een eigen register is en geen
        variant van het eerste. Het is het register dat het type \texttt{euact} standaard krijgt.
        Gedeclareerd in \file{regulatory-dutch.def}.%
    }
    \item[german\_eu] \translation{%
        an act of the Union, cited in German. Declared in \file{regulatory-german.def}.%
    }{%
        een handeling van de Unie, aangehaald in het Duits. Gedeclareerd in \file{regulatory-german.def}.%
    }
    \item[french\_eu] \translation{%
        an act of the Union, cited in French. Declared in \file{regulatory-french.def}.%
    }{%
        een handeling van de Unie, aangehaald in het Frans. Gedeclareerd in \file{regulatory-french.def}.%
    }
    \item[english\_eu] \translation{%
        an act of the Union, cited in English, and the one of the five arranged the other way round.
        Declared in \file{regulatory-english.def}.%
    }{%
        een handeling van de Unie, aangehaald in het Engels, en de enige van de vijf die andersom is
        opgebouwd. Gedeclareerd in \file{regulatory-english.def}.%
    }
\end{labeling}
\translation{%
    Those are the whole set, and the suite holds that list against the code: the registers a run declares
    are read back and compared with these five, so one added, renamed or lost fails a test rather than
    only this page. Two of the five are what a document gets without asking, since they are the defaults of
    the two shipped types; the other three are asked for with a \texttt{register} field on the entry.
    There is no national register for English, German or French\,---\,see the last paragraph of this
    section.

    The three of the Union were each measured in the text of the same regulation in that language, and
    they differ where it matters: German writes no commas and calls the lettered point a
    \emph{Buchstabe}, French writes the commas and the closing bracket but calls it a \emph{point}. For
    those two the star does not shorten the wording but reaches for the \texttt{abbreviation} of the
    instrument, since that regulation never abbreviates a word of its own: \texttt{Abs.} and \texttt{par.}
    do not occur in it once, against \texttt{Artikel} five hundred and one.

    A label never parts from its number: the regulation writes a non-breaking space between the two and a
    normal one between the parts. In French \texttt{paragraphe} is followed by a non-breaking space two
    hundred and eighty-six times and by an ordinary one five; in Dutch \texttt{artikel} two hundred and
    ninety-eight times against none at all.

    That Dutch count is from the same regulation, and a regulation of the Union is written in the register
    of the Union: it says \texttt{lid 6} two hundred and eighty-five times and \emph{zesde lid} not once.
    What carries over to the national register is \texttt{artikel~6}, since the label stands before its
    number in both. Where the national register puts the number first, \emph{zesde lid}, there is no
    measurement of what binds it, and an ordinary space is what this bundle writes there.

    A citation may name more than one provision. A comma makes a list and \texttt{--} makes a run, and the
    register decides how either reads: it holds the words that join them and the plural of the designation.
    Both were measured in the same regulation, in each of its languages\,---\,\enquote{artikelen 101 en
    102}, \enquote{artikelen 12 tot en met 15}, \enquote{punten c) en e)}, \enquote{Buchstaben c und e},
    \enquote{paragraphes 1, 2 et 4}\,---\,and the far end of a run is written apart from the near one,
    since the civil code is cited as \enquote{art. 6:162-164} with its book named once.

    There is no national German or French register, and that is on purpose: German federal law writes
    \texttt{\S~5 Abs.~2 Nr.~3 BGB}, which is another construction and not a translation of this one, and
    there is nobody here who could check the result.%
}{%
    Dat is de hele verzameling, en de suite legt die lijst naast de code: de registers die een draai
    declareert worden teruggelezen en met deze vijf vergeleken, zodat er één toevoegen, hernoemen of
    kwijtraken een test laat falen in plaats van alleen deze bladzijde. Twee van de vijf krijgt een
    document zonder erom te vragen, want het zijn de standaardwaarden van de twee meegeleverde types; om
    de andere drie wordt gevraagd met een veld \texttt{register} op de entry. Er is geen nationaal register
    voor het Engels, het Duits of het Frans\,---\,zie de laatste alinea van dit onderdeel.

    De drie van de Unie zijn elk gemeten in de tekst van dezelfde verordening in die taal, en ze
    verschillen waar het uitmaakt: het Duits schrijft geen komma's en noemt het geletterde onderdeel een
    \emph{Buchstabe}, het Frans schrijft de komma's en het sluithaakje maar noemt het een \emph{point}.
    Bij die twee kort de ster niet de bewoording in maar grijpt hij naar de \texttt{abbreviation} van het
    instrument, want die verordening kort geen enkel woord van zichzelf af: \texttt{Abs.} en \texttt{par.}
    komen er geen enkele keer in voor, tegenover \texttt{Artikel} vijfhonderdeen.

    Een benaming laat zijn nummer nooit los: de verordening zet er een harde spatie tussen en een gewone
    tussen de onderdelen. In het Frans wordt \texttt{paragraphe} tweehonderdzesentachtig keer door een
    harde spatie gevolgd en vijf keer door een gewone; in het Nederlands \texttt{artikel}
    tweehonderdachtennegentig keer tegenover geen enkele.

    Die Nederlandse telling komt uit diezelfde verordening, en een verordening van de Unie is geschreven in
    het register van de Unie: zij schrijft tweehonderdvijfentachtig keer \texttt{lid 6} en geen enkele keer
    \emph{zesde lid}. Wat naar het nationale register overdraagt is \texttt{artikel~6}, want daar staat de
    benaming in beide registers vóór het nummer. Waar het nationale register het nummer vooropzet,
    \emph{zesde lid}, is niet gemeten wat de twee bindt, en schrijft deze bundel daar een gewone spatie.

    Een verwijzing mag meer dan één bepaling noemen. Een komma maakt er een opsomming van en \texttt{--}
    een reeks, en het register bepaalt hoe beide luiden: het draagt de voegwoorden en het meervoud van de
    benaming. Allebei zijn ze gemeten in dezelfde verordening, in elk van haar talen\,---\,\enquote{artikelen
    101 en 102}, \enquote{artikelen 12 tot en met 15}, \enquote{punten c) en e)}, \enquote{Buchstaben c und
    e}, \enquote{paragraphes 1, 2 et 4}\,---\,en het verre eind van een reeks wordt anders geschreven dan
    het nabije, want het wetboek wordt aangehaald als \enquote{art. 6:162-164}, met zijn boek één keer
    genoemd.

    Er is geen nationaal Duits of Frans register, en dat is met opzet: het Duitse federale recht schrijft
    \texttt{\S~5 Abs.~2 Nr.~3 BGB}, een ander bouwsel en geen vertaling van dit, en er is hier niemand die
    de uitkomst kan toetsen.%
}
\translation{%
    The registers themselves are not in the implementation but in the language definition file of their
    language, printed in \zcref{sec:lang}. That is one measurement in one place: what says that German
    writes \enquote{Artikel 6 Absatz 1 Buchstabe a} in a citation is the same reading of the same text
    that says it calls a paragraph an \emph{Absatz}. It also spares whoever writes one a second set of
    names, since the register of Dutch is called \texttt{dutch} and so is the language.%
}{%
    De registers zelf staan niet in de implementatie maar in het taaldefinitiebestand van hun taal,
    afgedrukt in \zcref{sec:lang}. Dat is één meting op één plek: wat zegt dat het Duits
    \enquote{Artikel 6 Absatz 1 Buchstabe a} schrijft in een aanhaling, is dezelfde lezing van dezelfde
    tekst die zegt dat het een lid een \emph{Absatz} noemt. Het scheelt bovendien een tweede stelsel van
    namen: het register van het Nederlands heet \texttt{dutch} en de taal ook.%
}
\clearpage

\section{\translation{Language support}{Taalondersteuning}}\label{sec:lang}
\translation{%
    This package began in Dutch. English came second, and the two word a reference so differently\,---\,
    \enquote{artikel 2, tweede lid, onderdeel b} against \enquote{Article 2(2), point (b)}\,---\,that
    wording one had to become a set of decisions rather than a set of words. That is what makes a third
    language possible, and it is also why a language file is more than a translation.

    Four languages ship, and they are not equally far along. What a language file holds is three separate
    things, and German and French have two of the three:%
}{%
    Dit pakket begon in het Nederlands. Het Engels kwam als tweede, en de twee verwoorden een verwijzing
    zo verschillend\,---\,\enquote{artikel 2, tweede lid, onderdeel b} tegenover \enquote{Article 2(2),
    point (b)}\,---\,dat er een stel beslissingen van moest worden in plaats van een stel woorden. Dat is
    wat een derde taal mogelijk maakt, en het is ook waarom een taalbestand meer is dan een vertaling.

    Er worden vier talen meegeleverd, en ze zijn niet even ver. Wat een taalbestand bevat zijn drie
    losse dingen, en het Duits en het Frans hebben er twee van de drie:%
}

\begin{center}
    \begin{tabular}{@{}llll@{}}
        & \translation{\textbf{Designations}}{\textbf{Benamingen}}
        & \translation{\textbf{Internal references}}{\textbf{Interne verwijzingen}}
        & \translation{\textbf{Citation register}}{\textbf{Citeerregister}} \\
        \hline
        \translation{Dutch}{Nederlands}   & \translation{full}{volledig} & \translation{full}{volledig}
            & \texttt{dutch}, \texttt{dutch\_eu} \\
        \translation{English}{Engels}     & \translation{full}{volledig} & \translation{full}{volledig}
            & \texttt{english\_eu} \\
        \translation{German}{Duits}       & \translation{full}{volledig} & \translation{not measured}{niet gemeten}
            & \texttt{german\_eu} \\
        \translation{French}{Frans}       & \translation{full}{volledig} & \translation{not measured}{niet gemeten}
            & \texttt{french\_eu} \\
    \end{tabular}
\end{center}

\noindent
\translation{%
    \textbf{Dutch and English are complete.} Every designation, every reference format and both citation
    registers of Dutch are measured, and the wording of forty citations is read back by the suite
    (\zcref{sec:checks}).

    \textbf{German and French are covered in part, and the part that is missing shows.} What this bundle
    has of them was measured in the German and French texts of the General Data Protection Regulation: the
    words a provision is called by, and how an act of the Union is cited in that language. What it does not
    have is the wording of an \emph{internal} reference\,---\,the \cmd{\rref@setup} below\,---\,which was
    not measured, and which is left to whoever can check the result rather than guessed at. So:%
}{%
    \textbf{Het Nederlands en het Engels zijn compleet.} Iedere benaming, ieder verwijsformaat en beide
    citeerregisters van het Nederlands zijn gemeten, en de bewoording van veertig aanhalingen wordt door de
    suite teruggelezen (\zcref{sec:checks}).

    \textbf{Het Duits en het Frans zijn ten dele gedekt, en het deel dat ontbreekt is zichtbaar.} Wat deze
    bundel ervan heeft is gemeten in de Duitse en de Franse tekst van de Algemene verordening
    gegevensbescherming: de woorden waarmee een bepaling wordt aangeduid, en hoe een handeling van de Unie
    in die taal wordt aangehaald. Wat hij er niet van heeft is de verwoording van een \emph{interne}
    verwijzing\,---\,de \cmd{\rref@setup} hieronder\,---\,die niet gemeten is, en die wordt overgelaten
    aan wie de uitkomst kan toetsen in plaats van dat ernaar geraden wordt. Dus:%
}
\begin{itemize}
    \item \translation{%
        \cmd{\article} and \cmd{\para} carry German or French headings, and \cmd{\gls} and
        \cmd{\printdefs} are labelled in that language.%
    }{%
        \cmd{\article} en \cmd{\para} dragen Duitse of Franse koppen, en \cmd{\gls} en \cmd{\printdefs}
        zijn in die taal benoemd.%
    }
    \item \translation{%
        \cmd{\srcref} words a citation of an act of the Union correctly, in the register of that language.
        A \emph{national} German or French instrument has no register here at all; see below.%
    }{%
        \cmd{\srcref} verwoordt een aanhaling van een handeling van de Unie correct, in het register van
        die taal. Een \emph{nationaal} Duits of Frans instrument heeft hier helemaal geen register; zie
        hieronder.%
    }
    \item \translation{%
        \cmd{\rref}, \cmd{\nref} and \cmd{\aref} fall back on the English \emph{arrangement} with German or
        French \emph{words}. A German document therefore reads \enquote{Artikel 2(2), Buchstabe (b)}, which
        is German vocabulary in an English construction. It is visibly wrong rather than invisibly wrong,
        and nothing warns about it, since the words are in place.%
    }{%
        \cmd{\rref}, \cmd{\nref} en \cmd{\aref} vallen terug op de Engelse \emph{opbouw} met Duitse of
        Franse \emph{woorden}. Een Duits document leest daarom \enquote{Artikel 2(2), Buchstabe (b)}, wat
        Duitse woordenschat in een Engels bouwsel is. Het is zichtbaar fout in plaats van onzichtbaar fout,
        en er wordt niet voor gewaarschuwd, want de woorden staan er.%
    }
    \item \translation{%
        A reference to \emph{another document} cannot be worded at all in either language, and that one
        does warn. German inflects the noun a connective governs\,---\,\enquote{der Verordnung} but
        \enquote{des Vertrags}\,---\,and French fuses the preposition with an article chosen by gender, so
        neither can compose the phrase from a subject. Both declare their connective empty, and
        \cmd{\documentlabel} then says so once per artifact and asks for a \texttt{ref label}
        (\zcref{sec:extern}). Giving one is the fix, and it is a line per document.%
    }{%
        Een verwijzing naar een \emph{ander document} is in geen van beide talen te verwoorden, en dáár
        wordt wel voor gewaarschuwd. Het Duits verbuigt het woord dat een voegwoord regeert\,---\,
        \enquote{der Verordnung} maar \enquote{des Vertrags}\,---\,en het Frans versmelt het voorzetsel met
        een lidwoord dat het geslacht bepaalt, dus geen van beide kan de wending uit een onderwerp
        samenstellen. Beide declareren hun voegwoord leeg, en \cmd{\documentlabel} zegt dat dan één keer per
        artefact en vraagt om een \texttt{ref label} (\zcref{sec:extern}). Er een geven is de oplossing, en
        dat is een regel per document.%
    }
    \item \translation{%
        There is no national German or French citation register, on purpose: German federal law writes
        \texttt{\S~5 Abs.~2 Nr.~3 BGB}, which is another construction and not a translation of this one.
        A citation of such an instrument with the type \texttt{regulation} is worded in the Dutch national
        register, since that is what that type defaults to, and that is wrong. Until such a register exists,
        say so with a \texttt{register} field rather than letting the default stand.%
    }{%
        Er is geen nationaal Duits of Frans citeerregister, met opzet: het Duitse federale recht schrijft
        \texttt{\S~5 Abs.~2 Nr.~3 BGB}, een ander bouwsel en geen vertaling van dit. Een aanhaling van zo'n
        instrument met het type \texttt{regulation} wordt verwoord in het Nederlandse nationale register,
        want dat is de standaardwaarde van dat type, en dat is fout. Zolang zo'n register er niet is, zeg
        dat dan met een veld \texttt{register} in plaats van de standaardwaarde te laten staan.%
    }
\end{itemize}
\translation{%
    A language this bundle has no file for at all is a fifth case, and the mildest one: everything falls
    back on English, and the document is told so once at the start, with the language named. Nothing fails
    there\,---\,the references are simply worded in English, which is the only way it shows.

    So \emph{supported} means Dutch and English. German and French are usable for what was measured and are
    not the same claim, and this manual names which is which rather than counting four.%
}{%
    Een taal waar deze bundel helemaal geen bestand voor heeft is een vijfde geval, en het mildste: alles
    valt terug op het Engels, en het document krijgt dat één keer te horen aan het begin, met de taal
    erbij. Er faalt in dat geval niets\,---\,de verwijzingen worden in het Engels verwoord, en dat is ook de
    enige manier waarop het opvalt.

    \emph{Ondersteund} betekent dus Nederlands en Engels. Het Duits en het Frans zijn bruikbaar voor wat er
    gemeten is en zijn niet dezelfde belofte, en deze handleiding zegt van iedere taal wat ze is in
    plaats van er vier te tellen.%
}\\

\noindent
\DescribeMacro{\RegulatoryLoadLanguage\\\marg{language}}
\translation{%
    Every supported language has its own definition file \texttt{regulatory-\meta{language}.def},
    comparable to the \texttt{fc-\meta{language}.def} files of \package{fmtcount}.
    At the end of the preamble, the definition file of every language loaded by \package{babel} or
    \package{polyglossia} is loaded, along with \texttt{regulatory-english.def}, which holds the defaults
    every other language builds upon.
    A language without a definition file falls back to English.
    Documents that select their language another way can load a definition file explicitly with
    \cmd{\RegulatoryLoadLanguage}\marg{language}.
    Adding support for a new language comes down to writing such a file; the four shipped ones are printed in
    \zcref{sec:englishdef,sec:dutchdef,sec:germandef,sec:frenchdef}.%
}{%
    Iedere ondersteunde taal heeft een eigen definitiebestand \texttt{regulatory-\meta{taal}.def},
    vergelijkbaar met de \texttt{fc-\meta{taal}.def} bestanden van \package{fmtcount}.
    Aan het eind van de preamble wordt het definitiebestand geladen van iedere taal die \package{babel} of
    \package{polyglossia} geladen heeft, samen met \texttt{regulatory-english.def}, dat de
    standaardwaarden bevat waar iedere andere taal op voortbouwt.
    Een taal zonder definitiebestand valt terug op het Engels.
    Documenten die hun taal op een andere manier kiezen kunnen een definitiebestand expliciet laden met
    \cmd{\RegulatoryLoadLanguage}\marg{taal}.
    Ondersteuning voor een nieuwe taal toevoegen komt neer op het schrijven van zo'n bestand; de vier meegeleverde staan
    afgedrukt in \zcref{sec:englishdef,sec:dutchdef,sec:germandef,sec:frenchdef}.%
}\\

\noindent
\DescribeMacro{\rref@setup\\\marg{lang}\\\marg{article opts...}\\\marg{para opts...}\\\marg{point opts...}}
\translation{%
    \cmd{\rref@setup} declares how \meta{lang} words an internal reference, and configures its three levels
    at once. It is \textbf{extension API}: it is meant to be called, it is meant to be called from a
    language definition file, and it is supported as it stands for the whole of 1.x.

    The at sign in the name is not a slip and it is not a plan to rename. A definition file is read with
    the at sign made a letter\,---\,\cmd{\RegulatoryLoadLanguage} sets its category code and restores it
    afterwards\,---\,which is the same convention the kernel's own \file{.def} files and the
    \file{fc-\meta{language}.def} files of \package{fmtcount} are written under. Inside such a file the
    name needs nothing. A document that declares a language in its own preamble instead wraps the call in
    \cmd{\makeatletter} and \cmd{\makeatother}, which is what an at sign asks of a preamble anywhere.

    The other three arguments take the keys below, one set per level:%
}{%
    \cmd{\rref@setup} declareert hoe \meta{taal} een interne verwijzing verwoordt, en stelt zijn drie
    niveaus in één keer in. Het is \textbf{extension API}: hij is bedoeld om aangeroepen te worden, hij is
    bedoeld om vanuit een taaldefinitiebestand aangeroepen te worden, en hij wordt zoals hij is ondersteund
    voor de hele 1.x-reeks.

    Het apenstaartje in de naam is geen vergissing en geen voornemen tot hernoemen. Een definitiebestand
    wordt gelezen met het apenstaartje als letter\,---\,\cmd{\RegulatoryLoadLanguage} zet de categoriecode
    en herstelt hem daarna\,---\,en dat is dezelfde conventie waaronder de \file{.def} bestanden van de
    kernel zelf en de \file{fc-\meta{taal}.def} bestanden van \package{fmtcount} geschreven zijn. Binnen
    zo'n bestand vraagt de naam nergens om. Een document dat een taal in zijn eigen preamble declareert zet
    de aanroep tussen \cmd{\makeatletter} en \cmd{\makeatother}, wat een apenstaartje overal in een preamble
    vraagt.

    De andere drie argumenten nemen de sleutels hieronder, één stel per niveau:%
}
\begin{labeling}{\texttt{group conjunction}}
    \addtokomafont{labelinglabel}{\ttfamily}
    \item[name]
    \translation{%
        the designation in lower case: `article', `paragraph', `point'. The default of each level is the
        translation of its own name,%
    }{%
        de benaming in kleine letters: `artikel', `lid', `onderdeel'. De standaardwaarde van ieder niveau
        is de vertaling van zijn eigen naam,%
    }\\\GetTranslation{article} \lstinline|\GetTranslation{article}|, \\\GetTranslation{paragraph} \lstinline|\GetTranslation{paragraph}| \GetTranslation{and} \\\GetTranslation{point} \lstinline|\GetTranslation{point}|.%
    \item[Name] \translation{%
        the same designation with an initial capital, and it defaults to the same translation with one.%
    }{%
        dezelfde benaming met een beginhoofdletter, en de standaardwaarde is dezelfde vertaling met er
        een.%
    }
    \item[names, Names] \translation{%
        the designation of a reference that names more than one structure: \enquote{articles 1 and 2},
        \enquote{points (a), (b) and (d)}. It is a key of its own because it is not the language that
        decides whether the plural is used but the position of the designation: Dutch writes
        \enquote{onderdelen c en d} but keeps \enquote{het tweede en derde lid} singular, since there the
        designation follows the ordinals.%
    }{%
        de benaming van een verwijzing die meer dan één structuur noemt: \enquote{artikelen 1 en 2},
        \enquote{onderdelen c en d}. Het is een eigen sleutel omdat niet de taal bepaalt of het meervoud
        gebruikt wordt maar de plaats van de benaming: het Nederlands schrijft \enquote{onderdelen c en d}
        maar houdt \enquote{het tweede en derde lid} enkelvoudig, omdat de benaming daar achter de
        rangtelwoorden staat.%
    }
    \item[ref format] \translation{%
        a macro of one argument, the number itself. Dutch writes a paragraph as an ordinal, for which
        \cmd{\ordinalstringnum} is used, and a point as a letter. A format that produces a word has to
        answer \cmd{\Nref} as well as \cmd{\nref}, which \cmd{\@ifrrefcap} is for:%
    }{%
        een macro met één argument, het nummer zelf. Het Nederlands schrijft een lid als rangtelwoord,
        waarvoor \cmd{\ordinalstringnum} gebruikt is, en een onderdeel als letter. Een formaat dat een woord
        oplevert moet zowel \cmd{\Nref} als \cmd{\nref} bedienen, en daar is \cmd{\@ifrrefcap} voor:%
    } \lstinline[style=tex]|\@ifrrefcap{\Ordinalstringnum{...}}{\ordinalstringnum{...}}|.
    \item[label format] \translation{%
        a macro of two arguments\,---\,the \texttt{name} and the result of \texttt{ref format}\,---\,which
        decides the order of the two. A Dutch article is \texttt{\{\#1 \#2\}}, a Dutch paragraph
        \texttt{\{\#2 \#1\}}, and an English paragraph
        \texttt{\textbackslash@gobble\{\#1\}\#2}\footnote{\texttt{\textbackslash@gobble} takes its argument
        and prints nothing, which is how the designation is dropped where the number stands alone.}. The
        value is a macro and not the text itself, so the first of those is passed as
        \cmd{\mylabelformat}, defined as:
    }{%
        een macro met twee argumenten\,---\,de \texttt{name} en het resultaat van \texttt{ref
        format}\,---\,die de volgorde van die twee bepaalt. Een Nederlands artikel is \texttt{\{\#1 \#2\}},
        een Nederlands lid \texttt{\{\#2 \#1\}}, en een Engels lid
        \texttt{\textbackslash@gobble\{\#1\}\#2}\footnote{\texttt{\textbackslash@gobble} neemt zijn argument
        en drukt niets af, en zo verdwijnt de benaming waar het nummer alleen staat.}. De waarde is een
        macro en niet de tekst zelf, dus de eerste daarvan wordt meegegeven als \cmd{\mylabelformat},
        gedefinieerd als:
    }\lstinline[style=tex]|\newcommand\mylabelformat[2]{#1 #2}|.
    \item[group conjunction] \translation{%
        what joins this level to the one above it. In
        ``artikel\Vtextvisiblespace1\textcolor{red}{,\Vtextvisiblespace}eerste\Vtextvisiblespace lid'' the
        article has a \texttt{group conjunction} of \lstinline|{,~}|.%
    }{%
        wat dit niveau aan het niveau erboven koppelt. In
        ``artikel\Vtextvisiblespace1\textcolor{red}{,\Vtextvisiblespace}eerste\Vtextvisiblespace lid'' heeft
        het artikel een \texttt{group conjunction} van \lstinline|{,~}|.%
    }
    \item[group format] \translation{%
        a macro of one argument, which holds the levels above this one. A language that sets those
        apart\,---\,\texttt{{[}Article 1(6),{]} point (a)}\,---\,gives the point
        \cmd{\rref@group@braced}, which is what this bundle did for English until the European style
        guides settled the question the other way.
    }{%
        een macro met één argument, dat de niveaus boven dit niveau bevat. Een taal die ze apart
        zet\,---\,\texttt{{[}Article 1(6),{]} point (a)}\,---\,geeft het onderdeel
        \cmd{\rref@group@braced} mee, wat deze bundel voor het Engels deed tot de Europese stijlgidsen die
        vraag anders beslechtten.
    }
\end{labeling}
\translation{%
    Every key can differ per level. When writing a new language, read \file{regulatory-english.def} first:
    it states every value in full, and it is the configuration a language without one of its own falls back
    on.%
}{%
    Iedere sleutel kan per niveau verschillen. Lees bij het schrijven van een nieuwe taal eerst
    \file{regulatory-english.def}: dat geeft iedere waarde voluit op, en is de configuratie waar een taal
    zonder eigen configuratie op terugvalt.%
}

\translation{%
    The definition files of the four languages this bundle ships follow. They are the source a translation
    starts from, so they are printed here rather than among the modules of \zcref{sec:impl}. Their comments,
    like the code, are in English.

    Each of them states in its own words what it holds and what it does not, which is where the table at the
    head of this section comes from.%
}{%
    Hieronder volgen de definitiebestanden van de vier meegeleverde talen. Ze vormen de bron waar een
    vertaling mee begint, dus staan ze hier en niet tussen de modules van \zcref{sec:impl}. De toelichting
    erin is, net als de broncode, in het Engels gesteld.

    Elk van hen zegt in eigen woorden wat het bevat en wat niet, en daar komt de tabel aan het begin van dit
    onderdeel vandaan.%
}

% The language definition files are sources of their own, so that translators do
% not have to work in a dtx file.
\DocInput{regulatory-english.def}
\DocInput{regulatory-dutch.def}
\DocInput{regulatory-german.def}
\DocInput{regulatory-french.def}
\clearpage

\section{Markdown}\label{sec:md}
\translation{%
    The \package{regulatory-md} module translates the constructs of a Markdown source into the structures
    of \zcref{sec:struct}.
    It is loaded as soon as \package{markdown} is, whatever the order of both packages, and the package
    option \option{md} loads \package{markdown} itself.
    That option is the safe way around, since \package{markdown} has to be loaded before
    \package{enumitem} to leave the lists of this package intact.
    A Markdown source is therefore limited to the constructs described here; chapters and the other
    components of a document class have no counterpart.
    Refer to \zcref{code:example-md} for a Markdown example, and check \zcref{code:md-example} to see how
    such a Markdown source can ultimately be used from within \LaTeX{} (\zcref{sec:example}).

    A Markdown source contains no \TeX{}. The module used to be loaded with the \option{hybrid} option of
    \package{markdown}, which let every backslash through, and the examples of this bundle wrote their
    labels and references that way; \package{markdown} has deprecated it. Without it, a backslash is
    printed rather than obeyed, and a source that still holds one loses its references without a single
    error being raised, so a document converted from an older source is worth reading through once.
    Everything that used to need it is written in Markdown below.%
}{%
    De \package{regulatory-md} module vertaalt de onderdelen van een Markdown-bron naar de structuren
    uit \zcref{sec:struct}.
    Deze wordt geladen zodra \package{markdown} dat is, ongeacht de volgorde van beide pakketten, en de
    pakketoptie \option{md} laadt \package{markdown} zelf.
    Die optie is de veilige weg, aangezien \package{markdown} vóór \package{enumitem} geladen moet worden
    om de lijsten van dit pakket heel te laten.
    Een Markdown-bron is daarmee beperkt tot de onderdelen die hier beschreven staan; hoofdstukken en de
    overige onderdelen van een documentklasse hebben geen tegenhanger.
    Kijk naar \zcref{code:example-md} voor een Markdown-voorbeeld en naar \zcref{code:md-example} hoe zo'n
    Markdown-bron uiteindelijk gebruikt kan worden vanuit \LaTeX{} (\zcref{sec:example}).

    Een Markdown-bron bevat geen \TeX{}. De module werd geladen met de optie \option{hybrid} van
    \package{markdown}, die iedere backslash doorliet, en de voorbeelden van deze bundel schreven hun
    labels en verwijzingen op die manier; \package{markdown} heeft die optie afgeschaft. Zonder haar wordt
    een backslash afgedrukt in plaats van uitgevoerd, en een bron die er nog één bevat verliest zijn
    verwijzingen zonder dat er ook maar iets misgaat, dus een document dat uit een oudere bron komt is het
    waard één keer doorgelezen te worden.
    Alles wat die optie nodig had wordt hieronder in Markdown geschreven.%
}

\translation{%
    The Markdown listings below are in Dutch in both manuals, and deliberately so: they are the
    constructs of \file{example.md}, which is a test fixture of this bundle and is read back by the suite
    (\zcref{sec:checks}). Nothing in this section depends on the language of the text.%
}{%
    De Markdown-listings hieronder staan in beide handleidingen in het Nederlands, en dat is met opzet:
    het zijn de constructies uit \file{example.md}, een testfixture van deze bundel die door de suite
    wordt teruggelezen (\zcref{sec:checks}). Niets in dit onderdeel hangt af van de taal van de tekst.%
}

\subsection{\translation{Labels and references}{Labels en verwijzingen}}
\translation{%
    An attribute writes a label and a link reads one. A heading and a bracketed span both take an
    identifier between braces, which becomes the label of the article or of the paragraph it is written
    in:%
}{%
    Een attribuut schrijft een label en een link leest er één. Een kop en een bracketed span nemen allebei
    een identifier tussen accolades, die het label wordt van het artikel of van het lid waarin hij staat:%
}
\begin{lstlisting}[style=md]
# Quisque ullamcorper {#art:lorem}

1. [Lorem ipsum dolor sit amet.]{#lid:lorem}
2. [Sed do eiusmod tempor incididunt.]{#lid:lorem2}
\end{lstlisting}
\translation{%
    A reference is a link whose target starts with \texttt{\#}, and the three shapes a Markdown-link can
    take are the three references of \zcref{sec:ref}:%
}{%
    Een verwijzing is een link waarvan het doel met \texttt{\#} begint, en de drie vormen die een Markdown
    link kan aannemen zijn de drie verwijzingen uit \zcref{sec:ref}:%
}
\begin{labeling}{\texttt{[tekst](\#label)}}
    \item[\texttt{<\#label>}] \translation
        {names the structure it points at, as \cmd{\Aref} does, and takes several labels at once:
         \texttt{<\#lid:a,lid:b>}.}
        {noemt de structuur waar hij naar wijst, zoals \cmd{\Aref} doet, en neemt meerdere labels
         tegelijk: \texttt{<\#lid:a,lid:b>}.}
    \item[\texttt{[](\#label)}] \translation
        {the number alone, as \cmd{\rref} does.}
        {het nummer alleen, zoals \cmd{\rref} doet.}
    \item[\texttt{[tekst](\#label)}] \translation
        {keeps the text and links it.}
        {behoudt de tekst en maakt er een link van.}
\end{labeling}
\translation{%
    A label of another document is referred to in the same way, with the prefix that \cmd{\refdocument}
    gave it: \texttt{<\#ex2-lid:lorem>}.

    A bracketed span may hold a reference of the first shape, but not a second span or a link written with
    brackets; \package{markdown} then leaves the whole construct as it stands. For a paragraph that both
    carries a label and cites a definition there is the identifier of \zcref{sec:syntax}.%
}{%
    Naar een label van een ander document wordt op dezelfde manier verwezen, met de prefix die
    \cmd{\refdocument} eraan gaf: \texttt{<\#ex2-lid:lorem>}.

    Een bracketed span mag een verwijzing van de eerste vorm bevatten, maar geen tweede span en geen link
    met blokhaken; \package{markdown} laat de hele constructie dan staan zoals hij is. Voor een lid dat
    zowel een label draagt als een definitie aanhaalt is er de identifier van \zcref{sec:syntax}.%
}

\subsection{\translation{An identifier of its own}{Een eigen identifier}}\label{sec:syntax}
\translation{%
    A bracketed span may not hold another span or a link written with brackets, which is a limit of
    Markdown itself and an awkward one for a provision that both carries a label and cites a definition.
    This bundle therefore adds one rule to the grammar of the reader, which lets the identifier stand on
    its own, before the text it labels:%
}{%
    Een bracketed span mag geen tweede span bevatten en geen link met blokhaken, wat een beperking van
    Markdown zelf is en een ongelukkige voor een lid dat zowel een label draagt als een definitie
    aanhaalt. Deze bundel voegt daarom één regel toe aan de grammatica van de lezer, waarmee de identifier
    op zichzelf staat, vóór de tekst die hij labelt:%
}
\begin{lstlisting}[style=md]
1. {#lid:lorem} Een [persoonsgegeven](#pg) wordt verwerkt, zie <#lid:eerder>.
\end{lstlisting}
\translation{%
    Only \texttt{\{\#} opens such an identifier, so a brace anywhere else in the text is left alone. The
    rule lives in \file{regulatory-syntax.lua}, which \package{markdown} reads itself, and which is listed
    with the implementation in \zcref{sec:impl}: it is Lua rather than \TeX{}, since a renderer can only
    decide how a construct that the reader already knows is typeset, and this one has to be recognised
    first.%
}{%
    Alleen \texttt{\{\#} opent zo'n identifier, dus een accolade elders in de tekst blijft ongemoeid. De
    regel staat in \file{regulatory-syntax.lua}, dat \package{markdown} zelf inleest, en dat bij de
    implementatie is opgenomen in \zcref{sec:impl}: het is Lua en geen \TeX{}, aangezien een renderer
    alleen bepaalt hoe een constructie die de lezer al kent gezet wordt, en deze eerst herkend moet
    worden.%
}

\subsection{\translation{Definitions in Markdown}{Definities in Markdown}}
\translation{%
    A definition list declares definitions. The term carries the label as a bracketed span and the body of
    the item becomes the description, which is the same thing \cmd{\newdefinition} does
    (\zcref{sec:defs}):%
}{%
    Een definitielijst declareert definities. De term draagt het label als bracketed span en de inhoud van
    het item wordt de beschrijving, wat hetzelfde is als wat \cmd{\newdefinition} doet
    (\zcref{sec:defs}):%
}
\begin{lstlisting}[style=md]
[Onderhandse akte]{#onderhands}

:   Een akte die zonder tussenkomst van een ambtenaar is opgemaakt.
\end{lstlisting}
\translation{%
    The other way is the \textsc{yaml} block a Markdown source may open with, where a definition is a
    record with named fields rather than a construct of the text. It is the sturdier of the two, since
    nothing in the prose can perturb it, and the one to reach for when the definitions are maintained
    apart from the text:%
}{%
    De andere manier is het \textsc{yaml} blok waarmee een Markdown-bron mag beginnen, waar een definitie
    een record met benoemde velden is in plaats van een onderdeel van de tekst. Dat is de steviger van de
    twee, aangezien niets in de lopende tekst hem kan verstoren, en de aangewezen manier wanneer de
    definities los van de tekst worden bijgehouden:%
}
\begin{lstlisting}[style=md]
---
definitions:
  - label: onderhands
    name: Onderhandse akte
    description: Een akte die zonder tussenkomst van een ambtenaar is opgemaakt.
---
\end{lstlisting}
\translation{%
    Neither of the two prints anything where it stands. Where the list appears is decided by
    \cmd{\printdefs}, or from the source by a division, which takes the two arguments of that command as
    attributes and prints the list after its own content:%
}{%
    Geen van beide drukt iets af op de plek waar hij staat. Waar de lijst verschijnt wordt bepaald door
    \cmd{\printdefs}, of vanuit de bron door een divisie, die de twee argumenten van dat commando als
    attributen neemt en de lijst na zijn eigen inhoud afdrukt:%
}
\begin{lstlisting}[style=md]
::: {.definitions style=description widest="Onderhandse akte"}

De volgende begrippen worden in deze overeenkomst gebruikt.

:::
\end{lstlisting}
\translation{%
    A division with nothing in it is not recognised by \package{markdown}, so a line of text belongs in
    it. When definitions are declared and the list is never printed, the module says so at the end of the
    run.

    A definition is cited the way anything else is referred to, with a link: \texttt{<\#onderhands>}
    prints the name of the entry and \texttt{[een onderhandse akte](\#onderhands)} keeps the wording of
    the sentence, both hyperlinked to the definition list.%
}{%
    Een divisie zonder inhoud wordt niet herkend door \package{markdown}, dus er hoort een regel tekst in.
    Wanneer er definities gedeclareerd worden en de lijst nooit wordt afgedrukt, zegt de module dat aan
    het eind van de draai.

    Een definitie wordt aangehaald zoals naar al het andere verwezen wordt, met een link:
    \texttt{<\#onderhands>} drukt de naam van de entry af en \texttt{[een onderhandse
    akte](\#onderhands)} behoudt de formulering van de zin, beide met een link naar de definitielijst.%
}

\DescribeMacro{\autocitedefs}
\translation{%
    Marks every occurrence of the name of a definition in the text that follows, without the text having
    to say so. It is opt-in, and worth weighing: the matching is literal, so it is case sensitive, blind to
    inflection\,---\,\enquote{persoonsgegevens} is not \enquote{persoonsgegeven}\,---\,and it does not see
    a term that a line break has split. It also only affects what is converted after the call, so the
    definitions belong in a source of their own, converted first.%
}{%
    Markeert iedere plek waar de naam van een definitie in de tekst daarna voorkomt, zonder dat de tekst
    dat hoeft aan te geven. Het is een bewuste keuze, en er valt iets af te wegen: de vergelijking is
    letterlijk, dus hoofdlettergevoelig, blind voor verbuiging\,---\,\enquote{persoonsgegevens} is niet
    \enquote{persoonsgegeven}\,---\,en hij ziet een term niet die door een regeleinde in tweeën is
    gebroken. Bovendien werkt hij alleen op wat na de aanroep omgezet wordt, dus de definities horen in
    een eigen bron, die als eerste omgezet wordt.%
}
\begin{lstlisting}[style=tex]
\markdownInput{definities.md}
\autocitedefs
\markdownInput{overeenkomst.md}
\end{lstlisting}
\clearpage

\section{HTML}\label{sec:html}
\translation{%
    This package is written for PDF, as \zcref{sec:usage} says, but a regulatory document that
    ends up on a website is a regular enough wish.
    That conversion is the work of \package{tex4ht}, driven by \texttt{make4ht}, which configures
    a package through a file \file{\meta{package}.4ht}.
    \package{tex4ht} carries none for this package, so this one ships its own as
    \file{tex/regulatory.4ht}, next to the package files. A document that can find
    \package{regulatory} finds the configuration along with it.
    One thing a document has to do itself: \emph{not} declare \cmd{\DocumentMetadata} in an
    HTML run. It activates the PDF management that \zcref{sec:usage} asks for, which pulls in
    the \LaTeX{} list code and leaves \package{tex4ht} nothing to turn a \texttt{paras} item
    into: measured on \zcref{code:example1}, twelve list elements with the declaration absent
    and none with it present. \package{tex4ht} defines \cmd{\HCode} before it reads the
    document, which is what the examples test on\,---\,see \zcref{code:metadata}.%
}{%
    Dit pakket is voor PDF geschreven, zoals \zcref{sec:usage} zegt, maar een regulatoir document
    dat op een website terechtkomt is een gangbare genoeg wens.
    Die omzetting is het werk van \package{tex4ht}, aangestuurd met \texttt{make4ht}, dat een
    pakket configureert via een bestand \file{\meta{pakket}.4ht}.
    \package{tex4ht} levert er voor dit pakket geen, dus levert dit pakket zijn eigen mee als
    \file{tex/regulatory.4ht}, naast de pakketbestanden. Een document dat \package{regulatory}
    kan vinden, vindt die configuratie er meteen bij.
    Eén ding moet een document zelf doen: \cmd{\DocumentMetadata} \emph{niet} declareren in een
    HTML-bouw. Die activeert de PDF-administratie waar \zcref{sec:usage} om vraagt, wat de
    lijstcode van \LaTeX{} binnenhaalt en \package{tex4ht} niets laat om een \texttt{paras}
    onderdeel in om te zetten: gemeten aan \zcref{code:example1} twaalf lijstelementen zonder die
    declaratie en geen enkele met. \package{tex4ht} definieert \cmd{\HCode} voordat het het
    document leest, en daar toetsen de voorbeelden op\,---\,zie \zcref{code:metadata}.%
}\\

\noindent
\translation{%
    Both of these are said out loud rather than left to the result. A run that converts with PDF
    management active is told that the list markup goes away, and a run in which the configuration of this
    package was not found is told that an article and a paragraph become running text without a heading.
    Neither stops the conversion, and neither shows in an output one does not already know how to read: a
    heading that is no heading looks like a sentence in bold.%
}{%
    Allebei worden ze hardop gezegd in plaats van aan de uitkomst overgelaten. Een bouw die omzet met
    actieve PDF-administratie krijgt te horen dat de lijstopmaak verdwijnt, en een bouw waarin de
    configuratie van dit pakket niet gevonden is krijgt te horen dat een artikel en een lid lopende tekst
    worden zonder kop. Geen van beide stopt de omzetting, en geen van beide valt op in een uitkomst die je
    niet al weet te lezen: een kop die geen kop is ziet eruit als een vetgedrukte zin.%
}


\noindent
\translation{%
    Whether the conversion runs at all without one turns on a single line of the preamble.
    The headings of this package go through \package{titlesec} for as long as
    \cmd{\ParseLaTeXeHeading} is unavailable, and \package{tex4ht} replaces the very sectioning
    machinery \package{titlesec} attaches to, which leaves it with nothing to hook onto.
    Measured with \texttt{make4ht}:%
}{%
    Of de omzetting zonder zo'n bestand überhaupt loopt hangt af van één regel in de preamble.
    De koppen van dit pakket lopen via \package{titlesec} zolang \cmd{\ParseLaTeXeHeading} niet
    beschikbaar is, en \package{tex4ht} vervangt juist de kopmachinerie waar \package{titlesec}
    zich aan hecht, waardoor die nergens meer op aan kan haken.
    Gemeten met \texttt{make4ht}:%
}
\begin{labeling}{\translation{without}{zonder}}
    \item[\translation{with}{met}] \cmd{\DocumentMetadata} \translation{%
        the new heading interface is available, \package{titlesec} is not loaded at all, and the
        conversion finishes without a single error.%
    }{%
        is de nieuwe kopinterface beschikbaar, wordt \package{titlesec} in het geheel niet geladen
        en loopt de omzetting zonder ook maar één fout af.%
    }
    \item[\translation{without}{zonder}] \translation{%
        \package{titlesec} is loaded and \texttt{make4ht} stops on
        \texttt{Package titlesec Error: No format for this command}.%
    }{%
        wordt \package{titlesec} geladen en stopt \texttt{make4ht} op
        \texttt{Package titlesec Error: No format for this command}.%
    }
\end{labeling}
\translation{%
    \zcref{sec:usage} already asks for \cmd{\DocumentMetadata} for the sake of the attachments, so
    a document that attaches anything is on the good side of that line by the time it reaches
    \texttt{make4ht}. A document that attaches nothing has no reason to carry the declaration.%
}{%
    \zcref{sec:usage} vraagt al om \cmd{\DocumentMetadata} omwille van de bijlagen, dus een
    document dat iets bijvoegt staat aan de goede kant van die streep tegen de tijd dat het bij
    \texttt{make4ht} komt. Een document dat niets bijvoegt heeft geen reden die declaratie te
    dragen.%
}\\

\noindent
\translation{%
    A conversion that finishes is not the same as a conversion that means something, and what
    falls away here does not announce itself. \zcref{code:example1} declares
    \cmd{\DocumentMetadata} and converts without an error either way, which says nothing about
    what comes out:%
}{%
    Een omzetting die afloopt is niet hetzelfde als een omzetting die iets betekent, en wat hier
    wegvalt meldt zich niet. \zcref{code:example1} declareert \cmd{\DocumentMetadata} en zet in
    beide gevallen zonder fout om, wat niets zegt over wat eruit komt:%
}

\begin{center}
    \begin{tabular}{@{}lrr@{}}
        & \textbf{\translation{without}{zonder}} \file{regulatory.4ht}
        & \textbf{\translation{with}{met}} \file{regulatory.4ht} \\
        \hline
        \translation{headings}{koppen} \texttt{<h\meta{n}>} & 0 & 5 \\
        \texttt{<section>}                                  & 0 & 5 \\
        \translation{anchors}{ankers} \texttt{id='article.\meta{n}'} & 4 & 4 \\
    \end{tabular}
\end{center}
\noindent
\translation{%
    The anchors are there either way, since \package{hyperref} writes them. It is the structure
    that falls away: without the configuration file an article is a paragraph with a bold run in
    it, and for a document whose structure \emph{is} its meaning that is the difference between a
    text a reader can navigate and one that only looks right.%
}{%
    De ankers staan er in beide gevallen, want \package{hyperref} schrijft ze. Het is de structuur
    die wegvalt: zonder het configuratiebestand is een artikel een paragraaf met een vette passage
    erin, en voor een document waarvan de structuur de betekenis \emph{is} is dat het verschil
    tussen een tekst waar een lezer doorheen kan en een tekst die er alleen goed uitziet.%
}\\

\noindent
\translation{%
    The file is therefore needed in both cases, for two different reasons: without
    \cmd{\DocumentMetadata} it keeps the conversion from failing at all, and with it, it is the
    only thing that produces the structure. Since it travels with the package, both are
    settled by loading \package{regulatory} at all.%
}{%
    Het bestand is dus in beide gevallen nodig, om twee verschillende redenen: zonder
    \cmd{\DocumentMetadata} houdt het de omzetting overeind, en mét die regel is het het enige dat
    de structuur oplevert. Aangezien hij met het pakket meereist, is beide geregeld zodra
    \package{regulatory} geladen wordt.%
}
\clearpage

\section{Tests}\label{sec:tests}
\translation{%
    The tests of this package live in the \file{test} directory and answer two different
    questions.
    \texttt{make test} typesets every example with every engine this package supports, which is
    \texttt{lualatex} and \texttt{pdflatex}, and needs nothing beyond a \TeX{} installation.
    \texttt{make conformance} typesets the same documents once per PDF standard and has veraPDF
    judge the result, which needs Docker; its outcome is kept in the repository as
    \zcref{sec:conformance}, since the validator is not available everywhere this package is
    built. That one is left out of \texttt{make test} for the same reason, and joins it with
    \texttt{make test WITH\_CONFORMANCE=1}.%
}{%
    De tests van dit pakket staan in de map \file{test} en beantwoorden twee verschillende
    vragen.
    \texttt{make test} zet ieder voorbeeld met iedere engine die dit pakket ondersteunt, te weten
    \texttt{lualatex} en \texttt{pdflatex}, en vraagt niets meer dan een \TeX{} installatie.
    \texttt{make conformance} zet diezelfde documenten één keer per PDF-standaard en laat veraPDF
    er een oordeel over vellen, waarvoor Docker nodig is; de uitkomst daarvan wordt bewaard in
    het pakket zelf als \zcref{sec:conformance}, aangezien de validator niet overal beschikbaar
    is waar dit pakket gebouwd wordt. Om diezelfde reden zit die niet in \texttt{make test}, en
    voegt hij zich daarbij met \texttt{make test WITH\_CONFORMANCE=1}.%
}

\translation{%
    Every suite builds in a directory of its own under \file{test/out}: \file{out/lualatex} and
    \file{out/pdflatex} for the engines, \file{out/html} for the conversion of
    \zcref{sec:html} and \file{out/conformance} for the standards.
    They therefore do not overwrite each other, and what a suite produced stays where it is
    afterwards, which is what makes the HTML of a run something one can open and look at.
    Sharing nothing is also what lets them run at the same time, which \texttt{make test} does;
    each of them can be asked for on its own as \texttt{make suite-lualatex},
    \texttt{make suite-html} and so on.
    The sources are copied into such a directory rather than found through \texttt{TEXINPUTS}:
    \cmd{\markdownInput} opens its file with Lua, which does not consult kpathsea, so that one
    has to be there for real.%
}{%
    Iedere suite bouwt in een eigen map onder \file{test/out}: \file{out/lualatex} en
    \file{out/pdflatex} voor de engines, \file{out/html} voor de omzetting uit
    \zcref{sec:html} en \file{out/conformance} voor de standaarden.
    Ze overschrijven elkaar daardoor niet, en wat een suite opleverde blijft achteraf staan, wat
    de HTML van een draai tot iets maakt dat je kunt openen en bekijken.
    Dat ze niets delen is ook wat ze tegelijk laat draaien, wat \texttt{make test} doet; ieder
    van hen is los op te vragen als \texttt{make suite-lualatex}, \texttt{make suite-html}
    enzovoort.
    De bronnen worden in zo'n map gekopieerd in plaats van via \texttt{TEXINPUTS} gevonden:
    \cmd{\markdownInput} opent zijn bestand met Lua, dat kpathsea niet raadpleegt, dus dat
    bestand moet er echt staan.%
}

\translation{%
    That a document comes out is the smaller half of what a run establishes. Nearly everything
    this package gets wrong comes out as a document all the same\,---\,a citation worded in the
    wrong register, a definition that quietly did not arrive, a label that resolved to nothing.
    Every suite therefore ends in a set of assertions that read the run back, described in
    \zcref{sec:checks}, and two of the documents are there to fail.%
}{%
    Dat er een document uitkomt is de kleinste helft van wat een draai vaststelt. Vrijwel alles
    wat dit pakket verkeerd kan doen komt er evengoed als document uit\,---\,een verwijzing die
    in het verkeerde register geschreven is, een definitie die stilzwijgend niet aankwam, een
    label dat nergens heen wees. Iedere suite eindigt daarom in een reeks controles die de draai
    naleest, beschreven in \zcref{sec:checks}, en twee van de documenten staan er om te falen.%
}

\subsection{\translation{The test documents}{De testdocumenten}}\label{sec:testdocs}
\translation{%
    Ten documents stand in that directory. Two of them exist in both languages and one of them is
    converted rather than typeset, since what it is for is only read under \package{tex4ht}, so a
    suite typesets eleven files per engine and converts four. Every one of them is a driver that
    sets the language, declares the artifacts and loads the definitions, and that leaves the body
    to a file of its own, so that both language versions share one text:%
}{%
    Er staan tien documenten in die map. Twee ervan bestaan in beide talen en één wordt omgezet in
    plaats van gezet, want waar het voor is wordt alleen onder \package{tex4ht} gelezen, zodat een
    suite elf bestanden per engine zet en er vier omzet. Ieder daarvan is een driver die de taal
    instelt, de artefacten declareert en de definities inlaadt, en die de inhoud overlaat aan een
    eigen bestand, zodat beide taalversies één tekst delen:%
}
\begin{labeling}{\file{example1-nl.tex}}
    \addtokomafont{labelinglabel}{\ttfamily}
    \item[example1-nl.tex] \translation{%
        and \file{example1-en.tex}, both of which read \file{example1.tex} and load the
        definitions of \file{example1.bib}.%
    }{%
        en \file{example1-en.tex}, die beide \file{example1.tex} lezen en de definities van
        \file{example1.bib} inladen.%
    }
    \item[example2-nl.tex] \translation{%
        and \file{example2-en.tex}, which read \file{example2.tex} and \file{example2.bib} the
        same way. They add a definition of their own with \cmd{\newdefinition} and print the list
        with the \texttt{description} style, so that both routes of \zcref{sec:defs} that need no
        second program are covered.%
    }{%
        en \file{example2-en.tex}, die op dezelfde manier \file{example2.tex} en
        \file{example2.bib} lezen. Ze voegen met \cmd{\newdefinition} een eigen definitie toe en
        zetten de lijst met de stijl \texttt{description}, waarmee beide routes uit
        \zcref{sec:defs} die geen tweede programma nodig hebben gedekt zijn.%
    }
    \item[md-example.tex] \translation{%
        which reads \file{example.md} with \cmd{\markdownInput} instead, and loads the
        definitions of \file{example1.bib}. It exists in Dutch only.%
    }{%
        dat in plaats daarvan \file{example.md} leest met \cmd{\markdownInput}, en de
        definities van \file{example1.bib} inlaadt. Deze bestaat alleen in het Nederlands.%
    }
    \item[sign-example.tex] \translation{%
        which places the signature fields of \zcref{sec:sign} and has no definitions at all. It
        is written uncompressed, so that the annotation over a field can be read back out of the
        PDF file without a PDF tool. It frames each field itself: the module draws a line to
        write on, and the frame is what shows on paper how far the area reaches that a viewer
        offers.%
    }{%
        dat de handtekeningvelden van \zcref{sec:sign} plaatst en helemaal geen definities
        heeft. Het wordt ongecomprimeerd geschreven, zodat de annotatie over een veld zonder
        PDF-gereedschap uit het PDF-bestand terug te lezen is. Het omkadert elk veld zelf: de
        module tekent een schrijflijn, en het kader laat op papier zien tot waar het vlak reikt
        dat een viewer aanbiedt.%
    }
    \item[index-example.tex] \translation{%
        which takes the second definition route of \zcref{sec:defs}: \option{bib2gls=false}, so
        \cmd{\loadglsdefs} reads \file{index-defs.tex} of \cmd{\newglossaryentry} commands and
        \texttt{makeindex} does the sorting. It is the only document that needs a program between the
        runs other than \texttt{bib2gls}, and until it was written that route had no coverage at all.%
    }{%
        dat de tweede definitieroute van \zcref{sec:defs} neemt: \option{bib2gls=false}, zodat
        \cmd{\loadglsdefs} het bestand \file{index-defs.tex} met \cmd{\newglossaryentry} leest en
        \texttt{makeindex} het sorteren doet. Het is het enige document dat een ander programma dan
        \texttt{bib2gls} tussen de draaien nodig heeft, en tot het geschreven werd had die route geen
        enkele dekking.%
    }
    \item[attach-example.tex] \translation{%
        which is the only document that asks for \option{attachmentlink=annotation}
        (\zcref{sec:attachmentlink}), so without it that value would ship untested. It is tagged on
        purpose and written uncompressed, so that the annotation and its place in the structure tree
        can both be read out of the PDF file without a PDF tool.%
    }{%
        het enige document dat om \option{attachmentlink=annotation} vraagt
        (\zcref{sec:attachmentlink}), zodat die waarde er zonder dit document ongetest uit zou gaan.
        Het is met opzet getagd en ongecomprimeerd geschreven, zodat zowel de annotatie als haar plek
        in de structuurboom zonder PDF-gereedschap uit het PDF-bestand te lezen zijn.%
    }
    \item[nolang-example.tex] \translation{%
        which names no language at all and is converted rather than typeset. Every other document
        here loads \package{babel}, and a tracked language is what makes \package{tracklang} load a
        \file{glossaries-\meta{language}.ldf} and with it \package{translator}. Anything in
        \file{regulatory.4ht} that reaches for a command of that package therefore works in every
        other document and is undefined in this one, which is how a call to
        \cmd{\providetranslation} survived in that file.%
    }{%
        dat helemaal geen taal noemt en omgezet wordt in plaats van gezet. Ieder ander document
        hier laadt \package{babel}, en een bijgehouden taal is wat \package{tracklang} een
        \file{glossaries-\meta{taal}.ldf} laat laden en daarmee \package{translator}. Alles in
        \file{regulatory.4ht} dat naar een commando van dat pakket grijpt werkt daarom in ieder
        ander document en is in dit ene ongedefinieerd, en zo heeft een aanroep van
        \cmd{\providetranslation} in dat bestand het overleefd.%
    }
    \item[date-example.tex] \translation{%
        which cites without saying as of when, and then cites a source whose data was checked
        before the date it gives. It is the second of the two documents that are meant to warn.%
    }{%
        dat aanhaalt zonder te zeggen per wanneer, en daarna een bron aanhaalt waarvan de
        gegevens nagelopen zijn vóór de datum die het opgeeft. Het is het tweede van de twee
        documenten die horen te waarschuwen.%
    }
    \item[source-example.tex] \translation{%
        which loads \file{sources.bib} and cites what is in it in every register of
        \zcref{sec:sources}. It declares two sources in the document itself as well, so that
        both routes into the reader are covered.%
    }{%
        dat \file{sources.bib} inlaadt en aanhaalt wat daarin staat, in ieder register van
        \zcref{sec:sources}. Het declareert daarnaast twee bronnen in het document zelf, zodat
        beide routes de lezer in gedekt zijn.%
    }
    \item[de-example.tex] \translation{%
        the one document that is meant to \emph{warn}. It refers to two other documents in German,
        one of which says how it is to be named and one of which does not, and German cannot word
        that from a subject on its own. It is therefore kept out of the assertion that allows the
        package no warning at all, and read by an assertion of its own.%
    }{%
        het enige document dat bedoeld is om te \emph{waarschuwen}. Het verwijst in het Duits naar
        twee andere documenten, waarvan er één zegt hoe hij genoemd moet worden en de ander niet, en
        het Duits kan dat niet uit een onderwerp alleen verwoorden. Het valt daarom buiten de
        controle die het pakket geen enkele waarschuwing toestaat, en heeft een eigen controle.%
    }
\end{labeling}

\noindent
\translation{%
    Two more are typeset that have to fail: \file{badsource.tex} loads a bib file with a required
    field missing, and \file{badsyntax.tex} one with a line the reader does not accept. They are
    not examples of anything. A reader that skips what it cannot read leaves a citation empty in
    a document that is otherwise fine, so the guarantee it gives is only worth what its refusal
    is worth, and that is what these two measure.%
}{%
    Er worden er nog twee gezet die juist moeten falen: \file{badsource.tex} laadt een bib-bestand
    waarin een verplicht veld ontbreekt, en \file{badsyntax.tex} één met een regel die de lezer
    niet aanvaardt. Het zijn geen voorbeelden van iets. Een lezer die overslaat wat hij niet lezen
    kan, laat een aanhaling leeg in een document dat er verder goed uitziet, dus de garantie die
    hij geeft is alleen zoveel waard als zijn weigering\,---\,en dat is wat deze twee meten.%
}

\noindent
\translation{%
    What makes the first three a test rather than three separate documents is the way they point
    at each other, which is what \zcref{sec:extern} is about.
    \file{example1-nl} names \file{example2-nl} with \cmd{\refdocument}, so it can refer to its
    articles without attaching it.
    \file{example2-nl} names \file{example1-nl} with \cmd{\masterdocument} instead, which
    additionally loads its definitions and attaches the document itself.
    Both together therefore cover a reference in both directions, and the pair of them is
    declared once more by this manual, which is how the listing of \zcref{sec:example} can refer to
    their articles and embed their PDF files.
    \file{example1-nl} finally attaches a file that is not a PDF at all with
    \cmd{\attachdocument}, which is the case the PDF standards disagree about most:%
}{%
    Wat de eerste drie tot een test maakt in plaats van drie losse documenten is de manier waarop
    ze naar elkaar wijzen, waar \zcref{sec:extern} over gaat.
    \file{example1-nl} noemt \file{example2-nl} met \cmd{\refdocument}, zodat het naar diens
    artikelen kan verwijzen zonder het bij te voegen.
    \file{example2-nl} noemt \file{example1-nl} juist met \cmd{\masterdocument}, wat daarnaast
    diens definities inlaadt en het document zelf als bijlage hecht.
    Samen dekken ze daarmee een verwijzing in beide richtingen, en het paar wordt nog eens
    gedeclareerd door deze handleiding, en daarom kan de opsomming van \zcref{sec:example} naar hun
    artikelen verwijzen en hun PDF-bestanden insluiten.
    \file{example1-nl} hecht tenslotte met \cmd{\attachdocument} een bestand dat helemaal geen
    PDF is, het geval waar de PDF-standaarden het meest over van mening verschillen:%
}

\begin{adjustbox}{width=\textwidth}
\begin{tikzpicture}[diagram]
    \node[doc]  (e1)    at ( 0   , 0   ) {example1-nl};
    \node[doc]  (e2)    at ( 7   , 0   ) {example2-nl};
    \node[doc]  (md)    at ( 4 ,-3.2   ) {md-example};

    \node[data] (bib1)  at ( 0   , 1.9 ) {example1.bib};
    \node[data] (bib2)  at ( 7   , 1.9 ) {example2.bib};
    \node[data] (body1) at (-3.2 , 0   ) {example1.tex};
    \node[data] (body2) at (10.2 , 0   ) {example2.tex};
    \node[data] (mdsrc) at ( 0   ,-3.2 ) {example.md};

    \draw[rel] (e1) to[bend left=14] node[lbl,above] {\cmd{\refdocument}} (e2);
    \draw[rel] (e2) to[bend left=14] node[lbl,below] {\cmd{\masterdocument}} (e1);
    \draw[rel] (md) -- node[lbl,pos=0.55] {\cmd{\refdocument}} (e2);

    \draw[rel] (body1) -- node[lbl,above] {\cmd{\input}} (e1);
    \draw[rel] (body2) -- node[lbl,above] {\cmd{\input}} (e2);
    \draw[rel] (mdsrc) -- node[lbl,above] {\cmd{\markdownInput}} (md);
    \draw[rel] (bib1) -- node[lbl,right] {\cmd{\loadglsdefs}, \cmd{\attachdocument}} (e1);
    \draw[rel] (bib2) -- node[lbl,right] {\cmd{\loadglsdefs}} (e2);
\end{tikzpicture}
\end{adjustbox}
\translation{%
    A solid box is a document that becomes a PDF file, a dashed one is a file it reads.
    An arrow between two documents is a declaration in the preamble of the document it starts
    from.
    \file{md-example} loads \file{example1.bib} as well, which is left out of the picture for
    the sake of legibility.%
}{%
    Een dichte kader is een document dat een PDF-bestand wordt, een gestreepte een bestand dat
    het inleest.
    Een pijl tussen twee documenten is een declaratie in de preamble van het document waar hij
    vandaan komt.
    \file{md-example} laadt daarnaast \file{example1.bib} in, wat omwille van de leesbaarheid
    niet getekend is.%
}

\noindent
\translation{%
    The other six are drawn as well, each on the one thing it is there for. They keep the shapes
    of the picture above and add three: a grey box is a program that runs between two \LaTeX{}
    runs, a sharp-cornered box something written out literally\,---\,keys in a document, an
    object in the PDF file\,---\,and a doubled box the assertion of \zcref{sec:checks} that
    reads the result back.%
}{%
    De andere zes zijn ook getekend, elk op het ene waar hij voor staat. Ze houden de vormen van
    de tekening hierboven aan en voegen er drie toe: een grijze kader is een programma dat tussen
    twee \LaTeX{}-draaien loopt, een kader met scherpe hoeken iets dat letterlijk uitgeschreven
    staat\,---\,sleutels in een document, een object in het PDF-bestand\,---\,en een dubbele
    kader de controle uit \zcref{sec:checks} die de uitkomst naleest.%
}

\noindent
\translation{%
    \file{sign-example} places two of the fields of \zcref{sec:sign}. What it draws and what it
    carries come apart without anything looking wrong: the frame and the line are set by \TeX{}
    and are on the page whatever happens, while the annotation that makes the area a field is
    invisible on paper and shows only when somebody tries to sign. Both fields point at the same
    appearance object, which is what an empty appearance is for\,---\,the line is drawn by the
    page, so an appearance that drew one would draw it twice.%
}{%
    \file{sign-example} plaatst twee van de velden uit \zcref{sec:sign}. Wat het tekent en wat het
    draagt lopen uit elkaar zonder dat er iets verkeerd uitziet: het kader en de lijn worden door
    \TeX{} gezet en staan hoe dan ook op de pagina, terwijl de annotatie die het vlak tot een veld
    maakt op papier onzichtbaar is en pas blijkt wanneer iemand probeert te tekenen. Beide velden
    wijzen naar hetzelfde verschijningsobject, en daar is een lege verschijning voor\,---\,de lijn
    wordt door de pagina getekend, dus een verschijning die er een tekende zou hem dubbel
    tekenen.%
}

\begin{adjustbox}{width=\textwidth}
\begin{tikzpicture}[diagram]
    \node[note,anchor=south] at (2.5,5.3) {\translation{what comes out on paper}{wat er op papier uitkomt}};
    \draw (0,3.2) rectangle (5.0,5.0);
    \draw[semithick] (0.5,3.75) -- (4.5,3.75);
    \node[lbl] at (2.5,5.0) {\cmd{\fbox}, \translation{by this example}{door dit voorbeeld}};
    \node[note,anchor=north] at (2.5,3.6) {\translation{the line, by the module}{de lijn, door de module}};
    \draw (0,0.2) rectangle (5.0,2.0);
    \draw[semithick] (0.5,0.75) -- (4.5,0.75);

    \draw[greycolor] (8.3,-0.2) rectangle (12.7,5.4);
    \node[note,anchor=south] at (10.5,5.5) {/Annots};
    \node[obj] (w1) at (10.5,4.1) {/Subtype /Widget\\/FT /Sig\\/T (opdrachtgever)};
    \node[obj] (w2) at (10.5,1.1) {/Subtype /Widget\\/FT /Sig\\/T (opdrachtnemer)};
    \node[obj] (ap) at (14.8,2.6) {/AP /N};
    \node[note,anchor=north] at (14.8,1.4) {\translation{one appearance object,\\shared by both fields}%
        {één verschijningsobject,\\door beide velden gedeeld}};

    \draw[rel] (5.0,4.1) -- node[lbl,above]{/Rect}
        node[lbl,below]{\translation{the same rectangle}{hetzelfde vlak}} (w1.west);
    \draw[rel] (5.0,1.1) -- node[lbl,above]{/Rect} (w2.west);
    \draw[rel] (w1.east) -- (ap.north west);
    \draw[rel] (w2.east) -- (ap.south west);

    \node[prog]  (grep) at (10.5,-1.8) {grep '/FT /Sig'};
    \node[check] (chk)  at (10.5,-3.6) {sign-checks};
    \draw[rel] (10.5,-0.2) -- (grep);
    \draw[rel] (grep) -- (chk);
    \node[note,anchor=east] at (8.9,-1.8) {\translation{written uncompressed, so reading the field\\%
        back needs no PDF tool}%
        {ongecomprimeerd geschreven, zodat het veld\\teruglezen geen PDF-gereedschap vraagt}};
    \node[note,anchor=east] at (8.9,-3.6) {\translation{two fields, or the box was drawn\\without one}%
        {twee velden, of het kader is zonder\\veld getekend}};
\end{tikzpicture}
\end{adjustbox}

\noindent
\translation{%
    The routes of \zcref{sec:defs} differ in what has to run between the two \LaTeX{} runs,
    and that is what separates the documents below. \file{index-example} is the only one on the
    second route and the only one that asks for a program other than \package{bib2gls}. Its
    assertion does not read the list but the order: the document declares \emph{Onderhandse}
    first and \emph{Authentieke} second, so a file that comes back the other way round is the only
    evidence anywhere in the run that \texttt{makeindex} did anything at all.%
}{%
    De wegen van \zcref{sec:defs} verschillen in wat er tussen de twee \LaTeX{}-draaien moet
    lopen, en dat is wat de documenten hieronder uit elkaar houdt. \file{index-example} is de
    enige op de tweede weg en de enige die om een ander programma dan \package{bib2gls} vraagt.
    Zijn controle leest niet de lijst maar de volgorde: het document declareert \emph{Onderhandse}
    eerst en \emph{Authentieke} daarna, dus een bestand dat andersom terugkomt is het enige bewijs
    in de hele draai dat \texttt{makeindex} überhaupt iets gedaan heeft.%
}

\begin{adjustbox}{width=\textwidth}
\begin{tikzpicture}[diagram]
    \node[data,anchor=west] (bib1)  at (0, 3.0) {example1.bib};
    \node[data,anchor=west] (bib2)  at (0, 0.6) {example2.bib};
    \node[data,anchor=west] (idefs) at (0,-2.8) {index-defs.tex};

    \node[doc] (d1) at (6.4, 3.0) {example1-nl\\md-example};
    \node[doc] (d2) at (6.4, 0.6) {example2-nl};
    \node[doc] (d3) at (6.4,-2.8) {index-example};

    \node[prog]  (b2g)   at (11.4, 1.8) {bib2gls};
    \node[prog]  (mkidx) at (11.4,-2.8) {makeindex};
    \node[check] (chk)   at (15.6,-2.8) {index-checks};

    \draw[rel] (bib1) -- node[lbl,above]{\cmd{\loadglsdefs}} (d1);
    \draw[rel] (bib2) -- node[lbl,above]{\cmd{\loadglsdefs}} (d2);
    \draw[rel] (idefs) -- node[lbl,above]{\cmd{\loadglsdefs}}
        node[lbl,below]{\option{bib2gls=false}} (d3);

    \draw[rel] (d1) -- node[lbl,above]{.aux} (b2g);
    \draw[rel] (d2) -- node[lbl,below]{.aux} (b2g);
    \draw[rel] (d3) -- node[lbl,above]{.definitions-glo} (mkidx);
    \draw[rel] (mkidx) -- node[lbl,above]{.definitions-gls} (chk);

    \draw[rel] (d2) to[out=-120,in=-60,looseness=9]
        node[lbl,below]{\cmd{\newdefinition}} (d2);
    \node[note,anchor=north] at (6.4,-1.4) {\translation{no second program at all}%
        {helemaal geen tweede programma}};

    \node[note,anchor=south] at (11.4, 2.6) {\translation{between the two \LaTeX{} runs}%
        {tussen de twee \LaTeX{}-draaien}};
    \node[note,anchor=north] at (11.4, 1.0) {\translation{hands back .glstex}{geeft .glstex terug}};
    \node[note,anchor=north] at (12.0,-3.6) {\translation{sorted: authentiek before onderhands, the only\\%
        evidence in the file that the program did anything}%
        {gesorteerd: authentiek vóór onderhands, het enige\\%
        bewijs in het bestand dat het programma iets deed}};
\end{tikzpicture}
\end{adjustbox}

\noindent
\translation{%
    A tracked language is what makes \package{tracklang} load a \file{glossaries-\meta{language}.ldf},
    and that file is what brings \package{translator} along. Every other document here loads
    \package{babel}, so a command of that package works in all of them and is undefined in the one
    that names no language at all, which is how a call to \cmd{\providetranslation} survived in
    \file{regulatory.4ht}. The headings this document does get are English: the language files
    this bundle ships are loaded whatever the document speaks.%
}{%
    Een bijgehouden taal is wat \package{tracklang} een \file{glossaries-\meta{taal}.ldf} laat
    laden, en dat bestand is wat \package{translator} meebrengt. Ieder ander document hier laadt
    \package{babel}, dus een commando van dat pakket werkt in allemaal en is ongedefinieerd in het
    ene dat helemaal geen taal noemt, en zo heeft een aanroep van \cmd{\providetranslation} het
    overleefd in \file{regulatory.4ht}. De kopjes die dit document wél krijgt zijn Engels: de
    taalbestanden die deze bundel meelevert worden geladen wat het document ook spreekt.%
}

\begin{adjustbox}{width=\textwidth}
\begin{tikzpicture}[diagram]
    \node[note,anchor=south] at (1.2, 1.9) {\translation{every other document}{ieder ander document}};
    \node[bare] (b1) at ( 1.2, 1.4) {babel};
    \node[bare] (t1) at ( 3.8, 1.4) {tracklang};
    \node[bare] (l1) at ( 8.0, 1.4) {glossaries-dutch.ldf};
    \node[bare] (r1) at (11.6, 1.4) {translator};
    \node[bare] (p1) at (15.0, 1.4) {\cmd{\providetranslation}};

    \node[note,anchor=south] at (1.2,-0.9) {nolang-example};
    \node[bare,faded] (b0) at ( 1.2,-1.4) {\translation{no babel}{geen babel}};
    \node[bare]                (t0) at ( 3.8,-1.4) {tracklang};
    \node[bare,faded] (l0) at ( 8.0,-1.4) {\translation{no ldf}{geen ldf}};
    \node[bare,faded] (r0) at (11.6,-1.4) {\translation{no translator}{geen translator}};
    \node[bare,text=warncolor] (p0) at (15.0,-1.4) {\translation{undefined}{ongedefinieerd}};

    \draw[rel] (b1) -- (t1);
    \draw[rel] (t1) -- node[lbl,below=2mm]{\translation{a language is tracked}%
        {er wordt een taal bijgehouden}} (l1);
    \draw[rel] (l1) -- (r1);
    \draw[rel] (r1) -- (p1);
    \draw[gone] (b0) -- (t0);
    \draw[gone] (t0) -- node[lbl,below=2mm]{\translation{nothing is tracked}%
        {er wordt niets bijgehouden}} (l0);
    \draw[gone] (l0) -- (r0);
    \draw[gone] (r0) -- (p0);

    \node[data]  (fourht) at (11.0,-3.6) {regulatory.4ht};
    \node[check] (chk)    at (15.0,-3.6) {html-checks};
    \draw[rel] (fourht) -- node[lbl,below]{\translation{reaches for it}{grijpt ernaar}} (p0);
    \draw[rel] (p0) -- node[lbl,right]{\translation{caught here}{hier gevangen}} (chk);
    \node[note,anchor=north] at (13.0,-4.6) {\translation{that file is read under \package{tex4ht} only, so this\\%
        document is converted and never typeset}%
        {dat bestand wordt alleen onder \package{tex4ht} gelezen, dus\\%
        dit document wordt omgezet en nooit gezet}};
\end{tikzpicture}
\end{adjustbox}

\noindent
\translation{%
    \file{date-example} is meant to warn four times over, and its assertion counts one of each and
    nothing beyond them. One is about a source that was last checked before the date this document
    speaks as of, and it is said once however often that source is cited; one is about a document
    that nowhere says as of when it cites; and two are about entries that cannot be held against a
    date at all. The fourth entry says as much on purpose and stays silent, which is the
    difference the picture is drawn for: a guard whose off switch is an absent field is switched
    off by accident rather than by decision.%
}{%
    \file{date-example} hoort vier keer te waarschuwen, en zijn controle telt er van elk één en
    verder niets. Eén gaat over een bron die nagelopen is vóór de dag per welke dit document
    spreekt, en die wordt één keer gezegd hoe vaak die bron ook aangehaald wordt; één over
    een document dat nergens zegt per wanneer het aanhaalt; en twee over entries die helemaal niet
    naast een datum te leggen zijn. De vierde entry zegt dat met zoveel woorden en blijft stil, en
    daar is deze tekening voor: een wacht waarvan de uitschakelaar een ontbrekend veld is wordt per
    ongeluk uitgezet in plaats van met opzet.%
}

\begin{adjustbox}{width=\textwidth}
\begin{tikzpicture}[diagram]
    \fill[greycolor!40] (2,-0.18) rectangle (8,0.18);
    \draw[rel] (-0.4,0) -- (11.4,0);
    \draw[semithick] (2,-0.3) -- (2,0.3);
    \draw[semithick] (8,-0.3) -- (8,0.3);
    \node[note,anchor=north east] at (2.4,-0.45) {2024-01-01\\%
        \translation{bw6 was last checked}{bw6 is nagelopen}};
    \node[note,anchor=north west] at (7.6,-0.45) {2026-01-01\\%
        \texttt{date=} \translation{of two citations}{van twee aanhalingen}};
    \node[note,anchor=south] at (5,0.3) {\translation{whatever changed here is not in the citation}%
        {wat hier veranderde staat niet in de aanhaling}};

    \draw[rel,warncolor] (5,-1.5) -- (5,-0.3);
    \node[warn,anchor=north] at (5,-1.6) {%
        \translation{once for the source, however often it is cited}%
                    {één keer voor de bron, hoe vaak hij ook aangehaald wordt}};

    \node[note,anchor=north west] at (-0.4,-2.7) {\translation{and what the document writes itself}%
        {en wat het document zelf schrijft}};
    \node[obj] (s0) at (1.8,-3.7) {\cmd{\srcref}};
    \node[obj] (s1) at (1.8,-4.7) {zonder};
    \node[obj] (s2) at (1.8,-5.7) {onbekeken};
    \node[obj] (s3) at (1.8,-6.7) {scheef};
    \node[note,anchor=west] at (3.4,-3.7) {\translation{no \texttt{date=}, no \cmd{\sourcedate}}%
        {geen \texttt{date=}, geen \cmd{\sourcedate}}};
    \node[note,anchor=west] at (3.4,-4.7) {\translation{no \texttt{valid} field}{geen veld \texttt{valid}}};
    \node[note,anchor=west] at (3.4,-5.7) {\texttt{valid = unverified}};
    \node[note,anchor=west] at (3.4,-6.7) {\texttt{valid = 1 januari 2024}};
    \node[warn,anchor=west] at (7.4,-3.7) {\translation{it says nowhere as of when it cites}%
        {het zegt nergens per wanneer het aanhaalt}};
    \node[warn,anchor=west] at (7.4,-4.7) {\translation{could never be reported out of date}%
        {kan nooit verouderd gemeld worden}};
    \node[ok,anchor=west]   at (7.4,-5.7) {\translation{a decision, and decisions are silent}%
        {een besluit, en besluiten zijn stil}};
    \node[warn,anchor=west] at (7.4,-6.7) {\translation{neither YYYY-MM-DD nor unverified}%
        {noch JJJJ-MM-DD noch unverified}};

    \node[check] (chk) at (1.8,-8.0) {date-checks};
    \node[note,anchor=west] at (3.4,-8.0) {\translation{four warnings, one of each, and nothing beyond them}%
        {vier waarschuwingen, van elk één, en verder niets}};
\end{tikzpicture}
\end{adjustbox}

\noindent
\translation{%
    The register belongs to the source and not to the sentence it stands in, so the same three
    keys come out as four different citations. The English one is the only register that puts the
    deepest level first, and the only one in which the name of the instrument does not follow the
    provision. The Dutch key names are aliases of the English ones and therefore have to produce
    the same citation word for word; where they do not, the alias is not what it says it is.
    \file{source-example} is read back that way for forty citations, since one in the wrong
    register fails nowhere\,---\,it simply stands there wrong.%
}{%
    Het register hoort bij de bron en niet bij de zin waar hij in staat, dus dezelfde drie sleutels
    komen er als vier verschillende aanhalingen uit. Het Engelse is het enige register dat het
    diepste niveau vooropzet, en het enige waarin de naam van het instrument niet op de bepaling
    volgt. De Nederlandse sleutelnamen zijn aliassen van de Engelse en horen dus woord voor woord
    dezelfde aanhaling op te leveren; verschilt er iets, dan is de alias niet wat hij zegt te zijn.
    \file{source-example} wordt zo voor veertig aanhalingen nagelezen, want een aanhaling in het
    verkeerde register faalt nergens\,---\,hij staat er gewoon verkeerd.%
}

\begin{adjustbox}{width=\textwidth}
\begin{tikzpicture}[diagram]
    \node[obj,anchor=west] (en) at (0, 1.4) {article=6,\\paragraph=1,\\point=a};
    \node[obj,anchor=west] (nl) at (0,-1.4) {artikel=6,\\lid=1,\\onderdeel=a};
    \node[obj] (src) at (4.6, 0.0) {\cmd{\srcref}};
    \draw[rel] (en.east) -- (src);
    \draw[rel] (nl.east) -- (src);
    \node[note,anchor=north] at (1.3,-2.6) {\translation{the same three keys,\\word for word the same citation}%
        {dezelfde drie sleutels,\\woord voor woord dezelfde aanhaling}};

    \node[note,anchor=east] at ( 8.6, 3.0) {\texttt{dutch\_eu}};
    \node[note,anchor=east] at ( 8.6, 1.0) {\texttt{german\_eu}};
    \node[note,anchor=east] at ( 8.6,-1.0) {\texttt{french\_eu}};
    \node[note,anchor=east] at ( 8.6,-3.0) {\texttt{english\_eu}};
    \node[bare,anchor=west] at ( 8.9, 3.0) {artikel~6, lid~1, punt~a), van~de~\ldots};
    \node[bare,anchor=west] at ( 8.9, 1.0) {Artikel~6 Absatz~1 Buchstabe~a der~\ldots};
    \node[bare,anchor=west] at ( 8.9,-1.0) {article~6, paragraphe~1, point~a), du~\ldots};
    \node[bare,anchor=west] at ( 8.9,-3.0) {point~(a) of Article~6(1) of~the~\ldots};

    \draw[rel] (src) to[out=50,in=180]  (7.0, 3.0);
    \draw[rel] (src) to[out=25,in=180]  (7.0, 1.0);
    \draw[rel] (src) to[out=-25,in=180] (7.0,-1.0);
    \draw[rel] (src) to[out=-50,in=180] (7.0,-3.0);

    \node[note,anchor=north west] at (8.9,-3.6) {\translation{the one register that puts the deepest level first,\\%
        and the one in which \ldots{} does not stand at the end}%
        {het enige register dat het diepste niveau vooropzet,\\%
        en het enige waarin \ldots{} niet achteraan staat}};
    \node[note,anchor=south west] at (8.9, 3.5) {\translation{\ldots{} is the name of the instrument}%
        {\ldots{} is de naam van het instrument}};

    \node[check] (chk) at (4.6,-4.6) {source-checks};
    \draw[rel] (src) -- node[lbl,left]{\translation{word for word}{woord voor woord}} (chk);
\end{tikzpicture}
\end{adjustbox}

\noindent
\translation{%
    German inflects the noun a connective governs\,---\,\emph{des Vertrags}, \emph{des
    Beschlusses}\,---\,so no rule builds the phrase from a subject in the nominative.
    \file{de-example} names two documents, one of which carries a wording of its own and one of
    which does not, and refers to the one without it twice. That is what makes a single number
    enough: three references over two artifacts, and exactly one warning.%
}{%
    Het Duits verbuigt het woord dat een voegwoord regeert\,---\,\emph{des Vertrags}, \emph{des
    Beschlusses}\,---\,dus geen regel bouwt de wending uit een onderwerp in de nominatief.
    \file{de-example} noemt twee documenten, waarvan er één een eigen verwoording draagt en de
    ander niet, en verwijst twee keer naar degene zonder. Dat is wat één getal genoeg maakt:
    drie verwijzingen over twee artefacten, en precies één waarschuwing.%
}

\begin{adjustbox}{width=\textwidth}
\begin{tikzpicture}[diagram]
    \node[doc] (de)   at (0,0) {de-example};
    \node[doc] (ohne) at (6.0, 1.8) {example2-nl};
    \node[doc] (mit)  at (6.0,-1.8) {example1-nl};

    \draw[rel] (de) to[bend left=8] node[lbl]%
        {\cmd{\refdocument}\texttt{[ohne-]}\\\texttt{subject=Beispielurkunde}} (ohne);
    \draw[rel] (de) to[bend right=8] node[lbl]%
        {\cmd{\refdocument}\texttt{[mit-]}\\\texttt{ref label=der Musterurkunde}} (mit);

    \node[note,anchor=west] at (7.8, 1.8) {\translation{named twice with \cmd{\Aref}}%
        {twee keer genoemd met \cmd{\Aref}}};
    \node[note,anchor=west] at (7.8,-1.8) {\translation{named once with \cmd{\Aref}}%
        {één keer genoemd met \cmd{\Aref}}};
    \node[warn,anchor=west] at (7.8, 0.6) {\translation{one warning: German inflects the noun\\%
        a connective governs, so the phrase cannot\\be built from a subject}%
        {één waarschuwing: het Duits verbuigt het woord\\%
        dat een voegwoord regeert, dus de wending is\\niet uit een onderwerp te bouwen}};
    \node[ok,anchor=west] at (7.8,-2.8) {\translation{silent: the phrase is given}%
        {stil: de verwoording staat er}};

    \node[check] (chk) at (0,-3.4) {lang-checks};
    \draw[rel] (de) -- (chk);
    \node[note,anchor=west] at (1.6,-3.4) {\translation{exactly one, over two artifacts and three references}%
        {precies één, over twee artefacten en drie verwijzingen}};
\end{tikzpicture}
\end{adjustbox}

\subsection{\translation{What the suite reads back}{Wat de suite naleest}}\label{sec:checks}
\translation{%
    Every engine suite ends in ten sets of assertions, each of which prints what it counted and
    stops the build when it is wrong. They are written the other way round from a test that
    checks a result: each of them exists because something once failed without failing, and its
    job is to make that same silence audible next time. Every one of them has been broken on
    purpose to see it bite\,---\,an assertion that has never failed has not established
    anything yet.%
}{%
    Iedere engine-suite eindigt in tien reeksen controles, die elk opschrijven wat ze geteld
    hebben en de bouw stoppen zodra het niet klopt. Ze zijn andersom geschreven dan een test die
    een uitkomst nakijkt: ieder van hen bestaat omdat er ooit iets faalde zonder te falen, en
    zijn taak is om diezelfde stilte de volgende keer hoorbaar te maken. Alle tien zijn expres
    gebroken om te zien dat ze bijten\,---\,een controle die nooit gefaald heeft, heeft nog
    niets vastgesteld.%
}
\begin{labeling}{\texttt{source-checks}}
    \addtokomafont{labelinglabel}{\ttfamily}
    \item[lang-checks] \translation{%
        requires exactly one warning over the two documents \file{de-example} names, and refers to
        one of them twice. That single number carries three claims at once: the one without a
        wording of its own says so, the one with a wording does not, and the one that does say so
        says it once however often it is named. A warning that fires per reference would drown its
        own log.%
    }{%
        eist precies één waarschuwing over de twee documenten die \file{de-example} noemt, en
        verwijst naar één daarvan twee keer. Dat ene getal draagt drie beweringen tegelijk: degene
        zonder eigen verwoording zegt dat, degene met een verwoording niet, en wie het zegt zegt het
        één keer hoe vaak hij ook genoemd wordt. Een waarschuwing per verwijzing zou zijn eigen log
        verzuipen.%
    }
    \item[ref-checks] \translation{%
        counts the references that resolved to nothing and the labels that were defined twice,
        over every document rather than only the one being worked on: a label with a space in it
        led nowhere while every document then in the suite used labels without one.%
    }{%
        telt de verwijzingen die nergens heen wezen en de labels die twee keer gedefinieerd
        werden, over ieder document en niet alleen over dat waaraan gewerkt wordt: een label met
        een spatie erin wees nergens heen terwijl ieder document dat toen in de suite zat labels
        zonder spatie gebruikte.%
    }
    \item[log-checks] \translation{%
        allows the package no warning at all. What this bundle says about a document it has no
        reason to complain about is a defect, and a warning nobody reads is a warning that was
        not written.%
    }{%
        staat het pakket geen enkele waarschuwing toe. Wat dit pakket zegt over een document
        waarover het niets te klagen heeft is een defect, en een waarschuwing die niemand leest
        is een waarschuwing die niet geschreven is.%
    }
    \item[attach-checks] \translation{%
        reads the annotation of \option{attachmentlink=annotation} out of the PDF file: that it is
        placed and registered on the page, that it carries the file and an appearance, that no go-to
        link survived beside it, and that it sits in an \texttt{Annot} structure element as the
        reference beside it sits in a \texttt{Link} one. That last pair is asserted here rather than
        left to veraPDF because the validator this suite is pinned to does not report the missing
        element and an older one did: the object is the evidence and the verdict is not.%
    }{%
        leest de annotatie van \option{attachmentlink=annotation} uit het PDF-bestand: dat hij
        geplaatst en op de pagina geregistreerd is, dat hij het bestand en een verschijning draagt,
        dat er geen go-to-link naast overleefd heeft, en dat hij in een
        \texttt{Annot}-structuurelement zit zoals de verwijzing ernaast in een \texttt{Link}-element
        zit. Dat laatste paar wordt hier gecontroleerd en niet aan veraPDF overgelaten, want de
        validator waarop deze suite gepind is meldt het ontbrekende element niet en een oudere deed
        dat wel: het object is het bewijs en het oordeel niet.%
    }
    \item[md-checks] \translation{%
        reads the intermediate file the Markdown conversion writes and requires that no raw
        \TeX{} survived in it, and that the syntax extension of \zcref{sec:syntax} was found. A
        missing extension leaves an identifier standing as text, which reads as a typing error
        and not as a broken build.%
    }{%
        leest het tussenbestand dat de Markdown-omzetting schrijft en eist dat er geen rauwe
        \TeX{} in overleefde, en dat de syntaxuitbreiding van \zcref{sec:syntax} gevonden is. Een
        ontbrekende uitbreiding laat een identifier als tekst staan, wat leest als een typefout
        en niet als een kapotte bouw.%
    }
    \item[sign-checks] \translation{%
        counts the signature annotations in the PDF file itself. The box under a field is drawn
        by \TeX{} and shows up whatever happens; what makes it a field is invisible on paper and
        only shows when somebody tries to sign.%
    }{%
        telt de handtekeningannotaties in het PDF-bestand zelf. Het kader onder een veld wordt
        door \TeX{} getekend en komt er hoe dan ook uit; wat het tot een veld maakt is op papier
        onzichtbaar en blijkt pas wanneer iemand probeert te tekenen.%
    }
    \item[source-checks] \translation{%
        reads back what the reader of bib files read, field by field, and the wording of
        forty citations word for word. A citation in the wrong register fails nowhere; it
        simply stands there wrong. The same target then typesets the two documents that have to
        fail and stops if either of them succeeded.%
    }{%
        leest terug wat de lezer van bib-bestanden gelezen heeft, veld voor veld, en de
        formulering van veertig aanhalingen woord voor woord. Een aanhaling in het verkeerde
        register faalt nergens; hij staat er gewoon verkeerd. Datzelfde doel zet daarna de twee
        documenten die moeten falen en stopt zodra een van beide toch slaagde.%
    }
    \item[index-checks] \translation{%
        reads back that the indexed route was taken, that both definitions were written to the file
        \texttt{makeindex} reads, and that they came back in the other order than they were declared
        in\,---\,which is the only evidence in the result that the program between the runs did
        anything. The glossary files are removed before the run: measured, with the
        \texttt{makeglossaries} step taken out on purpose the checks still passed, because the sorted
        file of the previous build was still there.%
    }{%
        leest terug dat de geïndexeerde route genomen is, dat beide definities in het bestand
        geschreven zijn dat \texttt{makeindex} leest, en dat ze in een andere volgorde terugkomen dan
        waarin ze gedeclareerd zijn\,---\,het enige bewijs in het resultaat dat het programma tussen
        de draaien iets gedaan heeft. De woordenlijstbestanden worden vóór de draai weggegooid: gemeten,
        met de \texttt{makeglossaries}-stap er expres uit slaagden de controles nog steeds, omdat het
        gesorteerde bestand van de vorige bouw er nog lag.%
    }
    \item[date-checks] \translation{%
        reads back the two things a document can get wrong about the date a citation speaks as
        of: saying nothing at all, and outrunning the data of the source it cites. The second is
        counted rather than only found, since it is meant to be said once per source and the
        example cites the same one twice.%
    }{%
        leest de twee dingen terug die een document mis kan hebben met de datum waarop een
        aanhaling spreekt: er niets over zeggen, en de gegevens van de aangehaalde bron
        voorbijlopen. De tweede wordt geteld en niet alleen gevonden, want hij hoort één keer per
        bron te komen en het voorbeeld haalt dezelfde bron twee keer aan.%
    }
    \item[html-checks] \translation{%
        counts what has to survive the conversion of \zcref{sec:html}: sections, headings,
        paragraph items, definitions of both routes and the two list styles. Those disappear
        without an error, since a lost configuration produces plain text and not a failure. It
        also reads back that the document which names no language still names none, by the words
        it uses: that document is only worth converting while it is language-less, and its
        structure would survive a language being added to it.%
    }{%
        telt wat de omzetting van \zcref{sec:html} moet overleven: secties, koppen, leden,
        definities uit beide routes en de twee lijststijlen. Die verdwijnen zonder foutmelding,
        want een verloren configuratie levert platte tekst op en geen fout. Hij leest ook terug
        dat het document dat geen taal noemt er nog steeds geen noemt, aan de woorden die het
        gebruikt: dat document is alleen het omzetten waard zolang het taalloos is, en zijn
        structuur zou een toegevoegde taal overleven.%
    }
\end{labeling}

\subsection{\translation{PDF conformance}{PDF-conformiteit}}\label{sec:conformance}
\translation{%
    A regulatory document tends to be archived, so it is worth knowing which PDF standards it
    can carry.
    The documents above are typeset once more for every case below, with nothing changed but a
    \cmd{\DocumentMetadata} declared in front of the document on the commandline, and veraPDF
    decides.
    The \texttt{expected} column is what this package claims: \texttt{pass} has to validate,
    \texttt{xfail} is known to fail on a defect described below, and \texttt{fail} is a case
    that \emph{has} to fail\,---\,without one, the harness cannot show that it measures
    anything at all.%
}{%
    Een regulatoir document wordt doorgaans gearchiveerd, dus is het de moeite waard te weten
    welke PDF-standaarden het kan dragen.
    De documenten hierboven worden voor ieder geval hieronder nog een keer gezet, waarbij er
    niets verandert behalve een \cmd{\DocumentMetadata} die op de commandline vóór het document
    gedeclareerd wordt, en veraPDF velt het oordeel.
    De kolom \texttt{expected} is wat dit pakket claimt: \texttt{pass} moet valideren,
    \texttt{xfail} faalt op een defect dat hieronder beschreven wordt, en \texttt{fail} is een
    geval dat juist \emph{moet} falen\,---\,zonder zo'n geval kan het harnas niet aantonen dat
    het überhaupt iets meet.%
}

\begin{center}
    \begin{tabular}{@{}lllll@{}}
        \textbf{\translation{Case}{Geval}} & \textbf{\translation{Document}{Document}} &
        \textbf{\translation{Standard}{Standaard}} & \textbf{expected} & \textbf{\translation{Result}{Uitkomst}} \\
        \hline
        \input{conformance}
    \end{tabular}
\end{center}
\noindent
\translation{Measured with veraPDF}{Gemeten met veraPDF} \conformanceversion,
\translation{with the validator pinned by digest}{met de validator gepind op digest}%
\footnote{\texttt{\conformanceimagetext}}.\\

\noindent
\translation{%
    One claim a document written with this package cannot make.
    \textbf{PDF/A-1} forbids embedded files outright, so any document that attaches something is
    out of reach.

    \textbf{PDF/A-2a} and \textbf{PDF/A-4} stood here as a second, and they do not belong there.
    Tagging hangs a pair of HTML files on the catalog as associated files, and both standards
    require every embedded file to be a PDF/A itself\,---\,but those two files are the whole
    obstacle, and \package{tagpdf} has a key that leaves them out:
    \cmd{\tagpdfsetup}\texttt{\{attach-css=false\}}. The table carries both halves as two pairs
    of cases that differ in nothing else, on a document that attaches nothing of its own:
    without the key PDF/A-2a fails on rule 6.8-5 and PDF/A-4 on rule 6.9-3, with it both pass,
    and \textbf{PDF/UA-1} passes either way. What is given up is what those two files are
    for\,---\,styling hints for lists and for the alignment of MathML\,---\,and not the
    structure a reader is read by.

    The difference between the profiles is measured the same way: the same document with the
    same attachment appears twice in the table, failing PDF/A-2b on rule 6.8-5 and passing
    PDF/A-4f. Anything that is not a PDF therefore decides the profile, and it is worth knowing
    which one before a document is issued rather than after.%
}{%
    Eén claim die een document geschreven met dit pakket niet kan maken.
    \textbf{PDF/A-1} verbiedt ingesloten bestanden categorisch, dus ieder document dat iets
    bijvoegt valt af.

    \textbf{PDF/A-2a} en \textbf{PDF/A-4} stonden hier als tweede, en daar horen ze niet.
    Taggen hangt een tweetal HTML-bestanden als associated files aan de catalog, en beide
    standaarden eisen dat ieder ingesloten bestand zelf een PDF/A is\,---\,maar die twee
    bestanden zíjn de hele hindernis, en \package{tagpdf} heeft een sleutel die ze weglaat:
    \cmd{\tagpdfsetup}\texttt{\{attach-css=false\}}. De tabel draagt beide helften als twee paren
    gevallen die in niets anders verschillen, op een document dat zelf niets bijvoegt: zonder de
    sleutel faalt PDF/A-2a op rule 6.8-5 en PDF/A-4 op rule 6.9-3, mét hem slagen ze allebei, en
    \textbf{PDF/UA-1} slaagt hoe dan ook. Wat je inlevert is waar die twee bestanden voor
    zijn\,---\,opmaakhints voor lijsten en voor de uitlijning van MathML\,---\,en niet de
    structuur waarop een lezer wordt voorgelezen.

    Het verschil tussen de profielen is op dezelfde manier gemeten: hetzelfde document met dezelfde
    bijlage staat twee keer in de tabel, waar het PDF/A-2b faalt op regel 6.8-5 en PDF/A-4f
    haalt. Alles wat geen PDF is bepaalt dus het profiel, en dat is de moeite waard te weten
    vóórdat een document uitgegeven wordt in plaats van erna.%
}\\

\noindent
\translation{%
    One case is \texttt{xfail}. It fails
    ISO 19005-3 rule 6.8-4 on a file specification for the external
    document: it carries \texttt{/AFRelationship /Unspecified}, has no \texttt{/EF} and is not
    listed in \texttt{/AF}. It is written for the hyperlink to that document, by the PDF management
    of \LaTeX{} and not by this package, so PDF/A-3 stays out of reach for a document that refers to
    the provisions of another one until that is settled upstream. \zcref[S]{sec:extern} says so where a
    reader meets the feature.

    The second document reached PDF/A-3a when the citation of a definition that lives elsewhere
    stopped being a hyperlink to that document. That link went to an anchor which is not in this
    file, so it led nowhere in any case; withdrawing it took the file specification with it.
    Measured on the two documents as they stand: \file{example1-nl} carries eleven \texttt{/GoToR}
    actions and the one specification without an \texttt{/EF}; \file{example2-nl} carries no
    \texttt{/GoToR} at all, and its one specification for the document it attaches has an
    \texttt{/EF} and \texttt{/AFRelationship /Source}.%
}{%
    Eén geval staat op \texttt{xfail}. Het faalt op regel 6.8-4 van ISO 19005-3, op een
    bestandsspecificatie voor het externe document: die draagt \texttt{/AFRelationship /Unspecified},
    heeft geen \texttt{/EF} en staat niet in \texttt{/AF}. Zij wordt geschreven voor de hyperlink naar
    dat document, door de PDF-administratie van \LaTeX{} en niet door dit pakket, dus PDF/A-3 blijft
    buiten bereik voor een document dat naar de bepalingen van een ander verwijst, tot dat verderop
    opgelost is. \zcref[S]{sec:extern} zegt dat waar een lezer de functie tegenkomt.

    Het tweede document haalde PDF/A-3a op het moment dat de aanhaling van een definitie die elders
    staat geen hyperlink naar dat document meer werd. Die link wees naar een anker dat niet in dit
    bestand staat, dus hij ging sowieso nergens heen; hem intrekken nam de bestandsspecificatie mee.
    Gemeten aan de twee documenten zoals ze er staan: \file{example1-nl} draagt elf
    \texttt{/GoToR}-acties en die ene specificatie zonder \texttt{/EF}; \file{example2-nl} draagt geen
    enkele \texttt{/GoToR}, en zijn ene specificatie voor het document dat het bijvoegt heeft wél een
    \texttt{/EF} en \texttt{/AFRelationship /Source}.%
}
\clearpage

\subsection{\translation{The test files}{De testbestanden}}\label{sec:example}
\translation{%
    The sources of the examples the suite builds, listed here and attached to this manual as PDF files.
    They are one set of fixtures and both manuals print the same one, so the ones with a text of their own
    are in Dutch either way; \file{example1-en.tex} and \file{example2-en.tex} are the English drivers over
    the same bodies.%
}{%
    De bronnen van de voorbeelden die de suite bouwt, hier afgedrukt en als PDF-bestand aan deze
    handleiding gehecht. Het is één stel fixtures en beide handleidingen drukken hetzelfde stel af, dus
    die met een eigen tekst staan hoe dan ook in het Nederlands; \file{example1-en.tex} en
    \file{example2-en.tex} zijn de Engelse drivers over dezelfde inhoud.%
}
\lstset{numbers=left,frame=single}
\lstinputlisting[style=tex,numbers=left,caption={example1.tex},label={code:example1}]{example1.tex}
\exampleresult{example1-\translation{en}{nl}}

\lstinputlisting[style=tex,numbers=left,caption={example2.tex},label={code:example2}]{example2.tex}
\exampleresult{example2-\translation{en}{nl}}\clearpage

\lstinputlisting[style=tex,numbers=left,caption={md-example.tex},label={code:md-example}]{md-example.tex}
\exampleresult{md-example}\clearpage

\lstinputlisting[style=md,numbers=left,caption={example.md},label={code:example-md}]{example.md}
\exampleresult{md-example}\clearpage

\lstinputlisting[style=bib,numbers=left,caption={example1.bib}]{example1.bib}
\exampleresult{example1-\translation{en}{nl}}

\lstinputlisting[style=bib,numbers=left,caption={example2.bib}]{example2.bib}
\exampleresult{example2-\translation{en}{nl}}\clearpage

\lstinputlisting[style=tex,numbers=left,caption={sign-example.tex},label={code:sign-example}]{sign-example.tex}
\exampleresult{sign-example}\clearpage

\lstinputlisting[style=tex,numbers=left,caption={source-example.tex},label={code:source-example}]{source-example.tex}
\exampleresult{source-example}

\lstinputlisting[style=bib,numbers=left,caption={sources.bib}]{sources.bib}
\exampleresult{source-example}
\clearpage

\section{\translation{Implementation}{Implementatie}}\label{sec:impl}
\translation{%
    The seven modules of the bundle are documented below, in the order they are loaded: the six that
    \package{regulatory} loads, and \package{regulatory-md}, which joins them as soon as \package{markdown}
    is loaded. The Markdown syntax extension and the \package{tex4ht} configuration follow, which are not
    modules but are generated from sources of their own all the same.
    Every module is written as a \texttt{.dtx} file, from which both this chapter and the module itself are
    generated. The commentary, like the code, is in English.%
}{%
    De zeven modules van de bundel worden hieronder toegelicht, in de volgorde waarin ze geladen worden: de
    zes die \package{regulatory} laadt, en \package{regulatory-md}, die zich daarbij voegt zodra
    \package{markdown} geladen is. Daarna volgen de Markdown-syntaxuitbreiding en de
    \package{tex4ht}-configuratie, die geen modules zijn maar evengoed uit een eigen bron gegenereerd
    worden.
    Iedere module is geschreven als een \texttt{.dtx} bestand, waaruit zowel dit hoofdstuk als de module
    zelf gegenereerd wordt.
    De toelichting is, net als de broncode, in het Engels gesteld.%
}

\DocInput{regulatory-struct.dtx}
\DocInput{regulatory-defs.dtx}
\DocInput{regulatory-ref.dtx}
\DocInput{regulatory-attachments.dtx}
\DocInput{regulatory-md.dtx}
\DocInput{regulatory-sign.dtx}
\DocInput{regulatory-sources.dtx}
% The syntax extension is read by markdown rather than by TeX, so it is a Lua
% source of its own, documented from its own comments with comment2tex.
\includelua{../src/regulatory-syntax.lua}
% The tex4ht configuration is no package, but it is generated from a source of
% its own all the same, so it is documented with the modules.
\DocInput{regulatory-html.dtx}

\clearpage
\IndexPrologue{%
    \section*{\translation{Index}{Register}}%
    \addcontentsline{toc}{section}{\translation{Index}{Register}}%
    \markboth{\translation{Index}{Register}}{\translation{Index}{Register}}%
    \translation{%
        Every command and environment of this bundle, with the page it is described on in
        \emph{italics} and the page it is defined on \underline{underlined}. Which of the three
        kinds of name a command is\,---\,public, extension or internal\,---\,is settled in
        \zcref{sec:api}.%
    }{%
        Ieder commando en iedere omgeving van deze bundel, met de bladzijde waarop hij
        beschreven wordt \emph{cursief} en de bladzijde waarop hij gedefinieerd wordt
        \underline{onderstreept}. Welke van de drie soorten namen een commando is\,---\,publiek,
        uitbreiding of intern\,---\,staat in \zcref{sec:api}.%
    }%
}
\PrintIndex
