summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/cleveref
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/cleveref
Initial commit
Diffstat (limited to 'macros/latex/contrib/cleveref')
-rw-r--r--macros/latex/contrib/cleveref/README46
-rw-r--r--macros/latex/contrib/cleveref/cleveref.dtx13406
-rw-r--r--macros/latex/contrib/cleveref/cleveref.ins34
-rw-r--r--macros/latex/contrib/cleveref/cleveref.pdfbin0 -> 443693 bytes
4 files changed, 13486 insertions, 0 deletions
diff --git a/macros/latex/contrib/cleveref/README b/macros/latex/contrib/cleveref/README
new file mode 100644
index 0000000000..fa1810d2b3
--- /dev/null
+++ b/macros/latex/contrib/cleveref/README
@@ -0,0 +1,46 @@
+cleveref, a LaTeX package for intelligent cross-referencing
+Copyright (C) 2007--2018 Toby Cubitt
+
+Files:
+cleveref.ins Batch file, run through LaTeX
+cleveref.dtx Docstrip archive, run through LaTeX
+cleveref.sty LaTeX package, generated by cleveref.ins from cleveref.dtx
+cleveref.dvi Package documentation, generated from cleveref.dtx
+cleveref.pdf Package documentation; can also be generated from cleveref.dtx
+README This file
+
+E-mail: toby-cleveref@dr-qubit.org
+Address: Department of Computer Science, UCL, United Kingdom
+
+This material is subject to the LaTeX Project Public License. See
+http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the
+details of that license.
+
+
+Description:
+------------
+The cleveref package enhances LaTeX's cross-referencing features, allowing the
+format of cross-references to be determined automatically according to the
+"type" of cross-reference (equation, section, etc.) and the context in which
+the cross-reference is used. The formatting for each cross-reference type can
+be fully customised in the preamble of your document. In addition, cleveref
+can type-set cross-references to lists of multiple labels, automatically
+formatting them according to their types, sorting them, and compressing
+sequences of numerically consecutive labels. Again, the multiple-reference
+formatting is fully customisable. Though a number of other packages provide
+similar features, all have certain deficiencies which cleveref attempts to
+overcome.
+
+Using cleveref is easy. Basically, wherever you would previously have used
+\ref, you can use \cref instead. (Except at the beginning of a sentence, where
+you should use \Cref.) You no longer need to put the name of the thing you're
+referencing in front of the \cref command, because cleveref will sort that out
+for you: i.e. use "\cref{eq1}" instead of "eq.~(\ref{eq1})". If you want to
+refer to a range of labels, use the \crefrange command: "\crefrange{eq1}{eq5}"
+produces "eqs.~(1) to~(5)". Finally, if you want to refer to multiple things
+at once, you can now combine them all into one cross-reference and leave
+cleveref to sort it out: e.g. "\cref{eq2,eq1,eq3,eq5,thm2,def1}" produces:
+"eqs.~(1) to~(3) and~(5), theorem~5, and definition~1".
+
+Cleveref has various other useful features. For details, see the package
+documentation.
diff --git a/macros/latex/contrib/cleveref/cleveref.dtx b/macros/latex/contrib/cleveref/cleveref.dtx
new file mode 100644
index 0000000000..05370a49bb
--- /dev/null
+++ b/macros/latex/contrib/cleveref/cleveref.dtx
@@ -0,0 +1,13406 @@
+\def\packagedate{2018/03/27}
+\def\packageversion{0.21.4}
+% \iffalse meta-comment
+%
+% Package 'cleveref' to use with LaTeX2e
+% Copyright 2006--2018 Toby Cubitt
+%
+% Written and maintained by Toby Cubitt
+%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.2
+%% 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.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%
+% Please send bug reports and suggestions to toby-cleveref@dr-qubit.org
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{cleveref}
+%<package> [\packagedate\space v\packageversion\space Intelligent cross-referencing]
+%
+%<*driver>
+\documentclass{ltxdoc}
+%\documentclass[draft]{ltxdoc}
+\usepackage{url}
+\usepackage{pifont} % FIXME: find nicer line-continuation symbol than \ding{229}
+\usepackage[colorlinks=true,linktocpage=true]{hyperref}
+\usepackage[capitalise]{cleveref}
+\DisableCrossrefs
+\CodelineIndex
+\RecordChanges
+\setcounter{IndexColumns}{2}
+%%\newcommand\package[1]{\texttt{#1.sty}}
+\newcommand\package{\texttt}
+\newcommand\file{\texttt}
+\newcommand\option{\texttt}
+\begin{document}
+ \DocInput{cleveref.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{19764}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \changes{v0.01}{2006/06/29}{Initial version}
+% \changes{v0.02}{2007/04/18}{Complete rewrite}
+% \changes{v0.03}{2007/04/26}{Added reference ranges}
+% \changes{v0.04}{2007/05/26}{Renamed "cleveref" -- first public release}
+% \changes{v0.05}{2007/05/31}{Added \option{poorman} option}
+% \changes{v0.06}{2007/06/11}{\option{poorman} no longer writes extra
+% .tmp file}
+% \changes{v0.07}{2007/06/21}{Allow prevention of reference range
+% collapsing}
+% \changes{v0.08}{2007/07/10}%
+% {Made referencing commands robust, improved default formats, made
+% starred versions of referencing commands for hyperref, allowed
+% multiple consecutive empty references in list to prevent range
+% collapsing, and fixed bugs. Phew.}
+% \changes{v0.08.1}{2007/08/08}{Bug fixes.}
+% \changes{v0.09}{2007/10/29}%
+% {Added an extra conjunction and format component, used when a list
+% only contains a single pair of references or reference
+% sub-lists. Formats are now constructed from customisable
+% components, unless overridden using the old format definition
+% commands.}
+% \changes{v0.10}{2007/10/30}%
+% {Allow optional argument to \textbackslash{}label to override
+% reference type. Removed \option{hyperref} and \option{ntheorem}
+% options; support for these and \package{amsmath} is enabled
+% automatically if those packages are loaded.}
+% \changes{v0.11}{2007/11/21}{Made referencing aware of appendices.}
+% \changes{v0.11.1}{2007/11/29}{Bug fixes.}
+% \changes{v0.12}{2009/02/11}{Restore working \textbackslash{}ref* when
+% hyperref is loaded -- first release mirrored on www.dr-qubit.org}
+% \changes{v0.13}{2009/04/17}{Finally implemented \option{sort} and
+% \option{compress} package options. Support \package{amsmath}
+% \textbackslash{}tag command. Added \package{babel} support for
+% English, German and French. Added \package{varioref} support.}
+% \changes{v0.13.1}{2009/07/01}{Bug fix to \textbackslash{}cref@get*
+% commands to allow fragile and non-expandable commands in label tags.}
+% \changes{v0.13.2}{2009/07/26}{Added\newline
+% \textbackslash{}crefrangepreconjunction and
+% \textbackslash{}crefrangepostconjunction commands, needed by some
+% languages (such as Italian). Added \package{babel} support for
+% Spanish and Italian. Added notes about \package{memoir}
+% (in)compatibility.}
+% \changes{v0.14}{2009/08/07}{Fixed bug that caused labels containing
+% components with values of 10 or higher to be sorted
+% incorrectly. Fixed \textbackslash{}Cref to no longer capitalise all
+% cross-reference names in a multi-reference, just the first one. Added
+% \option{capitalise} option to force capitalisation everywhere.}
+% \changes{v0.14.1}{2009/08/18}{Added support for \package{amsmath}'s
+% subequations environment}
+% \changes{v0.14.2}{2009/09/22}{Fixed subequations sorting bug. Fixed bug
+% in \option{poorman} when used without babel. \option{capitalise}
+% option no longer uses \textbackslash{}Cref variant everywhere; it now
+% redefines the \textbackslash{}cref variants instead.}
+% \changes{v0.14.3}{2009/10/17}{Bug-fix in \textbackslash{}appendix
+% code.}
+% \changes{v0.15}{2009/11/26}{Added \package{amsthm} support, contributed
+% by Michael Ummels. Added \textbackslash{}leavevmode before
+% \textbackslash{}begingroup in \textbackslash{}@cref to avoid subtle
+% bug that caused page count to be reset if the output routine was
+% triggered within \textbackslash{}@cref.}
+% \changes{v0.15.1}{2009/12/02}{Fixed regression introduced in v0.13 in
+% non-\package{hyperref} \option{poorman} code. Fixed bug in
+% \package{varioref} support that caused \textbackslash{}vref to print
+% \textbackslash{}reftextcurrent string for references on the current
+% page, breaking \package{varioref} backwards-compatibility. Added
+% \package{babel} support for Dutch.}
+% \changes{v0.15.2}{2009/12/07}{Fixed bug in \textbackslash{}appendix
+% that produced badly formed prefix data for labels that aren't reset
+% by other counters (e.g.\ tables and figures in most document
+% classes). Fixed bug in \package{hyperref} \option{poorman} code that
+% caused all label names to be lower-cased in the sed script. Fixed
+% spacing bugs in the \package{cleveref} versions of the
+% \package{varioref} commands.}
+% \changes{v0.15.3}{2009/12/11}{Fixed bug in \package{varioref} support.
+% Changed \option{poorman} \textbackslash{}usepackage sed substitution
+% rule to use POSIX regexp syntax.}
+% \changes{v0.16}{2010/04/19}{Major changes to the low-level
+% implementation! \package{cleveref} now stores the extra information
+% it requires in its own \textbackslash{}cref@currentlabel and its own
+% parallel series of labels in the aux file, staying out of the way of
+% the standard cross-reference mechanism and \textbackslash{}ref
+% command. Also added \textbackslash{}namecref and
+% \textbackslash{}nameCref commands, fixed a serious bug in the
+% \package{amsmath} support affecting spacing of multi-line equation
+% environments, added support for footnotes, and made
+% \textbackslash{}newtheorem automatically define the singular form of
+% the cross-reference name for new theorem-like environments.}
+% \changes{v0.16.1}{2010/04/30}{Fixed bugs in \package{amsmath} spacing
+% fix and \package{amsthm} support.}
+% \changes{v0.16.2}{2010/05/12}{Fixed bugs in \textbackslash{}appendix
+% version used with \package{hyperref}, and in \textbackslash{}footnote
+% support.}
+% \changes{v0.16.3}{2010/05/25}{Added missing \textbackslash{}namecrefs
+% and \textbackslash{}nameCrefs commands. Fixed bug in
+% \textbackslash{}AtBeginDocument code used to define
+% \textbackslash{}cref<x>groupconjunction macros. Added missing
+% \textbackslash{}crefname definitions for subsection, subsubsection
+% etc. in terms of those for section, so that \textbackslash{}namecref
+% works for those (and also switching language in the middle of a
+% document). Added \package{babel} support for Russian and Ukrainian.
+% Fixed bug in \textbackslash{}refstepcounter@optarg.}
+% \changes{v0.17}{2010/06/07}{Fixed bug in non-\package{hyperref}
+% version of \textbackslash{}refstepcounter. Added
+% \textbackslash{}crefalias command for aliasing a counter to a
+% different cross-reference type. Added support for \package{algorithm}
+% package. Improved support for \package{subfig} package. Added support
+% for \package{listings} package. Fixed bugs in \package{amsmath}
+% \textbackslash{}tag command when used with \option{sort} option, and
+% in the \package{amsmath} multline environment's support for the
+% optional argument to \textbackslash{}label.}
+% \changes{v0.17.1}{2010/06/24}{Modified \textbackslash{}@crefname macro
+% so that it no longer makes global definitions, to fix support for
+% \package{babel}'s \textbackslash{}otherlanguage and
+% \textbackslash{}foreignlanguage commands. Fixed typos in
+% \option{poorman} \textbackslash{}foreignlanguage code. Fixed bug in
+% the \package{amsmath} multline environment's support for the optional
+% argument to \textbackslash{}label\dots{} again. Added
+% \textbackslash{}labelcref command.}
+% \changes{v0.17.2}{2010/07/24}{Removed unneeded argument from
+% \textbackslash{}@footnotetext redefinition, to improve compatibility
+% with other packages that redefine footnotes.}
+% \changes{v0.17.3}{2010/08/30}{Added missing default format definitions
+% for ``part''. Fixed bad active character interaction between
+% \package{cleveref} and some \package{babel} languages (in particular
+% Spanish). Fixed \package{hyperref} support code so
+% that it is only enabled if \package{hyperref} was loaded with the
+% \option{implicit} option set to \option{true} (the default).}
+% \changes{v0.17.4}{2010/09/04}{Added automatic support for
+% \package{aliascnt} counters whose parent counter gets reset. Fixed
+% serious bug in the test for \package{hyperref}'s \option{implicit}
+% options.}
+% \changes{v0.17.5}{2010/09/15}{Fixed bug that broke compilation of
+% documents that didn't use \package{hyperref}, because
+% \textbackslash{}if@cref@hyperrefloaded was not defined.}
+% \changes{v0.17.6}{2011/01/05}{Added \package{babel} support for
+% Norwegian. Replaced ``appendice'' with ``annexe'' in French default
+% cross-reference names, to match \package{babel} names. Replaced
+% ``Linie'' with ``Zeile'' in the German default cross-reference names.
+% Added \textbackslash{}lcnamecref and \textbackslash{}lcnamecrefs
+% commands to force lowercase reference names, useful with the
+% \option{capitalise} option.}
+% \changes{v0.17.7}{2011/01/10}{Fixed \textbackslash{}crefname to work
+% with empty reference names.}
+% \changes{v0.17.8}{2011/01/19}{Fixed automatic
+% \textbackslash{}newtheorem name definitions to work with empty
+% names.}
+% \changes{v0.17.9}{2011/03/22}{Added support for \package{algorithm2e}
+% package. Added missing \textbackslash{}crefname definitions for
+% `listing'. Changed case used in plural forms in Norwegian. Fixed bug
+% in redefinition of \package{amsmath} \textbackslash{}tag command.
+% Added \package{babel} support for Danish. Renamed internal
+% \textbackslash{}@result macro to \textbackslash{}cref@result to avoid
+% conflict with \package{tikz-qtree} package. Also renamed internal
+% \textbackslash{}@temp<x> macros to \textbackslash{}@temp<x>, which
+% seems to be more standard for temporary macros, to mitigate against
+% similar (though less likely) conflicts, and also save a minuscule
+% amount of \TeX{} memory.}
+% \changes{v0.17.10}{2011/04/16}{Fixed bug in
+% \textbackslash{}@cref@stack@insert caused by a temporary macro name
+% clash.}
+% \changes{v0.18}{2011/10/24}{Implemented clever page referencing via
+% \textbackslash{}cpageref et al.\ commands, which supports
+% multi-references, including sorting and page range collapsing.
+% Improved \package{varioref} support, combining \package{varioref} and
+% (new) \package{cleveref} page-referencing features. Removed
+% \option{legacyvarioref} option. Fixed bug in
+% \textbackslash{}newtheorem support. Documented \package{mathtools}
+% \option{showonlyrefs} incompatibility. Fixed some of the Spanish and
+% German translations. Implemented \option{nameinlink} option, to
+% include cross-reference names in hyperlinks when using
+% \package{hyperref}. Implemented \option{noabbrev} option to disable
+% all use of abbreviations in default cross-reference names. Added
+% support for a \file{cleveref.cfg} file, which is loaded after the
+% rest of \package{cleveref} has loaded. Made cross-references to
+% sections work correctly when using the \package{revtex4} or
+% \package{revtex4-1} docclasses. Fixed \package{subfig} and
+% \package{caption} compatibility with optional argument to
+% \textbackslash{}label.}
+% \changes{v0.18.1}{2011/12/24}{Fixed compatibility with newer versions
+% of \package{caption} package.}
+% \changes{v0.18.2}{2012/01/17}{Don't try to redefine
+% \textbackslash{}appendix if it's not defined in current document
+% class. Fixed bug in \textbackslash{}@setnamecref. Refactored common
+% code in format-definition macros into separate
+% \textbackslash{}cref@othervariant macro. Added
+% \package{IEEEtrantools} support.}
+% \changes{v0.18.3}{2012/01/18}{Fixed bugs with multiple equations and
+% subequations in an \textbackslash{}IEEEeqnarray.}
+% \changes{v0.18.4}{2012/01/23}{Set \textbackslash{}cref@currentlabel
+% locally instead of globally, to match how
+% \textbackslash{}@currentlabel is set. Fix \package{xr} compatibility
+% by adding a ``cref'' suffix to \package{cleveref}'s internal label
+% names, instead of a prefix.}
+% \changes{v0.18.5}{2012/03/05}{Fixed \package{listings} and
+% \package{algorithm} package support, broken by change to local rather
+% than global \textbackslash{}cref@currentlabel definitions. Fixed
+% compatibility with \package{memoir}'s internal \package{subfig}
+% re-implementation.}
+% \changes{v0.18.6}{2012/09/25}{Sorted out \package{algorithm} and
+% \package{algorithmicx} package support. Note: \package{algorithmic}
+% package is \emph{not} supported. Fixed compatibility with
+% \package{bigfoot} package. Added support for \package{polyglossia}
+% package. Mentioned \package{autonum} as a possible replacement for
+% (incompatible) \option{showonlyrefs} option to \package{mathtools}
+% package.}
+% \changes{v0.18.7}{2012/10/04}{Fixed regression in \package{varioref}
+% support that once again (see v0.15.1) caused \textbackslash{}vref to
+% print \textbackslash{}reftextcurrent string for references on the
+% current page. Fixed regression(?) causing spurious whitespace to be
+% produced for empty cross-reference names (see v0.17.7).}
+% \changes{v0.18.8}{2013/03/22}{Fixed automatic
+% \textbackslash{}newtheorem definitions in \package{amsthm} support.
+% Add Swedish and Brazilian translations. Fix bug in
+% \package{algorithm2e} + \package{hyperref} support.}
+% \changes{v0.18.9}{2013/03/22}{Fixed regression that broke
+% \option{nameinlink} option.}
+% \changes{v0.19}{2013/12/28}{Added \package{breqn} package support.
+% Remove unwanted spaces in some macros. Added abbreviation for
+% ``Abbildung'' to German translations. Added \package{xr-hyper}
+% package support. Fixed bug in \package{amsmath} \textbackslash{}tag
+% support. Added \textbackslash{}crefstripprefix utility macro and
+% example usage. Added separate \texttt{subequation} cross-reference
+% type.}
+% \changes{v0.19.1}{2014/08/14}{Fixed bug in \textbackslash{}labelcref
+% format customization. Fixed subtle \textbackslash{}varioref bug
+% caused by a stray \%. Fixed typo in Swedish translations. Fix
+% \textbackslash{}setcrefrange to use same test for matching reference
+% types \textbackslash{}cref@processgroup and
+% \textbackslash{}cref@processgroupall.}
+% \changes{v0.19.2}{2015/11/18}{Fixed compatibility with REFTeX
+% \textbackslash{}appendix* command. Added catalan language support.
+% Fix \textbackslash{}@bsphack/\textbackslash{}@esphack spacing issues
+% in \textbackslash{}label refefinitions. Fix \textbackslash{}crefalias
+% mechanism in \package{hyperref} support. Fix bugs in \package{breqn}
+% and \package{varioref} support. Ensure any undefined
+% \textbackslash{}labelcref formats for sub-types (subsections,
+% subequations etc.) are copied from parent types. (This fixes missing
+% brackets around \textbackslash{}labelcref subequation references.)}
+% \changes{v0.20}{2016/08/10}{Fix erroneous \%'s after
+% \textbackslash{}advance which broke \package{varioref} support.
+% Add \textbackslash{}cref@ifstreq utility macro for
+% catcode-independent string comparison.
+% Fix sorting of enum\meta{x} labels.}
+% \changes{v0.21}{2017/07/10}{Add \texttt{cref@} prefix to
+% \textbackslash{}gobble@optarg to avoid conflicts with other packages.
+% Compress away duplicate references in \textbackslash{}cref etc.\ just
+% as we already did for \textbackslash{}cpageref. Fix
+% \textbackslash{}cpageref error on non-arabic page numbers. Fix bug
+% that disabled warning on more than one reference type within a
+% \textbackslash{}labelcref. Refactor \textbackslash{}cpageref to use
+% same machinery as \textbackslash{}cref, treating different page
+% numbering schemes within a document as different page number
+% ``types''. Refactor and simplify main \textbackslash{}@cref macro.
+% Fix compatibility with newer IEEEtrantools versions. Fix subtle
+% bug in \package{amsmath}$+$\package{hyperref} subequations support,
+% which made hyperlinks point to wrong location in \emph{all} equations
+% following the first use of subequations in a document.}
+% \changes{v0.21.1}{2018/02/08}{Fix bug in \package{hyperref}
+% \textbackslash{}cpagerefrange support. Disable \package{hyperref}
+% support when \package{hyperref} is loaded with implicit=false option,
+% and generate a warning that this situation is unsupported. Fix bug
+% that broke \texttt{compress} option.}
+% \changes{v0.21.2}{2018/02/09}{Fix bug in undefined reference warning
+% message printed by \textbackslash{}namecref etc., and note in the
+% documentation that these commands only accept a single reference.
+% Add support for \textbackslash{}crefalias'ing of appendix reference
+% types.}
+% \changes{v0.21.3}{2018/03/03}{Fix bug in \package{hyperref}-support
+% version of \textbackslash{}cpageref. Fix spelling mistakes in Dutch
+% translations. Add additional advanced cross-reference formatting
+% example to manual. Modify \textbackslash{}@crefcopyformats so it
+% copys over format \emph{components}, rather than copying over the
+% low-level format definitions.}
+% \changes{v0.21.4}{2018/03/27}{Make subsubsection/subsubappendix formats
+% inherit from subsection/subappendix rather than section/appendix.
+% Modify \textbackslash{}@crefcopyformats to copy over low-level
+% formats again \emph{if} no components have have been customised.
+% Improve explanation of sub-format inheritance in the manual.}
+%
+% \GetFileInfo{cleveref.sty}
+%
+%
+% \title{The \package{cleveref} package\thanks{This document
+% corresponds to \textsf{cleveref}~\packageversion, dated
+% \packagedate.}}
+% \author{Toby Cubitt \\
+% \href{mailto:toby-cleveref@dr-qubit.org}{toby-cleveref@dr-qubit.org}}
+% \date{\packagedate}
+%
+% \maketitle
+%
+% \begin{abstract}
+% The \package{cleveref} package enhances \LaTeX{}'s cross-referencing
+% features,\linebreak[4] allowing the format of cross-references to be
+% determined automatically according to the ``type'' of cross-reference
+% (equation, section, etc.) and the context in which the
+% cross-reference is used. The formatting for each cross-reference type
+% can be fully customised in the preamble of your document. In
+% addition, \package{cleveref} can typeset cross-references to lists
+% of multiple labels, automatically formatting them according to their
+% types, sorting them, and compressing sequences of numerically
+% consecutive labels. Again, the multiple-reference formatting is fully
+% customisable.
+%
+% Normally, the latest version of the \package{cleveref} package is
+% available via CTAN.\ Occasionally, slightly newer ``pre-release''
+% versions are available at \url{www.dr-qubit.org/latex.php#cleveref} a
+% little before they make their way onto CTAN.
+% \end{abstract}
+%
+% \clearpage
+% \tableofcontents
+% \clearpage
+%
+%
+% \section{Introduction}
+% When ``clever'' is used in the name of a computer program, it usually
+% indicates that the programmer is overly smug about his own
+% achievements. But at the heart of the \LaTeX{} philosophy also lies the
+% idea that it is clever to delegate as much of the typesetting as
+% possible to the computer, in order to achieve a beautiful --- and above
+% all consistent --- visual appearance.
+%
+% All of this probably applies to the \package{cleveref} package. Its
+% goals are two-fold: to exploit all the information that \LaTeX{} can
+% collect about labels as intelligently as possible (clever processing),
+% allowing you to produce an attractive, consistent formatting of
+% cross-references throughout your document with the minimum of effort
+% (you'd be clever to use it!).
+%
+% The \package{cleveref} package enhances \LaTeX{}'s cross-referencing
+% features by automatically formatting cross-references depending on what
+% they refer to (chapter, section, equation, theorem, etc.). It can
+% automatically format cross-references to multiple labels, and can sort
+% lists of multiple cross-references, compresses consecutive labels into
+% a reference range, and all kinds of other clever wizardry. It also does
+% similar things with page references.
+%
+% In standard \LaTeX{}, you have almost certainly found yourself writing
+% things like |Eq.~(\ref{eq1})| and |Theorems~\ref{thm1} to~\ref{thm3}|
+% over and over again. Tedium isn't the only downside to this. What
+% happens if you later decide you want equation references to be typeset
+% as |Equation~\ref{eq1}| instead (i.e.\ without the abbreviation and
+% without the parentheses)? What happens if you decide to change the
+% theorem labelled |thm1| into a lemma?\footnote{Note that to allow
+% \package{cleveref} to automatically infer the type of theorem, you need
+% to load either the \package{ntheorem} or the \package{amsthm} package.
+% See \cref{sec:non-bugs} for more details.} What if you move |thm3| so
+% that it appears (and is numbered) before |thm1|, meaning that
+% references to the sequence of theorems 1 through 3 should now be
+% ordered |Theorems~\ref{thm3} to~\ref{thm1}| (i.e.\ the other way
+% around)? What if you decide you prefer references to multiple theorems
+% to be written as |Theorems~\ref{thm1}--\ref{thm3}|? Any such change
+% requires you to search through the entire \LaTeX{} source of your
+% document, modifying all references to equations, updating all
+% references to |thm1|, re-ordering all references to |thm1| and |thm3|,
+% and changing all the formatting of references to multiple theorems.
+%
+% The \package{cleveref} package allows you to define the format for the
+% different types of cross-references once-and-for-all in the preamble of
+% your document. (Of course, sane default formats are provided, so you
+% only have to redefine the format if you don't like the default for a
+% particular cross-reference type.) If you later decide to change the
+% format of equation references, you only have to change one preamble
+% definition. If you change a theorem into a lemma, you don't need to
+% change any cross-references at all, because \package{cleveref} will
+% automatically use the appropriate name when typesetting any
+% cross-references to it. This makes it far easier to typeset
+% cross-references uniformly across your whole document, as well as
+% avoiding repetitively typing similar text for each and every
+% cross-reference.
+%
+%
+%
+% \section{Usage}
+% The \package{cleveref} package is loaded in the usual way, by putting
+% the line
+% \begin{quote}
+% |\usepackage{cleveref}|
+% \end{quote}
+% in your document's preamble. However, care must be taken when using
+% \package{cleveref} in conjunction with other packages that modify
+% \LaTeX{}'s referencing system (see
+% \cref{sec:other_packages}). Basically, \package{cleveref} must be
+% loaded \emph{last}.
+%
+% If you just want to get going quickly with \package{cleveref}, and come
+% back later to read up on all the features it provides in more detail,
+% here's what you need to do. Wherever you would previously have used
+% |\ref|, use |\cref| instead. (Except at the beginning of a sentence,
+% where you should use |\Cref|.) You no longer need to put the name of
+% the thing you're referencing in front of the |\cref| command, because
+% \package{cleveref} will sort that out for you: i.e.\ use |\cref{eq1}|
+% instead of |eq.~(\ref{eq1})|. If you want to refer to a range of
+% labels, use the |\crefrange| command: |\crefrange{eq1}{eq5}| produces
+% |eqs.~(1) to~(5)|. If you want to refer to multiple things at once, you
+% can simply throw them all into one cross-reference and leave
+% \package{cleveref} to sort it out: e.g.\
+% |\cref{eq2,eq1,eq3,eq5,thm2,def1}| produces%
+% |eqs.~(1) to~(3) and~(5),| |theorem~5, and definition~1|. Finally, if
+% you want a page reference, use |\cpageref| (and don't write ``page'' in
+% front), if you want a page range, use |\cpagerefrange|, and if you want
+% to refer to multiple pages, simply throw them all into a single
+% |\cpageref|. Just as with |\cref| (above), \package{cleveref} will sort
+% it all out for you automaticaly.
+%
+% \package{Cleveref} supports a number of languages other than English,
+% and also supports the \package{babel} and \package{polyglossia}
+% packages for those languages. Either pass the desired language as an
+% option to \package{cleveref}, or pass it as a global option to
+% |\documentclass|. Note that if you're writing in a language in which
+% nouns decline, the |\cref| and |\cpageref| commands may be less useful,
+% as they always produce the cross-reference name in the nominative
+% case.\footnote{Providing separate variants of the \package{cleveref}
+% commands for each noun case quickly becomes more cumbersome than just
+% typing the cross-reference name by hand. Trying to determine the
+% appropriate case automatically would be tantamount to solving the full
+% natural-language processing problem in \package{cleveref}. Check back
+% in a century or so for this feature.} In such languages, you may
+% instead prefer to use the |\labelcref| and |\labelcpageref| commands.
+% Unlike |\cref| and |\cpageref|, these don't produce the name in front
+% of the cross-reference, so you must supply it (in the appropriate case)
+% yourself. But they do still cope with multi-references, so you still
+% gain some benefit from using \package{cleveref}.
+%
+%
+%
+% \section{Comparison with Other Packages}
+% Given how useful automated cross-reference typesetting is, there are
+% naturally a number of other \LaTeX{} packages with similar goals to
+% \package{cleveref}, most notably \package{varioref},
+% \package{fancyref}, \package{hyperref}'s |\autoref| command, and (for
+% theorem-like environments) \package{ntheorem} with the \option{thref}
+% option. (There are many others, but these come closest to providing
+% similar features to \package{cleveref}.) However, all have certain
+% deficiencies which \package{cleveref} attempts to overcome.
+%
+% The \package{fancyref} package doesn't automatically determine the type
+% of thing being referred to. Instead, it relies on you adhering to a
+% naming convention for labels. This is usually a good idea in any case,
+% but it can occasionally be inconvenient. For example, if you change a
+% theorem into a lemma, you have to change the label name, and therefore
+% also all cross-references to it. So with \package{fancyref}, you will
+% at times be back to searching and replacing label names throughout your
+% document. Not to mention missing out on all the other
+% \package{cleveref} features, such as automatic sorting and compressing
+% of consecutive references, \package{ntheorem} and \package{amsthm}
+% support, precise control over hyperlinks, etc.
+%
+% The enhanced referencing feature provided by the \package{varioref}
+% package's\linebreak[4] |\labelformat| command decides how to format
+% cross-references when the label is \emph{defined}, rather than when it
+% is \emph{referenced}. Often this isn't a problem. But it makes it
+% impossible to format cross-references according to the context in which
+% they are referenced, which can sometimes be very useful. For example,
+% you may want cross-references at the beginning of a sentence formatted
+% differently to cross-references in the middle of a sentence. E.g.\ you
+% may want to use the abbreviation ``eq.'', but revert to ``Equation'' at
+% the beginning of sentences (words at the start of sentences shouldn't
+% be abbreviated in English). This is not possible with
+% \package{varioref}. Perhaps even more significantly,
+% \package{varioref}'s |\labelformat| implementation makes it impossible
+% to typeset multiple references automatically; if you want to refer to
+% equations |eq1| through |eq3|, with \package{varioref} you are back to
+% typing |Eqs.~(\ref{eq1}) to~(\ref{eq3})| by hand. Not to mention
+% missing out on all the other \package{cleveref} features. In fact,
+% \package{cleveref} fully supports \package{varioref}, taking over
+% responsibility for typesetting cross-references, whilst retaining (and
+% even enhancing) all the \package{varioref} page-referencing magic.
+%
+% The \package{hyperref} package's |\autoref| command typesets a name
+% before a cross-reference, determined by the cross-reference type. This
+% is less flexible than \package{cleveref}'s fully customisable
+% cross-reference formatting, but, when combined with \package{varioref},
+% the two packages working together come pretty close. But surprisingly,
+% even with \package{hyperref}, it is impossible to customise precisely
+% which part of the cross-reference is made into a hyperlink in PDF
+% documents; this is simple with \package{cleveref}. And it still remains
+% impossible to typeset multiple references, have consecutive references
+% sorted and compressed automatically, etc.
+%
+% The \package{ntheorem} package (with the \option{thref} option) does
+% the right thing when it comes to how and when the format is
+% defined\ldots except that it only works for theorem-like environments.
+% It is possible to use it for other environments, but only in a
+% bastardized form, by manually supplying an optional argument to every
+% |\label| command to specify the label type. \package{Cleveref} works
+% equally well with any type of cross-reference, as well as fully
+% supporting \package{ntheorem}. And again, \package{cleveref} provides a
+% number of additional features over \package{ntheorem}, such as
+% multi-references, automatic sorting and compressing of consecutive
+% cross-references, control over the placement of hyperlinks, etc.
+%
+%
+%
+% \section{Typesetting Cross-References}
+% \label{sec:typesetting}
+% \DescribeMacro\cref
+% To automatically typeset a cross-reference according to the type of
+% thing referred to, simply refer to it using |\cref|\marg{label}.
+% \package{Cleveref} imposes just one extra restriction on the names of
+% labels: they are no longer allowed to contain commas ``,''. These are
+% instead used to typeset multiple cross-references (see below).
+%
+% \DescribeMacro\Cref
+% As it is very difficult\footnote{Actually, very likely impossible!} for
+% \LaTeX{} to determine whether a cross-reference appears at the
+% beginning of a sentence or not, a beginning-of-sentence variant exists:
+% |\Cref|\marg{label}. By default, this typesets the cross-reference with
+% the first letter capitalised, and without using an abbreviation in
+% those cases where the standard variant does use one. (However, the
+% formatting of the |\cref| and |\Cref| forms can be fully and
+% independently customised, see \cref{sec:customising}.)
+%
+% \DescribeMacro\crefrange
+% \DescribeMacro\Crefrange
+% To typeset a cross-reference range, e.g.\ |Eqs.~(1.1) to~(1.5)|,
+% use\linebreak[4] |\crefrange| or |\Crefrange| (depending on the
+% capitalisation you require), which take the beginning and end of the
+% range as arguments:
+% \begin{quote}
+% |\crefrange|\marg{label1}\marg{label2}
+% \end{quote}
+%
+% \DescribeMacro\cref
+% \DescribeMacro\Cref
+% To typeset multiple cross-references, simply list the labels inside
+% the |\cref| or |\Cref| command, separated by commas (recall that you
+% are not allowed to use commas in label names when using
+% \package{cleveref}):
+% \begin{quote}
+% |\cref{|\meta{label1}|,|\meta{label2}|,|\meta{label3}|,|\dots|}|
+% \end{quote}
+%
+% \DescribeMacro{\cref*}
+% \DescribeMacro{\Cref*}
+% \DescribeMacro{\crefrange*}
+% \DescribeMacro{\Crefrange*}
+% When \package{cleveref} is used along with the \package{hyperref}
+% package (see \cref{sec:customising,sec:other_packages}), additional
+% starred variants of all the referencing commands are available. The
+% standard referencing commands will make cross-references into
+% hyperlinks; the starred variants prevent this, producing the same
+% typeset text but without creating hyperlinks.
+%
+% \DescribeMacro\cpageref
+% \DescribeMacro\Cpageref
+% To typeset a page reference, use |\cpageref|\marg{label}, which is
+% typeset e.g.\ as ``page~3''. At the beginning of a sentence, use
+% |\Cpageref| instead. Since page references are always references to,
+% well\dots pages, this doesn't gain you so much over |\pageref|. Where
+% |\cpageref| comes into its own is in referring to multiple pages:
+% \begin{quote}
+% |\cpageref{|\meta{label1}|,|\meta{label2}|,|\meta{label3}|,|\dots|}|
+% \end{quote}
+% \DescribeMacro\cpagerefrange
+% \DescribeMacro\Cpagerefrange
+% Predictably enough, |\cpagerefrange| and |\Cpagerefrange| are used to
+% typeset references to page ranges:
+% \begin{quote}
+% |\cpagerefrange|\marg{label1}\marg{label2}
+% \end{quote}
+%
+% \DescribeMacro\ref
+% \DescribeMacro\pageref
+% \package{Cleveref} does \emph{not} modify the standard |\ref| or
+% |\pageref| commands, so you can still use them to typeset the
+% formatted label counter or page number alone, without any additional
+% text or formatting.
+%
+% \DescribeMacro{\namecref}
+% \DescribeMacro{\nameCref}
+% \DescribeMacro{\lcnamecref}
+% \DescribeMacro{\namecrefs}
+% \DescribeMacro{\nameCrefs}
+% \DescribeMacro{\lcnamecrefs}
+% Occasionally, it's useful to produce just the name of a reference,
+% without the label itself. For example, if you want to refer to ``this
+% section'', but you're not sure whether you might later change the
+% section into a chapter, it might be useful to produce just the name
+% ``section'' associated with the section's label. If you later change
+% the section into a chapter, the text will then automatically change to
+% ``this chapter''. The |\namecref| and |\nameCref| do exactly this:
+% \begin{quote}
+% |\namecref{sec1}|
+% \end{quote}
+% is typeset as ``section'' (assuming |sec1| labels a section). The
+% |\namecrefs| and |\nameCrefs| commands produce the plural forms. The
+% |\lcnamecref| and |\lcnamecrefs| commands force the reference name to
+% lowercase, for use when the \option{capitalise} option is enabled (see
+% \cref{sec:capitalise}). (When that option is set, |\namecref| produces
+% an uppercase reference name.)
+%
+% Note that all these commands can only be passed a \emph{single}
+% reference name; they do \emph{not} accept multi-references like
+% |\cref|. (Passing multiple references to these commands would make
+% little sense if the references had different types, and is redundant if
+% they have the same type.)
+%
+% There is a slight pitfall that you should be aware of when using the
+% |\namecref| commands. They get the reference name from the names
+% defined for the label's reference type using |\crefname| or |\Crefname|
+% (see \cref{sec:individual_customisation}). The default reference
+% formats provide these definitions. However, it is possible to customise
+% reference formats using lower-level commands that do not create
+% |\crefname| definitions (see \cref{sec:low-level_customisation}). If
+% the |\crefname| definitions are missing for a particular reference
+% type, |\namecref| and |\nameCref| will produce errors for labels of
+% that type. You can fix the error by adding explicit |\crefname|
+% definitions for these types.
+%
+% \DescribeMacro{\labelcref}
+% Conversely, it is occasionally convenient to produce just the label
+% part of a reference, without the cross-reference name. For example,
+% this can be useful when writing in a language in which nouns decline.
+% The |\labelcref| command does exactly this, and can also cope with
+% multi-references, processing them just as |\cref| does. However, since
+% it typesets a multi-reference without any name, \emph{all} labels in a
+% |\labelcref| multi-reference \emph{must} be of the same type.
+%
+% The |\labelcref| command will typeset cross-reference labels using the
+% default label format if no type-specific format is defined using
+% |\creflabelformat| (see
+% \cref{sec:global_customisation,sec:individual_customisation}). Note
+% that, if you customise reference formats using the low-level commands,
+% you may want to also explicitly define the |\labelcref| formats to
+% match, using the |\labelcrefformat| etc.\ commands (see
+% \cref{sec:low-level_customisation}).
+%
+% \DescribeMacro{\labelcpageref}
+% Similarly, |\labelcpageref| typesets the page numbers alone, without
+% inserting ``page'' in front. Like |\cpageref|, it also handles
+% multi-references. Like |\labelcref|, by default |\labelcpageref|
+% typesets the page numbers using the default label format, customised
+% using |\crefdefaultlabelformat|. If you want to define a separate
+% format for |\labelcpageref|, use |\creflabelformat| to customise the
+% label format for the ``page'' cross-reference type. (see
+% \cref{sec:low-level_customisation}).
+%
+%
+%
+% \section{Sorting and Compressing}
+% \label{sec:sort&compress}
+% When \package{cleveref} typesets lists of multiple cross-references or
+% page-references, the default behaviour is to automatically sort the
+% list and compress sequences of consecutive cross-references or page
+% numbers into a reference range. You can change this behaviour by
+% supplying one of the following package options:
+% \begin{description}
+% \item[\option{sort}] Sort lists of cross-references, but don't compress
+% consecutive references.
+% \item[\option{compress}] Compress sequences of consecutive references
+% into a reference range, but don't sort the list of cross-references.
+% \item[\option{nosort}] Neither sort lists of cross-references,
+% \emph{nor} compress consecutive references.
+% \item[\option{sort\&compress}] Sort lists of cross-references, and
+% compress sequences of consecutive references into a reference
+% range (this is the default).
+% \end{description}
+%
+% Occasionally, you may want to prevent a particular sequence of
+% consecutive cross-references from being compressed to a reference
+% range, without disabling this feature globally. To achieve this, you
+% can separate the cross-references in the list by one or more empty
+% references, at the point at which you want to prevent compression. For
+% example,
+% \begin{quote}
+% |\cref{eq1,eq2,eq3,,eq4}|
+% \end{quote}
+% will be typeset as
+% \begin{quote}
+% eqs.~(1) to~(3) and (4)
+% \end{quote}
+% or
+% \begin{quote}
+% |\cref{eq1,eq2,,eq3,eq4,eq5,,eq6,eq7,eq8}|
+% \end{quote}
+% will be typeset as
+% \begin{quote}
+% eqs.~(1), (2), (3) to~(5) and (6) to~(8)
+% \end{quote}
+% You can safely put an empty reference between cross-references that
+% would never be compressed anyway; it will simply be ignored.
+%
+% If lists of cross-references are also being sorted (the default), it
+% can be a little confusing to work out where the empty reference should
+% go in order to prevent compression of a particular consecutive
+% sequence. It's best to think of the empty reference as being
+% ``attached'' to the cross-reference preceding it. When the list is
+% sorted, the empty reference will still appear after the same preceding
+% reference, and will prevent it being compressed with any subsequent
+% consecutive cross-references. In other words, an empty reference
+% ensures that the preceding reference will appear explicitly in the
+% final, typeset cross-reference:
+% \begin{quote}
+% |\cref{eq3,,eq2,eq1,eq6,eq4,eq5}|
+% \end{quote}
+% will be typeset as
+% \begin{quote}
+% eqs.~(1) to~(3) and (4) to~(6)
+% \end{quote}
+%
+%
+%
+% \section{Overriding the Cross-Reference Type}
+% \label{sec:label_type}
+% \DescribeMacro\label
+% A label's ``type'' is usually determined by the name of the counter it
+% refers to, or in the case of \package{ntheorem} and \package{amsthm}
+% theorem-like environments by the environment name. However, sometimes
+% it is useful to override the type. \package{Cleveref} provides two
+% different mechanisms for accomplishing this.
+%
+% You can alias a counter to a different cross-reference type using the
+% |\crefalias| command:
+% \begin{quote}
+% |\crefalias|\marg{counter}\marg{type}
+% \end{quote}
+% \meta{counter} will then use the cross-reference formatting of
+% \meta{type}. This can be useful if you want multiple counters to use
+% the same cross-reference format.
+%
+% Occasionally, you may want to override the cross-reference type for one
+% particular label, one-off. You can do this by supplying the desired
+% type as an optional argument to the |\label| command:
+% \begin{quote}
+% |\label|\oarg{type}\marg{label}
+% \end{quote}
+%
+% One circumstance in which is useful is when you want to define a
+% special cross-reference format for certain labels of a given type. By
+% supplying a type that doesn't already exist as the optional argument to
+% |\label|, you can then define the cross-reference format for that new
+% type in whatever way you like, without affecting other cross-references
+% of the same type. For example, if a particular equation contains
+% multiple expressions and you want it to always be referred to in the
+% plural, you could use:
+% \begin{quote}
+% |\crefname{pluralequation}{eqs.}{eqs.}|\\
+% \dots\\
+% |\label[pluralequation]{eq1}|
+% \end{quote}
+% You can of course reuse this format for other plural equations, too.
+%
+% If you need to do this frequently, it can become tedious specifying the
+% label explicitly each time. An alternative is to use the
+% \package{aliascnt} package. This lets you define one counter to be an
+% alias for another, so that effectively the same counter has two names.
+% Since \package{cleveref} determines the label type from the counter
+% name, the two counter aliases can have different cross-reference
+% formats whilst really being the same counter. You have to somehow
+% arrange for the correct counter alias to be used depending on which
+% cross-reference format you want (probably by defining two variants of
+% the environment in question). But the effort involved might be worth
+% the convenience of not having to remember to pass an explicit optional
+% argument to a large number of labels.
+%
+% You can use this trick to get different cross-reference formats for
+% different theorem-like environments,\footnote{This trick seems to
+% belong to \LaTeX{} mythology, and certainly isn't my own idea! But I
+% haven't been able to definitively track down who originally came up
+% with it.} \emph{without} using the \package{amsthm} or
+% \package{ntheorem} package (although using one of those packages is a
+% better solution if available). For example,
+% \begin{quote}
+% |\usepackage{aliascnt}|\\
+% |\usepackage{cleveref}|\\
+% |\newaliascnt{lemma}{theorem}|\\
+% |\newtheorem{lemma}[lemma]{Lemma}|\\
+% |\aliascntresetthe{lemma}|\\
+% |\crefname{lemma}{lemma}{lemmas}|
+% \end{quote}
+% Note that \package{aliascnt} must be loaded before \package{cleveref},
+% and any \cmd{\newaliascnt} commands \emph{must} come \emph{after}
+% \package{cleveref} has been loaded.
+%
+%
+%
+% \section{Options that Modify the Cross-Reference Format}
+%
+% \subsection{Capitalising All Cross-Reference Names}
+% \label{sec:capitalise}
+% \DescribeMacro{capitalise}
+% Many authors prefer to always capitalise cross-reference names,
+% regardless of where they appear in the sentence, writing Theorem~1 and
+% Equation~3 (as opposed to theorem~1 and equation~3). If you count
+% yourself among this group, you can pass the \option{capitalise} option
+% to the \package{cleveref} package (\option{capitalize} also works).
+%
+% All the default cross-reference formats will then have the first letter
+% capitalised, as will the automatically generated |\cref| variants (see
+% \cref{sec:individual_customisation,sec:low-level_customisation}).
+% (However, if you explicitly define a |\cref| variant to \emph{not} be
+% capitalised, \package{cleveref} will still honour your definition. In
+% other words, you're responsible for defining the capitalisation
+% correctly in your own format definitions.)
+%
+% You should \emph{still} use the |\Cref| variants at the beginning of
+% sentences, for one thing, because abbreviations should not be used at
+% the beginning of a sentence,\footnote{At least in English; I'm not sure
+% about other languages.} and for another, in case you later change your
+% mind and remove the \option{capitalise} option.
+%
+%
+% \subsection{Including Names in Hyperlink Targets}
+% \label{sec:nameinlink}
+% \DescribeMacro{nameinlink}
+% When using the \package{hyperref} package, \package{cleveref}
+% automatically makes all cross-references into hyperlinks to the
+% corresponding reference. By default, only the label itself forms part
+% of the hyperlink target (i.e.\ the text you can click on to navigate to
+% the cross-reference). The cross-reference name is not part of the
+% hyperlink. By contrast, \package{hyperref}'s |\autoref| command
+% \emph{does} includes the name as part of the hyperlink. If you prefer
+% to include the names in the hyperlinks when using \package{cleveref},
+% you can pass the \option{nameinlink} option to the \package{cleveref}
+% package. (For even more control over the placement of the hyperlink
+% target, use the commands for customising the cross-reference format.
+% See \cref{sec:customising}.)
+%
+% However, use of this option is discouraged on stylistic grounds.
+% Firstly, when producing PDF output \package{hyperref} by default
+% surrounds hyperlinks with red boxes, which looks particularly ugly when
+% the entire cross-reference name is surrounded by a red box (though this
+% unfortunate default can be changed using \package{hyperref} package
+% options; see the \package{hyperref} documentation for details).
+% Secondly, and more significantly, when using multi-references only the
+% first reference in a group can include the cross-reference name as part
+% of its hyperlink target, for obvious reasons. The hyperlink targets for
+% the other references in the group will necessarily be just the labels.
+% This makes for somewhat non-uniform typesetting of hyperlinks, with the
+% first cross-reference in a multi-reference having a much larger
+% hyperlink target than the others.
+%
+%
+% \subsection{Abbreviations in Cross-Reference Names}
+% \label{sec:noabbrev}
+% \DescribeMacro{noabbrev}
+% The default cross-reference names for some languages use common
+% abbreviations for some of the names (e.g.\ in the default English
+% format, |\cref{eq1}| will be typeset as |eq.~(1)|). Some authors may
+% prefer to always use the full name, rather than an abbreviation
+% (|equation~(1)| instead of |eq.~(1)|). To disable all use of
+% abbreviations in the default cross-reference names, pass the
+% \option{noabbrev} option to the \package{cleveref} package.
+%
+% Note that the default names \emph{never} use abbreviations for the
+% start-of-sentence variants (|\Cref| etc.)
+% This is because in good written English (and likely other languages
+% too), abbreviations should never be used at the beginning of a
+% sentence. Many of \TeX{}'s default settings (e.g.\ page margins) are
+% specifically chosen to encourage good typesetting style.
+% \package{Cleveref} tried to follow the same philosophy. If despite this
+% you insist on using abbreviations at the start of sentences, you will
+% need to customise the start-of-sentence formats yourself.
+%
+%
+%
+%
+% \section{Customising the Cross-Reference Formats}
+% \label{sec:customising}
+% The \package{cleveref} package allows you to take full control of the
+% typesetting of cross-references, by allowing the formatting to be
+% customised. Defaults appropriate for English documents are provided for
+% the standard label types,\footnote{For any pedantic classics scholars
+% out there: ``lemmas'' is recognised as a valid plural form of ``lemma''
+% in all current versions of the Oxford English Dictionary. ``Lemmata''
+% was last heard in a mathematical debate that took place in a pub just
+% around the corner from Hadrian's wall\dots a few years before the
+% Romans pulled out of Britain. \package{Cleveref} might have ``clever''
+% in its name, but even that doesn't make it pretentious enough to use
+% ``lemmata'' for the plural of ``lemma''.} and support for a number of
+% languages is provided via package options (see
+% \cref{sec:language_babel}). But if you don't like the defaults, or are
+% writing in a language that is not supported yet,\footnote{Any
+% contributions of translations for missing languages are very welcome!
+% See \cref{sec:new-features} for information on how to contribute
+% translations.} or you need to refer to something for which no default
+% format is defined, then you can take charge and define your own
+% formats.
+%
+% If \package{cleveref} encounters a cross-reference to a type it does
+% not know, it will produce a ``reference type undefined'' warning, and
+% typeset the cross-reference as
+% \begin{quote}
+% {\bf ??}~|\ref|\marg{label}
+% \end{quote}
+% i.e.\ the label counter preceded by a double question mark. The error
+% message indicates the name of the unknown cross-reference type, which
+% you will then probably want to define. (References to undefined labels
+% still produce a ``reference undefined'' warning and appear as a double
+% question mark, as usual.)
+%
+% The cross-reference formats are usually constructed out of components:
+% the cross-reference name (different for each type of cross-reference),
+% the format for the label itself, and the conjunctions used in reference
+% ranges and lists of multiple cross-references. There are two levels of
+% customisation: you can either customise the components, or you can take
+% full control and override the component-derived format entirely.
+%
+% \package{Cleveref} treats page references, as produced e.g.\ by
+% |\cpageref|, as cross-references with the type ``page''. Therefore, all
+% of the mechanisms for customising cross-references apply equally well
+% to page references, simply by using ``page'' as the cross-reference
+% type.
+%
+%
+% \subsection{Customising the Cross-Reference Components}
+% \label{sec:component_customisation}
+%
+% \subsubsection{Global Customisation}
+% \label{sec:global_customisation}
+% The global customisation commands affect all cross-reference formats,
+% unless they are overridden by lower-level customisation commands.
+%
+% \DescribeMacro\crefdefaultlabelformat
+% The format for the label counter itself can be customised globally
+% using
+% \begin{quote}
+% |\crefdefaultlabelformat|\marg{format}
+% \end{quote}
+% The \meta{format} argument can be any valid \LaTeX{} code, though you
+% will need to |\protect| fragile commands. It can (and almost certainly
+% should!) contain three arguments, |#1|, |#2| and |#3|. The first
+% argument is the formatted version of the label counter (e.g.\
+% |\thesection|). The other two are used to mark the beginning and end
+% of the part of the cross-reference that should form the hyperlink when
+% the \package{hyperref} package is used (see
+% \cref{sec:other_packages}). For example, if you wanted to surround all
+% labels with square brackets, without the square brackets themselves
+% being part of the hyperlink, you would need:
+% \begin{quote}
+% |\crefdefaultlabelformat{[#2#1#3]}|
+% \end{quote}
+% The hyperlink arguments |#2| and |#3| \emph{must} appear in that
+% order. (Leaving them out completely will not cause an error, but in
+% that case no hyperlink will be created when \package{hyperref} is
+% used, and there are better ways to achieve this. See
+% \cref{sec:typesetting,sec:other_packages}.)
+%
+% Note that the default format for equation cross-references already
+% overrides |\crefdefaultlabelformat| in order to surround the label with
+% parentheses, so the redefining |\crefdefaultlabelformat| will have no
+% effect on equations. The label format for equations must be customised
+% separately if you want to change it (see
+% \cref{sec:individual_customisation}).
+%
+% \DescribeMacro\crefrangeconjunction
+% The conjunction used in a reference range can be customised by
+% defining |\crefrangeconjunction|:
+% \begin{quote}
+% |\newcommand{\crefrangeconjunction}|\marg{conjunction}
+% \end{quote}
+% It does not have to be an actual conjunction in the linguistic sense,
+% e.g.\ it is perfectly reasonable to define it to be an endash
+% ``|--|''. |\crefrangeconjunction| is used directly between the start
+% and end references in a reference range, without any additional space
+% surrounding it, e.g.\ |\crefrange{thm1}{thm2}| is typeset as
+% \begin{quote}
+% |theorems~\ref{thm1}\crefrangeconjunction\ref{thm2}|
+% \end{quote}
+% so you may or may not want to include surrounding space, depending on
+% the formatting you desire. For example,
+% \begin{quote}
+% |\newcommand{\crefrangeconjunction}{ and~}|
+% \end{quote}
+% does require surrounding space, whereas
+% \begin{quote}
+% |\newcommand{\crefrangeconjunction}{--}|
+% \end{quote}
+% does not.
+%
+% \DescribeMacro\crefrangepreconjunction
+% \DescribeMacro\crefrangepostconjunction
+% There are two other ``conjunction'' commands available for customizing
+% the formatting for reference ranges. These are
+% |\crefrangepreconjunction| and |\crefrangepostconjunction|, which
+% insert text before the first label defining the range, and after the
+% second label, respectively. For example, when these commands are
+% defined, |\crefrange{thm1}{thm2}| is typeset as
+% \begin{quote}
+% |theorems~\crefrangepreconjunction\ref{thm1}|\\
+% | |\ding{229} |\crefrangeconjunction\ref{thm2}\crefrangepostconjunction|
+% \end{quote}
+% These commands are not used in the default English format definitions,
+% but they are needed in some languages to correctly express a range. For
+% example, the Italian format defines |\crefrangepreconjunction| to be
+% ``da'', so that |\crefrange{thm1}{thm2}| produces
+% \begin{quote}
+% |teorema da~\ref{thm1} a~\ref{thm2}|
+% \end{quote}
+%
+% \DescribeMacro\crefpairconjunction
+% \DescribeMacro\crefmiddleconjunction
+% \DescribeMacro\creflastconjunction
+% The conjunctions used in lists of multiple cross-references can be
+% customised by defining the commands |\crefpairconjunction|,
+% |\crefmiddleconjunction| and |\creflastconjunction|:
+% \begin{quote}
+% |\newcommand{\crefpairconjunction}|\marg{conjunction}\\
+% |\newcommand{\crefmiddleconjunction}|\marg{conjunction}\\
+% |\newcommand{\creflastconjunction}|\marg{conjunction}
+% \end{quote}
+% |\crefpairconjunction| is used when there are only two cross-references
+% in the list, |\creflastconjunction| is used between the penultimate and
+% final cross-reference in a list of more than two, and
+% |\crefmiddleconjunction| is used between all the others. Again, they do
+% not have to be conjunctions in the linguistic sense, and the same
+% considerations about surrounding space apply as in the case of
+% |\crefrangeconjunction|. For example, the default definition of
+% |\crefmiddleconjunction| is:
+% \begin{quote}
+% |\newcommand{\crefmiddleconjunction}{, }|
+% \end{quote}
+%
+% \DescribeMacro\crefpairgroupconjunction
+% \DescribeMacro\crefmiddlegroupconjunction
+% \DescribeMacro\creflastgroupconjunction
+% By default, the conjunctions used to separate sub-lists of different
+% cross-reference types in a multi-reference are identical to those used
+% to separate cross-references of the same type.\footnote{More
+% accurately, if you redefine $\backslash$crefpairconjunction etc.\ in
+% your preamble, $\backslash$crefpairgroupconjunction etc.\ are
+% automatically redefined so that they match. (In some languages, the
+% default definition of $\backslash$creflastgroupconjunction has an
+% additional comma lacking in $\backslash$creflastconjunction.)} You
+% can override this by defining the conjunction commands
+% |\crefpairgroupconjunction|, |\crefmiddlegroupconjunction| and
+% |\creflastgroupconjunction|.
+%
+% For example,
+% \begin{quote}
+% |\cref{eq1,eq2,eq3,thm1,thm2,fig1,thm3}|
+% \end{quote}
+% is typeset as
+% \begin{quote}
+% eqs.~(1)|\crefrangeconjunction|(3)|\crefmiddlegroupconjunction|%\\
+% theorems~1|\crefpairconjunction|2|\crefmiddlegroupconjunction|%\\
+% fig.~1|\creflastgroupconjunction{}|theorem~3
+% \end{quote}
+%
+%
+% \subsubsection{Customising Individual Cross-Reference Types}
+% \label{sec:individual_customisation}
+% \DescribeMacro\crefname
+% \DescribeMacro\Crefname
+% The cross-reference name for a given cross-reference type is customised
+% using the |\crefname| and |\Crefname| commands:
+% \begin{quote}
+% |\crefname|\marg{type}\marg{singular}\marg{plural}\\
+% |\Crefname|\marg{type}\marg{singular}\marg{plural}
+% \end{quote}
+% used by the |\cref| and |\Cref| commands, respectively. You must supply
+% both \meta{singular} and \meta{plural} forms of the name. If the
+% corresponding |\Crefname| is undefined when |\crefname| is called, it
+% will automatically define |\Crefname| to be a capitalised version of
+% |\crefname|, using |\MakeUppercase|. Conversely, if the corresponding
+% |\crefname| is undefined when |\Crefname| is called, it will
+% automatically define |\crefname| to be a lower-case version of
+% |\Crefname|, using |\MakeLowercase|. Obviously, this will only work
+% properly if the names begin with a letter. If the first letter is a
+% special character construct, such as an accented character, you will
+% need to surround it by braces. If the first thing in the name is
+% \emph{not} a letter at all (e.g.\ if it is a \LaTeX{} command), you
+% \emph{must} define both capitalisation variants explicitly. Otherwise
+% you will get strange and fatal errors when processing the document.
+%
+% The cross-reference \meta{type} is usually the name of the counter for
+% the environment (equation, chapter, section, etc.). The exceptions are
+% appendices, labels whose type has been overridden explicitly by
+% supplying an optional argument (see \cref{sec:label_type}), and
+% theorem-like environments when the \package{ntheorem} of
+% \package{amsthm} packages are loaded, for which \meta{type} should
+% instead be the environment name (lemma, corollary, definition, etc.)
+% even when different environments are part of the same numbering
+% sequence. (\package{ntheorem} and \package{amsthm} provide extra
+% information about the environment when different theorem-like
+% environments share a common counter, which \package{cleveref} makes use
+% of to distinguish between them automatically.) In the case of
+% appendices, the \meta{type} is ``appendix'' for the top-level
+% sectioning command (|\chapter| or |\section|, depending on the document
+% class), ``subappendix'' for the sectioning command one level below
+% (|\section| or |\subsection|), ``subsubappendix'' for the next level of
+% sectioning command, etc.
+%
+% For convenience, if they have not been otherwise customised by the end
+% of the preamble, the cross-reference name (and label format) for
+% |subsection| is by default inherited from that of |section|, and that
+% of |subsubsection| is inherited from |subsection| (which might itself
+% have been inherited from |section|). Similarly for |subappendix|,
+% |subsubappendix| and |subsubsubappendix|. The |enumii|, |enumiii|,
+% |enumiv| and |enumv| formats each inherit from the preceding one, with
+% |enumii| inheriting from |enumi|. Finally, |subfigure|, |subtable| and
+% |subequation| inherit from |figure|, |table| and |equation|,
+% respectively.
+%
+% If some of the format components for one of these reference types have
+% been customised using high-level customisation commands, any remaining
+% components are inherited from the parent type, and the
+% cross-reference formats are then defined in terms of those components.
+% (In this case, if the format for the parent type has been customised
+% using low-level commands, this low-level customisation will \emph{not}
+% be inherited.) If \emph{none} of the format components have been
+% customised, the whole format is always inherited from the parent type.
+%
+% \DescribeMacro\creflabelformat
+% You may want the label format for a particular cross-reference type to
+% differ from the global format set by |\crefdefaultlabelformat| (see
+% \cref{sec:global_customisation}). You can do this using
+% \begin{quote}
+% |\creflabelformat|\marg{type}\marg{format}
+% \end{quote}
+% The \meta{type} argument is the cross-reference type to customise, and
+% the \meta{format} argument defines the label format for
+% cross-references of that type. As in the case of\linebreak[4]
+% |\crefdefaultlabelformat|, the latter should contain the three
+% arguments |#1|, |#2| and |#3|, the first being the formatted version of
+% the label counter, the others determining the beginning and end of the
+% portion that becomes a hyperlink when the \package{hyperref} package
+% is loaded (see \cref{sec:other_packages}). |#2| and |#3| \emph{must}
+% appear in that order.
+%
+% \DescribeMacro\crefrangelabelformat
+% Normally, the start and end references in a reference range are
+% typeset using the usual label format (as defined by
+% |\crefdefaultlabelformat| or |\creflabelformat|) separated by
+% |\crefrangeconjunction| (\cref{sec:global_customisation}). You can
+% override this for a given cross-reference type using
+% \begin{quote}
+% |\crefrangelabelformat|\marg{type}\marg{format}
+% \end{quote}
+% The \meta{format} argument should contain six arguments: |#1|, |#2|,
+% |#3|, |#4|, |#5|, |#6|. The first two (|#1| and |#2|) are the formatted
+% versions of the two label counters defining the reference range. The
+% next two (|#3| and |#4|) denote the beginning and end of the hyperlink
+% for the first reference, the final two (|#5| and |#6|) the hyperlink
+% for the second reference. The hyperlink arguments \emph{must} appear
+% in order. For example,
+% \begin{quote}
+% |\crefrangelabelformat{equation}{(#3#1#4) to~(#5#2#6)}|
+% \end{quote}
+%
+%
+% \subsubsection{Automatic \textbackslash\texttt{newtheorem} Definitions}
+% \DescribeMacro\newtheorem
+% The standard \LaTeX{} |\newtheorem| command for defining new
+% theorem-like environments provides enough information to deduce a
+% reasonable cross-reference name for the new environment. So
+% \package{cleveref} automatically defines an appropriate cross-reference
+% name for new theorem-like environments. This automatic definition is
+% only used if no default definition is provided by \package{cleveref}
+% itself, and if no |\crefname| or |\Crefname| definition is given
+% explicitly (see \cref{sec:individual_customisation}).
+%
+% The caveat with this automatic definition is that, although
+% |\newtheorem| essentially provides the singular form of the
+% cross-reference name, it doesn't provide the plural form. And there is
+% no reliable way of constructing the plural form from the
+% singular.\footnote{If you're a native English-speaker, you might think
+% that just adding an `s' would work, though a moment's thought will
+% provide examples of words where this will fail. If you're a non-English
+% speaker, it probably won't even occur to you to claim that plurals can
+% reliably be constructed automatically!} Therefore, if the plural form
+% is ever required, \package{cleveref} will produce a ``reference type
+% undefined'' warning, and typeset the cross-reference where the plural
+% form is required as:
+% \begin{quote}
+% {\bf ??}~|\ref|\marg{label} \dots
+% \end{quote}
+% In this case, you will have to provide an explicit |\crefname| or
+% |\Crefname| definition yourself, to define the plural form as well as
+% the singular form.
+%
+% Note that this has \emph{nothing whatsoever} to do with automatically
+% determining the type of theorem-like environment in a cross-reference!
+% For that, you need to load either the \package{ntheorem} or the
+% \package{amsthm} package. See \cref{sec:non-bugs} for more details.
+%
+%
+%
+% \subsection{Low-Level Customisation: Taking Full Control}
+% \label{sec:low-level_customisation}
+% If you need more precise control over the cross-reference format than
+% is possible by customising the individual components, then you can take
+% full control of the format for any given type, overriding the
+% component-derived format entirely. The formats for single
+% cross-references, reference ranges and multi-references are customised
+% separately. If you only customise some of these, the other formats will
+% be constructed from components, as usual.
+%
+% Note that when deciding which cross-references should be grouped
+% together for sorting and/or compressing, \package{cleveref} does
+% something slightly more complicated than simply checking whether the
+% reference types match. In fact, it checks whether the reference
+% \emph{formats} match.\footnote{To be precise, \package{cleveref} checks
+% whether the $\backslash$|crefformat| definitions match.} This will
+% always be the case for cross-references of the same type. But it could
+% also be the case for cross-references that have different types, if the
+% cross-reference formats happen to be identical.
+%
+% The reason for doing this is to allow cross-references to e.g.\
+% sections and subsections to be grouped together if they have identical
+% formats. The default formats for the sectioning commands, figures and
+% subfigures, tables and subtables, and enumerated lists are set up in
+% this way. If you change any of them using the low-level customisation
+% commands, but still want them to be grouped together, then you must
+% ensure that the formats are \emph{identical}. (It is \emph{not}
+% sufficient for the formats to produce identical typeset text; the
+% format definitions must contain identical \LaTeX{} code.)
+%
+% Note that if you use the low-level customisation commands, you might
+% still want to provide |\crefname| and |\Crefname| definitions too, so
+% that the |\namecref| commands will work (see \cref{sec:typesetting}).
+%
+%
+% \subsubsection{Single Cross-References}
+% \label{sec:ref_format}
+% \DescribeMacro\crefformat
+% \DescribeMacro\Crefformat
+% Cross-reference formats for \emph{single} cross-references are defined
+% or redefined using the |\crefformat| and |\Crefformat| commands, which
+% are used by the |\cref| and |\Cref| commands respectively. These take
+% two arguments: the cross-reference type, and the formatting code:
+% \begin{quote}
+% |\crefformat|\marg{type}\marg{format}\\
+% |\Crefformat|\marg{type}\marg{format}
+% \end{quote}
+% The \meta{type} is usually the name of the counter, except for labels
+% whose type has been overridden explicitly (see \cref{sec:label_type}),
+% theorem-like environments \emph{when the \package{ntheorem} or
+% \package{amsthm} package is loaded}, in which case it is the
+% environment name, and appendices. For the latter, the \meta{type} is
+% ``appendix'' for the top-level sectioning command (|\chapter| or
+% |\section|, depending on the document class), ``subappendix'' for the
+% sectioning command one level below (|\section| or |subsection|),
+% ``subsubappendix'' for the next level of sectioning command, etc.
+%
+% As in the case of the |\crefname| and |\Crefname| commands, if the
+% corresponding |\Crefformat| is undefined when |\crefformat| is called,
+% it will define the |\Crefformat| to produce a capitalised version of
+% |\crefformat|, using |\MakeUppercase|. Conversely, if the corresponding
+% |\crefformat| is undefined when |\Crefformat| is called, it will define
+% the |\crefformat| to produce a lower-case version of |\Crefformat|,
+% using |\MakeLowercase|. Obviously, this will only work properly if the
+% format starts with a letter, and letter constructs (such as accented
+% letter constructs) must be surrounded by braces (see
+% \cref{sec:global_customisation}).
+%
+% The \meta{format} argument can be any valid \LaTeX{} code, though you
+% will need to |\protect| fragile commands. It should contain three
+% arguments, |#1|, |#2| and |#3|. The first argument is the formatted
+% version of the label counter (e.g.\ |\theequation|). The other two are
+% used to mark the beginning and end of the part of the cross-reference
+% that forms the hyperlink when the \package{hyperref} package is used,
+% and \emph{must} appear in that order (see \cref{sec:other_packages}).
+%
+% As an example,
+% \begin{quote}
+% |\crefformat{equation}{Eq.~(#2#1#3)}|
+% \end{quote}
+% will typeset equation references as
+% \begin{quote}
+% Eq.~(\meta{counter})
+% \end{quote}
+% with the counter (excluding the parentheses) forming the hyperlink.
+%
+% Note that the hyperlink arguments are \emph{not} letters, so if |#2|
+% appears at the beginning of \meta{format}, \package{cleveref} will not
+% be able to automatically define the other capitalisation variant
+% automatically using |\MakeUppercase| or |\MakeLowercase|. In this case,
+% you will have to define both variants separately. For example, if you
+% wanted the ``Eq.''\ to be part of the hyperlink, you would have to
+% explicitly define:
+% \begin{quote}
+% |\crefformat{equation}{#2eq.~(#1)#3}|\\
+% |\Crefformat{equation}{#2Eq.~(#1)#3}|
+% \end{quote}
+%
+%
+% \subsubsection{Reference Ranges}
+% \label{sec:ref_range_format}
+% \DescribeMacro\crefrangeformat
+% \DescribeMacro\Crefrangeformat
+% The format for reference ranges is defined by |\crefrangeformat|
+% and\linebreak[4] |\Crefrangeformat|. Like |\creformat| and
+% |\Crefformat|, the commands take two arguments: the cross-reference
+% type, and the formatting code.
+% \begin{quote}
+% |\crefrangeformat|\marg{type}\marg{format}\\
+% |\Crefrangeformat|\marg{type}\marg{format}
+% \end{quote}
+% The same comments apply as in the case of single cross-references: the
+% \meta{type} is usually the name of the counter, except for appendices,
+% labels with explicitly overridden types, and theorem-like environments
+% when \package{ntheorem} or \package{amsthm} are loaded. Again, if the
+% other-capitalisation variant is not already defined, it will be defined
+% automatically.
+%
+% The \meta{format} argument can again be any valid \LaTeX{} code, with
+% fragile commands |\protect|ed. However, this time it should contain
+% \emph{six} arguments, |#1|--|#6|. The first two (|#1| and |#2|) are the
+% formatted versions of the label counters, the next two (|#3| and |#4|)
+% are used to mark the beginning and end of the hyperlink for the first
+% cross-reference, and the final two (|#5| and |#6|) mark the beginning
+% and end of the second cross-reference's hyperlink.
+%
+% As an example,
+% \begin{quote}
+% |\crefrangeformat{equation}{eqs.~(#3#1#4) to~(#5#2#6)}|
+% \end{quote}
+% would typeset equation reference ranges as
+% \begin{quote}
+% eqs.~(\meta{counter1}) to~(\meta{counter2})
+% \end{quote}
+% with the counters (excluding the parentheses) forming the hyperlinks.
+%
+%
+% \subsubsection{Multiple Cross-References}
+% \label{sec:multiple_ref_format}
+% \DescribeMacro\crefmultiformat
+% \DescribeMacro\Crefmultiformat
+% \DescribeMacro\crefrangemultiformat
+% \DescribeMacro\Crefrangemultiformat
+% The format for multiple cross-references is defined by
+% |\crefmultiformat| and\linebreak[4] |\Crefmultiformat|, and that of
+% reference ranges within multiple cross-references by
+% |\crefrangemultiformat| and |\Crefrangemultiformat|. Multi-references
+% also require \emph{all} the other cross-reference formats to be defined
+% (see \cref{sec:ref_format,sec:ref_range_format}), including the single
+% reference range formats, even if you never use the |\crefrange| and
+% |\Crefrange| commands.
+%
+% The commands all take five arguments: the cross-reference type, the
+% format for the first cross-reference in a list, the format for the
+% second cross-reference in a list of two, the format for the middle
+% cross-references in a list of more than two, and the format for the
+% last cross-reference in a list of more than two.
+% \begin{quote}
+% |\crefmultiformat|\marg{type}\marg{first}\marg{second}\marg{middle}\marg{last}\\
+% |\Crefmultiformat|\marg{type}\marg{first}\marg{second}\marg{middle}\marg{last}\\
+% |\crefrangemultiformat|\marg{type}\marg{first}\marg{second}\marg{middle}\marg{last}\\
+% |\Crefrangemultiformat|\marg{type}\marg{first}\marg{second}\marg{middle}\marg{last}
+% \end{quote}
+%
+% The \meta{type} is, as ever, the counter name (except for appendices,
+% explicitly overridden label types, and theorem-like environments when
+% the \package{ntheorem} or \package{amsthm} packages are loaded). The
+% same considerations apply to the formatting arguments \meta{first},
+% \meta{second}, \meta{middle} and \meta{last} as for the \meta{format}
+% argument of |\crefformat| or |\crefrangeformat|, including the meaning
+% of the arguments that should appear in the formatting code (|#1|, |#2|
+% and |#3| for |\crefmultiformat| and |\Crefmultiformat|, |#1|--|#6| for
+% |\crefrangemultiformat| and |\Crefrangemultiformat|). However, when the
+% corresponding other-capitalisation variant is automatically defined,
+% only the first letter of the \meta{first} argument is upper- or
+% lower-cased; the other arguments are defined to be identical for both
+% variants.
+%
+% Be careful to get the spaces at the beginning and end of the formatting
+% code correct: the \meta{first} and \meta{second}, or \meta{first},
+% \meta{middle} and \meta{last}, \LaTeX{} code snippets are typeset one
+% after another in a multi-reference, with no space separating them. You
+% may or may not want spaces at the beginning or end of the formatting
+% code, depending on the formatting you desire. For example, in the
+% default equation format:
+% \begin{quote}
+% |\crefmultiformat{equation}{eqs.~(#2#1#3)}%|\\
+% | { and~(#2#1#3)}{, (#2#1#3)}{ and~(#2#1#3)}|
+% \end{quote}
+% the \meta{middle} argument should \emph{not} have a space at the
+% beginning, whereas the \meta{second} and \meta{last} arguments
+% \emph{should} have a space.
+%
+%
+% \subsubsection{Label Cross-References}
+% If you define the format for a particular cross-reference type using
+% the low-level customisation commands, and still want to use the
+% |\labelcref| command to produce just the label part of the
+% cross-reference, then you must also define the appropriate |\labelcref|
+% formats for that type. This is done using the |\labelcrefformat|,
+% |\labelcrefrangeformat|, |\labelcrefmultiformat| and
+% |\labelcrefrangemultiformat| commands. Their syntax is identical to
+% that of the corresponding |\crefformat|, |\crefrangmeformat|,
+% |\crefmultiformat| or |\crefrangemultiformat| command. Typically, the
+% |\labelcref| formats should be defined identically to the standard
+% |\cref| formats, except for the \meta{first} part, which should leave
+% off the cross-reference name. This is not enforced, however.
+%
+%
+%
+% \section{Advanced Cross-Reference Formating}
+% When you define a custom cross-reference format using
+% |\creflabelformat|, |\creformat| et al.\ (see \cref{sec:customising}),
+% you're not merely defining a pattern with placeholders to be filled in.
+% You're really defining the body of a LaTeX macro, with the formatted
+% labels as arguments. This is a very powerful tool. It means that the
+% only limit on how you can process the labels is your ability to code it
+% in \TeX{}.\footnote{Since \TeX{} is Turing-complete, that means you
+% can do anything you like short of solving the Halting Problem.} Which
+% potentially allows for very sophisticated cross-reference formatting.
+%
+% One example of this is removing common prefixes from reference ranges.
+% E.g.\ if you're numbering equations within sections, and |eq1|, |eq2|
+% and |eq3| are all in the section 1.2, then you might want to typeset
+% |\cref{eq1,eq2,eq3}| as ``eqs.~(1.2.1--3)'' instead of ``eqs.~(1.2.1)
+% to~(1.2.3)''. Similarly, if |eq1a|, |eq1b| and |eq1c| are
+% \package{amsmath} subequations, you might want to typeset
+% |\cref{eq1a,eq1b,eq1c}| as ``eqs.~(1a--c)'' instead of ``eqs.~(1a)
+% to~(1c)''.
+%
+% \package{Cleveref} provides a useful utility macro for this:
+% |\crefstripprefix|, which takes two strings as arguments, and returns
+% the second one with any common prefix stripped off. (However, the very
+% last run of digits or letters in the string is retained in its
+% entirety, even if it has a part in common.) With the help of this
+% macro, you can produce the desired reference-range formatting with:
+% \begin{quote}
+% |\crefrangelabelformat{equation}%|\\
+% | {(#3#1#4--#5\crefstripprefix{#1}{#2}#6)}|\\
+% |\crefrangelabelformat{subequation}%|\\
+% | {(#3#1#4--#5\crefstripprefix{#1}{#2}#6)}|
+% \end{quote}
+%
+% Similarly, stripping prefixes from multi-references so that e.g.\linebreak
+% |\cref{fig1a,fig1b,fig1d}| is typeset as ``figs.~1a, b and d'' instead
+% of ``figs.~1a, 1b and 1d'' can be achieved by passing the prefix from
+% the first component to the others in an auxiliary macro (called
+% |\crefstripprefixinfo| here):
+% \begin{quote}
+% |\crefmultiformat{figure}%|\\
+% | {\edef\crefstripprefixinfo{#1}figs.~#2#1#3}%|\\
+% | { and~#2\crefstripprefix{\crefstripprefixinfo}{#1}#3}%|\\
+% | {, #2\crefstripprefix{\crefstripprefixinfo}{#1}#3}%|\\
+% | {, and~#2\crefstripprefix{\crefstripprefixinfo}{#1}#3}|
+% \end{quote}
+%
+%
+% \section{Language, \package{babel} and \package{polyglossia}
+% support}
+% \label{sec:language_babel}
+% \package{Cleveref} supports different languages via package options, in
+% the usual way, though not all languages are supported
+% yet.\footnote{Contributions of translations for missing languages are
+% very welcome! See \cref{sec:new-features} for information on how to
+% contribute translations.} Basic \package{cleveref} language support
+% will work even if \package{babel} or \package{polyglossia} are not
+% loaded. The only exception currently is Catalan (which requires the
+% |\lgem| command provided by these packages).
+%
+% The \package{babel} package is fully supported if it is loaded,
+% allowing you to change the language used in cross-references using the
+% \package{babel} language switching commands, such as |\selectlanguage|
+% and |\foreignlanguage|. Similar support is provided for the
+% \package{polyglossia} babel replacement package.
+%
+% Note that when using \package{babel}, you still need to tell
+% \package{cleveref} which language it should use for the default
+% cross-reference formats. It is \emph{not} sufficient to pass the
+% language option to \package{babel} alone. You \emph{must} also
+% \emph{either} pass the language options to \package{cleveref} package
+% directly when loading it:
+% \begin{quote}
+% |\usepackage|\oarg{language}|{cleveref}|
+% \end{quote}
+% \emph{or} (better) specify the desired language globally as a document class
+% option:
+% \begin{quote}
+% |\documentclass|\oarg{language}\marg{class}\\
+% |\usepackage{babel}|\\
+% |\usepackage{cleveref}|\\
+% \end{quote}
+% The latter method is strongly recommended. \LaTeX{} automatically
+% passes document class options to \emph{every} loaded package. So
+% specifying the language as a global option causes the appropriate
+% language support to be enabled automatically in every package that
+% supports it.
+%
+% When writing multi-language documents, you may need to specify multiple
+% language options in order to load \package{babel} support for all of
+% them. In this case, \package{babel} sets the initial document language
+% to the \emph{last} language option. (See the \package{babel}
+% documentation for more details.) \package{Cleveref} does the same: the
+% last language in the option list determines the language for the
+% initial cross-reference format definitions; additional language options
+% load \package{cleveref} support for switching between those languages.
+%
+% \package{Polyglossia} uses a different mechanism for selecting and
+% loading languages, and ignores package language options entirely. The
+% default language must be set using \cmd{\setdefaultlanguage}, and
+% additional languages are loaded using \cmd{\setotherlanguage}.
+% \package{Cleveref} recognises these commands, so you should \emph{not}
+% pass language options to \package{cleveref} when using
+% \package{polyglossia}. (Passing language options to \package{cleveref},
+% either as package options or global options, will override the default
+% language set by \package{polyglossia}'s \cmd{\setdefaultlanguage}.)
+% Note that the |\setdefaultlanguage| option \emph{must} come before
+% \package{cleveref} is loaded, so that \package{cleveref} knows what
+% default language you want. (If you don't do this, \package{cleveref}
+% will generate a warning message in the log.)
+%
+% The \package{babel} and \package{polyglossia} support works by
+% redefining the cross-reference names and conjunctions for the default
+% cross-reference types. Any customisations you make to the default
+% cross-reference names and conjunctions \emph{in the preamble} apply to
+% the main language (i.e.\ the last language listed in the options). A
+% |\selectlanguage| \package{babel} command (or similar) in the document
+% body will override these customisations, replacing them with the
+% defaults for the newly selected language. If you later use
+% |\selectlanguage| to switch back to the main language, any
+% customisations from the preamble will be restored. If you want to
+% customise cross-reference names or conjunctions for any language other
+% than the main one, you either have to explicitly redefine them after
+% every language switching command, or hook the redefinitions into
+% \package{babel} or \package{polyglossia}'s language switching
+% mechanism. (See section ``Language and \package{babel} Support'' in the
+% full implementation documentation, and the \package{babel} or
+% \package{polyglossia} package documentation.)
+%
+% If you have defined formats for new cross-reference types for which no
+% defaults are provided, then you're on your own. \package{Cleveref} will
+% not know how to redefine them for other languages, and again you will
+% have to take care of it yourself, either by explicitly redefining them
+% in your document after each language switch, or by hooking the
+% redefinitions into \package{babel} or \package{polyglossia}'s language
+% switching mechanisms.
+%
+% On the other hand, since the language switching commands only modify
+% the cross-reference components, if you use the low-level customisation
+% commands to take full control of the format for a particular
+% cross-reference type, then (unless you're careful) you take it out of
+% the control of \package{babel} or \package{polyglossia} entirely. If
+% you want to use the low-level customisation commands, but \emph{do}
+% still want the language switching commands to work, then you have to
+% use the component macros in your customised formats. The
+% cross-reference names are stored in macros called
+% |\cref@|\meta{type}|@name|, |\Cref@|\meta{type}|@name|,
+% |\cref@|\meta{type}|@name@plural|, and
+% |\Cref@|\meta{type}|@name@plural|. (Note that since these
+% macro names contain the ``@'' character, you must use |\makeatletter|
+% and |\makeatother| to access them.)
+%
+% For example, if you wanted to redefine the equation format so that the
+% cross-reference name (``equation'') was also part of the
+% hyperlink,\footnote{This is merely as an example. Including names in
+% hyperlinks is more easily accomplished by setting the
+% \option{nameinlink} package option.} but you still want to be able to
+% switch language using \package{babel} or \package{polyglossia}, you
+% would need something like:
+% \begin{quote}
+% |\makeatletter|\\
+% |\crefformat{equation}{#2\cref@equation@name~(#1)#3}|\\
+% \dots\\
+% |\makeatother|
+% \end{quote}
+% and similarly for |\crefrangeformat|, |\crefmultiformat|,
+% |\Crefformat|, etc.
+%
+% Note that if you define an empty cross-reference name for some type
+% using an empty |\crefname|, e.g.\ for equations
+% \begin{quote}
+% |\crefname{equation}{}{}|
+% \end{quote}
+% then the empty cross-reference name will be retained when switching
+% languages. This is probably what you want anyway.
+%
+%
+%
+% \section{The \file{cleveref.cfg} File}
+% If \package{cleveref} finds a \file{cleveref.cfg} file somewhere in the
+% \LaTeX{} search path, it automatically loads any definitions found in
+% that file. (For details of which directories \LaTeX{} searches, consult
+% the documentation for your site's \TeX{} installation.) The main use of
+% \file{cleveref.cfg} is to store any cross-reference format
+% customisations that you want to use in every document you write, so
+% that you don't have to include them explicitly in every document's
+% preamble.
+%
+%
+%
+% \section{Poor Man's \package{cleveref}}
+% Sometimes you may need to send your \LaTeX{} source to someone who
+% can't or won't install the \package{cleveref} package themselves. For
+% example, many academic journals accept papers in \LaTeX{} format, but
+% only support a small subset of the packages available on CTAN. The
+% \option{poorman} option was designed specifically to help in this
+% situation.
+%
+% When the \option{poorman} option is supplied, your document will be
+% processed as normal. But in addition, a |sed| script will automatically
+% be written, containing rules for replacing all the \package{cleveref}
+% commands with the \LaTeX{} code that they would produce, and using the
+% standard |\ref| command to produce the cross-references themselves.
+% I.e.\ the script rewrites your document as you would have done if you
+% had had to do it manually!
+%
+% The advantage, of course, is that you \emph{don't} have to do it
+% manually. Instead, you can use all the features of \package{cleveref},
+% and once you've created a version of your document that you want to
+% send elsewhere, you can process it through the |sed| script to
+% completely remove the \package{cleveref} dependency. The recipient
+% won't even realise you used \package{cleveref}!
+%
+% The |sed| script is written to the same directory as the (main)
+% \LaTeX{} source file, and given the same name as that source file but
+% with the extension \file{.sed}. To process your document through the
+% script, all you need to do is run the following from your shell:
+% \begin{quote}
+% sed -f \meta{name}\file{.sed} \
+% \meta{name}\file{.tex} \textgreater \meta{newname}\file{.tex}
+% \end{quote}
+% where \meta{name} is the name of the file containing your \LaTeX{}
+% source file minus the \file{.tex} extension, and \meta{newname} is
+% whatever you want to call the new version. \emph{Do not} make
+% \meta{newname} the same as \meta{name}: it won't work. (It's in any
+% case wise to keep the original \LaTeX{} source file containing the
+% \package{cleveref} commands, in case you need to produce an updated
+% version of your document in the future. Think of the
+% \meta{newname}\file{.tex} file in the same way as a \file{DVI} file:
+% something you can always reproduce from the original source.)
+%
+% If your document is composed of a number of separate \LaTeX{} source
+% files, combined with |\include| commands, only one |sed| script will be
+% generated, but you will need to run \emph {each} source file through
+% that \emph{same} script (and probably modify the |\include| commands to
+% match the new file names). However, using \package{babel}'s language
+% switching commands in a document split across multiple separate source
+% files is beyond the capabilities of the \package{poorman} option. You
+% will almost certainly need to manually tweak the |sed| script in that
+% case.
+%
+% Note that the \option{poorman} script cannot fully reproduce the
+% typesetting of the original \package{cleveref} cross-references in all
+% cases.\footnote{At least, not without resorting to inserting low-level
+% \LaTeX{} code in your document, which would somewhat defeat the purpose
+% of the \option{poorman} option.} In particular, if you're using the
+% \package{hyperref} package (see \cref{sec:other_packages}) to turn
+% cross-references into hyperlinks, any customisation of hyperlinks will
+% be lost. And if you're using the \package{varioref} package (see
+% \cref{sec:other_packages}), you may need to manually tweak the spacing
+% in front of some of the \package{varioref} commands in the document
+% produced by the |sed| script.
+%
+%
+%
+% \section{Interaction with Other Packages}
+% \label{sec:other_packages}
+% The \package{cleveref} package \emph{must} be loaded \emph{after} all
+% other packages that don't specifically support it,\footnote{At the time
+% of writing, the only packages I'm aware of that should be loaded after
+% \package{cleveref} are the \package{hypdvips} and \package{autonum}
+% packages.} i.e.\ the
+% \begin{quote}
+% |\usepackage{cleveref}|
+% \end{quote}
+% line should usually be the last |\usepackage| command in your
+% document's preamble.
+%
+% \package{Cleveref} tries as far as possible to minimise its impact on
+% the standard \LaTeX{} cross-referencing machinery, allowing it to work
+% alongside many of the other packages that also enhance \LaTeX{}'s
+% cross-referencing features, though it can occasionally interact badly
+% with packages that redefine the same core \LaTeX{} commands. Beyond
+% peacefully co-existing with many packages, \package{cleveref} includes
+% specific support for a number other packages, allowing it to integrate
+% its clever cross-referencing features with the features provided by
+% these packages: \package{babel}, \package{polyglossia},
+% \package{hyperref}, \package{varioref}, \package{ntheorem},
+% \package{amsthm}, \package{aliascnt}, \package{subfig},
+% \package{algorithmicx}\footnote{The \package{algorithmic} package is
+% \emph{not} supported.}, \package{algorithm2e}, \package{listings}.
+%
+% \package{Cleveref} implements a significantly enhanced version of the
+% features found in the \package{fancyref} package, \package{ntheorem}'s
+% \option{thref} option, and \package{varioref}'s |\labelformat| command.
+% Although these features may (or may not) work correctly alongside
+% \package{cleveref}, there is no good reason to use them when using
+% \package{cleveref}, and their use is unsupported. (Note that
+% \package{varioref} \emph{is} fully supported by \package{cleveref},
+% just that \package{cleveref}'s features supersede \package{varioref}'s
+% |\labelformat| feature. Similarly, \package{ntheorem} is fully supported
+% and even recommended, only the \option{thref} option is superseded by
+% \package{cleveref}.)
+%
+% \DescribeMacro{\thref}
+% \DescribeMacro{\vref}
+% \DescribeMacro{\Vref}
+% \DescribeMacro{\vrefrange}
+% \DescribeMacro{\Vrefrange}
+% \DescribeMacro{\fullref}
+% \DescribeMacro{\Fullref}
+% In fact, if \package{ntheorem} is loaded with the \option{thref}
+% option, \package{cleveref} redefines \package{ntheorem}'s |\thref|
+% command for you, to be an alias for |\cref|. Similarly, if
+% \package{varioref} is loaded, \package{cleveref} redefines the |\vref|,
+% |\vrefrange|, |\fullref| commands and variants to instead use the
+% \package{cleveref} features for cross-reference formatting, whilst
+% retaining all the \package{varioref} page-referencing magic. You can
+% continue to use the other \package{varioref} and \package{ntheorem}
+% commands (other than |\labelformat| and the \option{thref} option)
+% whilst using \package{cleveref}, as long as \package{cleveref} is
+% loaded \emph{last}.
+%
+% \DescribeMacro{\vref*}
+% \DescribeMacro{\Vref*}
+% \DescribeMacro{\vrefrange*}
+% \DescribeMacro{\Vrefrange*}
+% \DescribeMacro{\fullref*}
+% \DescribeMacro{\Fullref*}
+% Note that, whilst in the business of redefining the \package{varioref}
+% commands, \package{cleveref} seizes the opportunity to get rid of the
+% irritating spacing behaviour of the |\vref| and |\Vref| commands,
+% instead making it consistent with the other \package{cleveref}
+% cross-referencing commands. This also frees up the starred variants of
+% the \package{varioref} commands to be used for suppressing hyperlinks
+% when the \package{hyperref} package is loaded, as usual.
+% (Unfortunately, due to lack of support for this in \package{varioref},
+% the page references will still sometimes be hyperlinks, even when using
+% the starred variants. Go bug the \package{varioref} maintainer about
+% this if you don't like it.)
+%
+% \package{Cleveref} is currently incompatible with the
+% \package{mathtools} package's\linebreak[4] \option{showonlyrefs}
+% option, which automatically labels only those equations that are
+% cross-referenced. The \package{autonum} package provides a possible
+% alternative, which implements similar features in a
+% \package{cleveref}-compatible manner.
+%
+%
+%
+% \section{Known Bugs, Non-Bugs, and Possible Improvements}
+% \label{sec:known_bugs}
+%
+% \subsection{Non-Bugs}\label{sec:non-bugs}
+% The following are \emph{not} bugs. They are either intentional
+% behaviour, unavoidable behaviour, or are caused by \LaTeX{}
+% misunderstandings:
+% \begin{itemize}
+% \item If you are using both \package{varioref} and \package{hyperref},
+% \emph{make sure you are loading them in the correct order}, otherwise
+% cross-references will reference completely the wrong thing
+% \emph{without any warning in the \LaTeX{} output or log!} The
+% packages \emph{must} be loaded in the following order:
+% \package{varioref}, \package{hyperref}, \package{cleveref}.
+% \item \package{Cleveref} on its own won't automatically infer the type
+% of theorem-like environment you're referring to in a cross-reference.
+% Cross-references to all theorem-like environments will use the same
+% name, ``theorem''. To allow the theorem type to be determined
+% automatically, you need to load either the \package{ntheorem} or the
+% \package{amsthm} package. Also note that all |\newtheorem|
+% definitions must be placed \emph{after} the \package{cleveref}
+% package is loaded.
+% \item Due to the way \TeX{} parses arguments, you have to be a little
+% careful when using |\label| inside an optional argument to another
+% command. |\label|\marg{label} will work, but trying to pass an
+% optional argument |\label|\oarg{type}\marg{label} will fail. If you
+% want to pass an optional argument to |\label| whilst already within
+% an optional argument to some other command, you must surround the
+% entire label command with braces:
+% |{\label|\oarg{type}\marg{label}|}|. This crops up e.g.\ when adding
+% labels to subfigure subcaptions in the \package{memoir} document
+% class. A simpler solution in this particular case is to define the
+% label in the subfigure body, instead of in the subcaption.
+% \item \package{Cleveref} will not work properly with the standard
+% \LaTeX{} |eqnarray| environment. There is no intention to fix this.
+% The |eqnarray| environment is poorly implemented, making it difficult
+% to get it to work properly with \package{cleveref}, and it's broken
+% any way. You're \emph{far} better off using the \package{amsmath}
+% replacements, such as |gather|, |align|, |multline| and |split|,
+% which \emph{do} work properly with \package{cleveref}. (See
+% \url{http://www.tug.org/pracjourn/2006-4/madsen/}).
+% \item If you are using \package{babel}, you \emph{must still} pass the
+% appropriate language option to \package{cleveref}, as well as to
+% \package{babel}. Passing it to \package{babel} alone is \emph{not}
+% sufficient (you will get the default English cross-reference
+% formats). The best way to set the document language is as a global
+% option in the |\documentclass| line. (This is standard \LaTeX{} and
+% \package{babel} practice -- read up on \LaTeX{}'s option handling for
+% more detail.)
+% \item \package{Cleveref} can't cope with active characters being
+% present in cross-reference label names. For example, if French
+% \package{babel} support is loaded, the commonly used ``:'' in label
+% names will often fail, spewing the usual random selection of
+% mysterious \TeX{} errors that accompany such deep-seated errors. The
+% solution is to avoid using active characters in label names. (You may
+% need to consult the \package{babel} documentation to discover which
+% active characters are defined in your language.)
+% \item The \option{poorman} |sed| script loses any custom
+% \package{cleveref} hyperlink formatting you might have defined, and
+% does not always reproduce the original spacing around the
+% \package{varioref} commands when \package{varioref} is used. This is
+% not a bug; it is a side-effect of the intended purpose of the
+% \option{poorman} option. The philosophy behind \option{poorman} is to
+% replace \package{cleveref}'s enhanced cross-referencing with standard
+% \LaTeX{} cross-reference commands that are guaranteed to work with
+% any standard \LaTeX{} installation. Although it would be simple to
+% fix these ``bugs'', it's almost certainly impossible without using
+% low-level \LaTeX{} code that is unlikely to be supported by e.g.\
+% academic journals, thereby defeating the whole purpose of the
+% \option{poorman} option.
+% \end{itemize}
+%
+%
+% \subsection{Known Bugs and Work-Arounds}
+% In rough order of significance:
+% \begin{itemize}
+% \item When both the \package{amsmath} \emph{and} \package{hyperref}
+% packages are loaded at the same time, the \package{cleveref}
+% cross-referencing commands do not work when used within section
+% titles. If anyone can figure out why, let me know! As a work-around,
+% use |\ref| within section titles when your document uses both
+% \package{amsmath} and \package{hyperref}.
+% \item When using \package{varioref} and \package{hyperref} with
+% \package{cleveref}, the \package{cleveref}\linebreak[4]
+% \option{nameinlink} option will not cause the word ``page'' in the
+% page-reference part of a |\vref| (or other \package{varioref})
+% command to be included in the hyperlink, nor will the ``on the
+% previous page'' (or similar) text produced by |\vref| be hyperlinked.
+% This is not strictly speaking a \package{cleveref} issue. It is the
+% normal behaviour of the \package{hyperref}-enhanced version of
+% \package{varioref}'s |\vpageref| command, which \package{cleveref}
+% uses to produce the page references in its enhanced |\vref| command.
+% (This \emph{might} be improved in a future version by partially
+% overriding \package{hyperref}.)
+% \item \package{Cleveref} doesn't know about the \package{subfloat}
+% package, so you have to revert to using |\ref| for cross-references
+% to sub-figures. (Might be fixed in a future version.)
+% \item The \package{beamer} document class redefines the |\label|
+% command in a particularly devious way that breaks
+% \package{cleveref}'s optional argument to that command. (Might be
+% fixed in a future version.)
+% \item \package{Cleveref} is incompatible with the \option{showonlyrefs}
+% option of the \package{mathtools} package, though it should be
+% compatible with the rest of \package{mathtools}. (Might be fixed in a
+% future version.) The \package{autonum} package, which provides
+% similar functionality and \emph{is} designed to be
+% \package{cleveref}-compatible, is a possible alternative.
+% \item \package{Cleveref} assumes that counters are only ever reset by
+% the standard sectioning commands (|\chapter|, |\section|, etc.). If
+% this is not the case, the automatic compression of consecutive
+% cross-references into a reference range may be incorrect. Making this
+% more flexible would be a simple task, but so far there doesn't seem
+% to be much need for it.
+% \end{itemize}
+%
+%
+% \subsection{Possible New Features and Improvements}
+% \label{sec:new-features}
+% In no particular order:
+% \begin{itemize}
+% \item The \option{poorman} option could be enhanced to allow a choice
+% of scripting language rather than just |sed| (e.g.\ |awk|, |perl|,
+% \dots?), but these are unlikely to be much better for those apt to
+% complain about the use of |sed|. The portable option would be to
+% output a \TeX{} ``script'', but this would be \emph{much} more
+% work\footnote{\LaTeX{} \emph{really} isn't suited to that kind of
+% pattern matching task -- just take a look at the code for escaping
+% regexp special characters in this package!} than I'm prepared to
+% invest.
+% \item \package{Cleveref} doesn't include support for all languages yet.
+% Any contributions of translations for missing languages are most
+% welcome! If you can contribute definitions for a missing language,
+% ideally you should add them below the existing ones in the
+% implementation (using those as a model), generate a patch against the
+% original \package{cleveref.dtx} file, and send the patch by email to
+% the package author. However, if you don't know how to produce a
+% patch, you can instead just send the translations as a plain text
+% file.
+% \end{itemize}
+%
+%
+%
+% \section{Thanks}
+% A number of people have helped improve \package{cleveref} by
+% contributing code and translations. Thanks to Michael Ummels for
+% contributing the \package{amsthm} support code, and to Stefan Pinnow,
+% Gonzalo Medina, Massimo Redaelli, Philip H\"olzenspies, Aleksander
+% Gorohovski, Benjamin H{\o}yer, Johannes Mueller, Paulo Roberto Massa
+% Cereda, Simon Sigurdhsson, Rafel Jaume Dey\`a and Eva Bosch Roura for
+% contributing translations. Thanks also to Susanna Goldschmidt for
+% additional help with the translations.
+%
+% Many people have suggested improvements or reported bugs -- indeed,
+% many have put significant effort into helping investigate and fix them.
+% So thanks (in alphabetical order) to: Adrian Knoth, Akim Demaille, Alan
+% Munn, Aleksander Gorohovski, Amar Ghaisas, Anand Deopurkar, Andreas
+% Haselbacher, Arne Meier, Bas Ploeger, Christian Tuma, Dan Luecking,
+% David Gleich, Davide Liessi, Denis Bitouz\'e, Domenic Denicola, Donald
+% Ars\-en\-eau, Eric Ahlberg, Frank Mittlebach, Hendrik Maryns, Iain
+% Cunningham, Ingolf Becker, James Sharam, Jens Mueller, Joel C.\
+% Salomon, Jonas Nyrup, Joris Pinkse, Kristian Debrabant, Leo Shidai Liu,
+% Lev Bishop, Mak Trifkovic, Mark Cipolone, Matej Batic, Matt Gately,
+% Matthew Skala, Michael Barber, Michael Gorven, Michal Kaut, Mico
+% Loretan, Milania, Nicolas Dudebout, Olivier Roy, Patrick H\"acker, Paul
+% Gomme, Ricardo de Aldama S\'anchez, Robert Fischer, Sebastian
+% \O{}rsted, Simon Spiegel, Stefan Pinnow, Steve Dower, Ted Pavlic,
+% Thomas Arildsen, Tobias Jores, Uwe L\"uck and Vadim Makarov for their
+% help.
+% (If I've inadvertently missed you out, please let me know!)
+%
+%
+% \StopEventually{\clearpage\PrintChanges\clearpage\PrintIndex}
+%
+%
+% \clearpage
+% \section{Implementation}
+% Essentially, the core of the implementation consists of writing an
+% extra piece of information --- the label ``type'' --- to the \file{aux}
+% file, and defining \cmd{\cref} commands which use this extra
+% information to typeset the cross-reference.
+%
+% The least invasive previous implementation of this kind of thing seems
+% to be that used by the \package{varioref} package. Namely, to redefine
+% the \cmd{\refstepcounter} command so that the \cmd{\@currentlabel}
+% macro, which usually just contains the typeset version of the counter,
+% now contains the additional type information.
+%
+% However, even less invasive than \package{varioref}'s implementation is
+% to leave \cmd{\@currentlabel} alone, and define a new
+% \cmd{\cref@currentlabel} macro to hold the extra information. (In fact,
+% we store three extra pieces of information: the type, the counter value
+% itself, and the value of the counter that causes the label's counter to
+% be reset, which we call the ``prefix'' from now on.) The standard
+% \cmd{\@currentlabel} contents eventually get written to the \file{aux}
+% file as an argument to \cmd{\newlabel} by the usual \LaTeX{} label
+% mechanisms. In order to also get the information in
+% \cmd{\cref@currentlabel} into the \file{aux} file, we have to redefine
+% the \cmd{\label} macro so that it writes \emph{two} \cmd{\newlabel}
+% lines to the \file{aux} file for \emph{each} label: the standard one,
+% plus an additional one which contains the extra information in
+% \cmd{\cref@currentlabel}. The additional \cmd{\newlabel} line has the
+% suffix |@cref| added to the label name. Thus the extra information in
+% \cmd{\cref@currentlabel} will end up in \cmd{\r@\meta{label}@cref} when
+% the \file{aux} file is re-read on the next pass.
+%
+% Doing things this way involves less hacking to get everything else
+% working again, since the standard cross-reference mechanism and
+% \cmd{\ref} command are left entirely intact. \package{Cleveref} can
+% then do what it likes with its own parallel set of labels, without
+% getting in the way of other packages that play around with the
+% cross-reference mechanism. The only downside is the additional memory
+% resources this uses, but on modern \TeX{} implementations this is
+% unlikely to be a problem.
+%
+%
+% \subsection{Redefinitions of \LaTeX{} Kernel Macros}
+% \begin{macro}{\refstepcounter}
+% \begin{macro}{\cref@currentlabel}
+% \begin{macro}{\cref@old@refstepcounter}
+% We store the original \cmd{\refstepcounter} in
+% \cmd{\cref@old@refstepcounter}, then redefine \cmd{\refstepcounter}
+% so that it first calls the old version to define the standard
+% \cmd{\@currentlabel} macro, before defining \package{cleveref}'s
+% \cmd{\cref@currentlabel}, which contains the extra information. The
+% cross-reference ``type'' stored in \cmd{\cref@currentlabel} is usually
+% inferred from the counter. This can be overridden by aliasing the
+% counter name to a different type using \cmd{\crefalias}. The new
+% \cmd{\refstepcounter} can also take an optional argument, which
+% always overrides the type.
+% \begin{macrocode}
+\def\cref@currentlabel{}%
+\let\cref@old@refstepcounter\refstepcounter%
+\def\refstepcounter{%
+ \@ifnextchar[{\refstepcounter@optarg}{\refstepcounter@noarg}%]
+}%
+\def\refstepcounter@noarg#1{%
+ \cref@old@refstepcounter{#1}%
+ \cref@constructprefix{#1}{\cref@result}%
+ \@ifundefined{cref@#1@alias}%
+ {\def\@tempa{#1}}%
+ {\def\@tempa{\csname cref@#1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{#1}][\cref@result]%
+ \csname p@#1\endcsname\csname the#1\endcsname}}%
+\def\refstepcounter@optarg[#1]#2{%
+ \cref@old@refstepcounter{#2}%
+ \cref@constructprefix{#2}{\cref@result}%
+ \@ifundefined{cref@#1@alias}%
+ {\def\@tempa{#1}}%
+ {\def\@tempa{\csname cref@#1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{#2}][\cref@result]%
+ \csname p@#2\endcsname\csname the#2\endcsname}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\label}
+% \begin{macro}{\cref@label}
+% \begin{macro}{\label@optarg}
+% \begin{macro}{\label@noarg}
+% We redefine the \cmd{\label} command to make it define \emph{two}
+% labels each time it's called: the standard one, and an additional
+% \package{cleveref}-specific one with the suffix |@cref| added to the
+% label name, which contains the extra information from
+% \cmd{\cref@currentlabel}. We call the original \cmd{\label} command,
+% stored in \cmd{\cref@old@label}, to write the standard label to the
+% \file{aux} file. However, to avoid other packages messing around with
+% the content of the parallel set of \package{cleveref}-specific
+% labels, we write those directly to the \file{aux} file ourselves. We
+% also allow \cmd{\label} to take an optional argument which overrides
+% the default reference type in \cmd{\cref@currentlabel}.
+%
+% The redefinition of \cmd{\label} has to be postponed until the
+% beginning of the document because some other packages postpone their
+% own \cmd{\label} redefinitions too, and we need to override their
+% redefinitions.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \let\cref@old@label\label%
+ \def\label{\@ifnextchar[\label@optarg\label@noarg}%]
+ \let\cref@label\label%
+ \def\label@noarg#1{%
+ \cref@old@label{#1}%
+ \@bsphack%
+ \edef\@tempa{{page}{\the\c@page}}%
+ \setcounter{page}{1}%
+ \edef\@tempb{\thepage}%
+ \expandafter\setcounter\@tempa%
+ \cref@constructprefix{page}{\cref@result}%
+ \protected@write\@auxout{}%
+ {\string\newlabel{#1@cref}{{\cref@currentlabel}%
+ {[\@tempb][\arabic{page}][\cref@result]\thepage}}}%
+ \@esphack}%
+ \def\label@optarg[#1]#2{%
+ \cref@old@label{#2}%
+ \@bsphack%
+ \edef\@tempa{{page}{\the\c@page}}%
+ \setcounter{page}{1}%
+ \edef\@tempb{\thepage}%
+ \expandafter\setcounter\@tempa%
+ \cref@constructprefix{page}{\cref@result}%
+ \protected@edef\cref@currentlabel{%
+ \expandafter\cref@override@label@type%
+ \cref@currentlabel\@nil{#1}}%
+ \protected@write\@auxout{}%
+ {\string\newlabel{#2@cref}{{\cref@currentlabel}%
+ {[\@tempb][\arabic{page}][\cref@result]\thepage}}}%
+ \@esphack}%
+}% end of AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\@makefntext}
+% Footnotes don't use the \cmd{\refstepcounter} mechanism, but instead
+% set\linebreak[4] \cmd{\@currentlabel} directly inside the footnote
+% insertion item. Thus we need to explicitly set
+% \cmd{\cref@currentlabel} in footnotes. To avoid the definition
+% spilling out of the footnote, we need to set it inside
+% \cmd{\insert}'s implicit insertion item grouping level. To this end,
+% we add the explicit \cmd{\cref@currentlabel} redefinition to
+% \cmd{\@makefntext}, which gets called from within \cmd{\insert} by
+% both \cmd{\@footnotetext} and \cmd{\@mpfootnotentext}.
+% \begin{macrocode}
+\let\cref@old@makefntext\@makefntext%
+\long\def\@makefntext{%
+ \cref@constructprefix{footnote}{\cref@result}%
+ \protected@edef\cref@currentlabel{%
+ [footnote][\arabic{footnote}][\cref@result]%
+ \p@footnote\@thefnmark}%
+ \cref@old@makefntext}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\newtheorem}
+% A \cmd{\newtheorem} command provides sufficient information to
+% automatically define a reasonable cross-reference name for
+% theorem-like environments (\package{ntheorem}'s \option{thref} does
+% essentially this). So we modify \cmd{\newtheorem} (actually, the
+% lower-level \cmd{\@othm}, \cmd{\@xnthm} and \cmd{\@ynthm} macros) so
+% that it does so. We do this in such a way that default definitions or
+% explicit \cmd{\crefname} definitions for theorem-like environments
+% override those produced automatically by our modified
+% \cmd{\newtheorem}.
+%
+% The catch is that, although the \cmd{\newtheorem} command provides
+% the singular form, there's no way of reliably deducing the correct
+% plural form. Rather than implement some half-baked attempt at this
+% which will be wrong more often than it's right (especially in
+% languages other than English) and generally cause more trouble than
+% it's worth, we simply define the singular form but leave the plural
+% form undefined. If the latter is ever needed, it will produce a
+% ``undefined cross-reference type'' warning, prompting the author to
+% provide an appropriate \cmd{\crefname} definition themselves.
+%
+% \begin{macro}{\@othm}
+% \begin{macro}{\@xnthm}
+% \begin{macro}{\@ynthm}
+% After sorting out its arguments, \cmd{\newtheorem} calls one of
+% \cmd{\@othm}, \cmd{\@xthm} or \cmd{\@ythm}. We add automatic
+% definitions of \cmd{\cref@\meta{type}@name} and\linebreak[4]
+% \cmd{\Cref@\meta{type}@name} to all three of these, and add the
+% theorem-like environment to the list of cross-reference types that
+% need to be defined from components at |\||begin{document}|. Since we
+% want explicit \cmd{\crefname}'s to override these automatic
+% definitions, we store the definitions in
+% \cmd{\cref@\meta{type}@name@preamble}, which are processed at
+% |\||begin{document}|) if they haven't been overridden. The default
+% definitions also get stored in \cmd{\cref@\meta{type}@name@preamble}
+% later on, so they too will override these automatic definitions,
+% which is what we want.
+%
+% All this means that these automatic \cmd{\newtheorem} definitions
+% will only work when \cmd{\newtheorem} is used in the preamble.
+% However, this is also true of (new) cross-reference types defined
+% using \cmd{\crefname}, so it doesn't seem worth the significant
+% effort of getting the automatic definitions to work within the
+% document body.
+% \begin{macrocode}
+\let\cref@old@othm\@othm%
+\def\@othm#1[#2]#3{%
+ \edef\@tempa{\expandafter\noexpand%
+ \csname cref@#1@name@preamble\endcsname}%
+ \edef\@tempb{\expandafter\noexpand%
+ \csname Cref@#1@name@preamble\endcsname}%
+ \def\@tempc{#3}%
+ \ifx\@tempc\@empty\relax%
+ \expandafter\gdef\@tempa{}%
+ \expandafter\gdef\@tempb{}%
+ \else%
+ \if@cref@capitalise%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempa\expandafter{\MakeUppercase #3}%
+ \else%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempa\expandafter{\MakeLowercase #3}%
+ \fi%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempb\expandafter{\MakeUppercase #3}%
+ \fi%
+ \cref@stack@add{#1}{\cref@label@types}%
+ \cref@old@othm{#1}[#2]{#3}}%
+\let\cref@old@xnthm\@xnthm%
+\def\@xnthm#1#2[#3]{%
+ \edef\@tempa{\expandafter\noexpand%
+ \csname cref@#1@name@preamble\endcsname}%
+ \edef\@tempb{\expandafter\noexpand%
+ \csname Cref@#1@name@preamble\endcsname}%
+ \def\@tempc{#2}%
+ \ifx\@tempc\@empty\relax%
+ \expandafter\gdef\@tempa{}%
+ \expandafter\gdef\@tempb{}%
+ \else%
+ \if@cref@capitalise%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempa\expandafter{\MakeUppercase #2}%
+ \else%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempa\expandafter{\MakeLowercase #2}%
+ \fi%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempb\expandafter{\MakeUppercase #2}%
+ \fi%
+ \cref@stack@add{#1}{\cref@label@types}%
+ \cref@old@xnthm{#1}{#2}[#3]}%
+\let\cref@old@ynthm\@ynthm%
+\def\@ynthm#1#2{%
+ \edef\@tempa{\expandafter\noexpand%
+ \csname cref@#1@name@preamble\endcsname}%
+ \edef\@tempb{\expandafter\noexpand%
+ \csname Cref@#1@name@preamble\endcsname}%
+ \def\@tempc{#2}%
+ \ifx\@tempc\@empty\relax%
+ \expandafter\gdef\@tempa{}%
+ \expandafter\gdef\@tempb{}%
+ \else%
+ \if@cref@capitalise%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempa\expandafter{\MakeUppercase #2}%
+ \else%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempa\expandafter{\MakeLowercase #2}%
+ \fi%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempb\expandafter{\MakeUppercase #2}%
+ \fi%
+ \cref@stack@add{#1}{\cref@label@types}%
+ \cref@old@ynthm{#1}{#2}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\appendix}
+% The \cmd{\appendix} command causes the top-level sectioning commands
+% (\cmd{\chapter} or \cmd{\section}, depending on the document class)
+% to produce appendices instead. Since we want to be able to format
+% references to appendices separately from references to normal
+% top-level sections, we add to the tasks that \cmd{\appendix} does: it
+% redefines \cmd{\refstepcounter@noarg} to exceptionally override the
+% label type for chapters or sections, as appropriate, setting it to
+% ``appendix'' instead. There are two alternative definitions: one if
+% ``section'' is the top-level sectioning command, and one if
+% ``chapter'' fulfils that role.
+% \begin{macrocode}
+\@ifundefined{appendix}{}{%
+ \let\cref@old@appendix\appendix%
+ \def\appendix{%
+ \@ifundefined{chapter}{%
+ \gdef\refstepcounter@noarg##1{%
+ \cref@old@refstepcounter{##1}%
+ \cref@constructprefix{##1}{\cref@result}%
+% \end{macrocode}
+% We add a large value to the front of the counter data, to force
+% references to anything in appendices to be sorted after everything
+% else.
+% \begin{macrocode}
+ \ifx\cref@result\@empty%
+ \def\cref@result{2147483647}%
+ \else%
+ \edef\cref@result{2147483647,\cref@result}%
+ \fi%
+% \end{macrocode}
+% Override the cross-reference type of sectioning commands.
+% \begin{macrocode}
+ \def\@tempa{##1}%
+ \def\@tempb{section}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@appendix@alias}%
+ {\def\@tempa{appendix}}%
+ {\def\@tempa{\cref@appendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsection}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subappendix@alias}%
+ {\def\@tempa{subappendix}}%
+ {\def\@tempa{\cref@subappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsubsection}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subsubappendix@alias}%
+ {\def\@tempa{subsubappendix}}%
+ {\def\@tempa{\cref@subsubappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \@ifundefined{cref@##1@alias}%
+ {\def\@tempa{##1}}%
+ {\def\@tempa{\csname cref@##1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \fi%
+ \fi%
+ \fi}%
+ \cref@old@appendix%
+ }{%
+ \def\refstepcounter@noarg##1{%
+ \cref@old@refstepcounter{##1}%
+ \cref@constructprefix{##1}{\cref@result}%
+% \end{macrocode}
+% Again, the large value added to the front of the counter data forces
+% references to appendix items to be sorted last.
+% \begin{macrocode}
+ \ifx\cref@result\@empty%
+ \def\cref@result{2147483647}%
+ \else%
+ \edef\cref@result{2147483647,\cref@result}%
+ \fi%
+% \end{macrocode}
+% Override the cross-reference type of sectioning commands.
+% \begin{macrocode}
+ \def\@tempa{##1}%
+ \def\@tempb{chapter}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@appendix@alias}%
+ {\def\@tempa{appendix}}%
+ {\def\@tempa{\cref@appendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{section}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subappendix@alias}%
+ {\def\@tempa{subappendix}}%
+ {\def\@tempa{\cref@subappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsection}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subsubappendix@alias}%
+ {\def\@tempa{subsubappendix}}%
+ {\def\@tempa{\cref@subsubappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsubsection}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subsubappendix@alias}%
+ {\def\@tempa{subsubsubappendix}}%
+ {\def\@tempa{\cref@subsubsubappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \@ifundefined{cref@##1@alias}%
+ {\def\@tempa{##1}}%
+ {\def\@tempa{\csname cref@##1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \fi%
+ \fi%
+ \fi%
+ \fi}%
+ \cref@old@appendix}%
+ }%
+}% end of \@ifundefined{appendix}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Utility Macros}
+%
+% \subsubsection{miscellaneous}
+% \begin{macro}{\cref@gobble@optarg}
+% A basic macro that gobbles one argument plus, if present, one
+% optional argument.
+% \begin{macrocode}
+\def\cref@gobble@optarg{\@ifnextchar[\@cref@gobble@optarg\cref@gobble}%]
+\def\cref@gobble#1{}%
+\def\@cref@gobble@optarg[#1]#2{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@append@toks}
+% A basic utility macro for appending tokens to a token register.
+% \begin{macrocode}
+\def\cref@append@toks#1#2{\toks0={#2}%
+ \edef\act{\noexpand#1={\the#1\the\toks0}}%
+ \act}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@ifstreq}
+% A utility macro to test string equality in a catcode-independent
+% fashion. Assumes both arguments are fully expandable. Note: using the
+% |\pdfstrcmp| primitive from |pdftex| would be more robust, but we don't
+% want to depend on |pdftex|. This macro suffices for our purposes.
+% \begin{macrocode}
+\def\cref@ifstreq#1#2#3#4{%
+ \begingroup%
+ \edef\@tempa{#1}%
+ \edef\@tempb{#2}%
+ \expandafter\def\expandafter\@tempa\expandafter{\csname\@tempa\endcsname}%
+ \expandafter\def\expandafter\@tempb\expandafter{\csname\@tempb\endcsname}%
+ \ifx\@tempa\@tempb%
+ \let\@tempc\@firstoftwo%
+ \else%
+ \let\@tempc\@secondoftwo%
+ \fi%
+ \expandafter%
+ \endgroup%
+ \@tempc{#3}{#4}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{\file{aux} file information}
+% \begin{macro}{\cref@getlabel}
+% \begin{macro}{\cref@gettype}
+% \begin{macro}{\cref@getcounter}
+% \begin{macro}{\cref@getprefix}
+% Define some utility macros for extracting label, type, and counter
+% information from the contents of \cmd{\cref@currentlabel}, as written
+% to the \file{aux} file and stored in \cmd{\r@\meta{label}@cref} when
+% this is re-read on the next pass. Some other packages commandeer the
+% referencing system to write label information to the \file{aux} file
+% for other purposes, and probably use \cmd{\ref} to recover it later.
+% We still want them to work, so our utility macros must cope with the
+% type information being absent. However, since we need them to be
+% fully expandable in various places, and \cmd{\@ifnextchar} is
+% definitely \emph{not} fully expandable, we use the work-around of
+% having the macros store their result in another macro, whose name is
+% passed as the second argument. This other macro \emph{will} then be
+% fully expandable, and can be used e.g.\ inside an \cmd{\edef} or
+% \cmd{\csname}\ldots\cmd{\endcsname}.
+% \begin{macrocode}
+\def\cref@getref#1#2{%
+ \expandafter\let\expandafter#2\csname r@#1@cref\endcsname%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@firstoftwo#2}}%
+\def\cref@getlabel#1#2{%
+ \cref@getref{#1}{\@tempa}%
+ \expandafter\@cref@getlabel\@tempa\@nil#2}%
+\def\@cref@getlabel{\@ifnextchar[%]
+ \@@cref@getlabel{\@@cref@getlabel[][][]}}%
+\def\@@cref@getlabel[#1][#2][#3]#4\@nil#5{\def#5{#4}}%
+\def\cref@gettype#1#2{%
+ \cref@getref{#1}{\@tempa}%
+ \expandafter\@cref@gettype\@tempa\@nil#2}%
+\def\@cref@gettype{\@ifnextchar[%]
+ \@@cref@gettype{\@@cref@gettype[][][]}}%
+\def\@@cref@gettype[#1][#2][#3]#4\@nil#5{\def#5{#1}}%
+\def\cref@getcounter#1#2{%
+ \cref@getref{#1}{\@tempa}%
+ \expandafter\@cref@getcounter\@tempa\@nil#2}%
+\def\@cref@getcounter{\@ifnextchar[%]
+ \@@cref@getcounter{\@@cref@getcounter[][][]}}%
+\def\@@cref@getcounter[#1][#2][#3]#4\@nil#5{\def#5{#2}}%
+\def\cref@getprefix#1#2{%
+ \cref@getref{#1}{\@tempa}%
+ \expandafter\@cref@getprefix\@tempa\@nil#2}%
+\def\@cref@getprefix{\@ifnextchar[%]
+ \@@cref@getprefix{\@@cref@getprefix[][][]}}%
+\def\@@cref@getprefix[#1][#2][#3]#4\@nil#5{\def#5{#3}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\cpageref@getlabel}
+% \begin{macro}{\cpageref@gettype}
+% \begin{macro}{\cpageref@getcounter}
+% Similarly for the page number information. Here, the information we
+% store in addition to the page label is the page label ``type'' (used
+% to distinguish different page numbering sequences, e.g.\ roman in the
+% front-matter and arabic in the main text), and the numerical value of
+% the page counter.
+% \begin{macrocode}
+\def\cpageref@getref#1#2{%
+ \expandafter\let\expandafter#2\csname r@#1@cref\endcsname%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@secondoftwo#2}}%
+\def\cpageref@getlabel#1#2{%
+ \cpageref@getref{#1}{\@tempa}%
+ \expandafter\@cpageref@getlabel\@tempa\@nil#2}%
+\def\@cpageref@getlabel{\@ifnextchar[%]
+ \@@cpageref@getlabel{\@@cpageref@getlabel[][][]}}%
+\def\@@cpageref@getlabel[#1][#2][#3]#4\@nil#5{\def#5{#4}}%
+\def\cpageref@gettype#1#2{%
+ \cpageref@getref{#1}{\@tempa}%
+ \expandafter\@cpageref@gettype\@tempa\@nil#2}%
+\def\@cpageref@gettype{\@ifnextchar[%]
+ \@@cpageref@gettype{\@@cpageref@gettype[][][]}}%
+\def\@@cpageref@gettype[#1][#2][#3]#4\@nil#5{\def#5{#1}}%
+\def\cpageref@getcounter#1#2{%
+ \cpageref@getref{#1}{\@tempa}%
+ \expandafter\@cpageref@getcounter\@tempa\@nil#2}%
+\def\@cpageref@getcounter{\@ifnextchar[%]
+ \@@cpageref@getcounter{\@@cpageref@getcounter[][][]}}%
+\def\@@cpageref@getcounter[#1][#2][#3]#4\@nil#5{\def#5{#2}}%
+\def\cpageref@getprefix#1#2{%
+ \cpageref@getref{#1}{\@tempa}%
+ \expandafter\@cpageref@getprefix\@tempa\@nil#2}%
+\def\@cpageref@getprefix{\@ifnextchar[%]
+ \@@cpageref@getprefix{\@@cpageref@getprefix[][][]}}%
+\def\@@cpageref@getprefix[#1][#2][#3]#4\@nil#5{\def#5{#3}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \cmd{\cref@override@label@type} is a convenience macro for overriding
+% the label type stored in \cmd{\cref@currentlabel}.
+% \begin{macro}{\cref@override@label@type}
+% \begin{macrocode}
+\def\cref@override@label@type[#1][#2][#3]#4\@nil#5{[#5][#2][#3]#4}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@constructprefix}
+% The \cmd{\cref@constructprefix} macro constructs the prefix
+% information stored in \cmd{\cref@currentlabel} (retrieved using
+% \cmd{\cref@getprefix}). This information consists of the numerical
+% value of each counter that's involved in resetting the label's
+% counter, i.e.\ it contains the numerical values of the chapter,
+% section, subsection\dots{} numbers that (ought to) make up the
+% formatted label produced by \cmd{\the\meta{counter}}. E.g.\ if
+% \cmd{\theequation} produces ``B.1.3'', this utility macro will return
+% ``2,1'' (the ``3'' corresponds to the equation number itself, which
+% is stored separately in \cmd{\cref@currentlabel}). The first argument
+% is the counter in question; the return value is stored in the second
+% argument, which should be a macro name.
+%
+% The real work is done by the recursive \cmd{\@cref@constructprefix}
+% macro, which works its way upwards through the counters' reset lists
+% until it reaches a counter that isn't reset by any other.
+% \begin{macrocode}
+\def\cref@constructprefix#1#2{%
+ \cref@stack@init{\@tempstack}%
+% \end{macrocode}
+% We fully expand the first argument (the counter name) because sometimes
+% we get passed a counter name containing a macro.
+% \begin{macrocode}
+ \edef\@tempa{\noexpand{#1\noexpand}}%
+ \expandafter\def\expandafter\@tempa\expandafter{\@tempa{#2}}%
+ \expandafter\@cref@constructprefix\@tempa%
+ \cref@stack@to@list{\@tempstack}{\@tempa}%
+ \expandafter\def\expandafter#2\expandafter{\@tempa}}%
+\def\@cref@constructprefix#1#2{%
+ \cref@resetby{#1}{#2}%
+ \ifx#2\relax%
+ \else%
+ \edef\@tempa{\the\csname c@#2\endcsname}%
+ \expandafter\cref@stack@push\expandafter{\@tempa}{\@tempstack}%
+ \edef\@tempa{{#2}}%
+ \expandafter\expandafter\expandafter\@cref@constructprefix%
+ \expandafter\@tempa\expandafter{\expandafter#2\expandafter}%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Stack data structures}
+% \begin{macro}{\cref@stack@init}
+% \begin{macro}{\cref@stack@top}
+% \begin{macro}{\cref@stack@pop}
+% \begin{macro}{\cref@stack@push}
+% \begin{macro}{\cref@stack@topandbottom}
+% \begin{macro}{\cref@stack@add}
+% \begin{macro}{\cref@stack@to@list}
+% We treat multiple references, supplied as a comma-separated list to
+% \cmd{\cref} or \cmd{\Cref}, as a stack structure. So we define some
+% utility macros for manipulating stacks (\cmd{\@nil} is used as an
+% end-of-stack delimiter).
+% \begin{macrocode}
+\def\cref@stack@init#1{\def#1{\@nil}}%
+\def\cref@stack@top#1{\expandafter\@cref@stack@top#1}%
+\def\@cref@stack@top#1,#2\@nil{#1}%
+\def\cref@stack@pop#1{\expandafter\@cref@stack@pop#1#1}%
+\def\@cref@stack@pop#1,#2\@nil#3{\def#3{#2\@nil}}%
+\def\cref@stack@push#1#2{%
+ \expandafter\@cref@stack@push\expandafter{#2}{#1}{#2}}%
+\def\@cref@stack@push#1#2#3{\def#3{#2,#1}}%
+\def\cref@stack@pull#1#2{\expandafter\@cref@stack@pull#2{#1}{#2}}%
+\def\@cref@stack@pull#1\@nil#2#3{\def#3{#1#2,\@nil}}%
+\def\cref@stack@to@list#1#2{%
+ \cref@isstackfull{#1}%
+ \if@cref@stackfull%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@cref@stack@to@list#1}%
+ \else%
+ \def#2{}%
+ \fi}%
+\def\@cref@stack@to@list#1,\@nil{#1}%
+\def\cref@stack@topandbottom#1#2#3{%
+ \def#2{}%
+ \def#3{}%
+ \cref@isstackfull{#1}%
+ \if@cref@stackfull%
+ \edef#2{\cref@stack@top{#1}}%
+ \cref@stack@pop{#1}%
+ \cref@isstackfull{#1}%
+ \@whilesw\if@cref@stackfull\fi{%
+ \edef#3{\cref@stack@top{#1}}%
+ \cref@stack@pop{#1}%
+ \cref@isstackfull{#1}}%
+ \fi}%
+\def\cref@stack@add#1#2{%
+ \begingroup%
+ \def\@arg1{#1}%
+ \let\@tempstack#2%
+ \newif\if@notthere%
+ \@nottheretrue%
+ \cref@isstackfull{\@tempstack}%
+ \@whilesw\if@cref@stackfull\fi{%
+ \edef\@tempb{\cref@stack@top{\@tempstack}}%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@tempb%
+ \@cref@stackfullfalse%
+ \@nottherefalse%
+ \else%
+ \cref@stack@pop{\@tempstack}%
+ \cref@isstackfull{\@tempstack}%
+ \fi}%
+ \expandafter\endgroup%
+ \if@notthere\cref@stack@push{#1}{#2}\fi}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\if@cref@stackempty}
+% \begin{macro}{\if@cref@stackfull}
+% \begin{macro}{\cref@isstackempty}
+% \begin{macro}{\cref@isstackfull}
+% The \cmd{\cref@isstackempty} and \cmd{\cref@isstackfull} macros test
+% whether a stack is empty or full, respectively, and set the
+% corresponding conditionals\linebreak[4] |\if@cref@stackempty| and
+% |\if@cref@stackfull|.
+% \begin{macrocode}
+\newif\if@cref@stackempty%
+\newif\if@cref@stackfull%
+\def\cref@isstackempty#1{%
+ \def\@tempa{\@nil}%
+ \ifx#1\@tempa\@cref@stackemptytrue%
+ \else\@cref@stackemptyfalse\fi}%
+\def\cref@isstackfull#1{%
+ \def\@tempa{\@nil}%
+ \ifx#1\@tempa\@cref@stackfullfalse%
+ \else\@cref@stackfulltrue\fi}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cref@stack@dropempty}
+% Drop any empty references from head of a stack.
+% \begin{macrocode}
+\def\cref@stack@dropempty#1{%
+ \edef\@tempa{\cref@stack@top{#1}}%
+ \@whilesw\ifx\@tempa\@empty\fi{%
+ \cref@stack@pop{#1}%
+ \cref@isstackempty{#1}%
+ \if@cref@stackempty%
+ \let\@tempa\relax%
+ \else%
+ \edef\@tempa{\cref@stack@top{#1}}%
+ \fi}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@stack@sort}
+% The \cmd{\cref@stack@sort} macro sorts a stack passed in |#2|, using
+% the comparison macro passed in |#1|, which we use later to sort lists
+% of references. We use insertion sort despite its $O(n^2)$ scaling
+% because it's simpler to code, and because we're very unlikely to
+% encounter lists of more than ten or so references, so in practice a
+% more complicated $O(n\log n)$ sorting algorithm will very likely be
+% slower anyway.
+% \begin{macrocode}
+\def\cref@stack@sort#1#2{%
+ \begingroup%
+ \cref@stack@init{\@sortstack}%
+% \end{macrocode}
+% Push first element into sorted stack.
+% \begin{macrocode}
+ \edef\@element{\cref@stack@top{#2}}%
+ \expandafter\cref@stack@push\expandafter{\@element}{\@sortstack}%
+ \cref@stack@pop{#2}%
+% \end{macrocode}
+% If empty elements follow first one, need to add them after it in sorted
+% stack.
+% \begin{macrocode}
+ \cref@isstackfull{#2}%
+ \if@cref@stackfull%
+ \edef\@tempa{\cref@stack@top{#2}}%
+ \@whilesw\ifx\@tempa\@empty\fi{%
+ \cref@stack@pull{}{\@sortstack}%
+ \cref@stack@pop{#2}%
+ \cref@isstackempty{#2}%
+ \if@cref@stackempty%
+ \let\@tempa\relax%
+ \else%
+ \edef\@tempa{\cref@stack@top{#2}}%
+ \fi}%
+ \fi%
+% \end{macrocode}
+% Process elements from stack.
+% \begin{macrocode}
+ \cref@isstackfull{#2}%
+ \@whilesw\if@cref@stackfull\fi{%
+ \edef\@element{\cref@stack@top{#2}}%
+ \cref@stack@pop{#2}%
+% \end{macrocode}
+% If empty elements follow current one, need to add them to sorted stack,
+% right after element we're currently dealing with.
+% \begin{macrocode}
+ \def\@empties{}%
+ \cref@isstackfull{#2}%
+ \if@cref@stackfull%
+ \edef\@tempa{\cref@stack@top{#2}}%
+ \@whilesw\ifx\@tempa\@empty\fi{%
+ \edef\@empties{\@empties,}%
+ \cref@stack@pop{#2}%
+ \cref@isstackempty{#2}%
+ \if@cref@stackempty%
+ \let\@tempa\relax%
+ \else%
+ \edef\@tempa{\cref@stack@top{#2}}%
+ \fi}%
+ \fi%
+% \end{macrocode}
+% Insert current element into sorted stack, appending any following empty
+% elements.
+% \begin{macrocode}
+ \edef\@tempa{{\expandafter\noexpand\@element}%
+ {\expandafter\noexpand\@empties}%
+ {\noexpand\@sortstack}{\noexpand#1}}%
+ \expandafter\cref@stack@insert\@tempa%
+ \cref@isstackfull{#2}}%
+ \expandafter\endgroup\expandafter%
+ \def\expandafter#2\expandafter{\@sortstack}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@stack@insert}
+% \cmd{\cref@stack@insert}|{#1}{#2}{#3}{#4}| inserts |#1| into the
+% appropriate location in the sorted stack |#3| (appending |#2| onto
+% the end of |#1| when it's inserted), using the comparison macro |#4|.
+% \begin{macrocode}
+\def\cref@stack@insert#1#2#3#4{%
+ \let\@cmp#4%
+ \@cref@stack@insert{}{#1}{#2}{#3}%
+ \cref@stack@pop{#3}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@cref@stack@insert}
+% \cmd{\@cref@stack@insert}|{#1}{#2}{#3}{#4}| prepends |#1| to the
+% stack resulting from inserting |#2| (with |#3| appended to it) into
+% the sorted stack |#4|.
+% \begin{macrocode}
+\def\@cref@stack@insert#1#2#3#4{%
+ \let\cref@iterate\relax%
+ \cref@isstackempty{#4}%
+ \if@cref@stackempty%
+ \cref@stack@push{#1,#2#3}{#4}%
+ \else%
+ \edef\cref@elem{\cref@stack@top{#4}}%
+ \expandafter\@cmp\expandafter{\cref@elem}{#2}{\cref@result}%
+ \ifnum\cref@result=2\relax%
+ \cref@stack@push{#1,#2#3}{#4}%
+ \else%
+ \cref@stack@pop{#4}%
+ \edef\cref@elem{{\noexpand#1,\cref@elem}{\noexpand#2}%
+ {\noexpand#3}{\noexpand#4}}%
+ \expandafter\def\expandafter\cref@iterate\expandafter%
+ {\expandafter\@cref@stack@insert\cref@elem}%
+ \fi%
+ \fi%
+ \cref@iterate}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Reference comparison and sorting}
+% \begin{macro}{\cref@isrefsametype}
+% \begin{macro}{\if@cref@sametype}
+% Test if two references have same type, and set |\if@cref@sametype|
+% conditional accordingly.
+% \begin{macrocode}
+\newif\if@cref@sametype%
+\def\cref@isrefsametype#1#2{%
+ \begingroup%
+% \end{macrocode}
+% Undefined references are treated as different from any other type, but
+% the same type as each other.
+% \begin{macrocode}
+ \expandafter\ifx\csname r@#1@cref\endcsname\relax%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \def\@after{\@cref@sametypetrue}%
+ \else%
+ \def\@after{\@cref@sametypefalse}%
+ \fi%
+ \else%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \def\@after{\@cref@sametypefalse}%
+% \end{macrocode}
+% To test if two references have the same type, we actually compare the
+% expansion of |\cref@|\meta{type}|@format| rather than the \meta{type}
+% per se. This allows references with different counters but identical
+% formatting (e.g.\ equations and subequations with the default
+% formatting) to be typeset as part of the same reference group, which is
+% almost always what we want.
+% \begin{macrocode}
+ \else%
+ \cref@gettype{#1}{\@type}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@formata%
+ \expandafter\expandafter\expandafter{%
+ \csname cref@\@type @format\endcsname%
+ {\@dummya}{\@dummyb}{\@dummyc}}%
+ \cref@gettype{#2}{\@type}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@formatb%
+ \expandafter\expandafter\expandafter{%
+ \csname cref@\@type @format\endcsname%
+ {\@dummya}{\@dummyb}{\@dummyc}}%
+ \ifx\@formata\@formatb%
+ \def\@after{\@cref@sametypetrue}%
+ \else%
+ \def\@after{\@cref@sametypefalse}%
+ \fi%
+ \fi%
+ \fi%
+ \expandafter\endgroup\@after}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cpageref@isrefsametype}
+% Test if two page references have same ``type'', and set
+% |\if@cref@sametype| conditional accordingly.
+% \begin{macrocode}
+\def\cpageref@isrefsametype#1#2{%
+ \begingroup%
+% \end{macrocode}
+% Undefined references are treated as different from any other type, but
+% the same type as each other.
+% \begin{macrocode}
+ \expandafter\ifx\csname r@#1@cref\endcsname\relax%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \def\@after{\@cref@sametypetrue}%
+ \else%
+ \def\@after{\@cref@sametypefalse}%
+ \fi%
+ \else%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \def\@after{\@cref@sametypefalse}%
+ \else%
+ \cpageref@gettype{#1}{\@typea}%
+ \cpageref@gettype{#2}{\@typeb}%
+ \ifx\@typea\@typeb%
+ \def\@after{\@cref@sametypetrue}%
+ \else%
+ \def\@after{\@cref@sametypefalse}%
+ \fi%
+ \fi%
+ \fi%
+ \expandafter\endgroup\@after}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@countercmp}
+% The \cmd{\cref@countercmp} macro compares references |#1| and |#2|
+% according to their respective sets of counter data (stored in the
+% \file{aux} file). It \cmd{\chardef}'s |#3| to 0 if they're equal, 1
+% if the first comes earlier than the second, or 2 if the first
+% reference comes later than the second. This is used later for sorting
+% references. \cmd{\cref@countercmp} compares the references
+% themselves, \cmd{\cpageref@countercmp} compares their page numbers.
+% \begin{macrocode}
+\def\cref@counter@first#1#2\@nil{#1}%
+\def\cref@counter@rest#1#2\@nil{#2}%
+\def\cref@countercmp{\@cref@countercmp{cref}}%
+\def\cpageref@countercmp{\@cref@countercmp{cpageref}}%
+\def\@cref@countercmp#1#2#3#4{%
+ \begingroup%
+ \def\@tempa{#2}%
+% \end{macrocode}
+% In order to ensure empty references end up in the right place when
+% sorting lists of multiple references, we make the comparison macro
+% sort them before a non-empty reference.
+% \begin{macrocode}
+ \ifx\@tempa\@empty%
+ \def\cref@result{1}%
+ \else%
+ \def\@tempa{#3}%
+ \ifx\@tempa\@empty%
+ \def\cref@result{2}%
+ \else%
+% \end{macrocode}
+% Conversely, undefined references come after everything else.
+% \begin{macrocode}
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \def\cref@result{2}%
+ \else%
+ \expandafter\ifx\csname r@#3@cref\endcsname\relax%
+ \def\cref@result{1}%
+ \else%
+% \end{macrocode}
+% The real work of comparing two references is done by
+% \cmd{\@@cref@countercmp}.
+% \begin{macrocode}
+ \csname #1@getcounter\endcsname{#2}{\@countera}%
+ \csname #1@getprefix\endcsname{#2}{\@prefixa}%
+ \csname #1@getcounter\endcsname{#3}{\@counterb}%
+ \csname #1@getprefix\endcsname{#3}{\@prefixb}%
+ \cref@stack@init{\@countstacka}%
+ \expandafter\cref@stack@push\expandafter%
+ {\@countera}{\@countstacka}%
+ \ifx\@prefixa\@empty\else%
+ \expandafter\cref@stack@push\expandafter%
+ {\@prefixa}{\@countstacka}%
+ \fi%
+ \cref@stack@init{\@countstackb}%
+ \expandafter\cref@stack@push\expandafter%
+ {\@counterb}{\@countstackb}%
+ \ifx\@prefixb\@empty\else%
+ \expandafter\cref@stack@push\expandafter%
+ {\@prefixb}{\@countstackb}%
+ \fi%
+ \@@cref@countercmp%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \expandafter\endgroup\expandafter%
+ \chardef\expandafter#4\expandafter=\cref@result\relax}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@cref@countercmp}
+% The \cmd{\@@cref@countercmp} macro recursively compares counter
+% components until it runs out of components for one of the references,
+% or finds two corresponding components that are unequal.
+% \begin{macrocode}
+\def\@@cref@countercmp{%
+ \let\@iterate\relax%
+ \cref@isstackempty{\@countstacka}%
+ \if@cref@stackempty%
+ \cref@isstackempty{\@countstackb}%
+ \if@cref@stackempty%
+ \def\cref@result{0}%
+ \else%
+ \def\cref@result{1}%
+ \fi%
+ \else%
+ \cref@isstackempty{\@countstackb}%
+ \if@cref@stackempty%
+ \def\cref@result{2}%
+ \else%
+ \edef\@tempa{\cref@stack@top{\@countstacka}}%
+ \cref@stack@pop{\@countstacka}%
+ \edef\@tempb{\cref@stack@top{\@countstackb}}%
+ \cref@stack@pop{\@countstackb}%
+ \ifnum\@tempa<\@tempb\relax%
+ \def\cref@result{1}%
+ \else%
+ \ifnum\@tempa>\@tempb\relax%
+ \def\cref@result{2}%
+ \else%
+ \def\@iterate{\@@cref@countercmp}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \@iterate}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\if@cref@inresetlist}
+% \begin{macro}{\cref@isinresetlist}
+% \begin{macro}{\cref@resetby}
+% We need to be able to determine which counter is used to reset a
+% given counter. Usually, resets are done by sectioning counters, and
+% we assume that to be the case here. \cmd{\cref@isinresetlist}
+% searches through one counter's reset list, stored in
+% \cmd{\cl@\meta{counter}}, to determine whether another counter
+% appears there, and sets the new conditional
+% appropriately. \cmd{\cref@reset@by} searches through all the
+% sectioning counters' reset lists, from lowest-level (subsubsection)
+% to highest (part), checking whether the given counter is in the list,
+% and returns the first sectioning counter in whose list it appears.
+% (The value is returned by defining its second argument, which should
+% be a macro name.)
+% \begin{macrocode}
+\newif\if@cref@inresetlist%
+\def\cref@isinresetlist#1#2{%
+ \begingroup%
+ \def\@counter{#1}%
+% \end{macrocode}
+% We locally redefine \cmd{\@elt}, which appears at the head of the
+% expansion of |\cl@|\meta{counter}, so that entries in the reset list
+% end up separated by commas, thus can be treated as a stack.
+% \begin{macrocode}
+ \def\@elt##1{##1,}%
+ \expandafter\ifx\csname cl@#2\endcsname\relax%
+ \def\cref@resetstack{,\@nil}%
+ \else%
+ \edef\cref@resetstack{\csname cl@#2\endcsname\noexpand\@nil}%
+ \fi%
+ \let\@nextcounter\relax%
+ \cref@isstackfull{\cref@resetstack}%
+ \@whilesw\if@cref@stackfull\fi{%
+ \edef\@nextcounter{\cref@stack@top{\cref@resetstack}}%
+ \ifx\@nextcounter\@counter%
+ \@cref@stackfullfalse%
+ \else%
+ \let\@nextcounter\relax%
+ \cref@stack@pop{\cref@resetstack}%
+ \cref@isstackfull{\cref@resetstack}%
+ \fi}%
+ \ifx\@nextcounter\relax%
+ \def\@next{\@cref@inresetlistfalse}%
+ \else%
+ \def\@next{\@cref@inresetlisttrue}%
+ \fi%
+ \expandafter%
+ \endgroup%
+ \@next}%
+% \end{macrocode}
+%
+% FIXME: We could easily remove the hard-coded search order in
+% \cmd{\cref@resetby} and, say, replace it with a customisable list of
+% counters to search in order. But, so far, I've yet to encounter a need
+% for anything other than the hard-coded default.
+% \begin{macrocode}
+\def\cref@resetby#1#2{%
+ \let#2\relax%
+% \end{macrocode}
+% If counter in question is |subfigure| or |subtable|, check if it's
+% reset by |figure| or |table|, respectively.
+% \begin{macrocode}
+ \cref@ifstreq{#1}{subfigure}{%
+ \cref@isinresetlist{#1}{figure}%
+ \if@cref@inresetlist%
+ \def#2{figure}%
+ \fi%
+ }{}%
+ \cref@ifstreq{#1}{subtable}{%
+ \cref@isinresetlist{#1}{table}%
+ \if@cref@inresetlist%
+ \def#2{table}%
+ \fi%
+ }{}%
+% \end{macrocode}
+% If counter in question is |equation|, and the counter |parentequation|
+% is defined, check if it's reset by that. The |parentequation| counter
+% is used by \package{amsmath}'s |subequations| environment. Although
+% \package{amsmath} doesn't implement |subequations| using counter reset
+% lists, \package{cleveref}'s \package{amsmath} support tweaks the reset
+% lists inside |subequations| environments to hook into this mechanism.
+% We should really only check this when \package{amsmath} is loaded, but
+% checking it anyway might catch other packages that independently
+% implement amsmath's |subequations| environment (are there any?).
+% \begin{macrocode}
+ \@ifundefined{cl@parentequation}{}{%
+ \cref@ifstreq{#1}{equation}{%
+ \cref@isinresetlist{#1}{parentequation}%
+ \if@cref@inresetlist%
+ \expandafter\ifnum\c@parentequation=0\else%
+ \def#2{parentequation}%
+ \fi%
+ \fi%
+ }{}}%
+% \end{macrocode}
+% \LaTeX{} hard-codes resetting of |enum|\meta{x} counters by
+% higher-level |enum|\meta{x} counters, so we hard-code the results for
+% these cases.
+% \begin{macrocode}
+ \cref@ifstreq{#1}{enumii}{%
+ \def#2{enumi}%
+ }{%
+ \cref@ifstreq{#1}{enumiii}{%
+ \def#2{enumii}%
+ }{%
+ \cref@ifstreq{#1}{enumiv}{%
+ \def#2{enumiii}%
+ }{}%
+ }%
+ }%
+% \end{macrocode}
+% If we haven't found anything so far, check if it's reset by a
+% sectioning command.
+% \begin{macrocode}
+ \ifx#2\relax%
+ \cref@isinresetlist{#1}{table}%
+ \if@cref@inresetlist%
+ \def#2{table}%
+ \else%
+ \cref@isinresetlist{#1}{subsubsection}%
+ \if@cref@inresetlist%
+ \def#2{subsubsection}%
+ \else%
+ \cref@isinresetlist{#1}{subsection}%
+ \if@cref@inresetlist%
+ \def#2{subsection}%
+ \else%
+ \cref@isinresetlist{#1}{section}%
+ \if@cref@inresetlist%
+ \def#2{section}%
+ \else%
+ \cref@isinresetlist{#1}{chapter}%
+ \if@cref@inresetlist%
+ \def#2{chapter}%
+ \else%
+ \cref@isinresetlist{#1}{part}%
+ \if@cref@inresetlist%
+ \def#2{part}%
+ \else%
+ \let#2\relax%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\if@cref@refconsecutive}
+% \begin{macro}{\cref@isrefconsecutive}
+% \begin{macro}{\cpageref@isrefconsecutive}
+% Define a new conditional to test whether two references are
+% consecutive (needed when compressing references and typesetting
+% reference ranges). This uses the counter and prefix (i.e.\ chain of
+% counters that reset the reference's counter) information provided by
+% \cmd{\r@\meta{label}@cref} (via the \file{aux} file) to check if the
+% prefixes are identical (i.e.\ the references come from the same
+% chapter, section or whatever), and that the label counters differ
+% by~0 or~1. \cmd{\cref@isrefconsecutive} tests the references
+% themselves, \cmd{\cpageref@isrefconsecutve} tests their page numbers.
+% \begin{macrocode}
+\newif\if@cref@refconsecutive%
+\def\cref@isrefconsecutive{\@cref@isrefconsecutive{cref}}%
+\def\cpageref@isrefconsecutive{\@cref@isrefconsecutive{cpageref}}%
+\def\@cref@isrefconsecutive#1#2#3{%
+ \begingroup%
+ \def\@after{\@cref@refconsecutivefalse}%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax\else%
+ \expandafter\ifx\csname r@#3@cref\endcsname\relax\else%
+ \countdef\refa@counter=0%
+ \countdef\refb@counter=1%
+ \csname #1@getcounter\endcsname{#2}{\cref@result}%
+ \refa@counter=\cref@result%
+ \csname #1@getcounter\endcsname{#3}{\cref@result}%
+ \refb@counter=\cref@result%
+ \csname #1@getprefix\endcsname{#2}{\refa@prefix}%
+ \csname #1@getprefix\endcsname{#3}{\refb@prefix}%
+ \ifx\refa@prefix\refb@prefix%
+ \ifnum\refa@counter=\refb@counter\relax%
+ \def\@after{\@cref@refconsecutivetrue}%
+ \else%
+ \advance\refa@counter 1\relax%
+ \ifnum\refa@counter=\refb@counter\relax%
+ \def\@after{\@cref@refconsecutivetrue}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \expandafter\endgroup\@after}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Reference stack processing}
+% \begin{macro}{\cref@processgroup}
+% \cmd{\cref@processgroup} processes the first group of references from
+% the stack passed in argument |#2|, by moving references to the stack
+% passed in argument |#3| until it encounters a reference that has a
+% different type to those that came before. Note that empty references
+% are treated as having the same type as the preceding one. If argument
+% |#1| is |cref| it processes references, it it's |cpageref| it
+% processes page references.
+% \begin{macrocode}
+\def\cref@processgroup#1#2#3{%
+ \cref@stack@dropempty{#2}%
+ \edef\@firstref{\cref@stack@top{#2}}%
+ \let\@nextref\@firstref%
+ \@cref@sametypetrue%
+ \@whilesw\if@cref@sametype\fi{%
+ \expandafter\cref@stack@pull\expandafter{\@nextref}{#3}%
+ \cref@stack@pop{#2}%
+ \cref@isstackempty{#2}%
+ \if@cref@stackempty%
+ \@cref@sametypefalse%
+ \else%
+ \edef\@nextref{\cref@stack@top{#2}}%
+ \ifx\@nextref\@empty%
+ \@cref@sametypetrue%
+ \else%
+ \csname #1@isrefsametype\endcsname{\@firstref}{\@nextref}%
+ \fi%
+ \fi}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@processgroupall}
+% \cmd{\cref@processgroupall} processes the first group of references
+% from the stack passed in argument |#2|, by moving all references with
+% the same type as the first one into the stack passed in argument
+% |#3|. If argument |#1| is |cref| it processes references, if it's
+% |cpageref| it processes page references.
+% \begin{macrocode}
+\def\cref@processgroupall#1#2#3{%
+ \cref@stack@init{\@tempstack}%
+ \cref@stack@dropempty{#2}%
+ \edef\@firstref{\cref@stack@top{#2}}%
+ \cref@isstackfull{#2}%
+ \@whilesw\if@cref@stackfull\fi{%
+ \edef\@nextref{\cref@stack@top{#2}}%
+ \ifx\@nextref\@empty%
+ \expandafter\cref@stack@pull\expandafter{\@nextref}{#3}%
+ \else%
+ \edef\@tempa{{\@firstref}{\@nextref}}%
+ \csname #1@isrefsametype\expandafter\endcsname\@tempa%
+ \if@cref@sametype%
+ \expandafter\cref@stack@pull\expandafter{\@nextref}{#3}%
+ \else%
+ \expandafter\cref@stack@pull\expandafter{\@nextref}{\@tempstack}%
+ \fi%
+ \fi%
+ \cref@stack@pop{#2}%
+ \cref@isstackfull{#2}}%
+ \let#2\@tempstack}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\cref@processconsecutive}
+% \cmd{\cref@processconsecutive} processes the first sequence of
+% consecutive references from the stack passed in |#2|, sets the macro
+% passed as |#3| to the first reference in the sequence, sets |#4| to
+% the last reference, and sets the counter passed in |#5| to the number
+% of consecutive references in the sequence. If argument |#1| is |cref|
+% it processes references, if it's |cpageref| it processes page
+% references.
+% \begin{macrocode}
+\def\cref@processconsecutive#1#2#3#4#5{%
+% \end{macrocode}
+% Initialise return values to those appropriate for a single reference.
+% \begin{macrocode}
+ \let#4\relax%
+ #5=1\relax%
+ \edef\@nextref{\cref@stack@top{#2}}%
+ \edef#3{\@nextref}%
+ \cref@stack@pop{#2}%
+ \cref@isstackfull{#2}%
+% \end{macrocode}
+% If stack contains multiple references, find end of consecutive references.
+% \begin{macrocode}
+ \if@cref@stackfull%
+ \edef\@nextref{\cref@stack@top{#2}}%
+ \expandafter\ifx\csname r@#3@cref\endcsname\relax%
+ \@cref@refconsecutivefalse%
+ \else%
+% \end{macrocode}
+% If next reference in stack is empty, it indicates that no
+% further compression should take place. Having served its purpose,
+% the empty reference and any consecutive empty references are
+% removed from the stack.
+% \begin{macrocode}
+ \ifx\@nextref\@empty%
+ \@cref@refconsecutivefalse%
+ \cref@stack@dropempty{#2}%
+% \end{macrocode}
+% Otherwise, test whether next reference is consecutive or not.
+% \begin{macrocode}
+ \else%
+ \edef\@tempa{{#3}{\@nextref}}%
+ \csname #1@isrefconsecutive\expandafter\endcsname\@tempa%
+ \fi%
+ \fi%
+% \end{macrocode}
+% Remove references from the stack until we find end of consecutive
+% sequence.
+% \begin{macrocode}
+ \@whilesw\if@cref@refconsecutive\fi{%
+ \advance#5 1\relax%
+ \let#4\@nextref%
+ \cref@stack@pop{#2}%
+ \cref@isstackempty{#2}%
+ \if@cref@stackempty%
+ \@cref@refconsecutivefalse%
+ \else%
+ \edef\@nextref{\cref@stack@top{#2}}%
+% \end{macrocode}
+% If next reference is empty, remove any consecutive empty
+% references and we're done.
+% \begin{macrocode}
+ \ifx\@nextref\@empty%
+ \@cref@refconsecutivefalse%
+ \@whilesw\ifx\@nextref\@empty\fi{%
+ \cref@stack@pop{#2}%
+ \cref@isstackempty{#2}%
+ \if@cref@stackempty%
+ \let\@nextref\relax%
+ \else%
+ \edef\@nextref{\cref@stack@top{#2}}%
+ \fi}%
+% \end{macrocode}
+% Otherwise, test whether next reference is consecutive or not.
+% \begin{macrocode}
+ \else%
+ \edef\@tempa{{#4}{\@nextref}}%
+ \csname #1@isrefconsecutive\expandafter\endcsname\@tempa%
+ \fi%
+ \fi}%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Prefix-stripping}
+% \begin{macro}{\crefstripprefix}
+% The \cmd{\crefstripprefix} utility command is intended for use in
+% cross-reference format definitions. It takes two strings of
+% characters as arguments, and strips any common prefix from the second
+% argument. The common prefix is only stripped up to the last sequence
+% of digits or letters in the second argument.
+% \begin{macrocode}
+\newcommand\crefstripprefix[2]{%
+ \begingroup%
+ \edef\@toksa{#1}%
+ \edef\@toksb{#2}%
+ \let\cref@acc\@empty%
+ \@crefstripprefix%
+ \cref@result%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% The real work is done by the recursive \cmd{\@crefstripprefix} macro,
+% which compares characters one-by-one (accumulating runs of the same
+% type of character -- digit or letter as it goes). It removes matching
+% characters from the strings, and outputs the remaining characters
+% from the second string (plus any accumulated characters of the same
+% type) when it encounters the first non-matching character;
+% \begin{macrocode}
+\def\@crefstripprefix{%
+ \let\@iterate\relax%
+ \def\accum@flag{0}%
+% \end{macrocode}
+% Pop next characters from |\@toksa| and |\@toksb| string into |\@tempa|
+% and |\@tempb|, storing previous b-string character in |\@tempc|.
+% \begin{macrocode}
+ \let\@tempc\@tempb%
+ \cref@poptok{\@toksa}{\@tempa}%
+ \cref@poptok{\@toksb}{\@tempb}%
+% \end{macrocode}
+% If characters match, drop character and proceed to next.
+% \begin{macrocode}
+ \ifx\@tempa\@tempb\relax%
+ \def\@iterate{\@crefstripprefix}%
+% \end{macrocode}
+% Accumulate popped character if accumulated string is empty\dots
+% \begin{macrocode}
+ \ifx\cref@acc\@empty\relax%
+ \let\cref@acc\@tempb%
+ \else%
+% \end{macrocode}
+% or if it has same catcode as previous character, and is either a
+% letter\dots
+% \begin{macrocode}
+ \ifcat\@tempb\@tempc\relax%
+ \ifcat\@tempb a\relax%
+ \def\accum@flag{1}%
+ \else%
+% \end{macrocode}
+% or a digit.
+% \begin{macrocode}
+ \expandafter\chardef\expandafter\@tempa%
+ \expandafter=\expandafter`\@tempb\relax%
+ \ifnum\@tempa>`/\relax%
+ \expandafter\ifnum\@tempb<`:\relax%
+ \def\accum@flag{1}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \def\@tempa{1}%
+ \ifx\accum@flag\@tempa%
+ \edef\cref@acc{\cref@acc\@tempb}%
+ \else%
+ \let\cref@acc\@empty%
+ \fi%
+ \fi%
+% \end{macrocode}
+% If characters don't match, return remaining characters from b-string,
+% prepending any accumulated characters.
+% \begin{macrocode}
+ \else%
+ \ifcat\@tempb\@tempc\relax\else%
+ \let\cref@acc\@empty%
+ \fi%
+ \edef\cref@result{\cref@acc\@tempb\@toksb}%
+ \fi%
+ \@iterate}%
+% \end{macrocode}
+%
+% \begin{macro}{\cref@poptok}
+% The \cmd{\cref@poptok} macro takes two arguments, both macros. It
+% defines |#2| to be the first token in |#1|'s expansion, and removes
+% that token from |#1|'s definition.
+% \begin{macrocode}
+\def\cref@poptok#1#2{%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@cref@firsttok#1\@nil}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter#1%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@cref@poptok#1\@nil}}%
+\def\@cref@firsttok#1#2\@nil{#1}%
+\def\@cref@poptok#1#2\@nil{#2}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Cross-Referencing Commands}
+% \begin{macro}{\cref}
+% \begin{macro}{\Cref}
+% \begin{macro}{\crefrange}
+% \begin{macro}{\Crefrange}
+% Define the main referencing command \cmd{\cref} and the
+% start-of-sentence variant \cmd{\Cref}, along with the reference range
+% commands \cmd{\crefrange} and \cmd{\Crefrange}.
+% \begin{macrocode}
+\DeclareRobustCommand{\cref}[1]{\@cref{cref}{#1}}%
+\DeclareRobustCommand{\Cref}[1]{\@cref{Cref}{#1}}%
+\DeclareRobustCommand{\crefrange}[2]{\@setcrefrange{#1}{#2}{}}%
+\DeclareRobustCommand{\Crefrange}[2]{\@setCrefrange{#1}{#2}{}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\if@crefstarred}
+% The |\if@crefstarred| flag is set within starred variants of
+% \package{cleveref} commands. Starred variants are only defined if
+% either the \package{hyperref} or \package{varioref} package is
+% loaded, so we only define it in those cases. We need to |\let|
+% |\if@crefstarred| to something even when not using it, otherwise
+% \TeX{} gets confused when parsing code that contains
+% |\if@crefstarred| inside a nested if.
+% \begin{macrocode}
+\@ifpackageloaded{hyperref}{\newif\if@crefstarred}{%
+ \@ifpackageloaded{varioref}{\newif\if@crefstarred}{}}%
+\let\if@crefstarred\iffalse%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@cref}
+% To save duplicating code, the referencing macros pass an argument
+% determining the variant to an auxiliary macro \cmd{\@cref}, which
+% does the real work. The \cmd{\@cref} macro is the behemoth at the
+% heart of all the clever referencing features. It deals with grouping
+% references by type, typesetting the conjunctions between groups,
+% choosing the right formatting macro to use for each reference, and
+% compressing consecutive references into ranges.
+% \begin{macrocode}
+\def\@cref#1#2{%
+ \leavevmode%
+ \begingroup%
+ \def\cref@variant{#1}%
+ \def\@tempa{\in@{page}}%
+ \expandafter\@tempa\expandafter{\cref@variant}%
+ \ifin@%
+ \def\cref@variant@get{cpageref}%
+ \else%
+ \def\cref@variant@get{cref}%
+ \fi%
+% \end{macrocode}
+% Initialise some things, and put all the references into a stack called
+% \cmd{\@refstack}. Note that we fully expand the second argument, in
+% case it contains commands that \emph{expand to} label names, rather
+% than label names per se.
+% \begin{macrocode}
+ \countdef\count@consecutive=0%
+ \countdef\count@group=1%
+ \count@group=1%
+ \countdef\count@subgroup=2%
+ \cref@stack@init{\@refstack}%
+ \edef\@tempa{#2}%
+ \expandafter\cref@stack@push\expandafter{\@tempa}{\@refstack}%
+ \cref@isstackfull{\@refstack}%
+% \end{macrocode}
+%
+% Loop until the reference stack is empty.
+% \begin{macrocode}
+ \@whilesw\if@cref@stackfull\fi{%
+% \end{macrocode}
+% Move next group of references with same type into \cmd{\@refsubstack}.
+% \begin{macrocode}
+ \cref@stack@init{\@refsubstack}%
+ \if@cref@sort%
+ \expandafter\cref@processgroupall\expandafter%
+ {\cref@variant@get}{\@refstack}{\@refsubstack}%
+ \expandafter\cref@stack@sort\expandafter%
+ {\csname\cref@variant@get @countercmp\endcsname}{\@refsubstack}%
+ \else%
+ \expandafter\cref@processgroup\expandafter%
+ {\cref@variant@get}{\@refstack}{\@refsubstack}%
+ \fi%
+% \end{macrocode}
+%
+% Typeset appropriate conjunction between groups of reference types.
+% \begin{macrocode}
+ \ifnum\count@group=1\relax%
+ \advance\count@group 1\relax%
+ \else%
+ \cref@isstackfull{\@refstack}%
+ \if@cref@stackfull%
+ \@setcref@middlegroupconjunction%
+ \else%
+ \ifnum\count@group=2\relax%
+ \@setcref@pairgroupconjunction%
+ \else%
+ \@setcref@lastgroupconjunction%
+ \fi%
+ \fi%
+ \advance\count@group 1\relax%
+ \lowercase{\def\cref@variant{#1}}%
+ \fi%
+% \end{macrocode}
+%
+% Process groups of consecutive references until substack is empty.
+% \begin{macrocode}
+ \count@subgroup=1%
+ \cref@isstackfull{\@refsubstack}%
+ \@whilesw\if@cref@stackfull\fi{%
+ \if@cref@compress%
+ \expandafter\cref@processconsecutive\expandafter{\cref@variant@get}%
+ {\@refsubstack}{\@beginref}{\@endref}{\count@consecutive}%
+% \end{macrocode}
+% Empty references serve no purpose when we're not compressing, so we
+% simply remove them and process the first non-empty reference..
+% \begin{macrocode}
+ \else%
+ \cref@stack@dropempty{\@refsubstack}%
+ \edef\@beginref{\cref@stack@top{\@refsubstack}}%
+ \cref@stack@pop{\@refsubstack}%
+ \let\@endref\relax%
+ \count@consecutive=1\relax%
+ \fi%
+% \end{macrocode}
+% If the start and end labels are identical, treat it as a single
+% reference instead of a range
+% \begin{macrocode}
+ \ifnum\count@consecutive>1\relax%
+ \csname\cref@variant@get @getlabel\endcsname{\@beginref}{\@labela}%
+ \csname\cref@variant@get @getlabel\endcsname{\@endref}{\@labelb}%
+ \ifx\@labela\@labelb%
+ \let\@endref\relax%
+ \count@consecutive=1\relax%
+ \fi%
+ \fi%
+% \end{macrocode}
+% If there were only two consecutive references, keep the first one and
+% return the second one to the substack. (We add an empty reference after
+% it just to make sure there's no further compression.)
+% \begin{macrocode}
+ \ifnum\count@consecutive=2\relax%
+ \expandafter\cref@stack@push\expandafter{\@endref,}{\@refsubstack}%
+ \let\@endref\relax%
+ \count@consecutive=1\relax%
+ \fi%
+% \end{macrocode}
+% Work out which type of reference we need to typeset.
+% \begin{macrocode}
+ \cref@isstackfull{\@refsubstack}%
+ \if@cref@stackfull%
+ \ifnum\count@subgroup=1\relax%
+ \def\@pos{@first}%
+ \else%
+ \def\@pos{@middle}%
+ \fi%
+ \else%
+ \ifnum\count@subgroup=1\relax%
+ \def\@pos{}%
+ \else%
+ \ifnum\count@subgroup=2\relax%
+ \def\@pos{@second}%
+ \else%
+ \def\@pos{@last}%
+ \fi%
+ \fi%
+ \fi%
+% \end{macrocode}
+% If there were no consecutive references, just typeset the next
+% reference;
+% \begin{macrocode}
+ \ifnum\count@consecutive=1\relax%
+ \edef\@tempa{{\@beginref}{\@pos}}%
+ \csname @set\cref@variant\expandafter\endcsname\@tempa%
+% \end{macrocode}
+% otherwise, typeset a reference range.
+% \begin{macrocode}
+ \else%
+ \edef\@tempa{{\@beginref}{\@endref}{\@pos}}%
+ \csname @set\cref@variant range\expandafter\endcsname\@tempa%
+ \fi%
+ \advance\count@subgroup 1\relax%
+ \cref@isstackfull{\@refsubstack}%
+ }% end loop over reference substack
+ \cref@isstackfull{\@refstack}%
+% \end{macrocode}
+%
+% If we're typesetting a \cmd{\labelcref} reference and references in
+% stack have different types, throw a warning and stop processing.
+% \begin{macrocode}
+ \if@cref@stackfull%
+ \def\@tempa{labelcref}%
+ \ifx\cref@variant\@tempa%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries\space ??}%
+ \@latex@warning{References in label reference on page \thepage
+ \space have different types}%
+ \@cref@stackfullfalse%
+ \fi%
+ \fi%
+ }% end loop over main reference stack
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@setcref}
+% \begin{macro}{\@setCref}
+% \begin{macro}{\@setlavelcref}
+% \begin{macro}{\@@setcref}
+% The \cmd{\@setcref}, \cmd{\@setCref} and \cmd{\@setlabelcref} macros
+% are called as appropriate by \cmd{\@cref} to typeset a reference.
+% These macros just turn the |cref|, |Cref| or |labelcref| variant into
+% a macro argument and pass it along to \cmd{\@@setcref}, which deals
+% with actually typesetting the reference by calling the appropriate
+% type-dependent formatting macro defined by \cmd{\crefformat} etc.
+% \cmd{\@@setcref} takes three arguments. |#1| is the variant passed
+% along by |\@set|\meta{x}|ref|. |#2| contains the reference itself.
+% |#3| is either empty or one of ``@second'', ``@middle'' or ``@last'',
+% determining the type of reference group to typeset.
+% \begin{macrocode}
+\def\@setcref{\@@setcref{cref}}%
+\def\@setCref{\@@setcref{Cref}}%
+\def\@setlabelcref{\@@setcref{labelcref}}%
+\def\@@setcref#1#2#3{%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#2' on page \thepage \space undefined}%
+ \else%
+ \cref@gettype{#2}{\@temptype}% puts label type in \@temptype
+ \cref@getlabel{#2}{\@templabel}% puts label in \@templabel
+ \expandafter\ifx\csname #1@\@temptype @format#3\endcsname\relax%
+% \end{macrocode}
+% If reference format is undefined, but we're typesetting a
+% \cmd{\labelcref}, fall back to default \cmd{\labelcref} format.
+% \begin{macrocode}
+ \edef\@tempa{#1}\def\@tempb{labelcref}%
+ \ifx\@tempa\@tempb\relax%
+ \expandafter\@@@setcref\expandafter%
+ {\csname #1@default@format#3\endcsname}{#2}%
+ \else%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries ??}~\@templabel%
+ \@latex@warning{#1\space reference format for label type
+ `\@temptype' undefined}%
+ \fi%
+ \else%
+ \expandafter\@@@setcref\expandafter%
+ {\csname #1@\@temptype @format#3\endcsname}{#2}%
+ \fi%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@@setcref}
+% We separate out the very final typesetting step into a separate
+% macro, in order to make it easier to redefine things later to make
+% them work with the \package{hyperref} package.
+% \begin{macrocode}
+\def\@@@setcref#1#2{\cref@getlabel{#2}{\@templabel}#1{\@templabel}{}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@setcrefrange}
+% \begin{macro}{\@setCrefrange}
+% \begin{macro}{\@setlabelcrefrange}
+% \begin{macro}{\@@setcrefrange}
+% The \cmd{\@setcrefrange}, \cmd{\@setCrefrange} and
+% \cmd{\@setlabelrefrange} macros are called as appropriate by
+% \cmd{\@cref} to typeset a reference. The internal
+% \cmd{\@@setcrefrange} macro deals with actually typesetting reference
+% ranges, and takes four arguments. |#1| is the variant passed along by
+% |\@set|\meta{x}|ref|. |#2| and |#3| contains the references
+% themselves. |#4| is either empty or one of ``@second'', ``@middle''
+% or ``@last'', determining the type of reference group to typeset.
+%
+% The actual typesetting is no more complicated than in the
+% \cmd{\@@setcref} case; it's the error checking that makes the code
+% longer. We now have to check whether \emph{two} references are
+% undefined, whether \emph{two} reference formats are undefined,
+% whether the reference types are consistent, and also combinations of
+% these various errors.
+% \begin{macrocode}
+\def\@setcrefrange{\@@setcrefrange{cref}}%
+\def\@setCrefrange{\@@setcrefrange{Cref}}%
+\def\@setlabelcrefrange{\@@setcrefrange{labelcref}}%
+\def\@@setcrefrange#1#2#3#4{%
+ \begingroup%
+% \end{macrocode}
+% Check if both references are defined.
+% \begin{macrocode}
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \protect\G@refundefinedtrue%
+ \@latex@warning{Reference `#2' on page \thepage \space%
+ undefined}%
+ \expandafter\ifx\csname r@#3@cref\endcsname\relax%
+ \nfss@text{\reset@font\bfseries ??}--%
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#3' on page \thepage \space%
+ undefined}%
+ \else%
+ \cref@getlabel{#3}{\@labelb}%
+ \nfss@text{\reset@font\bfseries ??}--\@labelb%
+ \fi%
+ \else%
+ \expandafter\ifx\csname r@#3@cref\endcsname\relax%
+ \protect\G@refundefinedtrue%
+ \cref@getlabel{#2}{\@labela}%
+ \@labela--\nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#3' on page \thepage %
+ \space undefined}%
+% \end{macrocode}
+% If both references are defined, check that the reference format is
+% defined.
+% \begin{macrocode}
+ \else%
+ \cref@gettype{#2}{\@typea}%
+ \cref@gettype{#3}{\@typeb}%
+ \cref@getlabel{#2}{\@labela}%
+ \cref@getlabel{#3}{\@labelb}%
+ \edef\@format{\expandafter\noexpand%
+ \csname #1range@\@typea @format#4\endcsname}%
+ \expandafter\ifx\@format\relax%
+% \end{macrocode}
+% If reference format is undefined, but we're typesetting a
+% \cmd{\labelcref}, fall back to default \cmd{\labelcref}
+% formats.
+% \begin{macrocode}
+ \edef\@tempa{#1}\def\@tempb{labelcref}%
+ \ifx\@tempa\@tempb\relax%
+ \expandafter\@@@setcrefrange\expandafter%
+ {\csname #1range@default@format#4\endcsname}{#2}{#3}%
+ \else%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries ??}~\@labela--\@labelb%
+ \@latex@warning{#1 reference range format for label
+ type `\@typea' undefined}%
+ \fi%
+ \else%
+% \end{macrocode}
+% If reference types are identical, typeset reference range,
+% otherwise display warning.\\
+% (Note: there's no need to check if reference format for second type
+% is defined, since if it isn't it will be caught here as a
+% non-identical type.)
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@formata%
+ \expandafter\expandafter\expandafter{%
+ \csname #1range@\@typea @format#4\endcsname%
+ {\@dummya}{\@dummyb}{\@dummyc}{\@dummyd}{\@dummye}{\@dummyf}}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@formatb%
+ \expandafter\expandafter\expandafter{%
+ \csname #1range@\@typeb @format#4\endcsname%
+ {\@dummya}{\@dummyb}{\@dummyc}{\@dummyd}{\@dummye}{\@dummyf}}%
+ \ifx\@formata\@formatb%
+ \expandafter\@@@setcrefrange\expandafter{\@format}{#2}{#3}%
+ \else%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries ??}~\@labela--\@labelb%
+ \@latex@warning{References `#2' and `#3' in reference range
+ on page \thepage \space have different types
+ `\@typea' and `\@typeb'}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@@setcrefrange}
+% We again separate out the very final typesetting step into a
+% separate macro, in order to make it easier to redefine things later
+% to make them work with the \package{hyperref} package.
+% \begin{macrocode}
+\def\@@@setcrefrange#1#2#3{%
+ \cref@getlabel{#2}{\@labela}%
+ \cref@getlabel{#3}{\@labelb}%
+ #1{\@labela}{\@labelb}{}{}{}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% The typesetting of conjunctions is also separated out into separate
+% macros, for the same reason.
+% \begin{macrocode}
+\def\@setcref@pairgroupconjunction{\crefpairgroupconjunction}%
+\def\@setcref@middlegroupconjunction{\crefmiddlegroupconjunction}%
+\def\@setcref@lastgroupconjunction{\creflastgroupconjunction}%
+% \end{macrocode}
+%
+% \begin{macro}{\labelcref}
+% \begin{macro}{\namecref}
+% \begin{macro}{\nameCref}
+% \begin{macro}{\lcnamecref}
+% \begin{macro}{\namecrefs}
+% \begin{macro}{\nameCrefs}
+% \begin{macro}{\lcnamecrefs}
+% Finally, we define a \cmd{\labelcref} command that returns just the
+% typeset label part of a (multi-)reference, without the reference
+% name, and conversely \cmd{\namecref}, \cmd{\nameCref},
+% \cmd{\namecrefs} and \cmd{\nameCrefs} commands that return just the
+% typeset name of a reference, without the reference label. The latter
+% four retrieve the reference name from the corresponding
+% \cmd{\crefname} or \cmd{\Crefname} definition, so they only work when
+% this has been defined. We also define \cmd{\lcnamecref} and
+% \cmd{\lcnamecrefs} commands which force the reference name to
+% lowercase, for use when the \option{capitalise} option is enabled.
+% \begin{macrocode}
+\DeclareRobustCommand{\labelcref}[1]{\@cref{labelcref}{#1}}%
+\DeclareRobustCommand{\namecref}[1]{%
+ \@setnamecref{cref}{#1}{}{}}%
+\DeclareRobustCommand{\nameCref}[1]{%
+ \@setnamecref{Cref}{#1}{}{}}%
+\DeclareRobustCommand{\lcnamecref}[1]{%
+ \@setnamecref{Cref}{#1}{}{\MakeLowercase}}%
+\DeclareRobustCommand{\namecrefs}[1]{%
+ \@setnamecref{cref}{#1}{@plural}{}}%
+\DeclareRobustCommand{\nameCrefs}[1]{%
+ \@setnamecref{Cref}{#1}{@plural}{}}%
+\DeclareRobustCommand{\lcnamecrefs}[1]{%
+ \@setnamecref{Cref}{#1}{@plural}{\MakeLowercase}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@setnamecref}
+% \cmd{\@setnamecref} is the real macro underlying all the
+% \cmd{\namecref} commands. |#1| is the capitalisation variant, |#2|
+% the reference, |#3| is either empty or |@plural| if the plural name
+% should be generated, and |#4| is either empty or contains
+% \cmd{\MakeLowercase} if a lower-cased name should be generated.
+% \begin{macrocode}
+\def\@setnamecref#1#2#3#4{%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#2' on page \thepage \space undefined}%
+ \else%
+ \cref@gettype{#2}{\@tempa}%
+ \@ifundefined{#1@\@tempa @name#3}{%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference name for label type `\@tempa' undefined}%
+ }{%
+ \edef\@tempa{%
+ \expandafter\noexpand\csname #1@\@tempa @name#3\endcsname}%
+ \expandafter\@@@setnamecref\expandafter{\@tempa}{#4}%
+ }%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@@setnamecref}
+% We again separate out the final typesetting step of the
+% \cmd{\namecref} commands.
+% \begin{macrocode}
+\def\@@@setnamecref#1#2{%
+ \expandafter\def\expandafter\@tempa\expandafter{#1}%
+ \expandafter#2\@tempa}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Page-Referencing Commands}
+% \begin{macro}{\cpageref}
+% \begin{macro}{\Cpageref}
+% \begin{macro}{\cpagerefrange}
+% \begin{macro}{\Cpagerefrange}
+% Define the main page referencing command \cmd{\cpageref} and the
+% start-of-sentence variant \cmd{\Cpageref}, along with the
+% \cmd{\cpagerefrange} and \cmd{\Cpagerefrange} page range referencing
+% commands, and \cmd{\labelcpageref} (the counterpart to
+% \cmd{\labelcref}).
+% \begin{macrocode}
+\DeclareRobustCommand{\cpageref}[1]{\@cref{cpageref}{#1}}%
+\DeclareRobustCommand{\Cpageref}[1]{\@cref{Cpageref}{#1}}%
+\DeclareRobustCommand{\cpagerefrange}[2]{%
+ \@@setcpagerefrange{#1}{#2}{cref}{}}%
+\DeclareRobustCommand{\Cpagerefrange}[2]{%
+ \@@setcpagerefrange{#1}{#2}{Cref}{}}%
+\DeclareRobustCommand{\labelcpageref}[1]{%
+ \@cref{labelcpageref}{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@setcpageref}
+% \begin{macro}{\@setCpageref}
+% \begin{macro}{\@setlabelcpageref}
+% \begin{macro}{\@@setcpageref}
+% The \cmd{\@setcpageref}, \cmd{\@setCpageref} and
+% \cmd{\@setlabelcpageref} macros are called as appropriate by
+% \cmd{\@cref} to typeset a page reference. These macros just turn the
+% |cref|, |Cref| or |labelcref| variant into a macro argument and pass
+% it along to \cmd{\@@setcpageref}, which deals with actually
+% typesetting the page reference by calling the appropriate page
+% reference formatting macro defined by \cmd{\crefformat}|{page}| etc.
+% \cmd{\@@setcpageref} takes four arguments. |#1| is the variant passed
+% along by |\@set|\meta{x}|pageref|. |#2| contains the reference
+% itself. |#3| is either empty or one of ``@second'', ``@middle'' or
+% ``@last'', determining the type of page reference group to typeset.
+% \begin{macrocode}
+\def\@setcpageref{\@@setcpageref{cref}}
+\def\@setCpageref{\@@setcpageref{Cref}}
+\def\@setlabelcpageref{\@@setcpageref{labelcref}}
+\def\@@setcpageref#1#2#3{%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#2' on page \thepage \space undefined}%
+ \else%
+ \cpageref@getlabel{#2}{\@temppage}%
+ \expandafter\ifx\csname #1@page@format#3\endcsname\relax%
+% \end{macrocode}
+% If reference format is undefined, but we're typesetting a
+% \cmd{\labelcpageref}, fall back to default \cmd{\labelcref} format.
+% \begin{macrocode}
+ \edef\@tempa{#1}\def\@tempb{labelcref}%
+ \ifx\@tempa\@tempb\relax%
+ \expandafter\@@@setcpageref\expandafter%
+ {\csname #1@default@format#3\endcsname}{#2}%
+ \else%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries ??}~\@temppage%
+ \@latex@warning{ #1 reference format for
+ page references undefined}%
+ \fi%
+ \else%
+ \expandafter\@@@setcpageref\expandafter%
+ {\csname #1@page@format#3\endcsname}{#2}%
+ \fi%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@@setcpageref}
+% We separate out the very final typesetting step into a separate
+% macro, in order to make it easier to redefine things later to make
+% them work with the \package{hyperref} package.
+% \begin{macrocode}
+\def\@@@setcpageref#1#2{%
+ \cpageref@getlabel{#2}{\@temppage}#1{\@temppage}{}{}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@setcpagerefrange}
+% The \cmd{\@@setcpagerefrange} macro deals with typesetting page range
+% references, just as \cmd{\@@setcpageref} does for normal page
+% references.
+% \begin{macrocode}
+\def\@@setcpagerefrange#1#2#3#4{%
+ \begingroup%
+% \end{macrocode}
+% Check if both references are defined.
+% \begin{macrocode}
+ \expandafter\ifx\csname r@#1@cref\endcsname\relax%
+ \protect\G@refundefinedtrue%
+ \@latex@warning{Reference `#1' on page \thepage \space%
+ undefined}%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \nfss@text{\reset@font\bfseries ??}--%
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#2' on page \thepage \space%
+ undefined}%
+ \else%
+ \cpageref@getlabel{#2}{\@pageb}%
+ \nfss@text{\reset@font\bfseries ??}--\@pageb%
+ \fi%
+ \else%
+ \expandafter\ifx\csname r@#2@cref\endcsname\relax%
+ \protect\G@refundefinedtrue%
+ \cpageref@getlabel{#1}{\@pagea}%
+ \@pagea--\nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#2' on page \thepage %
+ \space undefined}%
+% \end{macrocode}
+% If both references are defined, check that the reference format is
+% defined.
+% \begin{macrocode}
+ \else%
+ \cpageref@getlabel{#1}{\@pagea}%
+ \cpageref@getlabel{#2}{\@pageb}%
+ \edef\@format{\expandafter\noexpand%
+ \csname#3range@page@format#4\endcsname}%
+ \expandafter\ifx\@format\relax%
+% \end{macrocode}
+% If page reference format is undefined, but we're typesetting a
+% \cmd{\labelcpageref}, fall back to default \cmd{\labelcref}
+% formats.
+% \begin{macrocode}
+ \edef\@tempa{#3}\def\@tempb{labelcref}%
+ \ifx\@tempa\@tempb\relax%
+ \expandafter\@@@setcpagerefrange\expandafter%
+ {\csname#3range@default@format#4\endcsname}{#1}{#2}%
+ \else%
+ \protect\G@refundefinedtrue%
+ \nfss@text{\reset@font\bfseries ??}~\@pagea--\@pageb%
+ \@latex@warning{#3 reference range format for page
+ references undefined}%
+ \fi%
+ \else%
+% \end{macrocode}
+% typeset page reference range,
+% \begin{macrocode}
+ \expandafter\@@@setcpagerefrange\expandafter{\@format}{#1}{#2}%
+ \fi%
+ \fi%
+ \fi%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@@setcpagerefrange}
+% We again separate out the very final typesetting step into a
+% separate macro, in order to make it easier to redefine things later
+% to make them work with the \package{hyperref} package.
+% \begin{macrocode}
+\def\@@@setcpagerefrange#1#2#3{%
+ \cpageref@getlabel{#2}{\@pagea}%
+ \cpageref@getlabel{#3}{\@pageb}%
+ #1{\@pagea}{\@pageb}{}{}{}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Reference Format Customisation Commands}
+%
+% \subsubsection{Format component commands}
+% \begin{macro}{\cref@label@types}
+% The reference formats are usually constructed out of components
+% defined by the user-level \cmd{\crefname}, \cmd{\Crefname},
+% \cmd{\creflabel} and \cmd{\crefrangelabel} commands.
+% \cmd{\cref@label@types} keeps track of label types for which
+% components have been defined, and therefore need constructing at
+% \cmd{\begindocument} (see below).
+%
+% FIXME: We don't check if the label type is already in the list, so
+% some formats may needlessly be redefined identically, multiple times.
+%
+% \begin{macrocode}
+\cref@stack@init{\cref@label@types}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\crefdefaultlabelformat}
+% \begin{macro}{\crefname}
+% \begin{macro}{\Crefname}
+% \begin{macro}{\creflabelformat}
+% \begin{macro}{\crefrangelabelformat}
+% The component customisation commands simply use the supplied
+% arguments to define appropriately named macros containing the
+% formatting components. If the corresponding \cmd{\Crefname} or
+% \cmd{\crefname} variant is not already defined, \cmd{\crefname} and
+% \cmd{\Crefname} define it to be a version with the first letter
+% capitalised or lower-cased, respectively.
+% \begin{macrocode}
+\newcommand\crefdefaultlabelformat[1]{%
+ \def\cref@default@label##1##2##3{#1}}%
+\newcommand\crefname[3]{%
+ \@crefname{cref}{#1}{#2}{#3}{}}%
+\newcommand\Crefname[3]{%
+ \@crefname{Cref}{#1}{#2}{#3}{}}%
+\newcommand\creflabelformat[2]{%
+ \expandafter\def\csname cref@#1@label\endcsname##1##2##3{#2}%
+ \cref@stack@add{#1}{\cref@label@types}}%
+\newcommand\crefrangelabelformat[2]{%
+ \expandafter\def\csname cref@#1@rangelabel\endcsname%
+ ##1##2##3##4##5##6{#2}%
+ \cref@stack@add{#1}{\cref@label@types}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\crefalias}
+% The \cmd{\crefalias} command aliases a counter name to another
+% cross-reference type, so can be used to make the same cross-reference
+% format apply to multiple different counters.
+%\begin{macrocode}
+\newcommand\crefalias[2]{%
+ \expandafter\def\csname cref@#1@alias\endcsname{#2}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\crefname@preamble}
+% \begin{macro}{\Crefname@preamble}
+% The \cmd{\crefname@preamble} and \cmd{\Crefname@preamble} commands
+% are very like the \cmd{\crefname} and \cmd{\Crefname} commands, but
+% they tag ``|@preamble|'' onto the end of the generated macro names.
+% They are used when defining the default formats for different
+% languages (see \cref{sec:code:babel}).
+%\begin{macrocode}
+\newcommand\crefname@preamble[3]{%
+ \@crefname{cref}{#1}{#2}{#3}{@preamble}}%
+\newcommand\Crefname@preamble[3]{%
+ \@crefname{Cref}{#1}{#2}{#3}{@preamble}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{cref@othervariant}
+% The following utility macro sets up the appropriate definitions for
+% the other capitalisation variant. It defines the macro passed in |#2|
+% to be the other variant (``cref'' or ``Cref'') to the one specified
+% in |#1|, and defines |#3| to be the appropriate
+% capitalisation-changing command. It makes use of the fact that the
+% first character of \#1 is ``c'' for the lower-case variant and ``C''
+% for the upper-case one.
+% \begin{macrocode}
+\def\cref@othervariant#1#2#3{\cref@@othervariant#1\@nil#2#3}%
+\def\cref@@othervariant#1#2\@nil#3#4{%
+ \if#1c%
+ \def#3{C#2}%
+ \def#4{\MakeUppercase}%
+ \else%
+ \def#3{c#2}%
+ \if@cref@capitalise%
+ \def#4{}%
+ \else%
+ \def#4{\MakeLowercase}%
+ \fi%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@crefname}
+% The \cmd{\@crefname} utility macro does the real work of defining
+% format names, by defining an appropriately named command to contain
+% the format component, and using the additional first argument
+% (``cref'' or ``Cref'') to determine how to define the corresponding
+% command with the other capitalisation. The extra fifth argument gets
+% tagged onto the end of the generated macro names. Note that
+% \cmd{\@crefname} \emph{must not} create global definitions, or else
+% it will break \package{babel}'s \cmd{\otherlanguage},
+% \cmd{\otherlanguage*} and \cmd{\foreignlanguage} commands.
+% \begin{macrocode}
+\def\@crefname#1#2#3#4#5{%
+ \expandafter\def\csname #1@#2@name#5\endcsname{#3}%
+ \expandafter\def\csname #1@#2@name@plural#5\endcsname{#4}%
+% \end{macrocode}
+% If the other capitalisation variant is not already defined\dots
+% \begin{macrocode}
+ \cref@othervariant{#1}{\@tempc}{\@tempd}%
+ \@ifundefined{\@tempc @#2@name#5}{%
+% \end{macrocode}
+% Define \cmd{\@tempa} and \cmd{\@tempb} to be partial expansions (expanded
+% just once) of the macros for the capitalisation variant we've just
+% defined above.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempa%
+ \expandafter\expandafter\expandafter{%
+ \csname#1@#2@name\endcsname}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempb%
+ \expandafter\expandafter\expandafter{%
+ \csname#1@#2@name@plural\endcsname}%
+% \end{macrocode}
+% Add the case-change command stored in \cmd{\@tempd} to the front of the
+% definitions of \cmd{\@tempa} and \cmd{\@tempb}.
+% \begin{macrocode}
+ \expandafter\ifx\@tempa\@empty\else%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempd\@tempa}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempb%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempd\@tempb}%
+ \fi%
+% \end{macrocode}
+% Define the other capitalisation variants to be the partial expansions
+% (expanded just once) of \cmd{\@tempa} and \cmd{\@tempb}. The
+% \cmd{\@toksa} token register just makes the code less verbose.
+% \begin{macrocode}
+ \toksdef\@toksa=0%
+ \@toksa={%
+ \expandafter\def\csname\@tempc @#2@name#5\endcsname}%
+ \expandafter\the\expandafter\@toksa\expandafter{\@tempa}%
+ \@toksa={%
+ \expandafter\def\csname\@tempc @#2@name@plural#5\endcsname}%
+ \expandafter\the\expandafter\@toksa\expandafter{\@tempb}%
+ }{}%
+% \end{macrocode}
+% Add label type to list of types that need defining from components.
+% \begin{macrocode}
+ \cref@stack@add{#2}{\cref@label@types}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@crefconstructcomponents}
+% The \cmd{\@crefconstructcomponents} utility macro puts the reference
+% format components for the specified reference type into temporary
+% macros, for use by later macros. The ridiculous number of ``\#''
+% characters ensure that the correct number remain when they come to be
+% used later (recall that pairs ``\#\#'' are collapsed to a single
+% ``\#'' each time the code is expanded).
+% \begin{macrocode}
+\def\@crefconstructcomponents#1{%
+% \end{macrocode}
+% Single cross-reference label format.
+% \begin{macrocode}
+ \@ifundefined{cref@#1@label}{%
+ \let\@templabel\cref@default@label%
+ }{%
+ \expandafter\let\expandafter\@templabel%
+ \csname cref@#1@label\endcsname%
+ }%
+% \end{macrocode}
+% Reference range label format.
+% \begin{macrocode}
+ \@ifundefined{cref@#1@rangelabel}{%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \@templabel{####1}{####3}{####4}}%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \@templabel{####2}{####5}{####6}}%
+ \toksdef\@toksa=0%
+ \@toksa={\def\@temprangelabel##1##2##3##4##5##6}%
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\crefrangepreconjunction%
+ \expandafter\@tempa\expandafter\crefrangeconjunction\@tempb%
+ \crefrangepostconjunction}%
+ }{%
+ \expandafter\let\expandafter\@temprangelabel%
+ \csname cref@#1@rangelabel\endcsname%
+ }%
+% \end{macrocode}
+% If we're including names in hyperlinks, define variants of temporary
+% label macros which lack the hyperlink start argument (it will instead
+% be included in the temporary name macros).
+% \begin{macrocode}
+ \if@cref@nameinlink%
+ \expandafter\def\expandafter\@templabel@first\expandafter{%
+ \@templabel{########1}{}{########3}}%
+ \expandafter\def\expandafter\@temprangelabel@first\expandafter{%
+ \@temprangelabel{########1}{########2}%
+ {}{########4}{########5}{########6}}%
+ \fi%
+% \end{macrocode}
+% Get the correct number of ``\#'''s into the label format definitions.
+% \begin{macrocode}
+ \expandafter\def\expandafter\@templabel\expandafter{%
+ \@templabel{########1}{########2}{########3}}%
+ \expandafter\def\expandafter\@temprangelabel\expandafter{%
+ \@temprangelabel{########1}{########2}{########3}%
+ {########4}{########5}{########6}}%
+% \end{macrocode}
+% If we're not including names in hyperlinks, define all variants to be
+% the same as standard temporary name macros.
+% \begin{macrocode}
+ \if@cref@nameinlink\else%
+ \let\@templabel@first\@templabel%
+ \let\@temprangelabel@first\@temprangelabel%
+ \fi%
+% \end{macrocode}
+%
+% If including names in hyperlinks, define temporary name macros to
+% include hyperlink start argument.
+% \begin{macrocode}
+ \if@cref@nameinlink%
+ \def\@tempa##1##2{##2##1}%
+% \end{macrocode}
+% Lower-case singular cross-reference name.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempname%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempa\expandafter%
+ {\csname cref@#1@name\endcsname}{########2}}%
+% \end{macrocode}
+% Upper-case singular cross-reference name.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempName%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempa\expandafter%
+ {\csname Cref@#1@name\endcsname}{########2}}%
+% \end{macrocode}
+% Lower-case plural cross-reference name.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempnameplural%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempa\expandafter%
+ {\csname cref@#1@name@plural\endcsname}{########2}}%
+% \end{macrocode}
+% Upper-case plural cross-reference name.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempNameplural%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempa\expandafter%
+ {\csname Cref@#1@name@plural\endcsname}{########2}}%
+% \end{macrocode}
+% For cross-reference ranges, the hyperlink start argument is \#3 instead
+% of \#2, so we need a different variant of the temporary plural name
+% macros.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempnameplural@range%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempa\expandafter%
+ {\csname cref@#1@name@plural\endcsname}{########3}}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempNameplural@range%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempa\expandafter%
+ {\csname Cref@#1@name@plural\endcsname}{########3}}%
+% \end{macrocode}
+%
+% If we're not including names in hyperlinks, temporary name macros don't
+% include the hyperlink start argument.
+% \begin{macrocode}
+ \else%
+% \end{macrocode}
+% Lower-case singular cross-reference name.
+% \begin{macrocode}
+ \expandafter\def\expandafter\@tempname\expandafter{%
+ \csname cref@#1@name\endcsname}%
+% \end{macrocode}
+% Upper-case singular cross-reference name.
+% \begin{macrocode}
+ \expandafter\def\expandafter\@tempName\expandafter{%
+ \csname Cref@#1@name\endcsname}%
+% \end{macrocode}
+% Lower-case plural cross-reference name.
+% \begin{macrocode}
+ \expandafter\def\expandafter\@tempnameplural\expandafter{%
+ \csname cref@#1@name@plural\endcsname}%
+% \end{macrocode}
+% Upper-case plural cross-reference name.
+% \begin{macrocode}
+ \expandafter\def\expandafter\@tempNameplural\expandafter{%
+ \csname Cref@#1@name@plural\endcsname}%
+% \end{macrocode}
+% Define reference range variants to be identical to normal variants.
+% \begin{macrocode}
+ \let\@tempnameplural@range\@tempnameplural%
+ \let\@tempNameplural@range\@tempNameplural%
+ \fi%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@crefdefineformat}
+% The \cmd{\@crefdefineformat} et al.\ macros construct calls to
+% \cmd{\crefformat} et al.\ for the supplied reference type, which
+% define the corresponding formats in terms of the format components.
+% This is mostly just an arduous exercise in controlling macro
+% expansion order.
+% \begin{macrocode}
+\def\@crefdefineformat#1{%
+ \begingroup%
+% \end{macrocode}
+% Put format components into tmp macros.
+% \begin{macrocode}
+ \@crefconstructcomponents{#1}%
+% \end{macrocode}
+% Assemble the arguments for \cmd{\crefformat}, \cmd{\Crefformat} and
+% \cmd{\labelcrefformat} from the components.
+% \begin{macrocode}
+ \expandafter\ifx\csname cref@#1@name\endcsname\@empty\relax%
+ \expandafter\def\expandafter\@tempfirst\expandafter{\@templabel}%
+ \else%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempfirst%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempname\expandafter\nobreakspace\@templabel@first}%
+ \fi%
+ \expandafter\ifx\csname Cref@#1@name\endcsname\@empty\relax%
+ \expandafter\def\expandafter\@tempFirst\expandafter{\@templabel}%
+ \else%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempFirst%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempName\expandafter\nobreakspace\@templabel@first}%
+ \fi%
+ \expandafter\def\expandafter\@templabel\expandafter{\@templabel}%
+% \end{macrocode}
+% Define \cmd{\crefformat} and \cmd{\Crefformat}.
+% \begin{macrocode}
+ \toksdef\@toksa=0%
+ \@toksa={\crefformat{#1}}%
+ \expandafter\the\expandafter\@toksa\expandafter{\@tempfirst}%
+ \@toksa={\Crefformat{#1}}%
+ \expandafter\the\expandafter\@toksa\expandafter{\@tempFirst}%
+% \end{macrocode}
+% Define \cmd{\labelcrefformat} if type has custom label format.
+% \begin{macrocode}
+ \@ifundefined{cref@#1@label}{}{%
+ \@toksa={\labelcrefformat{#1}}%
+ \expandafter\the\expandafter\@toksa\expandafter{\@templabel}}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@crefrangedefineformat}
+% Construct call to \cmd{\crefrangeformat}.
+% \begin{macrocode}
+\def\@crefrangedefineformat#1{%
+ \begingroup%
+% \end{macrocode}
+% Put format components into tmp macros.
+% \begin{macrocode}
+ \@crefconstructcomponents{#1}%
+% \end{macrocode}
+% Assemble the arguments for \cmd{\crefrangeformat},
+% \cmd{\Crefrangeformat} and\linebreak[4] \cmd{\labelcrefrangeformat}
+% from the components.
+% \begin{macrocode}
+ \expandafter\ifx\csname cref@#1@name\endcsname\@empty\relax%
+ \expandafter\def\expandafter\@tempfirst%
+ \expandafter{\@temprangelabel}%
+ \else%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempfirst%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempnameplural@range%
+ \expandafter\nobreakspace\@temprangelabel@first}%
+ \fi%
+ \expandafter\ifx\csname Cref@#1@name\endcsname\@empty\relax%
+ \expandafter\def\expandafter\@tempFirst%
+ \expandafter{\@temprangelabel}%
+ \else%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempFirst%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempNameplural@range%
+ \expandafter\nobreakspace\@temprangelabel@first}%
+ \fi%
+ \expandafter\def\expandafter\@temprangelabel%
+ \expandafter{\@temprangelabel}%
+% \end{macrocode}
+% Define \cmd{\crefrangeformat} and \cmd{\Crefrangeformat}.
+% \begin{macrocode}
+ \toksdef\@toksa=0%
+ \@toksa={\crefrangeformat{#1}}%
+ \expandafter\the\expandafter\@toksa\expandafter{\@tempfirst}%
+ \@toksa={\Crefrangeformat{#1}}%
+ \expandafter\the\expandafter\@toksa\expandafter{\@tempFirst}%
+% \end{macrocode}
+% Define \cmd{\labelcrefrangeformat} if type has custom label format.
+% \begin{macrocode}
+ \@ifundefined{cref@#1@rangelabel}{%
+ \@ifundefined{cref@#1@label}{\let\@tempa\relax}{\def\@tempa{}}}%
+ {\def\@tempa{}}%
+ \ifx\@tempa\@empty\relax%
+ \@toksa={\labelcrefrangeformat{#1}}%
+ \expandafter\the\expandafter\@toksa\expandafter{%
+ \@temprangelabel}%
+ \fi%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@crefdefinemultiformat}
+% Construct call to \cmd{\crefmultiformat}.
+% \begin{macrocode}
+\def\@crefdefinemultiformat#1{%
+ \begingroup%
+% \end{macrocode}
+% Put format components into tmp macros.
+% \begin{macrocode}
+ \@crefconstructcomponents{#1}%
+% \end{macrocode}
+% Assemble the arguments for \cmd{\crefmultiformat},
+% \cmd{\Crefmultiformat} and\linebreak[4] \cmd{\labelcrefmultiformat}
+% from the components.
+% \begin{macrocode}
+ \expandafter\ifx\csname cref@#1@name@plural\endcsname\@empty\relax%
+ \expandafter\def\expandafter\@tempfirst%
+ \expandafter{\@templabel}%
+ \else%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempfirst%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempnameplural%
+ \expandafter\nobreakspace\@templabel@first}%
+ \fi%
+ \expandafter\ifx\csname Cref@#1@name@plural\endcsname\@empty\relax%
+ \expandafter\def\expandafter\@tempFirst%
+ \expandafter{\@templabel}%
+ \else%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempFirst%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempNameplural%
+ \expandafter\nobreakspace\@templabel@first}%
+ \fi%
+ \expandafter\def\expandafter\@tempsecond\expandafter{%
+ \expandafter\crefpairconjunction\@templabel}%
+ \expandafter\def\expandafter\@tempmiddle\expandafter{%
+ \expandafter\crefmiddleconjunction\@templabel}%
+ \expandafter\def\expandafter\@templast\expandafter{%
+ \expandafter\creflastconjunction\@templabel}%
+ \expandafter\def\expandafter\@templabel\expandafter{\@templabel}%
+% \end{macrocode}
+% Bundle all four arguments for \cmd{\crefmultiformat} in token register
+% \cmd{\@toksb}, then call it.
+% \begin{macrocode}
+ \toksdef\@toksa=0%
+ \toksdef\@toksb=1%
+ \@toksb={}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempfirst}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempsecond}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempmiddle}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@templast}}%
+ \@toksa={\crefmultiformat{#1}}%
+ \expandafter\the\expandafter\@toksa\the\@toksb%
+% \end{macrocode}
+% Bundle all four arguments for \cmd{\Crefmultiformat} in token register
+% \cmd{\@toksb}, then call it.
+% \begin{macrocode}
+ \@toksb={}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempFirst}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempsecond}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempmiddle}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@templast}}%
+ \@toksa={\Crefmultiformat{#1}}%
+ \expandafter\the\expandafter\@toksa\the\@toksb%
+% \end{macrocode}
+% If type has custom label format, bundle all four arguments
+% for\linebreak[4] \cmd{\labelcrefmultiformat} in token register
+% \cmd{\@toksb}, then call it.
+% \begin{macrocode}
+ \@ifundefined{cref@#1@label}{}{%
+ \@toksb={}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@templabel}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempsecond}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempmiddle}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@templast}}%
+ \@toksa={\labelcrefmultiformat{#1}}%
+ \expandafter\the\expandafter\@toksa\the\@toksb}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@crefrangedefinemultiformat}
+% Construct call to \cmd{\crefrangemultiformat}.
+% \begin{macrocode}
+\def\@crefrangedefinemultiformat#1{%
+ \begingroup%
+% \end{macrocode}
+% Put format components into tmp macros.
+% \begin{macrocode}
+ \@crefconstructcomponents{#1}%
+% \end{macrocode}
+% Assemble the arguments that need to be passed to
+% \cmd{\crefrangemultiformat}, \cmd{\Crefrangemultiformat} and
+% \cmd{\labelcrefrangemultiformat} from the reference components.
+% \begin{macrocode}
+ \expandafter\ifx\csname cref@#1@name@plural\endcsname\@empty\relax%
+ \expandafter\def\expandafter\@tempfirst%
+ \expandafter{\@temprangelabel}%
+ \else%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempfirst%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempnameplural@range%
+ \expandafter\nobreakspace\@temprangelabel@first}%
+ \fi%
+ \expandafter\ifx\csname Cref@#1@name@plural\endcsname\@empty\relax%
+ \expandafter\def\expandafter\@tempFirst%
+ \expandafter{\@temprangelabel}%
+ \else%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempFirst%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@tempNameplural@range%
+ \expandafter\nobreakspace\@temprangelabel@first}%
+ \fi%
+ \expandafter\def\expandafter\@tempsecond\expandafter{%
+ \expandafter\crefpairconjunction\@temprangelabel}%
+ \expandafter\def\expandafter\@tempmiddle\expandafter{%
+ \expandafter\crefmiddleconjunction\@temprangelabel}%
+ \expandafter\def\expandafter\@templast\expandafter{%
+ \expandafter\creflastconjunction\@temprangelabel}%
+ \expandafter\def\expandafter\@temprangelabel%
+ \expandafter{\@temprangelabel}%
+% \end{macrocode}
+% Bundle all four arguments for \cmd{\crefrangemultiformat} in token
+% register \cmd{\@toksb}, then call it.
+% \begin{macrocode}
+ \toksdef\@toksa=0%
+ \toksdef\@toksb=1%
+ \@toksb={}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempfirst}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempsecond}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempmiddle}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@templast}}%
+ \@toksa={\crefrangemultiformat{#1}}%
+ \expandafter\the\expandafter\@toksa\the\@toksb%
+% \end{macrocode}
+% Bundle all four arguments for \cmd{\Crefrangemultiformat} in token
+% register \cmd{\@toksb}, then call it.
+% \begin{macrocode}
+ \@toksb={}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempFirst}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempsecond}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempmiddle}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@templast}}%
+ \@toksa={\Crefrangemultiformat{#1}}%
+ \expandafter\the\expandafter\@toksa\the\@toksb%
+% \end{macrocode}
+% If type has custom label format, bundle all four arguments
+% for\linebreak[4] \cmd{\labelcrefrangemultiformat} in token register
+% \cmd{\@toksb}, then call it.
+% \begin{macrocode}
+ \@ifundefined{cref@#1@rangelabel}{%
+ \@ifundefined{cref@#1@label}{\let\@tempa\relax}{\def\@tempa{}}}%
+ {\def\@tempa{}}%
+ \ifx\@tempa\@empty\relax%
+ \@toksb={}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@temprangelabel}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempsecond}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempmiddle}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@templast}}%
+ \@toksa={\labelcrefrangemultiformat{#1}}%
+ \expandafter\the\expandafter\@toksa\the\@toksb%
+ \fi%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@labelcrefdefinedefaultformats}
+% \cmd{\@labelcrefdefinedefaultformats} defines the default formats for
+% the\linebreak[4] \cmd{\labelcref} command, which are used when no
+% type-specific formats are defined.
+% \begin{macrocode}
+\def\@labelcrefdefinedefaultformats{%
+ \begingroup%
+ \toksdef\@toksa=0%
+ \toksdef\@toksb=1%
+% \end{macrocode}
+% Assemble the arguments that need to be passed to
+% \cmd{\labelcrefformat},\linebreak[4] \cmd{\labelcrefrangeformat},
+% \cmd{\labelcrefmultiformat} and\linebreak[4]
+% \cmd{\labelcrefrangemultiformat}.
+% \begin{macrocode}
+ \let\@templabel\cref@default@label%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \@templabel{####1}{####3}{####4}}%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \@templabel{####2}{####5}{####6}}%
+ \@toksa={\def\@temprangelabel##1##2##3##4##5##6}%
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\crefrangepreconjunction%
+ \expandafter\@tempa\expandafter\crefrangeconjunction\@tempb%
+ \crefrangepostconjunction}%
+ \expandafter\def\expandafter\@templabel\expandafter{%
+ \@templabel{########1}{########2}{########3}}%
+ \expandafter\def\expandafter\@temprangelabel\expandafter{%
+ \@temprangelabel{########1}{########2}{########3}%
+ {########4}{########5}{########6}}%
+ \expandafter\def\expandafter\@tempsecond\expandafter{%
+ \expandafter\crefpairconjunction\@templabel}%
+ \expandafter\def\expandafter\@tempmiddle\expandafter{%
+ \expandafter\crefmiddleconjunction\@templabel}%
+ \expandafter\def\expandafter\@templast\expandafter{%
+ \expandafter\creflastconjunction\@templabel}%
+ \expandafter\def\expandafter\@temprangesecond\expandafter{%
+ \expandafter\crefpairconjunction\@temprangelabel}%
+ \expandafter\def\expandafter\@temprangemiddle\expandafter{%
+ \expandafter\crefmiddleconjunction\@temprangelabel}%
+ \expandafter\def\expandafter\@temprangelast\expandafter{%
+ \expandafter\creflastconjunction\@temprangelabel}%
+ \expandafter\def\expandafter\@templabel\expandafter{\@templabel}%
+ \expandafter\def\expandafter\@temprangelabel%
+ \expandafter{\@temprangelabel}%
+% \end{macrocode}
+% Define default \cmd{\labelcrefformat}.
+% \begin{macrocode}
+ \@toksa={\labelcrefformat{default}}%
+ \expandafter\the\expandafter\@toksa\expandafter{\@templabel}%
+% \end{macrocode}
+% Define default \cmd{\labelcrefrangeformat}.
+% \begin{macrocode}
+ \@toksa={\labelcrefrangeformat{default}}%
+ \expandafter\the\expandafter\@toksa\expandafter{\@temprangelabel}%
+% \end{macrocode}
+% Bundle all four arguments for \cmd{\labelcrefmultiformat} in token
+% register \cmd{\@toksb}, then call it to define default formats.
+% \begin{macrocode}
+ \@toksb={}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@templabel}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempsecond}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@tempmiddle}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@templast}}%
+ \@toksa={\labelcrefmultiformat{default}}%
+ \expandafter\the\expandafter\@toksa\the\@toksb%
+% \end{macrocode}
+% Bundle all four arguments for \cmd{\labelcrefrangemultiformat} in token
+% register \cmd{\@toksb}, then call it to define default formats.
+% \begin{macrocode}
+ \@toksb={}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@temprangelabel}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@temprangesecond}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@temprangemiddle}}%
+ \expandafter\cref@append@toks\expandafter\@toksb\expandafter{%
+ \expandafter{\@temprangelast}}%
+ \@toksa={\labelcrefrangemultiformat{default}}%
+ \expandafter\the\expandafter\@toksa\the\@toksb%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@crefdefineallformats}
+% \cmd{\@crefdefineallformats} calls each of the above, to define all
+% formats for the given type from the corresponding components.
+% \begin{macrocode}
+\def\@crefdefineallformats#1{%
+ \@crefdefineformat{#1}%
+ \@crefrangedefineformat{#1}%
+ \@crefdefinemultiformat{#1}%
+ \@crefrangedefinemultiformat{#1}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@crefcopyformats}
+% \cmd{\@crefcopyformats} copies any undefined formats for type |#2|
+% from those for type |#1|.
+% \begin{macrocode}
+\def\@crefcopyformats#1#2{%
+ \let\@tempf\iffalse%
+ \@ifundefined{cref@#2@name}{%
+ \edef\@tempa{\expandafter\noexpand\csname cref@#2@name\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname cref@#1@name\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb%
+ \edef\@tempa{\expandafter\noexpand\csname cref@#2@name@plural\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname cref@#1@name@plural\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb%
+ }{%
+ \let\@tempf\iftrue%
+ }%
+ \@ifundefined{Cref@#2@name}{%
+ \edef\@tempa{\expandafter\noexpand\csname Cref@#2@name\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Cref@#1@name\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb%
+ \edef\@tempa{\expandafter\noexpand\csname Cref@#2@name@plural\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Cref@#1@name@plural\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb%
+ }{%
+ \let\@tempf\iftrue%
+ }%
+ \@ifundefined{cref@#2@label}{%
+ \@ifundefined{cref@#1@label}{}{%
+ \edef\@tempa{\expandafter\noexpand\csname cref@#2@label\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname cref@#1@label\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}%
+ }{%
+ \let\@tempf\iftrue%
+ }%
+ \@ifundefined{cref@#2@rangelabel}{%
+ \@ifundefined{cref@#1@rangelabel}{}{%
+ \edef\@tempa{\expandafter\noexpand\csname cref@#2@rangelabel\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname cref@#1@rangelabel\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}%
+ }{%
+ \let\@tempf\iftrue%
+ }%
+% \end{macrocode}
+% If at least one format component has been customised specifically for
+% reference type |#2|, generate its formats from components.
+% \begin{macrocode}
+ \@tempf\relax%
+ \@crefdefineallformats{#2}%
+% \end{macrocode}
+% If no format components have been defined for reference type |#2|, copy
+% over the low-level formats from type |#1|.
+% \begin{macrocode}
+ \else%
+ \@ifundefined{cref@#2@format}{%
+ \edef\@tempa{\expandafter\noexpand\csname cref@#2@format\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname cref@#1@format\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{crefrange@#2@format}{%
+ \edef\@tempa{\expandafter\noexpand\csname crefrange@#2@format\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname crefrange@#1@format\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{cref@#2@format@first}{%
+ \edef\@tempa{\expandafter\noexpand\csname cref@#2@format@first\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname cref@#1@format@first\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{cref@#2@format@second}{%
+ \edef\@tempa{\expandafter\noexpand\csname cref@#2@format@second\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname cref@#1@format@second\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{cref@#2@format@middle}{%
+ \edef\@tempa{\expandafter\noexpand\csname cref@#2@format@middle\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname cref@#1@format@middle\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{cref@#2@format@last}{%
+ \edef\@tempa{\expandafter\noexpand\csname cref@#2@format@last\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname cref@#1@format@last\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{crefrange@#2@format@first}{%
+ \edef\@tempa{\expandafter\noexpand\csname crefrange@#2@format@first\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname crefrange@#1@format@first\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{crefrange@#2@format@second}{%
+ \edef\@tempa{\expandafter\noexpand\csname crefrange@#2@format@second\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname crefrange@#1@format@second\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{crefrange@#2@format@middle}{%
+ \edef\@tempa{\expandafter\noexpand\csname crefrange@#2@format@middle\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname crefrange@#1@format@middle\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{crefrange@#2@format@last}{%
+ \edef\@tempa{\expandafter\noexpand\csname crefrange@#2@format@last\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname crefrange@#1@format@last\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+%
+ \@ifundefined{Cref@#2@format}{%
+ \edef\@tempa{\expandafter\noexpand\csname Cref@#2@format\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Cref@#1@format\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{Crefrange@#2@format}{%
+ \edef\@tempa{\expandafter\noexpand\csname Crefrange@#2@format\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Crefrange@#1@format\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{Cref@#2@format@first}{%
+ \edef\@tempa{\expandafter\noexpand\csname Cref@#2@format@first\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Cref@#1@format@first\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{Cref@#2@format@second}{%
+ \edef\@tempa{\expandafter\noexpand\csname Cref@#2@format@second\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Cref@#1@format@second\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{Cref@#2@format@middle}{%
+ \edef\@tempa{\expandafter\noexpand\csname Cref@#2@format@middle\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Cref@#1@format@middle\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{Cref@#2@format@last}{%
+ \edef\@tempa{\expandafter\noexpand\csname Cref@#2@format@last\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Cref@#1@format@last\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{Crefrange@#2@format@first}{%
+ \edef\@tempa{\expandafter\noexpand\csname Crefrange@#2@format@first\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Crefrange@#1@format@first\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{Crefrange@#2@format@second}{%
+ \edef\@tempa{\expandafter\noexpand\csname Crefrange@#2@format@second\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Crefrange@#1@format@second\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{Crefrange@#2@format@middle}{%
+ \edef\@tempa{\expandafter\noexpand\csname Crefrange@#2@format@middle\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Crefrange@#1@format@middle\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{Crefrange@#2@format@last}{%
+ \edef\@tempa{\expandafter\noexpand\csname Crefrange@#2@format@last\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname Crefrange@#1@format@last\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+%
+ \@ifundefined{labelcref@#2@format}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcref@#2@format\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcref@#1@format\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{labelcrefrange@#2@format}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcrefrange@#2@format\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcrefrange@#1@format\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{labelcref@#2@format@first}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcref@#2@format@first\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcref@#1@format@first\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{labelcref@#2@format@second}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcref@#2@format@second\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcref@#1@format@second\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{labelcref@#2@format@middle}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcref@#2@format@middle\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcref@#1@format@middle\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{labelcref@#2@format@last}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcref@#2@format@last\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcref@#1@format@last\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{labelcrefrange@#2@format@first}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcrefrange@#2@format@first\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcrefrange@#1@format@first\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{labelcrefrange@#2@format@second}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcrefrange@#2@format@second\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcrefrange@#1@format@second\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{labelcrefrange@#2@format@middle}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcrefrange@#2@format@middle\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcrefrange@#1@format@middle\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \@ifundefined{labelcrefrange@#2@format@last}{%
+ \edef\@tempa{\expandafter\noexpand\csname labelcrefrange@#2@format@last\endcsname}%
+ \edef\@tempb{\expandafter\noexpand\csname labelcrefrange@#1@format@last\endcsname}%
+ \expandafter\expandafter\expandafter\let\expandafter\@tempa\@tempb}{}%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{Format definition commands}
+% \label{sec:crefformat}
+% \begin{macro}{\crefformat}
+% \begin{macro}{\Crefformat}
+% \begin{macro}{\crefrangeformat}
+% \begin{macro}{\Crefrangeformat}
+% \begin{macro}{\crefmultiformat}
+% \begin{macro}{\Crefmultiformat}
+% \begin{macro}{\crefrangemultiformat}
+% \begin{macro}{\Crefrangemultiformat}
+% \cmd{\crefformat} et al.\ are lower-level commands that give complete
+% control over the format of different reference types. They override
+% the component-based formats, simply using the supplied arguments to
+% define appropriately named formatting macros, which are called by
+% \cmd{\@@setcref} etc. If the corresponding \cmd{\Crefformat} or
+% \cmd{\crefformat} variant is not already defined, they define it to
+% be a version with the first letter capitalised or lower-cased.
+% \begin{macrocode}
+\newcommand\crefformat[2]{\@crefformat{cref}{#1}{#2}}%
+\newcommand\Crefformat[2]{\@crefformat{Cref}{#1}{#2}}%
+\newcommand\crefrangeformat[2]{\@crefrangeformat{crefrange}{#1}{#2}}%
+\newcommand\Crefrangeformat[2]{\@crefrangeformat{Crefrange}{#1}{#2}}%
+\newcommand\crefmultiformat[5]{%
+ \@crefmultiformat{cref}{#1}{#2}{#3}{#4}{#5}}%
+\newcommand\Crefmultiformat[5]{%
+ \@crefmultiformat{Cref}{#1}{#2}{#3}{#4}{#5}}%
+\newcommand\crefrangemultiformat[5]{%
+ \@crefrangemultiformat{crefrange}{#1}{#2}{#3}{#4}{#5}}%
+\newcommand\Crefrangemultiformat[5]{%
+ \@crefrangemultiformat{Crefrange}{#1}{#2}{#3}{#4}{#5}}%
+\newcommand\labelcrefformat[2]{%
+ \expandafter\gdef\csname labelcref@#1@format\endcsname##1##2##3{#2}}%
+\newcommand\labelcrefrangeformat[2]{%
+ \expandafter\gdef\csname labelcrefrange@#1@format\endcsname%
+ ##1##2##3##4##5##6{#2}}%
+\newcommand\labelcrefmultiformat[5]{%
+ \expandafter\gdef\csname labelcref@#1@format@first\endcsname%
+ ##1##2##3{#2}%
+ \expandafter\gdef\csname labelcref@#1@format@second\endcsname%
+ ##1##2##3{#3}%
+ \expandafter\gdef\csname labelcref@#1@format@middle\endcsname%
+ ##1##2##3{#4}%
+ \expandafter\gdef\csname labelcref@#1@format@last\endcsname%
+ ##1##2##3{#5}}%
+\newcommand\labelcrefrangemultiformat[5]{%
+ \expandafter\gdef\csname labelcrefrange@#1@format@first\endcsname%
+ ##1##2##3##4##5##6{#2}%
+ \expandafter\gdef\csname labelcrefrange@#1@format@second\endcsname%
+ ##1##2##3##4##5##6{#3}%
+ \expandafter\gdef\csname labelcrefrange@#1@format@middle\endcsname%
+ ##1##2##3##4##5##6{#4}%
+ \expandafter\gdef\csname labelcrefrange@#1@format@last\endcsname%
+ ##1##2##3##4##5##6{#5}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% The utility macros do the real work, by using the first argument
+% (``cref'' or ``Cref'', and ``crefrange'' or ``Crefrange'') to determine
+% how to define the corresponding command with the other capitalisation.
+% \begin{macro}{\@crefformat}
+% \cmd{\@crefformat} defines the macros for single references.
+% \begin{macrocode}
+\def\@crefformat#1#2#3{%
+ \begingroup%
+ \expandafter\gdef\csname #1@#2@format\endcsname##1##2##3{#3}%
+% \end{macrocode}
+% If the other capitalisation variant is not already defined\dots
+% \begin{macrocode}
+ \cref@othervariant{#1}{\@other}{\@changecase}%
+ \@ifundefined{\@other @#2@format}{%
+% \end{macrocode}
+% Define \cmd{\@tempa} to be a partial expansion (expanded just once) of
+% the capitalisation variant we've just defined above. The \cmd{\@toska}
+% token register just makes the code less verbose.
+% \begin{macrocode}
+ \toksdef\@toksa=0%
+ \@toksa={\def\@tempa##1##2##3}%
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \csname#1@#2@format\endcsname{##1}{##2}{##3}}%
+% \end{macrocode}
+% Add the \cmd{\@changecase} command to the front of the definition of
+% \cmd{\@tempa}.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@changecase\@tempa{##1}{##2}{##3}}%
+% \end{macrocode}
+% Define the other capitalisation variant to be the partial expansion
+% (expanded just once) of \cmd{\@tempa}.
+% \begin{macrocode}
+ \@toksa={%
+ \expandafter\gdef\csname\@other @#2@format\endcsname##1##2##3}%
+ \expandafter\the\expandafter\@toksa\expandafter{%
+ \@tempa{##1}{##2}{##3}}%
+ }{}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@crefrangeformat}
+% \cmd{\@crefrangeformat} defines the macros for single reference
+% ranges.
+% \begin{macrocode}
+\def\@crefrangeformat#1#2#3{%
+ \begingroup%
+ \expandafter\gdef\csname #1@#2@format\endcsname%
+ ##1##2##3##4##5##6{#3}%
+% \end{macrocode}
+% If the other capitalisation variant is not already defined\dots
+% \begin{macrocode}
+ \cref@othervariant{#1}{\@other}{\@changecase}%
+ \@ifundefined{\@other @#2@format}{%
+% \end{macrocode}
+% Define \cmd{\@tempa} to be a partial expansion (expanded just once) of
+% the capitalisation variant we've just defined above. The \cmd{\@toska}
+% token register just makes the code less verbose.
+% \begin{macrocode}
+ \toksdef\@toksa=0%
+ \@toksa={\def\@tempa##1##2##3##4##5##6}%
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \csname#1@#2@format\endcsname{##1}{##2}{##3}{##4}{##5}{##6}}%
+% \end{macrocode}
+% Add the \cmd{\@changecase} command to the front of the definition of
+% \cmd{\@tempa}.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@changecase\@tempa{##1}{##2}{##3}{##4}{##5}{##6}}%
+% \end{macrocode}
+% Define the other capitalisation variant to be the partial expansion
+% (expanded just once) of \cmd{\@tempa}.
+% \begin{macrocode}
+ \@toksa={\expandafter\gdef%
+ \csname\@other @#2@format\endcsname##1##2##3##4##5##6}%
+ \expandafter\the\expandafter\@toksa\expandafter{%
+ \@tempa{##1}{##2}{##3}{##4}{##5}{##6}}%
+ }{}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@crefmultiformat}
+% \cmd{\@crefmultiformat} defines the macros for multiple references.
+% \begin{macrocode}
+\def\@crefmultiformat#1#2#3#4#5#6{%
+ \begingroup%
+ \expandafter\gdef\csname #1@#2@format@first\endcsname##1##2##3{#3}%
+ \expandafter\gdef\csname #1@#2@format@second\endcsname##1##2##3{#4}%
+ \expandafter\gdef\csname #1@#2@format@middle\endcsname##1##2##3{#5}%
+ \expandafter\gdef\csname #1@#2@format@last\endcsname##1##2##3{#6}%
+% \end{macrocode}
+% If the other capitalisation variant of the first part of the
+% multi-format definition is not already defined\dots
+% \begin{macrocode}
+ \cref@othervariant{#1}{\@other}{\@changecase}%
+ \@ifundefined{\@other @#2@format@first}{%
+% \end{macrocode}
+% Define \cmd{\@tempa} to be a partial expansion (expanded just once) of
+% the capitalisation variant we've just defined above. The \cmd{\@toska}
+% token register just makes the code less verbose.
+% \begin{macrocode}
+ \toksdef\@toksa=0%
+ \@toksa={\def\@tempa##1##2##3}%
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \csname#1@#2@format@first\endcsname{##1}{##2}{##3}}%
+% \end{macrocode}
+% Add the \cmd{\@changecase} command to the front of the definition of
+% \cmd{\@tempa}.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@changecase\@tempa{##1}{##2}{##3}}%
+% \end{macrocode}
+% Define the other capitalisation variant to be the partial expansion
+% (expanded just once) of \cmd{\@tempa}.
+% \begin{macrocode}
+ \@toksa={%
+ \expandafter\gdef\csname\@other @#2@format@first\endcsname%
+ ##1##2##3}%
+ \expandafter\the\expandafter\@toksa\expandafter{%
+ \@tempa{##1}{##2}{##3}}%
+ }{}%
+% \end{macrocode}
+% The other parts of the multi-format definition are defined to be
+% identical for both capitalisation variants.
+% \begin{macrocode}
+ \@ifundefined{\@other @#2@format@second}{%
+ \@toksa={%
+ \expandafter\global\expandafter\let%
+ \csname\@other @#2@format@second\endcsname}%
+ \expandafter\the\expandafter\@toksa%
+ \csname #1@#2@format@second\endcsname%
+ }{}%
+ \@ifundefined{\@other @#2@format@middle}{%
+ \@toksa={%
+ \expandafter\global\expandafter\let%
+ \csname\@other @#2@format@middle\endcsname}%
+ \expandafter\the\expandafter\@toksa%
+ \csname #1@#2@format@middle\endcsname%
+ }{}%
+ \@ifundefined{\@other @#2@format@last}{%
+ \@toksa={%
+ \expandafter\global\expandafter\let%
+ \csname\@other @#2@format@last\endcsname}%
+ \expandafter\the\expandafter\@toksa%
+ \csname #1@#2@format@last\endcsname%
+ }{}%
+ \endgroup}%
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\@crefrangemultiformat}
+% \cmd{\@crefmultiformat} defines the macros for reference ranges
+% within multiple references.
+% \begin{macrocode}
+\def\@crefrangemultiformat#1#2#3#4#5#6{%
+ \begingroup%
+ \expandafter\gdef\csname #1@#2@format@first\endcsname%
+ ##1##2##3##4##5##6{#3}%
+ \expandafter\gdef\csname #1@#2@format@second\endcsname%
+ ##1##2##3##4##5##6{#4}%
+ \expandafter\gdef\csname #1@#2@format@middle\endcsname%
+ ##1##2##3##4##5##6{#5}%
+ \expandafter\gdef\csname #1@#2@format@last\endcsname%
+ ##1##2##3##4##5##6{#6}%
+% \end{macrocode}
+% If the other capitalisation variant of the first part of the
+% multi-format definition is not already defined\dots
+% \begin{macrocode}
+ \cref@othervariant{#1}{\@other}{\@changecase}%
+ \@ifundefined{\@other @#2@format@first}{%
+% \end{macrocode}
+% Define \cmd{\@tempa} to be a partial expansion (expanded just once) of
+% the capitalisation variant we've just defined above. The \cmd{\@toska}
+% token register just makes the code less verbose.
+% \begin{macrocode}
+ \toksdef\@toksa=0%
+ \@toksa={\def\@tempa##1##2##3##4##5##6}%
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \csname#1@#2@format@first\endcsname%
+ {##1}{##2}{##3}{##4}{##5}{##6}}%
+% \end{macrocode}
+% Add the \cmd{\@changecase} command to the front of the definition of
+% \cmd{\@tempa}.
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\the%
+ \expandafter\expandafter\expandafter\@toksa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@changecase\@tempa{##1}{##2}{##3}{##4}{##5}{##6}}%
+% \end{macrocode}
+% Define the other capitalisation variant to be the partial expansion
+% (expanded just once) of \cmd{\@tempa}.
+% \begin{macrocode}
+ \@toksa={%
+ \expandafter\gdef\csname\@other @#2@format@first\endcsname%
+ ##1##2##3##4##5##6}%
+ \expandafter\the\expandafter\@toksa\expandafter{%
+ \@tempa{##1}{##2}{##3}{##4}{##5}{##6}}%
+ }{}%
+% \end{macrocode}
+% The other parts of the multi-format definition are defined to be
+% identical for both capitalisation variants.
+% \begin{macrocode}
+ \@ifundefined{\@other @#2@format@second}{%
+ \@toksa={%
+ \expandafter\global\expandafter\let%
+ \csname\@other @#2@format@second\endcsname}%
+ \expandafter\the\expandafter\@toksa%
+ \csname #1@#2@format@second\endcsname%
+ }{}%
+ \@ifundefined{\@other @#2@format@middle}{%
+ \@toksa={%
+ \expandafter\global\expandafter\let%
+ \csname\@other @#2@format@middle\endcsname}%
+ \expandafter\the\expandafter\@toksa%
+ \csname #1@#2@format@middle\endcsname%
+ }{}%
+ \@ifundefined{\@other @#2@format@last}{%
+ \@toksa={%
+ \expandafter\global\expandafter\let%
+ \csname\@other @#2@format@last\endcsname}%
+ \expandafter\the\expandafter\@toksa%
+ \csname #1@#2@format@last\endcsname%
+ }{}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Support for Other Packages}
+%
+% \subsubsection{\package{hyperref} support}
+% \begin{macro}{hyperref}
+% If the \package{hyperref} package is loaded, we add hyperlink
+% support to \package{cleveref}. Since \package{hyperref} messes around
+% with some of the same \LaTeX{} internals as we do, we also have to
+% override some of its redefinitions so that they work with
+% \package{cleveref}.
+% \begin{macrocode}
+\let\if@cref@hyperrefloaded\iffalse%
+\let\cref@addtoreset\@addtoreset%
+\@ifpackageloaded{hyperref}{%
+ \@ifpackagewith{hyperref}{implicit=false}{%
+ \let\if@cref@hyperrefloaded\iftrue%
+ \PackageWarning{cleveref}{hyperref package loaded with
+ implicit=false option - disabling cleveref's hyperref support.
+ This situation is not supported by cleveref, and there's no guarantee
+ anything will work. You're on your own!}%
+ }{%
+ \let\if@cref@hyperrefloaded\iftrue%
+ \PackageInfo{cleveref}{`hyperref' support loaded}%
+% \end{macrocode}
+% \package{hyperref} redefines the \LaTeX{} kernel \cmd{\@addtoreset}
+% macro (sigh), but we sometimes need the vanilla version without the
+% \package{hyperref} shennanigans. \package{hyperref} saves the
+% original in \cmd{\HyOrg@addtoreset}. So we create yet
+% \emph{another} version called \cmd{\cref@addtotreset}, which is always
+% let to the original \cmd{\@addtoreset}, whereever that's found.
+% \begin{macrocode}
+ \let\cref@addtoreset\HyOrg@addtoreset%
+% \end{macrocode}
+% \begin{macro}{\cref@hyperlinkname}
+% \begin{macro}{\cref@hyperlinkurl}
+% We define a utility macro to extract the hyperlink supplied by
+% \package{hyperref} (via the \file{aux} file). Note that
+% \package{hyperref} adds the hyperlink info to the standard
+% \cmd{\newlabel} line in the \file{aux} file, so we have to retrieve
+% it from the standard \cmd{\r@\meta{label}}, \emph{not} the one
+% suffixed with |@cref| that we've created ourselves.
+% \begin{macrocode}
+ \def\cref@hyperlinkname#1{\expandafter\expandafter\expandafter%
+ \@fourthoffive\csname r@#1\endcsname}%
+ \def\cref@hyperlinkurl#1{\expandafter\expandafter\expandafter%
+ \@fifthoffive\csname r@#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cref@hyperlink}
+% Because of the way the cross-referencing formatting commands work, we
+% will need to use a delimited argument to specify the text to be
+% turned into a hyperlink. So we define a variant of
+% \package{hyperref}'s \cmd{\hyper@@link} command that takes the
+% hyperlink text as an argument delimited by |\@nil|, instead of a
+% standard argument. (We only ever need the |link| hyperlink type in
+% \package{cleveref}, so we don't bother providing \cmd{\hyper@@link}'s
+% optional argument.)
+% \begin{macrocode}
+ \def\cref@hyperlink#1#2#3\@nil{\hyper@@link[link]{#1}{#2}{#3}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\H@refstepcounter}
+% The \package{hyperref} package stores the original
+% \cmd{\refstepcounter} definition as\linebreak[4]
+% \cmd{\H@refstepcounter}. Unfortunately, it plasters
+% \cmd{\H@refstepcounter} all over the place, sometimes bypassing
+% \cmd{\refstepcounter} entirely. So we're forced to modify
+% \cmd{\H@refstepcounter} itself, in order to ensure that the extra
+% information we need is stored in \cmd{\cref@currentlabel}.
+% \begin{macrocode}
+ \let\cref@old@H@refstepcounter\H@refstepcounter%
+ \def\H@refstepcounter#1{%
+ \cref@old@H@refstepcounter{#1}%
+ \cref@constructprefix{#1}{\cref@result}%
+ \@ifundefined{cref@#1@alias}%
+ {\def\@tempa{#1}}%
+ {\def\@tempa{\csname cref@#1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{#1}][\cref@result]%
+ \csname p@#1\endcsname\csname the#1\endcsname}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\refstepcounter@noarg}
+% \begin{macro}{\refstepcounter@optarg}
+% \package{hyperref}'s \cmd{\refstepcounter}, which ends up stored in
+% our\linebreak[4] \cmd{\cref@old@refstepcounter}, already calls
+% \cmd{\H@refstepcounter}, and we just redefined the latter to store
+% the extra information. So we only need to change
+% \cmd{\cref@currentlabel} in \emph{our} \cmd{\refstepcounter} if an
+% optional argument was supplied. Note that, in this case, the
+% mechanism for setting \cmd{\cref@currentlabel} is slightly different
+% than it is without \package{hyperref}: \cmd{\cref@currentlabel} first
+% gets set by our modified \cmd{\H@refstepcounter}, which gets called
+% via \package{hyperref}'s original version, as stored in
+% \cmd{\cref@old@refstepcounter}. The version of
+% \cmd{\cref@refstepcounter@optarg} defined below then overrides the
+% label type.
+% \begin{macrocode}
+ \let\refstepcounter@noarg\cref@old@refstepcounter%
+ \def\refstepcounter@optarg[#1]#2{%
+ \cref@old@refstepcounter{#2}%
+ \@ifundefined{cref@#1@alias}%
+ {\def\@tempa{#1}}%
+ {\def\@tempa{\csname cref@#1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ \expandafter\cref@override@label@type%
+ \cref@currentlabel\@nil{\@tempa}}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\appendix}
+% We again make \cmd{\appendix} redefine things so that the label type
+% for chapters or sections is exceptionally overridden and set to
+% ``appendix'' instead. But this time, it is \cmd{\H@refstepcounter}
+% that needs to be redefined.
+% \begin{macrocode}
+ \@ifundefined{appendix}{}{%
+ \def\appendix{%
+ \@ifundefined{chapter}{%
+ \def\H@refstepcounter##1{%
+ \cref@old@H@refstepcounter{##1}%
+ \cref@constructprefix{##1}{\cref@result}%
+% \end{macrocode}
+% We add a large value to the front of the counter data, to force
+% references to anything in appendices to be sorted after
+% everything else.
+% \begin{macrocode}
+ \ifx\cref@result\@empty%
+ \def\cref@result{2147483647}%
+ \else%
+ \edef\cref@result{2147483647,\cref@result}%
+ \fi%
+% \end{macrocode}
+% Override the cross-reference type of sectioning commands.
+% \begin{macrocode}
+ \def\@tempa{##1}%
+ \def\@tempb{section}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@appendix@alias}%
+ {\def\@tempa{appendix}}%
+ {\def\@tempa{\cref@appendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsection}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subappendix@alias}%
+ {\def\@tempa{subappendix}}%
+ {\def\@tempa{\cref@subappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsubsection}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subsubappendix@alias}%
+ {\def\@tempa{subsubappendix}}%
+ {\def\@tempa{\cref@subsubappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \@ifundefined{cref@##1@alias}%
+ {\def\@tempa{##1}}%
+ {\def\@tempa{\csname cref@##1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \fi%
+ \fi%
+ \fi}%
+ \cref@old@appendix%
+ }{%
+ \def\H@refstepcounter##1{%
+ \cref@old@H@refstepcounter{##1}%
+ \cref@constructprefix{##1}{\cref@result}%
+% \end{macrocode}
+% Again, the large value added to the front of the counter data
+% forces references to appendix items to be sorted last.
+% \begin{macrocode}
+ \ifx\cref@result\@empty%
+ \def\cref@result{2147483647}%
+ \else%
+ \edef\cref@result{2147483647,\cref@result}%
+ \fi%
+% \end{macrocode}
+% Override the cross-reference type of sectioning commands.
+% \begin{macrocode}
+ \def\@tempa{##1}%
+ \def\@tempb{chapter}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@appendix@alias}%
+ {\def\@tempa{appendix}}%
+ {\def\@tempa{\cref@appendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{section}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subappendix@alias}%
+ {\def\@tempa{subappendix}}%
+ {\def\@tempa{\cref@subappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsection}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subsubappendix@alias}%
+ {\def\@tempa{subsubappendix}}%
+ {\def\@tempa{\cref@subsubappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsubsection}%
+ \ifx\@tempa\@tempb%
+ \@ifundefined{cref@subsubappendix@alias}%
+ {\def\@tempa{subsubsubappendix}}%
+ {\def\@tempa{\cref@subsubsubappendix@alias}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \@ifundefined{cref@##1@alias}%
+ {\def\@tempa{##1}}%
+ {\def\@tempa{\csname cref@##1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \fi%
+ \fi%
+ \fi%
+ \fi}%
+ \cref@old@appendix}%
+ }%
+ }% end of \@ifundefined{appendix}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref*}
+% \begin{macro}{\Cref*}
+% \begin{macro}{\@crefstar}
+% We redefine \cmd{\cref} and all the others to allow starred variants,
+% which don't create hyperlinks. The starred variants simply set a
+% flag, which is tested in the very final stage of reference
+% typesetting in \cmd{\@@@setcref}, \cmd{\@@@setcrefrange},
+% \cmd{\@@@setcpageref} and \cmd{\@@@setcpagerefrange} (below).
+% \begin{macrocode}
+ \DeclareRobustCommand{\cref}{%
+ \@ifstar{\@crefstar{cref}}{\@cref{cref}}}%
+ \DeclareRobustCommand{\Cref}{%
+ \@ifstar{\@crefstar{Cref}}{\@cref{Cref}}}%
+ \def\@crefstar#1#2{%
+ \@crefstarredtrue\@cref{#1}{#2}\@crefstarredfalse}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\crefrange*}
+% \begin{macro}{\Crefrange*}
+% \begin{macro}{\@crefrangestar}
+% \begin{macro}{\@crefrangenostar}
+% \begin{macrocode}
+ \DeclareRobustCommand{\crefrange}{%
+ \@ifstar{\@crefrangestar{cref}}{\@crefrangenostar{cref}}}%
+ \DeclareRobustCommand{\Crefrange}{%
+ \@ifstar{\@crefrangestar{Cref}}{\@crefrangenostar{Cref}}}%
+ \def\@crefrangenostar#1#2#3{\@@setcrefrange{#1}{#2}{#3}{}}
+ \def\@crefrangestar#1#2#3{%
+ \@crefstarredtrue\@@setcrefrange{#1}{#2}{#3}{}\@crefstarredfalse}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cpageref*}
+% \begin{macro}{\Cpageref*}
+% \begin{macrocode}
+ \DeclareRobustCommand{\cpageref}{%
+ \@ifstar\@crefstar\@cref{cpageref}}%
+ \DeclareRobustCommand{\Cpageref}{%
+ \@ifstar\@crefstar\@cref{Cpageref}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\cpagerefrange*}
+% \begin{macro}{\Cpagerefrange*}
+% \begin{macro}{\@cpagerefrangestar}
+% \begin{macrocode}
+ \DeclareRobustCommand{\cpagerefrange}{%
+ \@ifstar{\@cpagerefrangestar{cref}}{\@cpagerefrangenostar{cref}}}%
+ \DeclareRobustCommand{\Cpagerefrange}{%
+ \@ifstar{\@cpagerefrangestar{Cref}}{\@cpagerefrangenostar{Cref}}}%
+ \def\@cpagerefrangenostar#1#2#3{%
+ \@@setcpagerefrange{#2}{#3}{#1}{}}
+ \def\@cpagerefrangestar#1#2#3{%
+ \@crefstarredtrue%
+ \@@setcpagerefrange{#2}{#3}{#1}{}%
+ \@crefstarredfalse}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\labelcref*}
+% \begin{macro}{\labelcpageref*}
+% \begin{macro}{\@labelcrefstar}
+% \begin{macro}{\@labelcpagerefstar}
+% \begin{macrocode}
+ \DeclareRobustCommand{\labelcref}{%
+ \@ifstar{\@labelcrefstar}{\@cref{labelcref}}}%
+ \def\@labelcrefstar#1{%
+ \@crefstarredtrue%
+ \@cref{labelcref}{#1}%
+ \@crefstarredfalse}%
+ \DeclareRobustCommand{\labelcpageref}{%
+ \@ifstar{\@labelcpagerefstar}{\@cref{labelcpageref}}}%
+ \def\@labelcpagerefstar#1{%
+ \@crefstarredtrue%
+ \@cref{labelcpageref}{#1}%
+ \@crefstarredfalse}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@@setcref}
+% \begin{macro}{\@@@setcrefrange}
+% \begin{macro}{\@@@setcpageref}
+% \begin{macro}{\@@@setcpagerefrange}
+% Redefine the final reference typesetting macros to create hyperlinks
+% (unless the starred flag is set), using the extra arguments supplied
+% in \cmd{\r@\meta{label}} (via the \file{aux} file) by
+% \package{hyperref}.
+% \begin{macrocode}
+ \def\@@@setcref#1#2{%
+ \cref@getlabel{#2}{\@templabel}%
+ \if@crefstarred%
+ #1{\@templabel}{}{}%
+ \else%
+ \edef\@tempname{\cref@hyperlinkname{#2}}%
+ \edef\@tempurl{\cref@hyperlinkurl{#2}}%
+ #1{\@templabel}{\cref@hyperlink{\@tempurl}{\@tempname}}{\@nil}%
+ \fi}%
+ \def\@@@setcrefrange#1#2#3{%
+ \cref@getlabel{#2}{\@labela}%
+ \cref@getlabel{#3}{\@labelb}%
+ \if@crefstarred%
+ #1{\@labela}{\@labelb}{}{}{}{}%
+ \else%
+ \edef\@tempnamea{\cref@hyperlinkname{#2}}%
+ \edef\@tempurlb{\cref@hyperlinkurl{#3}}%
+ \edef\@tempnameb{\cref@hyperlinkname{#3}}%
+ \edef\@tempurla{\cref@hyperlinkurl{#2}}%
+ #1{\@labela}{\@labelb}%
+ {\cref@hyperlink{\@tempurla}{\@tempnamea}}{\@nil}%
+ {\cref@hyperlink{\@tempurlb}{\@tempnameb}}{\@nil}%
+ \fi}%
+ \def\@@@setcpageref#1#2{%
+ \cpageref@getlabel{#2}{\@temppage}%
+ \if@crefstarred%
+ #1{\@temppage}{}{}%
+ \else%
+ \edef\@tempname{\cref@hyperlinkname{#2}}%
+ \edef\@tempurl{\cref@hyperlinkurl{#2}}%
+ #1{\@temppage}{\cref@hyperlink{\@tempurl}{\@tempname}}{\@nil}%
+ \fi}%
+ \def\@@@setcpagerefrange#1#2#3{%
+ \cpageref@getlabel{#2}{\@pagea}%
+ \cpageref@getlabel{#3}{\@pageb}%
+ \if@crefstarred%
+ #1{\@pagea}{\@pageb}{}{}{}{}%
+ \else%
+ \edef\@tempnamea{\cref@hyperlinkname{#2}}%
+ \edef\@tempurlb{\cref@hyperlinkurl{#3}}%
+ \edef\@tempnameb{\cref@hyperlinkname{#3}}%
+ \edef\@tempurla{\cref@hyperlinkurl{#2}}%
+ #1{\@pagea}{\@pageb}%
+ {\cref@hyperlink{\@tempurla}{\@tempnamea}}{\@nil}%
+ {\cref@hyperlink{\@tempurlb}{\@tempnameb}}{\@nil}%
+ \fi}%
+ }% end of false case of \@ifpackagewith{hyperref}{implicit=false}
+% \end{macrocode}
+%
+%
+% \subsubsection{\package{revtex4} and \package{revtex4-1} support}
+% The \package{revtex4} and \package{revtex4-1} document classes use
+% |\H@refstepcounter| to increment section counters, even when
+% \package{hyperref} isn't explicitly loaded. Therefore, for these
+% docclasses we need to redefine |\H@refstepcounter| even when
+% \package{hyperref} is not loaded.
+% \begin{macrocode}
+}{% false case of \@ifpackageloaded{hyperref}
+ \@ifclassloaded{revtex4}{\let\if@cref@hyperrefloaded\iftrue}{}%
+ \@ifclassloaded{revtex4-1}{\let\if@cref@hyperrefloaded\iftrue}{}%
+ \if@cref@hyperrefloaded\relax%
+ \let\cref@old@H@refstepcounter\H@refstepcounter%
+ \def\H@refstepcounter#1{%
+ \cref@old@H@refstepcounter{#1}%
+ \cref@constructprefix{#1}{\cref@result}%
+ \@ifundefined{cref@#1@alias}%
+ {\def\@tempa{#1}}%
+ {\def\@tempa{\csname cref@#1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{#1}][\cref@result]%
+ \csname p@#1\endcsname\csname the#1\endcsname}}%
+% \end{macrocode}
+% We also need to redefine |\appendix| to use
+% \begin{macrocode}
+ \@ifundefined{appendix}{}{%
+ \def\appendix{%
+ \@ifundefined{chapter}{%
+ \def\H@refstepcounter##1{%
+ \cref@old@H@refstepcounter{##1}%
+ \cref@constructprefix{##1}{\cref@result}%
+% \end{macrocode}
+% We add a large value to the front of the counter data, to force
+% references to anything in appendices to be sorted after
+% everything else.
+% \begin{macrocode}
+ \ifx\cref@result\@empty%
+ \def\cref@result{2147483647}%
+ \else%
+ \edef\cref@result{2147483647,\cref@result}%
+ \fi%
+% \end{macrocode}
+% Override the cross-reference type of sectioning commands.
+% \begin{macrocode}
+ \def\@tempa{##1}%
+ \def\@tempb{section}%
+ \ifx\@tempa\@tempb%
+ \protected@edef\cref@currentlabel{%
+ [appendix][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsection}%
+ \ifx\@tempa\@tempb%
+ \protected@edef\cref@currentlabel{%
+ [subappendix][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsubsection}%
+ \ifx\@tempa\@tempb%
+ \protected@edef\cref@currentlabel{%
+ [subsubappendix][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \@ifundefined{cref@##1@alias}%
+ {\def\@tempa{##1}}%
+ {\def\@tempa{\csname cref@##1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \fi%
+ \fi%
+ \fi}%
+ \cref@old@appendix%
+ }{%
+ \def\H@refstepcounter##1{%
+ \cref@old@H@refstepcounter{##1}%
+ \cref@constructprefix{##1}{\cref@result}%
+% \end{macrocode}
+% Again, the large value added to the front of the counter data
+% forces references to appendix items to be sorted last.
+% \begin{macrocode}
+ \ifx\cref@result\@empty%
+ \def\cref@result{2147483647}%
+ \else%
+ \edef\cref@result{2147483647,\cref@result}%
+ \fi%
+% \end{macrocode}
+% Override the cross-reference type of sectioning commands.
+% \begin{macrocode}
+ \def\@tempa{##1}%
+ \def\@tempb{chapter}%
+ \ifx\@tempa\@tempb%
+ \protected@edef\cref@currentlabel{%
+ [appendix][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{section}%
+ \ifx\@tempa\@tempb%
+ \protected@edef\cref@currentlabel{%
+ [subappendix][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsection}%
+ \ifx\@tempa\@tempb%
+ \protected@edef\cref@currentlabel{%
+ [subsubappendix][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \def\@tempa{##1}%
+ \def\@tempb{subsubsection}%
+ \ifx\@tempa\@tempb%
+ \protected@edef\cref@currentlabel{%
+ [subsubsubappendix][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \else%
+ \@ifundefined{cref@##1@alias}%
+ {\def\@tempa{##1}}%
+ {\def\@tempa{\csname cref@##1@alias\endcsname}}%
+ \protected@edef\cref@currentlabel{%
+ [\@tempa][\arabic{##1}][\cref@result]%
+ \csname p@##1\endcsname\csname the##1\endcsname}%
+ \fi%
+ \fi%
+ \fi%
+ \fi}%
+ \cref@old@appendix}%
+ }%
+ }% end of \@ifundefined{appendix}
+ \fi% end of \if@cref@hyperrefloaded
+ \let\if@cref@hyperrefloaded\iffalse%
+}% end of \@ifpackageloaded{hyperref}
+% \end{macrocode}
+% Add check to AtBeginDocument to throw error if \package{hyperref} was
+% loaded after cleveref.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \if@cref@hyperrefloaded\else%
+ \@ifpackageloaded{hyperref}{%
+ \PackageError{cleveref}{cleveref must be loaded after hyperref!}%
+ {Package load order is wrong: load cleveref *after* hyperref.}
+ }{}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{varioref} support}
+% \begin{macro}{varioref}
+% If \package{varioref} is loaded, we redefine its commands to use
+% \cmd{\cref} instead of \cmd{\ref} to produce the reference. Since
+% \cmd{\cref} can cope with multiple references, we extend the page
+% referencing magic of \cmd{\vref} et al.\ to use \cmd{\cpageref}
+% instead, assisted by \cmd{\@@setvpageref} and \cmd{\@vpagerefrange}
+% (which typeset page references using \package{varioref} commands).
+% The former takes care of multi-references, the latter take care of
+% the \package{varioref} page referencing magic.
+% \end{macro}
+%
+% \begin{macrocode}
+\let\if@cref@variorefloaded\iffalse%
+\@ifpackageloaded{varioref}{%
+ \let\if@cref@variorefloaded\iftrue%
+ \PackageInfo{cleveref}{`varioref' support loaded}%
+ \PackageInfo{cleveref}{`cleveref' supersedes `varioref's
+ \string\labelformat command}%
+% \end{macrocode}
+%
+%
+% \begin{macro}{\cref@old@@vpageref}
+% Unfortunately, \package{varioref}'s |\@@vpageref| macro calls a
+% |\vref@label| \emph{before} it typesets the page reference. The
+% |\protected@write| within |\vref@label| seems to prevent an |\unskip|
+% command coming after the |\vref@label| from removing any space that
+% was inserted before the |\vref@label|. This means that setting a
+% |\reftext|\meta{x} command to |\unskip| won't work; it won't properly
+% remove any preceding space in the event that an empty page reference
+% is typeset.
+%
+% This didn't matter in the original \package{varioref} implementation,
+% because it \emph{always} removed any preceding space, then inserted
+% its own space \emph{after} the |\vref@label|, which the |\unskip|
+% could then gobble. But we want to get rid of this irritating
+% always-space-gobbling behaviour here. So we have to redefine
+% |\@@vpageref| (here renamed |\cref@old@@vpageref|) in order to move
+% the |\vref@label| to the end of the macro, after the page reference
+% has been typeset. We also remove the |\unskip| from the start of
+% |\@@vpageref|.
+% \begin{macrocode}
+ \def\cref@old@@vpageref#1[#2]#3{%
+ \leavevmode%\unskip <<<
+ \global\advance\c@vrcnt\@ne\relax%
+ \vref@pagenum\@tempa{\the\c@vrcnt @vr}%
+ \vref@pagenum\@tempb{\the\c@vrcnt @xvr}%
+ %\vref@label{\the\c@vrcnt @xvr}% <<<
+ \ifx\@tempa\@tempb\else%
+ \vref@err{\noexpand\vref or \noexpand\vpageref at page boundary
+ \@tempb-\@tempa\space (may loop)%
+ }%
+ \fi%
+ \vrefpagenum\thevpagerefnum{#3}%
+ \vref@space%
+ \ifx\@tempa\thevpagerefnum%
+ \def\@tempc{#1}%
+ \ifx\@tempc\@empty%
+ \unskip%
+ \else%
+ #1%
+ \fi%
+ \else%
+ #2%
+ \is@pos@number\thevpagerefnum%
+ {%
+ \is@pos@number\@tempa%
+ {\@tempcnta\@tempa%
+ \advance\@tempcnta\@ne\relax%
+ }%
+ {\@tempcnta\maxdimen}%
+ \ifnum \thevpagerefnum =\@tempcnta%
+ \ifodd\@tempcnta%
+ \if@twoside%
+ \reftextfaceafter%
+ \else%
+ \reftextafter%
+ \fi%
+ \else%
+ \reftextafter%
+ \fi%
+ \else%
+ \advance\@tempcnta-2\relax%
+ \ifnum \thevpagerefnum =\@tempcnta%
+ \ifodd\@tempcnta%
+ \reftextbefore%
+ \else%
+ \if@twoside%
+ \reftextfacebefore%
+ \else%
+ \reftextbefore%
+ \fi%
+ \fi%
+ \else%
+ \reftextfaraway{#3}%
+ \fi%
+ \fi%
+ }%
+ {\reftextfaraway{#3}}%
+ \fi%
+ \vref@label{\the\c@vrcnt @xvr}% <<<
+ \vref@label{\the\c@vrcnt @vr}%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\cref@@vpageref}
+% We first enhance the core \package{varioref} |\vpageref| macro to
+% allow it to cope with lists of page references. This is done by
+% defining our version in terms of \package{cleveref}'s \cmd{\cpageref}
+% command, which handles multi-references, but telling \cmd{\cpageref}
+% to typeset the actual page references themselves using
+% \package{varioref}'s own page-referencing commands. (The alternative
+% version of \cmd{\vpagerefrange} is there to facilitate later
+% redefinitions.)
+%
+% Most of the work is done by defining suitable |\@setvpageref| etc.\
+% commands (below), called as appropriate by our ever-faithful
+% \cmd{\@cref} work-horse. We only make use of one of the optional
+% arguments to the original \package{varioref} |\@@vpageref| macro,
+% which we store here in \cmd{\cref@@vpageref} for later.
+% \begin{macrocode}
+ \def\cref@@vpageref#1[#2]#3{%
+ \begingroup%
+ \def\cref@@vpageref@arg{#1}%
+ \@cref{vpageref}{#3}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@vref}
+% \begin{macro}{\cref@vrefrange}
+% \begin{macro}{\cref@fullref}
+% Now we define \package{cleveref}-enhanced versions of the other
+% \package{varioref} cross-\linebreak[4]referencing commands, which use
+% \cmd{\cref} et al.\ to type set the cross-references, and the
+% \package{cleveref}-enhanced \cmd{\vpageref} et al.\ to typeset page
+% references.
+%
+% The original \cmd{\vref} command passes an empty first argument to
+% \cmd{\@@vpageref}, to omit the page reference if it refers to the
+% current page. In our case, we only want to omit it if it's the sole
+% page reference we're printing; otherwise we need to print it even if
+% it refers to the current page. This is taken care of by
+% \cmd{\cref@patchreftexts} (which gets called further down). For this
+% mechanism, it's more convenient to pass \cmd{\reftextcurrent} as the
+% first argument but temporarily redefine it to be empty, instead of
+% passing an empty first argument to \cmd{\cref@@vpageref}.
+% \begin{macrocode}
+ \def\cref@vref#1#2{%
+ \leavevmode%
+ \begingroup%
+ \def\reftextcurrent{}%
+ \@cref{#1}{#2}\@setcref@space%
+ \cref@@vpageref{\reftextcurrent}[]{#2}%
+ \endgroup}%
+ \def\cref@vrefrange#1#2#3{%
+ \@@setcrefrange{#1}{#2}{#3}{}\@setcref@space\vpagerefrange{#2}{#3}}%
+ \def\cref@fullref#1#2{%
+ \@cref{#1}{#2}\@setcref@space\@cref{fullpageref}{#2}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cref@vpagerefconjunction}
+% When typesetting multi-references, we need to add appropriate
+% conjunctions to the page references produced by the
+% \package{varioref} macros. Since we need this in various different
+% commands, we separate it out into a self-contained macro.
+% \begin{macrocode}
+ \def\cref@vpagerefconjunction#1{%
+ \def\@tempa{#1}%
+ \def\@tempb{@second}%
+ \ifx\@tempa\@tempb\relax%
+ \@setcref@pairconjunction%
+ \else%
+ \def\@tempb{@middle}%
+ \ifx\@tempa\@tempb\relax%
+ \@setcref@middleconjunction%
+ \else%
+ \def\@tempb{@last}%
+ \ifx\@tempa\@tempb\relax%
+ \@setcref@lastconjunction%
+ \fi%
+ \fi%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@setcref@space}
+% We separate out the typesetting of the space between the
+% cross-reference and page-reference into a separate macro, to make it
+% easier to implement the \option{poorman} option.
+% \begin{macrocode}
+ \def\@setcref@space{ }%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@setvpageref}
+% The \cmd{\@setvpageref} macro is called by \cmd{\@cref} to typeset
+% page references using \package{varioref} commands, tweaked to work
+% with the enhanced \package{cleveref} page-referencing features.
+% |#1| is the reference itself. |#2| is either empty if we're
+% typesetting a single page reference, or one of |@first|, |@second|,
+% |@middle| or |@end|, identifying where the page reference comes in a
+% multi-reference. We only make use of one of the optional arguments to
+% the original \package{varioref} |\@@vpageref| macro, available here
+% as \cmd{\cref@@vpageref@arg} (stored there by \cmd{\cref@@vpageref},
+% above).
+% \begin{macrocode}
+ \def\@setvpageref#1#2{%
+% \end{macrocode}
+% Add the appropriate conjunction before the page reference.
+% \begin{macrocode}
+ \cref@vpagerefconjunction{#2}%
+% \end{macrocode}
+% Undefining |\vref@space| prevents the original \package{varioref}
+% |\@@vpageref| macro from |\unskip|ing any preceding space and
+% inserting its own. We definitely don't want it to do that here when
+% we're typesetting anything other than the first group of page
+% references, as any preceding space then is part of the preceding
+% conjunction, and should be strictly respected. But, since we're
+% modifying the \package{varioref} commands anyway, we take this
+% opportunity to get rid of the irritating \package{varioref} spacing
+% behaviour even for the first group of page references.
+% \begin{macrocode}
+ \def\vref@space{}%
+% \end{macrocode}
+% Modify the \package{varioref} |\reftext|\meta{x} commands as
+% appropriate for the page reference we're currently typesetting, then
+% typeset the page reference.
+% \begin{macrocode}
+ \begingroup%
+ \cref@patchreftexts{#2}%
+ \expandafter\@@@setvpageref\expandafter%
+ {\cref@@vpageref@arg}[\vref@space]{#1}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@@setvpageref}
+% We separate out the final type setting step, as always, to make it
+% easier to redefine things later.
+% \begin{macrocode}
+ \let\@@@setvpageref\cref@old@@vpageref%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@setvpagerefrange}
+% |\@setvpagerefrange| is similar to |\@setvpageref|, but typesets page
+% ranges. |#1| and |#2| are the labels themselves. |#3| is either empty
+% if we're typesetting a single page range, or one of |@first|,
+% |@second|, |@middle| or |@end|, identifying where the page reference
+% comes in a multi-reference. We only make use of one of the optional
+% arguments to the original \package{varioref} |\@@vpageref| macro,
+% available here as \cmd{\cref@@vpageref@arg} (stored there by
+% \cmd{\cref@@vpageref}, above).
+% \begin{macrocode}
+ \def\@setvpagerefrange#1#2#3{%
+% \end{macrocode}
+% Add the appropriate conjunction before the page range reference.
+% \begin{macrocode}
+ \cref@vpagerefconjunction{#3}%
+% \end{macrocode}
+% Unlike |\vpageref|, \package{varioref}'s |\vpagerefrange| command
+% \emph{doesn't} go in for quite the same space-mangling behaviour. We
+% still undefine \cmd{\vref@space}, though.
+% \begin{macrocode}
+ \let\vref@space\relax%
+% \end{macrocode}
+% Modify the \package{varioref} |\reftext|\meta{x} commands as
+% appropriate for the page range we're currently typesetting, then
+% typeset the page range.
+% \begin{macrocode}
+ \begingroup%
+ \cref@patchreftexts{#3}%
+ \expandafter\@@@setvpagerefrange\expandafter%
+ [\cref@@vpageref@arg]{#1}{#2}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@@setvpagerefrange}
+% Again, we separate out the final typesetting step, to aid later
+% redefinition.
+% \begin{macrocode}
+ \let\@@@setvpagerefrange\vpagerefrange
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@setfullpageref}
+% Ditto for \cmd{\@setfullpageref}, with |#1| the reference, |#2|
+% either empty, |@first|, |@second|, |@middle| or |@end|.
+% \begin{macrocode}
+ \def\@setfullpageref#1#2{%
+% \end{macrocode}
+% Add the appropriate conjunction before the page reference.
+% \begin{macrocode}
+ \cref@vpagerefconjunction{#2}%
+% \end{macrocode}
+% Modify the \package{varioref} |\reftext|\meta{x} commands as
+% appropriate for the page reference we're currently typesetting, then
+% typeset the page reference.
+% \begin{macrocode}
+ \begingroup%
+ \cref@patchreftexts{#2}%
+ \@@@setfullpageref{#1}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@@setfullpageref}
+% Separate out the final typesetting step, as usual.
+% \begin{macrocode}
+ \let\@@@setfullpageref\reftextfaraway%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@setfullpagerefrange}
+% Ditto for \cmd{\@setfullpagerefrange}, with |#1| and |#2| the
+% references, |#3| either empty, |@first|, |@second|, |@middle| or
+% |@end|.
+% \begin{macrocode}
+ \def\@setfullpagerefrange#1#2#3{%
+% \end{macrocode}
+% Add the appropriate conjunction before the page reference.
+% \begin{macrocode}
+ \cref@vpagerefconjunction{#3}%
+% \end{macrocode}
+% Modify the \package{varioref} |\reftext|\meta{x} commands as
+% appropriate for the page reference we're currently typesetting, then
+% typeset the page reference.
+% \begin{macrocode}
+ \begingroup%
+ \cref@patchreftexts{#3}%
+ \@@@setfullpagerefrange{#1}{#2}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@@setfullpagerefrange}
+% Separate out the final typesetting step, as usual.
+% \begin{macrocode}
+ \let\@@@setfullpagerefrange\reftextpagerange%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% We save the default \package{varioref} |\reftext|\meta{x} commands as
+% |\creftext|\meta{x}, before the user's had any chance to redefine them.
+% These are used if a |\reftext|\meta{x} is redefined to produce an empty
+% reference, to force a non-empty reference within multi-references.
+% \begin{macrocode}
+ \let\creftextcurrent\reftextcurrent%
+ \let\creftextfaceafter\reftextfaceafter%
+ \let\creftextfacebefore\reftextfacebefore%
+ \let\creftextafter\reftextafter%
+ \let\creftextbefore\reftextbefore%
+ \let\creftextfaraway\reftextfaraway%
+ \let\creftextpagerange\reftextpagerange%
+% \end{macrocode}
+%
+% \begin{macro}{\cref@patchreftexts}
+% \begin{macro}{\cref@restorereftexts}
+% The |\cref@patchreftexts| command modifies \package{varioref}
+% |\reftext|\meta{x} commands, for use within |\@@setvpageref| and
+% |\@@setvpagerefrange|.
+% \begin{macrocode}
+ \def\cref@patchreftexts#1{%
+ \cref@patchreftext{reftextcurrent}{#1}%
+ \cref@patchreftext{reftextfaceafter}{#1}%
+ \cref@patchreftext{reftextfacebefore}{#1}%
+ \cref@patchreftext{reftextafter}{#1}%
+ \cref@patchreftext{reftextbefore}{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cref@patchreftext}
+% |\cref@patchreftext| does the hard work of modifying the
+% |\reftext|\meta{x} command given in |#1| as appropriate for the
+% |\@setvpageref| or |\@setvpagerefrange| command that it's called
+% from. (It can only be called from within one of those commands.)
+% |#2| is empty if we're typesetting a single page reference, or one of
+% |@first|, |@second|, |@middle| or |@end| when typesetting a
+% multi-reference.
+% \begin{macrocode}
+ \def\cref@patchreftext#1#2{%
+ \def\@tempa{#2}%
+% \end{macrocode}
+% If we're typesetting a single page reference\dots
+% \begin{macrocode}
+ \ifx\@tempa\@empty%
+% \end{macrocode}
+% if the reftext command produces an empty reference, redefine it to
+% be |\unskip|.
+% \begin{macrocode}
+ \def\@tempc{}%
+ \expandafter\ifx\csname #1\endcsname\@tempc\relax%
+ \expandafter\def\csname #1\endcsname{\unskip}%
+ %{\advance\count@group -1\relax\reftextcurrent@orig}%
+ \else%
+ \long\def\@tempc{}%
+ \expandafter\ifx\csname #1\endcsname\@tempc\relax%
+ \expandafter\def\csname #1\endcsname{\unskip}%
+ %{\advance\count@group -1\relax\reftextcurrent@orig}%
+ \fi%
+ \fi%
+% \end{macrocode}
+%
+% If we're typesetting a multi-reference\dots
+% \begin{macrocode}
+ \else%
+% \end{macrocode}
+% if the reftext command produces an empty page reference, patch it
+% to instead use |\creftext|\meta{x}, which always produces a
+% non-empty reference.
+% \begin{macrocode}
+ \long\def\@tempc{\unskip}%
+ \expandafter\ifx\csname #1\endcsname\@tempc\relax%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\csname #1\endcsname\expandafter{%
+ \csname c#1\endcsname}%
+ \else%
+ \long\def\@tempc{}%
+ \expandafter\ifx\csname #1\endcsname\@tempc\relax%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\csname #1\endcsname\expandafter{%
+ \csname c#1\endcsname}%
+ \else%
+ \def\@tempc{\unskip}%
+ \expandafter\ifx\csname #1\endcsname\@tempc\relax%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\csname #1\endcsname\expandafter{%
+ \csname c#1\endcsname}%
+ \else%
+ \def\@tempc{}%
+ \expandafter\ifx\csname #1\endcsname\@tempc\relax%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\csname #1\endcsname\expandafter{%
+ \csname c#1\endcsname}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@setcref@pairconjunction}
+% \begin{macro}{\@setcref@middleconjunction}
+% \begin{macro}{\@setcref@lastconjunction}
+% We also add an extra macro layer for typesetting the conjunctions,
+% for the same reason. (Note that we only needed to do this for the
+% group conjunctions previously, as the other conjunctions are never
+% used directly in the normal \package{cleveref} commands. But
+% |\@setvpageref| and |\@setvpagerefrange| \emph{do} use them directly,
+% so now we do need macros to separate out the final type setting of
+% the rest of the conjunctions.)
+% \begin{macrocode}
+ \def\@setcref@pairconjunction{\crefpairconjunction}%
+ \def\@setcref@middleconjunction{\crefmiddleconjunction}%
+ \def\@setcref@lastconjunction{\creflastconjunction}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% We now redefine the original \package{varioref} commands to use the
+% \package{cleveref}-enhanced versions. The redefinition of
+% \cmd{\@@vpageref} has to be postponed until the beginning of the
+% document, to make sure it overrides \package{hyperref}'s redefinition
+% (if loaded).
+% \begin{macrocode}
+ \AtBeginDocument{%
+ \let\@@vpageref\cref@@vpageref%
+ }%
+% \end{macrocode}
+%
+% \begin{macro}{\vref}
+% \begin{macro}{\vref*}
+% \begin{macro}{\Vref}
+% \begin{macro}{\Vref*}
+% \begin{macro}{\vrefrange}
+% \begin{macro}{\vrefrange*}
+% \begin{macro}{\Vrefrange}
+% \begin{macro}{\Vrefrange*}
+% \begin{macro}{\fullref}
+% \begin{macro}{\fullref*}
+% \begin{macro}{\Fullref}
+% \begin{macro}{\Fullref*}
+% Since we're defining the spacing behaviour of \cmd{\vref} et al.\ to
+% be consistent with the other \package{cleveref} referencing commands,
+% this frees up the starred variants to be used to suppress hyperlinks
+% when \package{hyperref} is loaded, as usual.
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+ \if@cref@hyperrefloaded\relax% hyperref loaded%
+ \DeclareRobustCommand{\vref}{%
+ \@ifstar{\cref@vrefstar{cref}}{\cref@vref{cref}}}%
+ \DeclareRobustCommand{\Vref}{%
+ \@ifstar{\cref@vrefstar{Cref}}{\cref@vref{Cref}}}%
+ \DeclareRobustCommand{\vrefrange}{%
+ \@ifstar{\cref@vrefrangestar{cref}}{\cref@vrefrange{cref}}}%
+ \DeclareRobustCommand{\Vrefrange}{%
+ \@ifstar{\cref@vrefrangestar{Cref}}{\cref@vrefrange{Cref}}}%
+ \DeclareRobustCommand{\fullref}{%
+ \@ifstar{\cref@fullrefstar{cref}}{\cref@fullref{cref}}}%
+ \DeclareRobustCommand{\Fullref}{%
+ \@ifstar{\cref@fullrefstar{Cref}}{\cref@fullref{Cref}}}%
+ \def\cref@vrefstar#1#2{%
+ \@crefstarredtrue%
+ \cref@vref{#1}{#2}%
+ \@crefstarredfalse}%
+ \def\cref@vrefrangestar#1#2#3{%
+ \@crefstarredtrue%
+ \cref@vrefrange{#1}{#2}{#3}%
+ \@crefstarredfalse}%
+ \def\cref@fullrefstar#1#2{%
+ \@crefstarredtrue%
+ \cref@fullref{#1}{#2}%
+ \@crefstarredfalse}%
+ \else%
+ \DeclareRobustCommand{\vref}{\cref@vref{cref}}%
+ \DeclareRobustCommand{\Vref}{\cref@vref{Cref}}%
+ \DeclareRobustCommand{\vrefrange}{\cref@vrefrange{cref}}%
+ \DeclareRobustCommand{\Vrefrange}{\cref@vrefrange{Cref}}%
+ \DeclareRobustCommand{\fullref}{\cref@fullref{cref}}%
+ \DeclareRobustCommand{\Fullref}{\cref@fullref{Cref}}%
+ \fi% end of test for hyperref
+}{\let\if@cref@variorefloaded\iffalse}% end of \@ifpackageloaded{varioref}
+% \end{macrocode}
+% Add check to AtBeginDocument to throw error if \package{varioref} was
+% loaded after cleveref.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \if@cref@variorefloaded\relax\else%
+ \@ifpackageloaded{varioref}{%
+ \PackageError{cleveref}{cleveref must be loaded after varioref!}%
+ {Package load order is wrong: load cleveref *after* varioref.}
+ }{}%
+ \fi}
+% \end{macrocode}
+%
+%
+%
+% \subsubsection{\package{amsmath} support}
+% \begin{macro}{amsmath}
+% \begin{macro}{\label}
+% \begin{macro}{\label@in@display}
+% The \package{amsmath} package redefines the \cmd{\label} command
+% within equation environments, so if it is loaded we have to extend
+% the behaviour to support the optional argument. With
+% \package{amsmath}, the original \cmd{\label} command is stored in
+% \cmd{\ltx@label}, and \cmd{\label@in@display} replaces \cmd{\label}
+% inside equations. \cmd{\label@in@display} just saves the label for
+% later, and defining it is left until the end of the equation, when
+% \cmd{\ltx@label} is finally called.
+%
+% To allow \cmd{\label} within equations to support an optional
+% argument, we first store the original \cmd{\label@in@display} and the
+% new \cmd{\label} macro we defined above (since \cmd{\label} will be
+% clobbered inside equations). Then we redefine \cmd{\label@in@display}
+% so that it wraps all its arguments, including any optional argument,
+% in an extra set of braces. These are stripped away again by
+% \cmd{\ltx@label} before calling the \package{cleveref} \cmd{\label}
+% command we defined previously (saved in \cmd{\cref@label}). As
+% before, we must postpone the redefinition of \cmd{\label} until the
+% beginning of the document, since other packages do so.
+% \begin{macrocode}
+\let\if@cref@amsmathloaded\iffalse%
+\@ifpackageloaded{amsmath}{%
+ \let\if@cref@amsmathloaded\iftrue%
+ \AtBeginDocument{%
+ \let\cref@old@label@in@display\label@in@display%
+ \def\label@in@display{%
+ \@ifnextchar[\label@in@display@optarg\label@in@display@noarg}%]
+ \def\label@in@display@noarg#1{\cref@old@label@in@display{{#1}}}%
+ \def\label@in@display@optarg[#1]#2{%
+ \cref@old@label@in@display{[#1]{#2}}}%
+ \def\ltx@label#1{\cref@label#1}%
+ }% end of AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\measure@}
+% \begin{macro}{\gmeasure@}
+% The \package{amsmath} multi-line equation environments scan their
+% bodies twice: once to measure, once to typeset. In the measure phase,
+% the \cmd{\label} command is disabled by letting it to \cmd{\@gobble}.
+% But this isn't sufficient to gobble all the arguments any more if an
+% optional argument is supplied to our new \cmd{\label}, so we have to
+% modify the \package{amsmath} measuring commands so that they let
+% \cmd{\label} to \cmd{\cref@gobble@optarg} instead.
+%
+% Unfortunately, \package{amsmath} wasn't designed with redefinitions
+% of \cmd{\label} in mind, so there appears to be no safe way of doing
+% this other than copying the \package{amsmath} definitions and making
+% the modification directly in the macro's code. This is a recipe for
+% future chaos if these commands are ever modified in a new version of
+% \package{amsmath}, but it seems we have no choice. Luckily,
+% \package{amsmath} isn't updated too often!
+% \begin{macrocode}
+ \def\measure@#1{%
+ \begingroup%
+ \measuring@true%
+ \global\eqnshift@\z@%
+ \global\alignsep@\z@%
+ \global\let\tag@lengths\@empty%
+ \global\let\field@lengths\@empty%
+ \savecounters@%
+ \global\setbox0\vbox{%
+ \let\math@cr@@@\math@cr@@@align@measure%
+ \everycr{\noalign{\global\tag@false%
+ \global\let\raise@tag\@empty \global\column@\z@}}%
+ \let\label\cref@gobble@optarg% <<< cleveref modification
+ \global\row@\z@%
+ \tabskip\z@%
+ \halign{\span\align@preamble\crcr%
+ #1%
+ \math@cr@@@%
+ \global\column@\z@%
+ \add@amps\maxfields@\cr%
+ }%
+ }%
+ \restorecounters@%
+ \ifodd\maxfields@%
+ \global\advance\maxfields@\@ne\relax%
+ \fi%
+ \ifnum\xatlevel@=\tw@%
+ \ifnum\maxfields@<\thr@@%
+ \let\xatlevel@\z@%
+ \fi%
+ \fi%
+ \setbox\z@\vbox{%
+ \unvbox\z@ \unpenalty \global\setbox\@ne\lastbox%
+ }%
+ \global\totwidth@\wd\@ne%
+ \if@fleqn \global\advance\totwidth@\@mathmargin\relax\fi%
+ \global\let\maxcolumn@widths\@empty%
+ \begingroup%
+ \let\or\relax%
+ \loop%
+ \global\setbox\@ne\hbox{%
+ \unhbox\@ne \unskip \global\setbox\thr@@\lastbox%
+ }%
+ \ifhbox\thr@@%
+ \xdef\maxcolumn@widths{ \or \the\wd\thr@@ \maxcolumn@widths}%
+ \repeat%
+ \endgroup%
+ \dimen@\displaywidth%
+ \advance\dimen@-\totwidth@\relax%
+ \ifcase\xatlevel@%
+ \global\alignsep@\z@%
+ \let\minalignsep\z@%
+ \@tempcntb\z@%
+ \if@fleqn%
+ \@tempcnta\@ne%
+ \global\eqnshift@\@mathmargin%
+ \else%
+ \@tempcnta\tw@%
+ \global\eqnshift@\dimen@%
+ \global\divide\eqnshift@\@tempcnta\relax%
+ \fi%
+ \or%
+ \@tempcntb\maxfields@%
+ \divide\@tempcntb\tw@\relax%
+ \@tempcnta\@tempcntb%
+ \advance\@tempcntb\m@ne\relax%
+ \if@fleqn%
+ \global\eqnshift@\@mathmargin%
+ \global\alignsep@\dimen@%
+ \global\divide\alignsep@\@tempcnta\relax%
+ \else%
+ \global\advance\@tempcnta\@ne\relax%
+ \global\eqnshift@\dimen@%
+ \global\divide\eqnshift@\@tempcnta\relax%
+ \global\alignsep@\eqnshift@%
+ \fi%
+ \or%
+ \@tempcntb\maxfields@%
+ \divide\@tempcntb\tw@\relax%
+ \global\advance\@tempcntb\m@ne\relax%
+ \global\@tempcnta\@tempcntb\relax%
+ \global\eqnshift@\z@%
+ \global\alignsep@\dimen@%
+ \if@fleqn%
+ \global\advance\alignsep@\@mathmargin\relax%
+ \fi%
+ \global\divide\alignsep@\@tempcntb\relax%
+ \fi%
+ \ifdim\alignsep@<\minalignsep\relax%
+ \global\alignsep@\minalignsep\relax%
+ \ifdim\eqnshift@>\z@%
+ \if@fleqn\else%
+ \global\eqnshift@\displaywidth%
+ \global\advance\eqnshift@-\totwidth@\relax%
+ \global\advance\eqnshift@-\@tempcntb\alignsep@\relax%
+ \global\divide\eqnshift@\tw@\relax%
+ \fi%
+ \fi%
+ \fi%
+ \ifdim\eqnshift@<\z@%
+ \global\eqnshift@\z@%
+ \fi%
+ \calc@shift@align%
+ \global\tagshift@\totwidth@%
+ \global\advance\tagshift@\@tempcntb\alignsep@\relax%
+ \if@fleqn%
+ \ifnum\xatlevel@=\tw@%
+ \global\advance\tagshift@-\@mathmargin\relax%
+ \fi%
+ \else%
+ \global\advance\tagshift@\eqnshift@\relax%
+ \fi%
+ \iftagsleft@ \else%
+ \global\advance\tagshift@-\displaywidth\relax%
+ \fi%
+ \dimen@\minalignsep\relax%
+ \global\advance\totwidth@\@tempcntb\dimen@\relax%
+ \ifdim\totwidth@>\displaywidth%
+ \global\let\displaywidth@\totwidth@%
+ \else%
+ \global\let\displaywidth@\displaywidth%
+ \fi%
+ \endgroup%
+ }%
+ \def\gmeasure@#1{%
+ \begingroup%
+ \measuring@true%
+ \totwidth@\z@%
+ \global\let\tag@lengths\@empty%
+ \savecounters@%
+ \setbox\@ne\vbox{%
+ \everycr{\noalign{\global\tag@false%
+ \global\let\raise@tag\@empty \global\column@\z@}}%
+ \let\label\@gobble% <<< cleveref modification
+ \halign{%
+ \setboxz@h{$\m@th\displaystyle{##}$}%
+ \ifdim\wdz@>\totwidth@%
+ \global\totwidth@\wdz@%
+ \fi%
+ &\setboxz@h{\strut@{##}}%
+ \savetaglength@%
+ \crcr%
+ #1%
+ \math@cr@@@%
+ }%
+ }%
+ \restorecounters@%
+ \if@fleqn%
+ \global\advance\totwidth@\@mathmargin\relax%
+ \fi%
+ \iftagsleft@%
+ \ifdim\totwidth@>\displaywidth%
+ \global\let\gdisplaywidth@\totwidth@%
+ \else%
+ \global\let\gdisplaywidth@\displaywidth%
+ \fi%
+ \fi%
+ \endgroup%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\multline@}
+% \begin{macro}{\mmeasure@}
+% \begin{macro}{\label@mmeasure@noarg}
+% \begin{macro}{\label@mmeasure@optarg}
+% The |multline| environment works a bit differently to the other
+% \package{amsmath} environments, in that \cmd{\label} is
+% \emph{disabled} during the typesetting phase, and \emph{enabled}
+% during the measuring phase. To cope with \package{cleveref}'s
+% optional argument, we have to define separate versions of
+% \cmd{\label@in@display} specifically for \cmd{\mmeasure@}.
+% \begin{macrocode}
+ \def\multline@#1{%
+ \Let@%
+ \@display@init{\global\advance\row@\@ne\relax\global\dspbrk@lvl\m@ne}%
+ \chardef\dspbrk@context\z@%
+ \restore@math@cr%
+ \let\tag\tag@in@align%
+ \global\tag@false \global\let\raise@tag\@empty%
+ \mmeasure@{#1}%
+ \let\tag\gobble@tag \let\label\cref@gobble@optarg% <<< cleveref modification
+ \tabskip \if@fleqn \@mathmargin \else \z@skip \fi%
+ \totwidth@\displaywidth%
+ \if@fleqn%
+ \advance\totwidth@-\@mathmargin\relax%
+ \fi%
+ \halign\bgroup%
+ \hbox to\totwidth@{%
+ \if@fleqn%
+ \hskip \@centering \relax%
+ \else%
+ \hfil%
+ \fi%
+ \strut@%
+ $\m@th\displaystyle{}##\endmultline@math%
+ \hfil%
+ }% $
+ \crcr%
+ \if@fleqn%
+ \hskip-\@mathmargin%
+ \def\multline@indent{\hskip\@mathmargin}%
+ \else%
+ \hfilneg%
+ \def\multline@indent{\hskip\multlinegap}%
+ \fi%
+ \iftagsleft@%
+ \iftag@%
+ \begingroup%
+ \ifshifttag@%
+ \rlap{\vbox{%
+ \normalbaselines%
+ \hbox{%
+ \strut@%
+ \make@display@tag%
+ }%
+ \vbox to\lineht@{}%
+ \raise@tag%
+ }}%
+ \multline@indent%
+ \else%
+ \setbox\z@\hbox{\make@display@tag}%
+ \dimen@\@mathmargin \advance\dimen@-\wd\z@\relax%
+ \ifdim\dimen@<\multlinetaggap%
+ \dimen@\multlinetaggap%
+ \fi%
+ \box\z@ \hskip\dimen@\relax%
+ \fi%
+ \endgroup%
+ \else%
+ \multline@indent%
+ \fi%
+ \else%
+ \multline@indent%
+ \fi%
+ #1%
+ }%
+ \def\mmeasure@#1{%
+ \begingroup%
+ \measuring@true%
+ \def\label{% <<< cleveref modification
+ \@ifnextchar[\label@in@mmeasure@optarg%]
+ \label@in@mmeasure@noarg}%
+ \def\math@cr@@@{\cr}%
+ \let\shoveleft\@iden \let\shoveright\@iden%
+ \savecounters@%
+ \global\row@\z@%
+ \setbox\@ne\vbox{%
+ \global\let\df@tag\@empty%
+ \halign{%
+ \setboxz@h{\@lign$\m@th\displaystyle{}##$}%
+ \iftagsleft@%
+ \ifnum\row@=\@ne%
+ \global\totwidth@\wdz@%
+ \global\lineht@\ht\z@%
+ \fi%
+ \else%
+ \global\totwidth@\wdz@%
+ \global\lineht@\dp\z@%
+ \fi%
+ \crcr%
+ #1%
+ \crcr%
+ }%
+ }%
+ \ifx\df@tag\@empty\else\global\tag@true\fi%
+ \if@eqnsw\global\tag@true\fi%
+ \iftag@%
+ \setboxz@h{%
+ \if@eqnsw%
+ \stepcounter{equation}%
+ \tagform@\theequation%
+ \else%
+ \df@tag%
+ \fi%
+ }%
+ \global\tagwidth@\wdz@%
+ \dimen@\totwidth@%
+ \advance\dimen@\tagwidth@\relax%
+ \advance\dimen@\multlinetaggap\relax%
+ \iftagsleft@\else%
+ \if@fleqn%
+ \advance\dimen@\@mathmargin\relax%
+ \fi%
+ \fi%
+ \ifdim\dimen@>\displaywidth%
+ \global\shifttag@true%
+ \else%
+ \global\shifttag@false%
+ \fi%
+ \fi%
+ \restorecounters@%
+ \endgroup%
+ }%
+ \def\label@in@mmeasure@noarg#1{%
+ \begingroup%
+ \measuring@false%
+ \cref@old@label@in@display{{#1}}%
+ \endgroup}%
+ \def\label@in@mmeasure@optarg[#1]#2{%
+ \begingroup%
+ \measuring@false%
+ \cref@old@label@in@display{[#1]{#2}}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{subequations}
+% In order for |subequations| to be sorted properly, \package{cleveref}
+% needs to know that the |equation| counter is effectively reset by the
+% |parentequation| counter within the |subequations| environment. This
+% isn't how |amsmath| implements subequations (for obvious reasons!),
+% but we harmlessly add the |equation| counter to the |parentequation|
+% counter's reset list \emph{within} |subequations| environments, so
+% that \package{cleveref}'s sorting mechanism can figure things out. We
+% also harmlessly make sure |parentequation| is reset by the same
+% counter as |equation|.
+%
+% We also want to treat subequations as a separate cross-reference type
+% from equations. However, \package{amsmath} still uses the |equation|
+% counter for subequations, not a separate ``subequation'' counter. We
+% therefore temporarily alias |equation| to |subequation| within
+% subequation environments.
+% \begin{macrocode}
+ \let\cref@old@subequations\subequations%
+ \let\cref@old@endsubequations\endsubequations%
+ \cref@resetby{equation}{\cref@result}%
+ \ifx\cref@result\relax\else%
+ \cref@addtoreset{parentequation}{\cref@result}%
+ \fi%
+ \renewenvironment{subequations}{%
+% \end{macrocode}
+% Temporarily declare |equation| counter to be reset by |parentequation|.
+% \begin{macrocode}
+ \cref@addtoreset{equation}{parentequation}%
+% \end{macrocode}
+% Temporarily alias |equation| to |subequation|, or to whatever
+% |subequation| has been aliased to.
+% \begin{macrocode}
+ \let\cref@orig@equation@alias\cref@equation@alias%
+ \@ifundefined{cref@subequation@alias}%
+ {\crefalias{equation}{subequation}}%
+ {\def\@tempa{{equation}}%
+ \expandafter\expandafter\expandafter\crefalias%
+ \expandafter\@tempa\expandafter{\cref@subequation@alias}}%
+ \cref@old@subequations%
+ }{%
+% \end{macrocode}
+% Remove |equation| from |parentequation| counter's reset list.
+% \begin{macrocode}
+ \gdef\cl@parentequation{}%
+ \cref@old@endsubequations%
+ \setcounter{parentequation}{0}%
+% \end{macrocode}
+% Restore original |equation| alias (if any).
+% \begin{macrocode}
+ \@ifundefined{cref@orig@cref@equation@alias}%
+ {\let\cref@equation@alias\relax}%
+ {\let\cref@equation@alias\cref@orig@equation@alias\relax}%
+ \let\cref@orig@equation@alias\relax%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\make@df@tag@@}
+% \begin{macro}{\make@df@tag@@@}
+% We override the internals of the \package{amsmath} \cmd{\tag} command
+% to add the additional information to the label definition. Since
+% labels produced by \cmd{\tag} have no logical ordering when sorting a
+% list of references, we give them a large numerical value so that they
+% get pushed to the end of sorted cross-reference lists.
+% \begin{macrocode}
+ \let\cref@old@make@df@tag@@\make@df@tag@@%
+ \def\make@df@tag@@#1{%
+ \cref@old@make@df@tag@@{#1}%
+ \let\cref@old@df@tag\df@tag%
+ \expandafter\gdef\expandafter\df@tag\expandafter{%
+ \cref@old@df@tag%
+ \def\cref@currentlabel{[equation][2147483647][]#1}}}%
+ \let\cref@old@make@df@tag@@@\make@df@tag@@@%
+ \def\make@df@tag@@@#1{%
+ \cref@old@make@df@tag@@@{#1}%
+ \let\cref@old@df@tag\df@tag%
+ \expandafter\gdef\expandafter\df@tag\expandafter{%
+ \cref@old@df@tag%
+ \toks@\@xp{\p@equation{#1}}%
+ \edef\cref@currentlabel{[equation][2147483647][]\the\toks@}}}%
+}{}% end of \@ifpackageloaded{amsmath}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Add check to AtBeginDocument to throw error if \package{amsmath} was
+% loaded after cleveref.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \if@cref@amsmathloaded\else%
+ \@ifpackageloaded{amsmath}{%
+ \PackageError{cleveref}{cleveref must be loaded after amsmath!}%
+ {Package load order is wrong: load cleveref *after* amsmath.}
+ }{}%
+ \fi}
+%
+%
+%
+% \subsubsection{\package{amsthm} support}
+% \begin{macro}{amsthm}
+% If \package{amsthm} is loaded, we need to modify its theorem
+% referencing features so that they work with \package{cleveref}.
+% \begin{macrocode}
+\@ifpackageloaded{amsthm}{%
+ \PackageInfo{cleveref}{`amsthm' support loaded}%
+% \end{macrocode}
+%
+% \begin{macro}{\@thm}
+% We modify \package{amsthm}'s version of the \cmd{\@thm} macro, to
+% have it call \cmd{\refstepcounter} with an optional argument
+% containing the theorem type.
+% \begin{macrocode}
+ \let\cref@thmnoarg\@thm%
+ \def\@thm{\@ifnextchar[{\cref@thmoptarg}{\cref@thmnoarg}}%]
+ \def\cref@thmoptarg[#1]#2#3#4{%
+ \ifhmode\unskip\unskip\par\fi%
+ \normalfont%
+ \trivlist%
+ \let\thmheadnl\relax%
+ \let\thm@swap\@gobble%
+ \thm@notefont{\fontseries\mddefault\upshape}%
+ \thm@headpunct{.}% add period after heading
+ \thm@headsep 5\p@ plus\p@ minus\p@\relax%
+ \thm@space@setup%
+ #2% style overrides
+ \@topsep \thm@preskip % used by thm head
+ \@topsepadd \thm@postskip % used by \@endparenv
+ \def\@tempa{#3}\ifx\@empty\@tempa%
+ \def\@tempa{\@oparg{\@begintheorem{#4}{}}[]}%
+ \else%
+ \refstepcounter[#1]{#3}% <<< cleveref modification
+ \def\@tempa{\@oparg{\@begintheorem{#4}{\csname the#3\endcsname}}[]}%
+ \fi%
+ \@tempa}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@ynthm}
+% We also have to modify \package{amsthm}'s \cmd{\@ynthm} command so
+% that it passes the optional argument to \cmd{\@thm}. Since
+% \package{amsmath}'s \cmd{\@ynthm} takes a different parameter list to
+% the standard \LaTeX{} \cmd{\@ynthm} macro, we deliberately override
+% our previous redefinition, and add the code for the automatic
+% \cmd{\crefname} definitions directly to this version.
+% \begin{macrocode}
+ \def\@ynthm#1[#2]#3{%
+% \end{macrocode}
+% Here's the automatic \cmd{\crefname} definition.
+% \begin{macrocode}
+ \edef\@tempa{\expandafter\noexpand%
+ \csname cref@#1@name@preamble\endcsname}%
+ \edef\@tempb{\expandafter\noexpand%
+ \csname Cref@#1@name@preamble\endcsname}%
+ \def\@tempc{#3}%
+ \ifx\@tempc\@empty\relax%
+ \expandafter\gdef\@tempa{}%
+ \expandafter\gdef\@tempb{}%
+ \else%
+ \if@cref@capitalise%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempa\expandafter{\MakeUppercase #3}%
+ \else%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempa\expandafter{\MakeLowercase #3}%
+ \fi%
+ \expandafter\expandafter\expandafter\gdef\expandafter%
+ \@tempb\expandafter{\MakeUppercase #3}%
+ \fi%
+ \cref@stack@add{#1}{\cref@label@types}%
+% \end{macrocode}
+% Here's the original \package{amsthm} \cmd{\@ynthm} definition, with
+% the \package{cleveref} modification.
+% \begin{macrocode}
+ \ifx\relax#2\relax%
+ \def\@tempa{\@oparg{\@xthm{#1}{#3}}[]}%
+ \else%
+ \@ifundefined{c@#2}{%
+ \def\@tempa{\@nocounterr{#2}}%
+ }{%
+ \@xp\xdef\csname the#1\endcsname{\@xp\@nx\csname the#2\endcsname}%
+ \toks@{#3}%
+ \@xp\xdef\csname#1\endcsname{%
+ \@nx\@thm[#1]{% <<< new optional argument for theorem name
+ \let\@nx\thm@swap%
+ \if S\thm@swap\@nx\@firstoftwo\else\@nx\@gobble\fi%
+ \@xp\@nx\csname th@\the\thm@style\endcsname}%
+ {#2}{\the\toks@}}%
+ \let\@tempa\relax%
+ }%
+ \fi%
+ \@tempa}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xnthm}
+% Finally, we have to restore the \package{amsthm} version of
+% \cmd{\@xnthm}, which we stored earlier in \cmd{\cref@old@xnthm} and
+% redefined. With \package{amsthm}, \cmd{\@xnthm} calls \cmd{\@ynthm},
+% so the automatic \cmd{\crefname} definition is already taken care of.
+% \begin{macrocode}
+ \let\@xnthm\cref@old@xnthm%
+}{}% end of \@ifpackageloaded{amsthm}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{ntheorem} support}
+% \begin{macro}{ntheorem}
+% \begin{macro}{thref}
+% If \package{ntheorem} is loaded, we need to modify its theorem
+% referencing features so that they work with \package{cleveref}.
+% \begin{macrocode}
+\@ifpackageloaded{ntheorem}{%
+ \PackageInfo{cleveref}{`ntheorem' support loaded}%
+ \@ifpackagewith{ntheorem}{thref}{%
+ \PackageWarning{cleveref}{`cleveref' supersedes `ntheorem's `thref'
+ option}%
+ \renewcommand{\thref}{\cref}}{}%
+% \end{macrocode}
+%
+% \begin{macro}{\theorem@prework}
+% Newer versions of \package{ntheorem} require a call to
+% \cmd{\theorem@prework} when typesetting theorems. If an older
+% version of \package{ntheorem} is being used, we just \cmd{\let} it to
+% \cmd{\relax} to make sure it's defined.
+% \begin{macrocode}
+ \@ifundefined{theorem@prework}{\let\theorem@prework\relax}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@thm}
+% We modify \package{ntheorem}'s version of the \cmd{\@thm} macro very
+% slightly, to have it call \cmd{\refstepcounter} with an optional
+% argument containing the theorem type.
+% \begin{macrocode}
+ \gdef\@thm#1#2#3{%
+ \if@thmmarks%
+ \stepcounter{end\InTheoType ctr}%
+ \fi%
+ \renewcommand{\InTheoType}{#1}%
+ \if@thmmarks%
+ \stepcounter{curr#1ctr}%
+ \setcounter{end#1ctr}{0}%
+ \fi%
+ \refstepcounter[#1]{#2}% <<< cleveref modification
+ \theorem@prework%
+ \thm@topsepadd \theorempostskipamount%
+ \ifvmode \advance\thm@topsepadd\partopsep\relax\fi%
+ \trivlist%
+ \@topsep \theorempreskipamount%
+ \@topsepadd \thm@topsepadd%
+ \advance\linewidth -\theorem@indent\relax%
+ \advance\@totalleftmargin \theorem@indent\relax%
+ \parshape \@ne \@totalleftmargin \linewidth%
+ \@ifnextchar[{\@ythm{#1}{#2}{#3}}{\@xthm{#1}{#2}{#3}}%]
+ }%
+}{}% end of \@ifpackageloaded{ntheorem}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{IEEEtrantools} support}
+% \begin{macro}{IEEEtrantools}
+% The |IEEEeqnarray| environment and \cmd{\IEEEeqnarraccr} command calls
+% \cmd{\stepcounter} instead of \cmd{\refstepcounter} to increment the
+% equation counters, so they fail to set the cross-reference type for
+% \package{cleveref}. We patch in calls to \cmd{\refstepcounter} to fix
+% this.
+% \begin{macrocode}
+\@ifpackageloaded{IEEEtrantools}{%
+ \PackageInfo{cleveref}{`IEEEtrantools' support loaded}%
+% \end{macrocode}
+%
+% \begin{macro}{\@@IEEEeqnarray}
+% Rather than copying the whole of \cmd{\@@IEEEeqnarray} just to patch
+% the \cmd{\stepcounter} line (which would be fragile and liable to
+% breakage), we insert an extra step which calls \cmd{\refstepcounter}
+% to set the cross-reference type, then decrements the |equation|
+% counter by one, before calling the original \cmd{\@@IEEEeqnarray}.
+% \begin{macrocode}
+ \let\cref@orig@@IEEEeqnarray\@@IEEEeqnarray%
+ \def\@@IEEEeqnarray[#1]#2{%
+ \refstepcounter{equation}%
+ \addtocounter{equation}{-1}%
+ \cref@orig@@IEEEeqnarray[#1]{#2}}%
+% \end{macrocode}
+% \end{macro}
+%
+% We do the same thing with \cmd{\@IEEEeqnarrayXCR}, the last in the
+% chain of macros that gets invoked by |\\| (let to
+% \cmd{\IEEEeqnarraycr}) within |IEEEeqnarray| environments.
+% \begin{macro}{\@IEEEeqnarrayXCR}
+% \begin{macrocode}
+ \let\cref@orig@IEEEeqnarrayXCR\@IEEEeqnarrayXCR%
+% \end{macrocode}
+% Newer versions of \package{IEEEtrantools} replace
+% |\if@IEEEissubequation| conditional with a counter |\c@IEEEsubequation|
+% that is $>0$ in subequations.
+% \begin{macrocode}
+ \@ifundefined{c@IEEEsubequation}{%
+ \def\@IEEEeqnarrayXCR[#1]{%
+ \if@eqnsw%
+ \if@IEEEissubequation%
+ \refstepcounter{IEEEsubequation}%
+ \addtocounter{IEEEsubequation}{-1}%
+ \else%
+ \refstepcounter{equation}%
+ \addtocounter{equation}{-1}%
+ \fi%
+ \fi%
+ \cref@orig@IEEEeqnarrayXCR[#1]}%
+ }{
+ \def\@IEEEeqnarrayXCR[#1]{%
+ \if@eqnsw%
+ \ifnum\c@IEEEsubequation>0\relax%
+ \refstepcounter{IEEEsubequation}%
+ \addtocounter{IEEEsubequation}{-1}%
+ \else%
+ \refstepcounter{equation}%
+ \addtocounter{equation}{-1}%
+ \fi%
+ \fi%
+ \cref@orig@IEEEeqnarrayXCR[#1]}%
+ }% end of \@ifundefined{c@IEEEsubequation}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\IEEEyessubnumber}
+% And again for \cmd{\IEEEyessubnumber} (used to turn an equation into a
+% subequation).
+% \begin{macrocode}
+ \let\cref@orig@IEEEyessubnumber\IEEEyessubnumber%
+ \def\IEEEyessubnumber{%
+ \if@IEEEeqnarrayISinner%
+ \if@IEEElastlinewassubequation\else%
+ \setcounter{IEEEsubequation}{0}%
+ \refstepcounter{IEEEsubequation}%
+ \fi%
+ \fi%
+ \cref@orig@IEEEyessubnumber}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{IEEEsubequation}
+% To get the subequation formatting right, we harmlessly add the
+% |IEEEsubequation| counter to the |equation| counter reset list so
+% that \package{cleveref} can figure out the subnumbering relationship,
+% and define |IEEEsubequation| to be an alias of the |subequation| format.
+% \begin{macrocode}
+ \cref@addtoreset{IEEEsubequation}{subequation}%
+ \crefalias{IEEEsubequation}{subequation}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+}{}% end of \@ifpackageloaded{IEEEtrantools}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{breqn} support}
+% \begin{macro}{breqn}
+% The \package{breqn} package uses \cmd{\eq@setcounter} instead of
+% \cmd{\refstepcounter} to set equation numbers, which as usual breaks
+% \package{cleveref}. To fix this, we have to patch
+% \cmd{\eq@setcounter} with similar code to that already added to
+% \cmd{\refstepcounter}.
+% \begin{macrocode}
+\@ifpackageloaded{breqn}{%
+ \PackageInfo{cleveref}{`breqn' support loaded}%
+ \let\cref@old@eq@setnumber\eq@setnumber%
+ \def\eq@setnumber{%
+ \cref@old@eq@setnumber%
+ \cref@constructprefix{equation}{\cref@result}%
+ \protected@xdef\cref@currentlabel{%
+ [equation][\arabic{equation}][\cref@result]\p@equation\eq@number}}%
+}{}% end of \@ifpackageloaded{breqn}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{algorithmicx} support}
+% \begin{macro}{algorithmicx}
+% If \package{algorithmicx} is loaded, we modify its line numbering
+% mechanism so that labels referring to line numbers in algorithms work
+% with \package{cleveref}.
+% \end{macro}
+% \begin{macrocode}
+ \@ifpackageloaded{algorithmicx}{%
+ \PackageInfo{cleveref}{`algorithmicx' support loaded}%
+% \end{macrocode}
+%
+% \begin{macro}{\ALG@step}
+% We modify \package{algorithmicx}'s \cmd{\ALG@step} macro, which
+% increments the line number, so that it stores the necessary
+% information in \cmd{\cref@currentlabel}. \cmd{\ALG@step} already
+% increments the line number counter \cmd{\ALG@line} using
+% \cmd{\addtocounter}, but to get \package{cleveref} support working,
+% it's cleaner to hook into the \cmd{\refstepcounter} mechanism, so we
+% first decrement the counter and then re-increment it using
+% \cmd{\refstepcounter}.
+% \begin{macrocode}
+ \g@addto@macro\ALG@step{%
+ \addtocounter{ALG@line}{-1}%
+ \refstepcounter{ALG@line}%
+ \expandafter\@cref@getprefix\cref@currentlabel\@nil\cref@currentprefix%
+ \xdef\cref@currentprefix{\cref@currentprefix}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ALG@beginalgorithmic}
+% However, this is not yet sufficient. The \cmd{\refstepcounter} above
+% is called within a group, so the resulting \cmd{\cref@currentlabel}
+% definition will not persist beyond the end of the group. To transfer
+% the information to the ``outside'', we follow \package{algorithmicx}'
+% own method for getting the label information into
+% \cmd{\@currentlabel}: we define \cmd{\cref@currentlabel} within
+% |algorithm| environments to refer specifically to macros that store
+% the line number information. The package conveniently supplies a
+% \cmd{\ALG@beginalgorithmic} hook, so we make use of it here.
+% \begin{macrocode}
+ \g@addto@macro\ALG@beginalgorithmic{%
+ \def\cref@currentlabel{%
+ [line][\arabic{ALG@line}][\cref@currentprefix]\theALG@line}}%
+ }{}% end of \@ifpackageloaded{algorithmicx}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{listings} support}
+% \begin{macro}{listings}
+% To support cross-references to listings produced by the
+% \package{listings} package, all we need to do is alias the counter it
+% uses, \cmd{\lstnumber}, to the ``listing'' cross-reference type.
+% \begin{macrocode}
+ \@ifpackageloaded{listings}{%
+ \PackageInfo{cleveref}{`listings' support loaded}%
+ \crefalias{lstlisting}{listing}%
+ \crefalias{lstnumber}{line}%
+% \end{macrocode}
+%
+% However, supporting cross-references to the line numbers is
+% unfortunately a little more complicated than simply aliasing the
+% ``lstnumber'' counter to the ``line'' cross-reference type (above).
+% \package{listings} calls \cmd{\refstepcounter} from its
+% \cmd{\lsthk@EveryPar} hook. But the hook macro is expanded inside a
+% group. So that \cmd{\refstepcounter} call is completely useless:
+% neither the \cmd{\@currentlabel} nor the \cmd{\cref@currentlabel}
+% definitions make it out of the group, so they have no effect on
+% \cmd{\label} definitions!
+%
+% To make line labels work, \package{listings} sets \cmd{\@currentlabel}
+% to \cmd{\thelstnumber} at the beginning of a listing, via the
+% \cmd{\lsthk@Init} hook, and it is \emph{this} (and not
+% \cmd{\refstepcounter}) which causes the current line number to be
+% picked up by \cmd{\label}s. To get line numbers working with
+% \package{cleveref} too, we need to replicate this for
+% \cmd{\cref@currentlabel}, which is what the following hook code does.
+%
+% \begin{macro}{\lsthk@Init}
+% \begin{macro}{\lsthk@EveryPar}
+% \begin{macrocode}
+ \lst@AddToHook{Init}{%
+ \def\cref@currentlabel{%
+ [line][\arabic{lstnumber}][\cref@currentprefix]\thelstnumber}}%
+ \lst@AddToHook{EveryPar}{%
+ \expandafter\@cref@getprefix\cref@currentlabel\@nil\cref@currentprefix%
+ \xdef\cref@currentprefix{\cref@currentprefix}}%
+ }{}% end of \@ifpackageloaded{listings}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{algorithm2e} support}
+% \begin{macro}{algorithm2e}
+% When \package{hyperref} is not loaded, all we need to do to support
+% the \package{algorithm2e} package is to alias its counters,
+% \cmd{\algocf}, \cmd{AlgoLine} and \cmd{\algocfline}, to the
+% ``algorithm'' and ``line'' cross-reference types.
+% \begin{macrocode}
+ \@ifpackageloaded{algorithm2e}{%
+ \PackageInfo{cleveref}{`algorithm2e' support loaded}%
+ \crefalias{algocf}{algorithm}%
+ \crefalias{algocfline}{line}%
+ \crefalias{AlgoLine}{line}%
+% \end{macrocode}
+% When \package{hyperref} \emph{is} loaded, \package{algorithm2e} does
+% some trickery when stepping the line number counter to avoid getting
+% duplicate hyperlink anchor names, and updates \cmd{@currentlabel}
+% manually. Unfortunately, this by-passes both \cmd{\refstepcounter} and
+% \cmd{\H@refstepcounter}, so \cmd{\cref@currentlabel} never gets
+% updated. To fix this, we have to hack its \cmd{algocf@nl@sethref} macro
+% to update \cmd{cref@currentlabel} along with \cmd{@currentlabel}.
+% \begin{macrocode}
+ \let\cref@old@algocf@nl@sethref\algocf@nl@sethref%
+ \renewcommand{\algocf@nl@sethref}[1]{%
+ \cref@old@algocf@nl@sethref{#1}%
+ \cref@constructprefix{AlgoLine}{\cref@result}%
+ \@ifundefined{cref@AlgoLine@alias}%
+ {\def\@tempa{AlgoLine}}%
+ {\def\@tempa{\csname cref@AlgoLine@alias\endcsname}}%
+ \xdef\cref@currentlabel{%
+ [\@tempa][\arabic{AlgoLine}][\cref@result]%
+ \csname p@AlgoLine\endcsname\csname theAlgoLine\endcsname}}%
+ }{}% end of \@ifpackageloaded{algorithm2e}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{subfig} support}
+% \begin{macro}{subfig}
+% The \package{subfig} package modifies \cmd{\refstepcounter} within
+% floats. Most of the time, this isn't a problem for
+% \package{cleveref}, as \package{subfig}'s modified
+% \cmd{\refstepcounter} calls \package{cleveref}'s version after it's
+% done its stuff. However, this breaks support the
+% \cmd{\refstepcounter} optional argument, so we fix that here.
+%
+% \package{Subfig} also redefines \cmd{\label} within subfloats,
+% breaking \package{cleveref}'s optional argument. We also fix that.
+% \begin{macrocode}
+\@ifpackageloaded{subfig}{%
+ \PackageInfo{cleveref}{`subfig' support loaded}%
+% \end{macrocode}
+%
+% \begin{macro}{\refsteponlycounter}
+% \package{subfig} replaces \cmd{\refstepcounter} with
+% \cmd{\refsteponlycounter} within floats, which calls the saved
+% \package{cleveref} \cmd{\refstepcounter} after doing some extra
+% \package{subfig}-related processing. We redefine
+% \cmd{\refsteponlycounter} so that passing it an optional argument
+% bypasses \package{subfig}'s code entirely and just calls the
+% \package{cleveref} code directly. Since only
+% \package{cleveref}-specific commands will ever pass an optional
+% argument to \cmd{\refstepcounter}, this won't affect
+% \package{subfig}'s use of \cmd{\refstepcounter}. We have to postpone
+% this redefinition until the beginning of the document because
+% \package{subfig} does.
+% \begin{macrocode}
+ \AtBeginDocument{%
+ \let\cref@old@refsteponlycounter\refsteponlycounter%
+ \def\refsteponlycounter{%
+ \@ifnextchar[\refstepcounter@optarg%
+ \cref@old@refsteponlycounter%]
+ }}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sf@sub@label}
+% \begin{macro}{\sf@old@label}
+% \begin{macro}{\cref@old@label}
+% Inside a subfloat, \package{subfig} captures the current \cmd{\label}
+% definition in \cmd{\sf@oldlabel}, then replaces \cmd{\label} with
+% \cmd{\subfloat@label}, which does additional argument and
+% subfloat-related processing before calling \cmd{\sf@oldlabel}. This
+% breaks \package{cleveref}'s \cmd{\label} optional argument.
+%
+% We need to insert an extra layer of processing into the chain of
+% redefined \cmd{\label} macro calls, to process \package{cleveref}'s
+% optional argument. We do this by redefining \package{subfig}'s
+% \cmd{\sf@sub@label} command to process \package{subfig}'s optional
+% argument (which uses parentheses rather than square brackets) as usual,
+% but then have it call \cmd{\cref@label} which stores
+% \package{cleveref}'s \cmd{\label} command (recall that we're inside a
+% subfloat here, where \package{subfig} has overridden the \cmd{\label}
+% macro itself), to process \package{cleveref}'s own \cmd{\label}
+% optional argument.
+%
+% \cmd{\cref@label} would normally call the original \cmd{\label}
+% definition stored in \cmd{\cref@old@label}, whereas here we want it
+% to instead call \cmd{\sf@@sub@label}, the next layer of the
+% \package{subfig} \cmd{\label} macro stack, otherwise we bypass the
+% rest of the \package{subfig} processing and break it. So we
+% temporarily let \cmd{\cref@old@label} to \cmd{\sf@@sub@label}, so
+% that \cmd{\cref@label} hands back to \package{subfig}'s \cmd{\label}
+% processing when done. (We're inside a group, so \cmd{\cref@old@label}
+% gets restored at the end of the subfloat.)
+%
+% The final issue is that \package{subfig} captures the original
+% \cmd{\label} definition in \cmd{\sf@oldlabel} at the beginning of the
+% subfloat. But this captures \package{cleveref}'s
+% definition,\footnote{Actually, because \package{subfig} always loads
+% the \package{caption} package, it captures \package{cleveref}'s
+% \package{caption}-related redefinition of \cmd{\label}.} instead of
+% the original \cmd{\label} definition that needs to be called after
+% \package{subfig} has finished its stuff. So, we let \cmd{\sf@oldlabel}
+% to \cmd{\cref@old@label} before redefining the latter, so that the
+% \package{subfig} \cmd{\label} stack calls the right thing once it's
+% done its own processing. Oof!
+% \begin{macrocode}
+ \def\sf@sub@label(#1){%
+ \ifhyperrefloaded%
+ \protected@edef\@currentlabelname{%
+ \expandafter\strip@period #1\relax.\relax\@@@}%
+ \fi%
+ \let\sf@oldlabel\cref@old@label%
+ \let\cref@old@label\sf@@sub@label%
+ \cref@label}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+ }{}% end of \@ifpackageloaded{subfig}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{memoir} subfig support}
+% \begin{macro}{memoir}
+% We try to stay out of \package{memoir}'s way as much as possible, by
+% using a separate set of parallel label definitions for
+% \package{cleveref}, and leaving the standard labels alone for
+% \package{memoir} and other packages to use as normal. The one
+% remaining point of contention is the \cmd{\label} command itself.
+%
+% \begin{macro}{\sf@memsub@label}
+% \begin{macro}{\@memoldlabel}
+% \begin{macro}{\cref@old@label}
+% \package{memoir} contains its own internal re-implementation of
+% \package{subfig}, which redefines \cmd{\label} in a very similar way.
+% We therefore have to replicate the \package{subfig} support for
+% \package{memoir}'s internal re-implementation. (We have to postpone
+% the redefinitions until the beginning of the document because
+% \package{memoir} does, too.)
+% \begin{macrocode}
+\@ifclassloaded{memoir}{%
+ \AtBeginDocument{%
+ \def\sf@memsub@label(#1){%
+ \protected@edef\mem@currentlabelname{#1}%
+ \let\@memoldlabel\cref@old@label%
+ \let\cref@old@label\sf@@memsub@label%
+ \cref@label}}%
+}{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{caption} support}
+% \begin{macro}{caption}
+% The \package{caption} package redefines \cmd{\label} within floats.
+% Since version 3.2c, it is careful to redefine \cmd{\label} in a way
+% that doesn't break any optional arguments introduced by other
+% packages (such as \package{cleveref}'s), so we no longer need to add
+% any compatibility hacks.
+%
+% Earlier versions of \package{caption} do break \package{cleveref}'s
+% optional argument, however, so we have to fix things here for those
+% versions.
+% \begin{macrocode}
+\@ifpackageloaded{caption}{%
+ \@ifpackagelater{caption}{2011/08/19}{}{%
+ \PackageInfo{cleveref}{`caption' support loaded}%
+% \end{macrocode}
+%
+% \begin{macro}{\cref@old@caption@xlabel}
+% \begin{macro}{\cref@old@label}
+% \begin{macro}{\cref@ORI@label}
+% \begin{macro}{\caption@ORI@label}
+% We fix the \cmd{\label} argument parsing by redefining
+% \cmd{\caption@xlabel}, the macro which \cmd{\label} is let to inside
+% floats, to juggle around the various \package{cleveref} and
+% \package{caption} \cmd{\label}-processing macros so that everything
+% ultimately gets processed correctly.
+%
+% \cmd{\cref@label} stores \package{cleveref}'s \cmd{\label}
+% redefinition (recall that we're inside a float here, where
+% \cmd{\label} itself has been redefined by \package{caption}).
+% \cmd{\cref@label} processes \package{cleveref}'s optional
+% \cmd{\label} argument, if any. It then calls \cmd{\cref@old@label}.
+% But we've let that to \cmd{\cref@old@caption@xlabel}, which stores
+% the original \cmd{\caption@xlabel}. So the net effect is to insert an
+% extra layer of optional argument processing between \cmd{\label} and
+% \cmd{\caption@xlabel}, which can then proceed as before.
+%
+% The final issue is that \package{caption} captures the original
+% \cmd{\label} definition in \cmd{\caption@ORI@label}, but this picks
+% up the \package{cleveref} redefinition, which is not what we want. So
+% we let \cmd{\caption@ORI@label} to the original \cmd{\label}
+% definition as captured by \package{cleveref}. Usually, that's stored
+% in \cmd{\cref@old@label}, but we've temporarily redefined that. So we
+% need to save what was originally preserved in \cmd{\cref@old@label}
+% in \cmd{\cref@ORI@old@label}, and make \cmd{\caption@ORI@label} call
+% that. Oof!
+% \begin{macrocode}
+ \let\cref@old@caption@xlabel\caption@xlabel%
+ \def\caption@xlabel{%
+ \let\cref@ORI@label\cref@old@label%
+ \let\cref@old@label\cref@old@caption@xlabel%
+ \let\caption@ORI@label\cref@ORI@label%
+ \cref@label}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+ }% end of \@ifpackagelater
+ }{}% end of \@ifpackageloaded{caption}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\package{aliascnt} support}
+% \begin{macro}{aliascnt}
+% For the \package{aliascnt} trick described in \cref{sec:label_type}
+% of the documentation to work, we have to inform \package{cleveref}
+% about how aliased counters get reset. \package{aliascnt}'s
+% \cmd{\newaliascnt} command doesn't add the aliased counter to any
+% reset list, but if the counter it's aliased to gets reset, the
+% aliased counter will get reset too. In order for \package{cleveref}
+% to correctly sort cross-references to the aliased counter, we have to
+% add that counter to the appropriate reset list, even though that
+% isn't necessary to actually reset the counter itself. We add this to
+% the \cmd{\newaliascnt} command.
+% \end{macro}
+% \begin{macro}{\newaliascnt}
+% \begin{macrocode}
+\@ifpackageloaded{aliascnt}{%
+ \PackageInfo{cleveref}{`aliascnt' support loaded}%
+ \let\cref@old@newaliascnt\newaliascnt%
+ \renewcommand*{\newaliascnt}[2]{%
+ \cref@old@newaliascnt{#1}{#2}%
+ \cref@resetby{#2}{\cref@result}%
+ \ifx\cref@result\relax\else%
+ \cref@addtoreset{#1}{\cref@result}%
+ \fi}%
+ }{}% end of \@ifpackageloaded{aliascnt}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Poor Man's \package{cleveref}}
+% \begin{macro}{poorman}
+% The \option{poorman} option causes a |sed| script to automatically be
+% written. When the original \LaTeX{} source file is processed through
+% this script, it strips out all the \package{cleveref} commands,
+% typesetting all the reference formatting explicitly, and using the
+% standard \cmd{\ref} and \cmd{\pageref} commands to produce the
+% references themselves.
+% \end{macro}
+% \begin{macrocode}
+\DeclareOption{poorman}{%
+ \PackageInfo{cleveref}{option `poorman' loaded}%
+% \end{macrocode}
+%
+%
+% \begin{macro}{\cref@poorman@text}
+% Define global macro \cmd{\cref@poorman@text} to store the text
+% produced by the \cmd{\cref} commands, and open an output stream for
+% writing the script before starting to process the document body.
+% \begin{macrocode}
+ \gdef\cref@poorman@text{}%
+ \AtBeginDocument{%
+ \newwrite\@crefscript%
+ \immediate\openout\@crefscript=\jobname.sed}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{select@language}
+% \begin{macro}{foreign@language}
+% If \package{babel} is loaded, we add to the \cmd{\select@language}
+% and \cmd{\foreign@language} commands to make them write substitution
+% rules to the script that replace the cross-reference name and
+% conjunction component macros with the appropriate language-dependent
+% names. We use |sed| line-number addresses in the rules to ensure they
+% are only applied to the regions in which that particular language was
+% in use.
+%
+% Note that we write substitution rules for the \emph{previous}
+% language block when the language is changed, because we need the
+% rules to appear in the script \emph{after} all the cross-reference
+% substitution rules for that language block. \cmd{\cref@inputlineno}
+% stores the input-file line-number of the start of the previous
+% language block.
+%
+% We postpone the redefinitions until the beginning of the document not
+% only to ensure that they don't get clobbered by other package's
+% redefinitions, but also because we don't want the redefinitions to
+% take effect until after \package{babel} has called
+% \cmd{\selectlanguage} for the main language (remember, the
+% substitution rules for this first language block will get written at
+% the next language change).
+%
+% Note that, since we're writing to the script file within
+% \cmd{\AtBeginDocument} and \cmd{\AtEndDocument}, this code has to
+% come \emph{after} the above \cmd{\AtBeginDocument} code which opens
+% the script file for writing, and \emph{before} the later
+% \cmd{\AtEndDocument} code (below) which closes it.
+%
+% The |\if@cref@switched@language| flag is set when a \package{babel}
+% language switching command is called. It is checked by
+% \cmd{\cref@writelanguagerules} when writing substitution rules.
+% \begin{macrocode}
+ \newif\if@cref@switched@language%
+ \@ifpackageloaded{babel}{%
+ \AtBeginDocument{%
+ \let\cref@old@select@language\select@language%
+ \def\select@language{%
+ \@cref@switched@languagetrue%
+ \cref@writelanguagerules%
+ \cref@old@select@language}%
+ \let\cref@old@foreign@language\foreign@language%
+ \def\foreign@language{%
+ \@cref@switched@languagetrue%
+ \cref@writelanguagerules%
+ \cref@old@foreign@language}%
+ \edef\cref@inputlineno{\the\inputlineno}}%
+ }{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% The final set of substitution rules gets written at the end of the
+% document. This is the only set of rules that gets written if
+% \package{babel} is not loaded.
+% \begin{macrocode}
+ \AtEndDocument{%
+ \let\select@language\cref@old@select@language%
+ \let\foreign@language\cref@old@foreign@language%
+ \cref@writelanguagerules}%
+% \end{macrocode}
+%
+% \begin{macro}{\cref@writelanguagerules}
+% \cmd{\cref@writelanguagerules} does the grunt work of writing out the
+% necessary substitution rules.
+% \begin{macrocode}
+ \def\cref@writelanguagerules{%
+ \begingroup%
+% \end{macrocode}
+% If |\if@cref@switched@language| hasn't been set, then we must be
+% writing the final set of substitution rules at the end of a document
+% in which no language switching command was ever used. In which case,
+% the substitution rules don't specify a line-number address.
+% \begin{macrocode}
+ \if@cref@switched@language%
+ \edef\@address{\cref@inputlineno,\the\inputlineno}%
+ \else%
+ \def\@address{}%
+ \fi%
+ \expandafter\def\expandafter\cref@poorman@text\expandafter{%
+ \crefrangeconjunction}%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter{\@address}{\string\crefrangeconjunction}}%
+ \expandafter\cref@writescript\@tempa%
+ \expandafter\def\expandafter\cref@poorman@text\expandafter{%
+ \crefrangepreconjunction}%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter{\@address}{\string\crefrangepreconjunction}}%
+ \expandafter\cref@writescript\@tempa%
+ \expandafter\def\expandafter\cref@poorman@text\expandafter{%
+ \crefrangepostconjunction}%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter{\@address}{\string\crefrangepostconjunction}}%
+ \expandafter\cref@writescript\@tempa%
+ \expandafter\def\expandafter\cref@poorman@text\expandafter{%
+ \crefpairconjunction}%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter{\@address}{\string\crefpairconjunction}}%
+ \expandafter\cref@writescript\@tempa%
+ \expandafter\def\expandafter\cref@poorman@text\expandafter{%
+ \crefmiddleconjunction}%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter{\@address}{\string\crefmiddleconjunction}}%
+ \expandafter\cref@writescript\@tempa%
+ \expandafter\def\expandafter\cref@poorman@text\expandafter{%
+ \creflastconjunction}%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter{\@address}{\string\creflastconjunction}}%
+ \expandafter\cref@writescript\@tempa%
+ \expandafter\def\expandafter\cref@poorman@text\expandafter{%
+ \crefpairgroupconjunction}%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter{\@address}{\string\crefpairgroupconjunction}}%
+ \expandafter\cref@writescript\@tempa%
+ \expandafter\def\expandafter\cref@poorman@text\expandafter{%
+ \crefmiddlegroupconjunction}%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter{\@address}{\string\crefmiddlegroupconjunction}}%
+ \expandafter\cref@writescript\@tempa%
+ \expandafter\def\expandafter\cref@poorman@text\expandafter{%
+ \creflastgroupconjunction}%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter{\@address}{\string\creflastgroupconjunction}}%
+ \expandafter\cref@writescript\@tempa%
+% \end{macrocode}
+% We write substitution rules for all component-derived cross-reference
+% formats, as listed in \cmd{\cref@label@types}.
+% \begin{macrocode}
+ \let\@tempstack\cref@label@types%
+ \cref@isstackfull{\@tempstack}%
+ \@whilesw\if@cref@stackfull\fi{%
+% \end{macrocode}
+% \cmd{\cref@\meta{type}@name} substitution rules.
+% \begin{macrocode}
+ \edef\@tempa{\cref@stack@top{\@tempstack}}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\cref@poorman@text%
+ \expandafter\expandafter\expandafter{%
+ \csname cref@\@tempa @name\endcsname}%
+ \edef\@tempa{%
+ \string\cref@\expandafter\noexpand\@tempa @name\space}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@address\expandafter}%
+ \expandafter{\@tempa}}%
+ \expandafter\cref@writescript\@tempa%
+% \end{macrocode}
+% \cmd{\cref@\meta{type}@name@plural} substitution rules.
+% \begin{macrocode}
+ \edef\@tempa{\cref@stack@top{\@tempstack}}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\cref@poorman@text%
+ \expandafter\expandafter\expandafter{%
+ \csname cref@\@tempa @name@plural\endcsname}%
+ \edef\@tempa{%
+ \string\cref@\expandafter\noexpand\@tempa%
+ @name@plural\space}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@address\expandafter}%
+ \expandafter{\@tempa}}%
+ \expandafter\cref@writescript\@tempa%
+% \end{macrocode}
+% \cmd{\Cref@\meta{type}@name} substitution rules.
+% \begin{macrocode}
+ \edef\@tempa{\cref@stack@top{\@tempstack}}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\cref@poorman@text%
+ \expandafter\expandafter\expandafter{%
+ \csname Cref@\@tempa @name\endcsname}%
+ \edef\@tempa{%
+ \string\Cref@\expandafter\noexpand\@tempa @name\space}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter%
+ {\expandafter\@address\expandafter}%
+ \expandafter{\@tempa}}%
+ \expandafter\cref@writescript\@tempa%
+% \end{macrocode}
+% \cmd{\Cref@\meta{type}@name@plural} substitution rules.
+% \begin{macrocode}
+ \edef\@tempa{\cref@stack@top{\@tempstack}}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\cref@poorman@text%
+ \expandafter\expandafter\expandafter{%
+ \csname Cref@\@tempa @name@plural\endcsname}%
+ \edef\@tempa{%
+ \string\Cref@\expandafter\noexpand\@tempa%
+ @name@plural\space}%
+ \expandafter\expandafter\expandafter\def%
+ \expandafter\expandafter\expandafter\@tempa%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter%
+ {\expandafter\@address\expandafter}%
+ \expandafter{\@tempa}}%
+ \expandafter\cref@writescript\@tempa%
+% \end{macrocode}
+% After the loop over cross-reference types, we set
+% \cmd{\cref@inputlineno} to the current input-file line, in preparation
+% for the next language block.
+% \begin{macrocode}
+ \cref@stack@pop{\@tempstack}%
+ \cref@isstackfull{\@tempstack}}%
+ \endgroup%
+ \edef\cref@inputlineno{\the\inputlineno}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% After processing the document body, we re-read in the temporary script
+% file, and write it out again to the final |sed| script file, escaping
+% regexp special characters in the process. The escaping is carried out
+% by turning the regexp special characters into active characters, and
+% defining them to expand to their escaped form. This involves a lot of
+% juggling of catcodes and lccodes!
+%
+% Both \cmd{\DeclareOption} and \cmd{\AtEndDocument} store their
+% arguments in token lists, so all the following \TeX{} code is already
+% tokenised long before it is expanded and evaluated. Thus there is no
+% (easy) way to change the catcodes of the characters appearing here
+% before they are tokenised. In one way this is convenient: the catcode
+% changes we make don't ``take'' until evaluated, so we can continue to
+% use the standard \TeX{} characters (\textbackslash, \{, \} etc.) even
+% after the lines containing the catcode commands. But in another, more
+% significant, way, it is very inconvenient: it makes it difficult to
+% define the regexp special characters as active characters, since it's
+% impossible to directly create tokens with the correct char- and
+% catcodes.
+%
+% We get around this by creating the unusual charcode/catcode
+% combinations using the \cmd{\lowercase} trick (\cmd{\lowercase} changes
+% the charcodes of all characters in its argument to their lccodes, but
+% \emph{leaves their catcodes alone}). That way, the argument of
+% \cmd{\AtEndDocument} is tokenised correctly, and when it comes to be
+% expanded and evaluated, the \cmd{\lowercase} commands create tokens
+% with the correct char- and catcodes.
+% \begin{macrocode}
+ \AtEndDocument{%
+ \immediate\closeout\@crefscript%
+ \newread\@crefscript%
+ \immediate\openin\@crefscript=\jobname.sed%
+ \begingroup%
+ \newif\if@not@eof%
+ \def\@eof{\par }%
+% \end{macrocode}
+% Change catcodes of regexp special characters to make them active
+% characters and define them to expand to their escaped forms. Change
+% those of \TeX{} special characters to make them normal letters.
+% \begin{macrocode}
+ \catcode`.=13 \catcode`*=13%
+ \catcode`[=13 \catcode`]=13%
+ \catcode`^=13 \catcode`$=13 %$
+ \catcode`\=0 \catcode`<=1 \catcode`>=2%
+ \catcode`\\=13 \catcode`\{=12 \catcode`\}=12 \catcode`_=12%
+ \lccode`/=92%
+ \lccode`~=92\lowercase{\def~{\string/\string/}}%
+ \lccode`~=42\lowercase{\def~{\string/\string*}}%
+ \lccode`~=46\lowercase{\def~{\string/\string.}}%
+ \lccode`~=91\lowercase{\def~{\string/\string[}}%
+ \lccode`~=93\lowercase{\def~{\string/\string]}}%
+ \lccode`~=94\lowercase{\def~{\string/\string^}}%
+ \lccode`~=36\lowercase{\def~{\string/\string$}}% $
+ \lccode`~=0 \lccode`/=0 \catcode`~=12%
+% \end{macrocode}
+% Read lines from the temporary script file, expand them to escape regexp
+% special characters, and store them in \cmd{\cref@poorman@text}.
+% \begin{macrocode}
+ \def\cref@poorman@text{}%
+ \immediate\read\@crefscript to \@tempa%
+ \ifx\@tempa\@eof%
+ \@not@eoffalse%
+ \else%
+ \@not@eoftrue%
+ \edef\@tempa{\@tempa}%
+ \fi%
+ \@whilesw\if@not@eof\fi{%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \immediate\read\@crefscript to \@tempa%
+ \ifx\@tempa\@eof%
+ \@not@eoffalse%
+ \else%
+ \@not@eoftrue%
+ \edef\@tempa{\@tempa}%
+ \fi}%
+ \endgroup%
+ \immediate\closein\@crefscript%
+% \end{macrocode}
+% Add some rules to remove other \package{cleveref} commands. We use the
+% \cmd{\lowercase} trick again for writing the \textbackslash, \{ and \}
+% characters. (This could be done in other ways, but since we're in
+% \cmd{\lowercase} mood, why not stick with it.)
+% \begin{macrocode}
+ \begingroup%
+ \lccode`|=92 \lccode`<=123 \lccode`>=125 \lccode`C=67%
+ \lowercase{\def\@tempa{%[|
+ s/||label|[[^]]*|]/||label/g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||usepackage|(|[.*|]|)|<0,1|><cleveref>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||[cC]refformat<.*><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||[cC]refrangeformat<.*><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||[cC]refmultiformat<.*><.*><.*><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{%
+ s/||[cC]refrangemultiformat<.*><.*><.*><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||[cC]refname<.*><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||[cC]reflabelformat<.*><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||[cC]refrangelabelformat<.*><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||[cC]refdefaultlabelformat<.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{%
+ s/||renewcommand<||crefpairconjunction><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{%
+ s/||renewcommand<||crefpairgroupconjunction><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{%
+ s/||renewcommand<||crefmiddleconjunction><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{%
+ s/||renewcommand<||crefmiddlegroupconjunction><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{%
+ s/||renewcommand<||creflastconjunction><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{%
+ s/||renewcommand<||creflastgroupconjunction><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||renewcommand<||[cC]ref><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \lowercase{\edef\@tempa{s/||renewcommand<||[cC]refrange><.*>//g}}%
+ \expandafter\g@addto@macro\expandafter%
+ \cref@poorman@text\expandafter{\@tempa^^J}%
+ \endgroup%
+% \end{macrocode}
+% Overwrite the script file with the new, escaped regexp rules.
+% \begin{macrocode}
+ \newwrite\@crefscript%
+ \immediate\openout\@crefscript=\jobname.sed%
+ \immediate\write\@crefscript{\cref@poorman@text}%
+ \immediate\closeout\@crefscript%
+ }% end of \AtEndDocument
+% \end{macrocode}
+%
+%
+% \begin{macro}{\cref@writescript}
+% The \cmd{\cref@writescript} utility macro does the actual writing of
+% the substitution rule to the script. The first argument is the
+% ``address'', the second argument is the regexp pattern to match,
+% whilst the substitution text is whatever is currently stored in
+% \cmd{\cref@poorman@text}.
+% \begin{macrocode}
+ \def\cref@getmeaning#1{\expandafter\@cref@getmeaning\meaning#1\@nil}%
+ \def\@cref@getmeaning#1->#2\@nil{#2}%
+ \def\cref@writescript#1#2{%
+ \edef\@tempa{\cref@getmeaning{\cref@poorman@text}}%
+ \immediate\write\@crefscript{#1 s/#2/\@tempa/g}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\cref}
+% \begin{macro}{\Cref}
+% \begin{macro}{\crefrange}
+% \begin{macro}{\Crefrange}
+% \begin{macro}{\@crefstar}
+% \begin{macro}{\@crefnostar}
+% \begin{macro}{\@crefrangestar}
+% \begin{macro}{\@crefrangenostar}
+% To make use of all the \option{poorman} infrastructure defined above,
+% we must redefine the \package{cleveref} referencing commands
+% themselves. There are two parts to this: at the very top layer of the
+% cross-referencing macro stack, we redefine the user-level commands to
+% first initialise |\cref@poorman@text| to the empty string, then
+% typeset the reference as usual, and finally write a substitution
+% rule to the |sed| script containing whatever has been accumulated in
+% |\cref@poorman@text|. At the very lowest layer of the macro stack, we
+% redefine the macros that actually typeset the various parts of the
+% references to additionally add a copy of whatever they typeset to
+% |\cref@poorman@text|.
+%
+% We first redefine the user-level referencing commands so that they
+% write a substitution rule for the reference to the script, as well as
+% typesetting the reference itself. Most of the redefinitions differ
+% slightly depending on whether \package{hyperref} is loaded.
+% \begin{macrocode}
+ \if@cref@hyperrefloaded\relax% hyperref loaded
+ \def\@crefnostar#1#2{%
+ \gdef\cref@poorman@text{}%
+ \@cref{#1}{#2}%
+% \end{macrocode}
+% We use a temporary \cmd{\@tempa} macro here, which makes use of the
+% fact that the first character of \#1 is ``c'' for lower-case and ``C''
+% for upper-case in these commands, in order to write out the correct
+% capitalisation in the substitution.
+%
+% FIXME: We only resort to this because |\string\#1| doesn't work. But
+% there \emph{must} be a better way to get a backslash character into the
+% token stream, obviating the need for the ugly \cmd{\@tempa} macro.
+% \begin{macrocode}
+ \def\@tempa##1##2\@nil{%
+ \if##1c%
+ \cref@writescript{}{\string\cref\string{#2\string}}%
+ \else%
+ \cref@writescript{}{\string\Cref\string{#2\string}}%
+ \fi}%
+ \@tempa#1\@nil}%
+ \def\@crefstar#1#2{%
+ \gdef\cref@poorman@text{}%
+ \@crefstarredtrue\@cref{#1}{#2}\@crefstarredfalse%
+ \def\@tempa##1##2\@nil{%
+ \if##1c%
+ \cref@writescript{}{\string\cref*\string{#2\string}}%
+ \else%
+ \cref@writescript{}{\string\Cref*\string{#2\string}}%
+ \fi}%
+ \@tempa#1\@nil}%
+ \def\@crefrangenostar#1#2#3{%
+ \gdef\cref@poorman@text{}%
+ \@@setcrefrange{#2}{#3}{#1}{}%
+ \def\@tempa##1##2\@nil{%
+ \if##1c%
+ \cref@writescript{}{%
+ \string\crefrange\string{#2\string}\string{#3\string}}%
+ \else%
+ \cref@writescript{}{%
+ \strinsg\Crefrange\string{#2\string}\string{#3\string}}%
+ \fi}%
+ \@tempa#1\@nil}%
+ \def\@crefrangestar#1#2#3{%
+ \gdef\cref@poorman@text{}%
+ \@crefstarredtrue\@@setcrefrange{#2}{#3}{#1}{}\@crefstarredfalse%
+ \def\@tempa##1##2\@nil{%
+ \if##1c%
+ \cref@writescript{}{%
+ \string\crefrange*\string{#2\string}\string{#3\string}}%
+ \else%
+ \cref@writescript{}{%
+ \string\Crefrange*\string{#2\string}\string{#3\string}}%
+ \fi}%
+ \@tempa#1\@nil}%
+ \def\@cpagerefrangenostar#1#2#3{%
+ \gdef\cref@poorman@text{}%
+ \@@setcpagerefrange{#2}{#3}{#1}{}%
+ \def\@tempa##1##2\@nil{%
+ \if##1c%
+ \cref@writescript{}{%
+ \string\cpagerefrange\string{#2\string}\string{#3\string}}%
+ \else%
+ \cref@writescript{}{%
+ \string\Cpagerefrange\string{#2\string}\string{#3\string}}%
+ \fi}%
+ \@tempa#1\@nil}%
+ \def\@cpagerefrangestar#1#2#3{%
+ \gdef\cref@poorman@text{}%
+ \@crefstarredtrue%
+ \@@setcpagerefrange{#2}{#3}{#1}{}%
+ \@crefstarredfalse%
+ \def\@tempa##1##2\@nil{%
+ \if##1c%
+ \cref@writescript{}{%
+ \string\cpagerefrange*\string{#2\string}\string{#3\string}}%
+ \else%
+ \cref@writescript{}{%
+ \string\Cpagerefrange*\string{#2\string}\string{#3\string}}%
+ \fi}%
+ \@tempa#1\@nil}%
+ \def\@labelcrefnostar#1{%
+ \gdef\cref@poorman@text{}%
+ \@cref{labelcref}{#1}%
+ \cref@writescript{}{\string\labelcref\string{#1\string}}}%
+ \def\@labelcrefstar#1{%
+ \gdef\cref@poorman@text{}%
+ \@crefstarredtrue%
+ \@cref{labelcref}{#1}%
+ \@crefstarredfalse%
+ \cref@writescript{}{\string\labelcref*\string{#1\string}}}%
+ \def\@labelcpagerefnostar#1{%
+ \gdef\cref@poorman@text{}%
+ \@cref{labelcpageref}{#1}%
+ \cref@writescript{}{\string\labelcpageref\string{#1\string}}}%
+ \def\@labelcpagerefstar#1{%
+ \gdef\cref@poorman@text{}%
+ \@crefstarredtrue%
+ \@cref{labelcpageref}{#1}%
+ \@crefstarredfalse%
+ \cref@writescript{}{\string\labelcpageref*\string{#1\string}}}%
+%
+ \else% hyperref not loaded
+ \DeclareRobustCommand{\cref}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@cref{cref}{#1}%
+ \cref@writescript{}{\string\cref\string{#1\string}}}%
+ \DeclareRobustCommand{\Cref}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@cref{Cref}{#1}%
+ \cref@writescript{}{\string\Cref\string{#1\string}}}%
+ \DeclareRobustCommand{\crefrange}[2]{%
+ \gdef\cref@poorman@text{}%
+ \@@setcrefrange{#1}{#2}{cref}{}%
+ \cref@writescript{}{%
+ \string\crefrange\string{#1\string}\string{#2\string}}}%
+ \DeclareRobustCommand{\Crefrange}[2]{%
+ \gdef\cref@poorman@text{}%
+ \@@setcrefrange{#1}{#2}{Cref}{}%
+ \cref@writescript{}{%
+ \string\Crefrange\string{#1\string}\string{#2\string}}}%
+ \DeclareRobustCommand{\cpageref}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@cref{cpageref}{#1}%
+ \cref@writescript{}{\string\cpageref\string{#1\string}}}%
+ \DeclareRobustCommand{\Cpageref}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@cref{Cpageref}{#1}%
+ \cref@writescript{}{\string\Cpageref\string{#1\string}}}%
+ \DeclareRobustCommand{\cpagerefrange}[2]{%
+ \gdef\cref@poorman@text{}%
+ \@@setcpagerefrange{#1}{#2}{cref}{}%
+ \cref@writescript{}{%
+ \string\cpagerefrange\string{#1\string}\string{#2\string}}}%
+ \DeclareRobustCommand{\Cpagerefrange}[2]{%
+ \gdef\cref@poorman@text{}%
+ \@@setcpagerefrange{#1}{#2}{Cref}{}%
+ \cref@writescript{}{%
+ \string\Cpagerefrange\string{#1\string}\string{#2\string}}}%
+ \DeclareRobustCommand{\labelcref}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@cref{labelcref}{#1}%
+ \cref@writescript{}{\string\labelcref\string{#1\string}}}%
+ \DeclareRobustCommand{\labelcpageref}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@cref{labelcpageref}{#1}%
+ \cref@writescript{}{\string\labelcpageref\string{#1\string}}}%
+ \fi% end of test for hyperref
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\namecref}
+% \begin{macro}{\nameCref}
+% \begin{macro}{\lcnamecref}
+% \begin{macro}{\namecrefs}
+% \begin{macro}{\nameCrefs}
+% \begin{macro}{\lcnamecrefs}
+% The \cmd{\namecref} et al.\ commands don't do anything different when
+% \package{hyperref} is loaded, so we don't need to test for
+% \package{hyperref} when redefining them.
+% \begin{macrocode}
+ \DeclareRobustCommand{\namecref}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@setnamecref{cref}{#1}{}{}%
+ \cref@writescript{}{\string\namecref\string{#1\string}}}%
+ \DeclareRobustCommand{\nameCref}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@setnamecref{Cref}{#1}{}{}%
+ \cref@writescript{}{\string\nameCref\string{#1\string}}}%
+ \DeclareRobustCommand{\lcnamecref}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@setnamecref{Cref}{#1}{}{\MakeLowercase}%
+ \cref@writescript{}{\string\lcnamecref\string{#1\string}}}%
+ \DeclareRobustCommand{\namecrefs}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@setnamecref{cref}{#1}{@plural}{}%
+ \cref@writescript{}{\string\namecrefs\string{#1\string}}}%
+ \DeclareRobustCommand{\nameCrefs}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@setnamecref{Cref}{#1}{@plural}{}%
+ \cref@writescript{}{\string\nameCrefs\string{#1\string}}}%
+ \DeclareRobustCommand{\lcnamecrefs}[1]{%
+ \gdef\cref@poorman@text{}%
+ \@setnamecref{Cref}{#1}{@plural}{\MakeLowercase}%
+ \cref@writescript{}{\string\lcnamecrefs\string{#1\string}}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\@setcref@pairgroupconjunction}
+% \begin{macro}{\@setcref@middlegroupconjunction}
+% \begin{macro}{\@setcref@lastgroupconjunction}
+% Redefine \cmd{\@@@setcref}, \cmd{\@@@setcrefrange},
+% \cmd{\@@@setcpageref} and\linebreak[4] \cmd{\@@@setcpagerefrange}, as
+% well as the conjunction macros\linebreak[4]
+% \cmd{\@setcref@middlegroupconjunction},
+% \cmd{\@setcref@lastgroupconjunction} and
+% \cmd{\@setcref@pairgroupconjunction}, to append text they typeset
+% to\linebreak[4] the \cmd{\cref@poorman@text} macro, as well as
+% actually doing the typesetting.
+% \begin{macrocode}
+ \def\@setcref@pairgroupconjunction{%
+ \crefpairgroupconjunction%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{\crefpairgroupconjunction}}%
+ \def\@setcref@middlegroupconjunction{%
+ \crefmiddlegroupconjunction%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{\crefmiddlegroupconjunction}}%
+ \def\@setcref@lastgroupconjunction{%
+ \creflastgroupconjunction%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{\creflastgroupconjunction}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@@@setcref}
+% \begin{macro}{\@@@setcrefrange}
+% \begin{macro}{\@@@setcpageref}
+% \begin{macro}{\@@@setcpagerefrange}
+% The necessary redefinitions of most of the cross-referencing commands
+% differ slightly depending on whether \package{hyperref} is loaded or
+% not.
+% \begin{macrocode}
+ \let\old@@@setcref\@@@setcref%
+ \let\old@@@setcrefrange\@@@setcrefrange%
+ \let\old@@@setcpageref\@@@setcpageref%
+ \let\old@@@setcpagerefrange\@@@setcpagerefrange%
+ \if@cref@hyperrefloaded\relax% hyperref loaded
+ \def\@@@setcref#1#2{%
+ \old@@@setcref{#1}{#2}%
+ \if@crefstarred%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{#1{\ref*{#2}}{}{}}%
+ \else%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{#1{\ref{#2}}{}{}}%
+ \fi}%
+ \def\@@@setcrefrange#1#2#3{%
+ \old@@@setcrefrange{#1}{#2}{#3}%
+ \if@crefstarred%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{#1{\ref*{#2}}{\ref*{#3}}{}{}{}{}}%
+ \else%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{#1{\ref{#2}}{\ref{#3}}{}{}{}{}}%
+ \fi}%
+ \def\@@@setcpageref#1#2{%
+ \old@@@setcpageref{#1}{#2}%
+ \if@crefstarred%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{#1{\pageref*{#2}}{}{}}%
+ \else%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{#1{\pageref{#2}}{}{}}%
+ \fi}%
+ \def\@@@setcpagerefrange#1#2#3{%
+ \old@@@setcpagerefrange{#1}{#2}{#3}%
+ \if@crefstarred%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{#1{\pageref*{#2}}{\pageref*{#3}}{}{}{}{}}%
+ \else%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{#1{\pageref{#2}}{\pageref{#3}}{}{}{}{}}%
+ \fi}%
+%
+ \else% hyperref not loaded
+ \def\@@@setcref#1#2{%
+ \old@@@setcref{#1}{#2}%
+ \expandafter\g@addto@macro\expandafter{%
+ \expandafter\cref@poorman@text\expandafter}%
+ \expandafter{#1{\ref{#2}}{}{}}}%
+ \def\@@@setcrefrange#1#2#3{%
+ \old@@@setcrefrange{#1}{#2}{#3}%
+ \expandafter\g@addto@macro%
+ \expandafter{\expandafter\cref@poorman@text\expandafter}%
+ \expandafter{#1{\ref{#2}}{\ref{#3}}{}{}{}{}}}%
+ \def\@@@setcpageref#1#2{%
+ \old@@@setcpageref{#1}{#2}%
+ \expandafter\g@addto@macro\expandafter{%
+ \expandafter\cref@poorman@text\expandafter}%
+ \expandafter{#1{\pageref{#2}}{}{}}}%
+ \def\@@@setcpagerefrange#1#2#3{%
+ \old@@@setcpagerefrange{#1}{#2}{#3}%
+ \expandafter\g@addto@macro%
+ \expandafter{\expandafter\cref@poorman@text\expandafter}%
+ \expandafter{#1{\pageref{#2}}{\pageref{#3}}{}{}{}{}}}%
+ \fi% end of hyperref test
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@@@setnamecref}
+% The \cmd{\namecref} et al.\ commands don't do anything different when
+% \package{hyperref} is loaded, so we don't need to test for
+% \package{hyperref} when redefining \cmd{\@@@setnamecref}.
+% \begin{macrocode}
+ \let\old@@@setnamecref\@@@setnamecref%
+ \def\@@@setnamecref#1#2{%
+ \old@@@setnamecref{#1}{#2}%
+ \expandafter\def\expandafter\@tempa\expandafter{#1}%
+ \def\@tempb{#2}%
+ \expandafter\expandafter\expandafter\g@addto@macro%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\cref@poorman@text%
+ \expandafter\expandafter\expandafter}%
+ \expandafter\expandafter\expandafter{\expandafter\@tempb\@tempa}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{varioref}
+% If \package{varioref} is loaded, do the same for the
+% \package{varioref} commands.
+% \begin{macrocode}
+ \@ifpackageloaded{varioref}{%
+ \AtBeginDocument{%
+% \end{macrocode}
+%
+% \begin{macro}{\@@vpageref}
+% We redefine \cmd{\@@vpageref} to make it write a substitution rule to
+% the script, as well as typesetting the page reference.
+% \begin{macrocode}
+ \def\@@vpageref#1[#2]#3{%
+ \gdef\cref@poorman@text{}%
+ \cref@@vpageref{#1}[#2]{#3}%
+ \cref@writescript{}{\string\vpageref\string{#3\string}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@vref}
+% \cmd{\cref@vref} is similarly redefined to write a substitution rule.
+% \begin{macrocode}
+ \let\old@cref@vref\cref@vref%
+ \def\cref@vref#1#2{%
+ \gdef\cref@poorman@text{}%
+ \old@cref@vref{#1}{#2}%
+ \def\@tempa##1##2\@nil{%
+ \if##1c%
+ \if@crefstarred%
+ \cref@writescript{}{\string\vref*\string{#2\string}}%
+ \else%
+ \cref@writescript{}{\string\vref\string{#2\string}}%
+ \fi%
+ \else%
+ \if@crefstarred%
+ \cref@writescript{}{\string\Vref*\string{#2\string}}%
+ \else%
+ \cref@writescript{}{\string\Vref\string{#2\string}}%
+ \fi%
+ \fi}%
+ \@tempa#1\@nil}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@fullref}
+% \begin{macro}{\cref@vrefrange}
+% \cmd{\cref@fullref} and \cmd{\cref@vrefrange} are also redefined so
+% that they write substitution rules. Strictly speaking, the starred
+% variants of \cmd{\fullref} and \cmd{\vrefrange} are not defined when
+% \package{hyperref} isn't loaded, so we could avoid checking for them
+% in that case. However, the redundant check does no harm, and avoids
+% some code duplication.
+% \begin{macrocode}
+ \let\old@cref@fullref\cref@fullref%
+ \def\cref@fullref#1#2{%
+ \gdef\cref@poorman@text{}%
+ \old@cref@fullref{#1}{#2}%
+ \def\@tempa##1##2\@nil{%
+ \if##1c%
+ \if@crefstarred%
+ \cref@writescript{}{\string\fullref*\string{#2\string}}%
+ \else%
+ \cref@writescript{}{\string\fullref\string{#2\string}}%
+ \fi%
+ \else%
+ \if@crefstarred%
+ \cref@writescript{}{\string\Fullref*\string{#2\string}}%
+ \else%
+ \cref@writescript{}{\string\Fullref\string{#2\string}}%
+ \fi%
+ \fi}%
+ \@tempa#1\@nil}%
+%
+ \let\old@cref@vrefrange\cref@vrefrange%
+ \def\cref@vrefrange#1#2#3{%
+ \gdef\cref@poorman@text{}%
+ \old@cref@vrefrange{#1}{#2}{#3}%
+ \def\@tempa##1##2\@nil{%
+ \if##1c%
+ \if@crefstarred%
+ \cref@writescript{}{%
+ \string\vrefrange*\string{#2\string}\string{#3\string}}%
+ \else%
+ \cref@writescript{}{%
+ \string\vrefrange\string{#2\string}\string{#3\string}}%
+ \fi%
+ \else%
+ \if@crefstarred%
+ \cref@writescript{}{%
+ \string\Vrefrange*\string{#2\string}\string{#3\string}}%
+ \else%
+ \cref@writescript{}{%
+ \string\Vrefrange\string{#2\string}\string{#3\string}}%
+ \fi%
+ \fi}%
+ \@tempa#1\@nil}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@@setvpageref}
+% \begin{macro}{\@@@setvpagerefrange}
+% In order to get the appropriate substitution for \package{varioref}
+% commands appended to \cmd{\cref@poorman@text}, we have to redefine
+% \cmd{\@@@setvpageref} and\linebreak[4] \cmd{\@@@setvpagerefrange},
+% which perform the final typesetting of \package{varioref} page
+% references, so that they append an appropriate substitution for the
+% page reference they're typesetting.
+% \begin{macrocode}
+ \def\@@@setvpageref#1[#2]#3{%
+ \cref@old@@vpageref{#1}[#2]{#3}%
+ \g@addto@macro\cref@poorman@text{\vpageref{#3}}}%
+ \def\@@@setvpagerefrange[#1]#2#3{%
+ \vpagerefrange[#1]{#2}{#3}%
+ \g@addto@macro\cref@poorman@text{\vpagerefrange{#2}{#3}}}%
+ \def\@@@setfullpageref#1{%
+ \reftextfaraway{#1}%
+ \g@addto@macro\cref@poorman@text{\reftextfaraway{#1}}}%
+ \def\@@@setfullpagerefrange#1#2{%
+ \reftextpagerange{#1}{#2}%
+ \g@addto@macro\cref@poorman@text{\reftextpagerange{#1}{#2}}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@setcref@space}
+% \begin{macro}{\@setcref@pairconjunction}
+% \begin{macro}{\@setcref@middleconjunction}
+% \begin{macro}{\@setcref@lastconjunction}
+% Finally, we make sure the conjunctions also get appended to
+% the\linebreak[4] \cmd{\cref@poorman@text} substitution.
+% \begin{macrocode}
+ \def\@setcref@space{ % space here is deliberate
+ \g@addto@macro\cref@poorman@text{ }}%
+ \def\@setcref@pairconjunction{%
+ \crefpairconjunction%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{\crefpairconjunction}}%
+ \def\@setcref@middleconjunction{%
+ \crefmiddleconjunction%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{\crefmiddleconjunction}}%
+ \def\@setcref@lastconjunction{%
+ \creflastconjunction%
+ \expandafter\g@addto@macro\expandafter\cref@poorman@text%
+ \expandafter{\creflastconjunction}}%
+ }% end of \AtBeginDocument
+ }{}% end of \@ifpackageloaded{varioref}
+}% end of poorman option
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Sort and Compress Options}
+% \begin{macro}{sort}
+% \begin{macro}{compress}
+% \begin{macro}{nosort}
+% \begin{macro}{\if@cref@sort}
+% \begin{macro}{\if@cref@compress}
+% The \option{sort}, \option{compress} or \option{nosort} options
+% determine whether to sort and/or compress lists of multiple
+% references (default is to do both). They work simply by setting the
+% |\if@cref@sort| and |\if@cref@compress| flags appropriately.
+% \begin{macrocode}
+\newif\if@cref@sort%
+\newif\if@cref@compress%
+% \end{macrocode}
+% Default is to both sort and compress references.
+% \begin{macrocode}
+\@cref@sorttrue%
+\@cref@compresstrue%
+% \end{macrocode}
+% Options override default.
+% \begin{macrocode}
+\DeclareOption{sort}{%
+ \PackageInfo{cleveref}{sorting but not compressing references}%
+ \@cref@sorttrue%
+ \@cref@compressfalse}%
+\DeclareOption{compress}{%
+ \PackageInfo{cleveref}{compressing but not sorting references}%
+ \@cref@sortfalse%
+ \@cref@compresstrue}%
+\DeclareOption{sort&compress}{%
+ \PackageInfo{cleveref}{sorting and compressing references}%
+ \@cref@sorttrue%
+ \@cref@compresstrue}%
+\DeclareOption{nosort}{%
+ \PackageInfo{cleveref}{neither sorting nor compressing references}%
+ \@cref@sortfalse%
+ \@cref@compressfalse}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Capitalise Option}
+% \begin{macro}{capitalise}
+% \begin{macro}{\if@cref@capitalise}
+% The \option{capitalise} option causes \package{cleveref} to always
+% use the |\Cref|* variants for typesetting cross-references, so that
+% cross-reference names are always capitalised.
+% \begin{macrocode}
+\newif\if@cref@capitalise%
+% \end{macrocode}
+% Disabled by default.
+% \begin{macrocode}
+\@cref@capitalisefalse%
+% \end{macrocode}
+% Option overrides default.
+% \begin{macrocode}
+\DeclareOption{capitalise}{%
+ \PackageInfo{cleveref}{always capitalise cross-reference names}%
+ \@cref@capitalisetrue}%
+\DeclareOption{capitalize}{%
+ \PackageInfo{cleveref}{always capitalise cross-reference names}%
+ \@cref@capitalisetrue}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Nameinlink Option}
+% \begin{macro}{nameinlink}
+% \begin{macro}{\if@cref@nameinlink}
+% The \option{nameinlink} option causes \package{cleveref} to include
+% the cross-reference name as part of the hyperlink target when the
+% \package{hyperref} package is used.
+% \begin{macrocode}
+\newif\if@cref@nameinlink%
+% \end{macrocode}
+% Disabled by default.
+% \begin{macrocode}
+\@cref@nameinlinkfalse%
+% \end{macrocode}
+% Option overrides default.
+% \begin{macrocode}
+\DeclareOption{nameinlink}{%
+ \PackageInfo{cleveref}{include cross-reference names in hyperlinks}%
+ \@cref@nameinlinktrue}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Noabbrev Option}
+% \begin{macro}{noabbrev}
+% \begin{macro}{\if@cref@abbrev}
+% The \option{noabbrev} option causes \package{cleveref} to always use
+% the full cross-reference names, instead of abbreviating some of the
+% more common names in the middle of sentences.
+% \begin{macrocode}
+\newif\if@cref@abbrev%
+% \end{macrocode}
+% Enabled by default.
+% \begin{macrocode}
+\@cref@abbrevtrue%
+% \end{macrocode}
+% Option overrides default.
+% \begin{macrocode}
+\DeclareOption{noabbrev}{%
+ \PackageInfo{cleveref}{no abbreviation of names}%
+ \@cref@abbrevfalse}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Language and \package{babel} Support}
+% \label{sec:code:babel}
+% Default reference formats for different languages are supported via
+% package options, in the usual way.
+%
+% Any contributions of translations for missing languages are most
+% welcome! If you can contribute definitions for a missing language,
+% ideally you should add them below the existing ones (using those as a
+% model), generate a patch against the original \package{cleveref.dtx}
+% file, and send the patch by email to the package author. However, if
+% you don't know how to produce a patch, you can instead just send the
+% translations as a plain text file.
+%
+%
+% \begin{macro}{\cref@addto}
+% Utility macro to use instead of \package{babel}'s flawed \cmd{\addto}
+% (copied and modified from \package{varioref}).
+% \begin{macrocode}
+\def\cref@addto#1#2{%
+ \@temptokena{#2}%
+ \ifx#1\undefined%
+ \edef#1{\the\@temptokena}%
+ \else%
+ \toks@\expandafter{#1}%
+ \edef#1{\the\toks@\the\@temptokena}%
+ \fi%
+ \@temptokena{}\toks@\@temptokena}%
+\@onlypreamble\cref@addto%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cref@addlanguagedefs}
+% Utility macro to add code to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language}, depending on whether \package{babel}
+% or \package{polyglossia} are loaded.
+% \begin{macrocode}
+\long\def\cref@addlanguagedefs#1#2{%
+ \@ifpackageloaded{polyglossia}%
+ {\AtBeginDocument{%
+ \ifcsdef{#1@loaded}{%
+ \expandafter\cref@addto\csname captions#1\endcsname{#2}}{}}}%
+ {\@ifpackageloaded{babel}{%
+ \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+ \@expandtwoargs\in@{,#1,}{,\@classoptionslist,\@curroptions,}%
+ \ifin@%
+ \AtBeginDocument{%
+ \expandafter\cref@addto\csname extras#1\endcsname{#2}}%
+ \fi}{}}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Passing a language option to \package{cleveref} defines the
+% cross-reference names and conjunctions as appropriate for that
+% language. We can't make the definitions straight away, since they would
+% prevent the automatic definition of the other capitalisation variant
+% from working if the user chooses to change a default definition in the
+% preamble, so we postpone them until the beginning of the document.
+% However, if each language option were to simply define any formats that
+% aren't already defined by the end of the preamble, the \emph{first}
+% language option would override all the others. Unfortunately, the
+% convention in \LaTeX{} and \package{babel} is for the \emph{last}
+% language option to take precedence. So we instead use the
+% \cmd{\crefname@preamble} command to save the definitions in
+% |\cref@|\meta{type}|@name@preamble| etc., and after all the language
+% options have been processed, use the contents of these to set the
+% default definitions for any undefined formats.
+%
+% For \package{babel} support, we add the appropriate redefinitions to
+% the\linebreak[4] |\extras|\meta{language} macro, which is called by
+% \package{babel}'s \cmd{\selectlanguage} et al.\ commands. The main
+% language (the last one listed in the options) is set up by an automatic
+% call to \cmd{\selectlanguage} at the beginning of the document, which
+% would clobber any redefinitions made by the user in the preamble. To
+% avoid this, we postpone adding the redefinitions to
+% |\extras|\meta{language} until the beginning of the document. Since
+% \package{cleveref} must always be loaded \emph{after} \package{babel},
+% the redefinitions won't be added to |\extras|\meta{language} until
+% \emph{after} \package{babel} has already called \cmd{\selectlanguage}
+% for the main language. Thus the redefinitions will only be in effect
+% when \cmd{\selectlanguage} is called explicitly within the
+% document. (The definitions for the main language are taken care of by
+% the language options passed to \package{cleveref}, independently of
+% \package{babel}.)
+%
+% Note that we define both capitalisation variants explicitly throughout,
+% rather than relying on the automatic definition of the other variant,
+% in order to make the code produced by the poor man's |sed| script
+% slightly cleaner.
+%
+%
+% \subsubsection{English}
+% \begin{macro}{english}
+% English definitions (these are used by default).
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{english}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ to\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ and\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ and\nobreakspace}%
+% \end{macrocode}
+% We have to define the group conjunctions explicitly here, rather than
+% relying on fall-back definitions in terms of the above conjunctions
+% (see \cref{sec:code:default_formats}), in case any other language
+% option defines them explicitly and we need to override those.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ and\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{, and\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Equation}{Equations}%
+ \Crefname@preamble{figure}{Figure}{Figures}%
+ \Crefname@preamble{table}{Table}{Tables}%
+ \Crefname@preamble{page}{Page}{Pages}%
+ \Crefname@preamble{part}{Part}{Parts}%
+ \Crefname@preamble{chapter}{Chapter}{Chapters}%
+ \Crefname@preamble{section}{Section}{Sections}%
+ \Crefname@preamble{appendix}{Appendix}{Appendices}%
+ \Crefname@preamble{enumi}{Item}{Items}%
+ \Crefname@preamble{footnote}{Footnote}{Footnotes}%
+ \Crefname@preamble{theorem}{Theorem}{Theorems}%
+ \Crefname@preamble{lemma}{Lemma}{Lemmas}%
+ \Crefname@preamble{corollary}{Corollary}{Corollaries}%
+ \Crefname@preamble{proposition}{Proposition}{Propositions}%
+ \Crefname@preamble{definition}{Definition}{Definitions}%
+ \Crefname@preamble{result}{Result}{Results}%
+ \Crefname@preamble{example}{Example}{Examples}%
+ \Crefname@preamble{remark}{Remark}{Remarks}%
+ \Crefname@preamble{note}{Note}{Notes}%
+ \Crefname@preamble{algorithm}{Algorithm}{Algorithms}%
+ \Crefname@preamble{listing}{Listing}{Listings}%
+ \Crefname@preamble{line}{Line}{Lines}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{Eq.}{Eqs.}%
+ \crefname@preamble{figure}{Fig.}{Figs.}%
+ \else%
+ \crefname@preamble{equation}{Equation}{Equations}%
+ \crefname@preamble{figure}{Figure}{Figures}%
+ \fi%
+ \crefname@preamble{page}{Page}{Pages}%
+ \crefname@preamble{table}{Table}{Tables}%
+ \crefname@preamble{part}{Part}{Parts}%
+ \crefname@preamble{chapter}{Chapter}{Chapters}%
+ \crefname@preamble{section}{Section}{Sections}%
+ \crefname@preamble{appendix}{Appendix}{Appendices}%
+ \crefname@preamble{enumi}{Item}{Items}%
+ \crefname@preamble{footnote}{Footnote}{Footnotes}%
+ \crefname@preamble{theorem}{Theorem}{Theorems}%
+ \crefname@preamble{lemma}{Lemma}{Lemmas}%
+ \crefname@preamble{corollary}{Corollary}{Corollaries}%
+ \crefname@preamble{proposition}{Proposition}{Propositions}%
+ \crefname@preamble{definition}{Definition}{Definitions}%
+ \crefname@preamble{result}{Result}{Results}%
+ \crefname@preamble{example}{Example}{Examples}%
+ \crefname@preamble{remark}{Remark}{Remarks}%
+ \crefname@preamble{note}{Note}{Notes}%
+ \crefname@preamble{algorithm}{Algorithm}{Algorithms}%
+ \crefname@preamble{listing}{Listing}{Listings}%
+ \crefname@preamble{line}{Line}{Lines}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{eq.}{eqs.}%
+ \crefname@preamble{figure}{fig.}{figs.}%
+ \else%
+ \crefname@preamble{equation}{equation}{equations}%
+ \crefname@preamble{figure}{figure}{figures}%
+ \fi%
+ \crefname@preamble{page}{page}{pages}%
+ \crefname@preamble{table}{table}{tables}%
+ \crefname@preamble{part}{part}{parts}%
+ \crefname@preamble{chapter}{chapter}{chapters}%
+ \crefname@preamble{section}{section}{sections}%
+ \crefname@preamble{appendix}{appendix}{appendices}%
+ \crefname@preamble{enumi}{item}{items}%
+ \crefname@preamble{footnote}{footnote}{footnotes}%
+ \crefname@preamble{theorem}{theorem}{theorems}%
+ \crefname@preamble{lemma}{lemma}{lemmas}%
+ \crefname@preamble{corollary}{corollary}{corollaries}%
+ \crefname@preamble{proposition}{proposition}{propositions}%
+ \crefname@preamble{definition}{definition}{definitions}%
+ \crefname@preamble{result}{result}{results}%
+ \crefname@preamble{example}{example}{examples}%
+ \crefname@preamble{remark}{remark}{remarks}%
+ \crefname@preamble{note}{note}{notes}%
+ \crefname@preamble{algorithm}{algorithm}{algorithms}%
+ \crefname@preamble{listing}{listing}{listings}%
+ \crefname@preamble{line}{line}{lines}%
+ \fi%
+ \def\cref@language{english}%
+ }}% end \AtBeginDocument and \DeclareOption
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{english}{%
+ \PackageInfo{cleveref}{loaded `english' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ to\nobreakspace}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ and\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ and\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ and\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{, and\nobreakspace}%
+ %
+ \Crefname{equation}{Equation}{Equations}%
+ \Crefname{figure}{Figure}{Figures}%
+ \Crefname{subfigure}{Figure}{Figures}%
+ \Crefname{table}{Table}{Tables}%
+ \Crefname{subtable}{Table}{Tables}%
+ \Crefname{page}{Page}{Pages}%
+ \Crefname{part}{Part}{Parts}%
+ \Crefname{chapter}{Chapter}{Chapters}%
+ \Crefname{section}{Section}{Sections}%
+ \Crefname{subsection}{Section}{Sections}%
+ \Crefname{subsubsection}{Section}{Sections}%
+ \Crefname{appendix}{Appendix}{Appendices}%
+ \Crefname{subappendix}{Appendix}{Appendices}%
+ \Crefname{subsubappendix}{Appendix}{Appendices}%
+ \Crefname{subsubsubappendix}{Appendix}{Appendices}%
+ \Crefname{enumi}{Item}{Items}%
+ \Crefname{enumii}{Item}{Items}%
+ \Crefname{enumiii}{Item}{Items}%
+ \Crefname{enumiv}{Item}{Items}%
+ \Crefname{enumv}{Item}{Items}%
+ \Crefname{footnote}{Footnote}{Footnotes}%
+ \Crefname{theorem}{Theorem}{Theorems}%
+ \Crefname{lemma}{Lemma}{Lemmas}%
+ \Crefname{corollary}{Corollary}{Corollaries}%
+ \Crefname{proposition}{Proposition}{Propositions}%
+ \Crefname{definition}{Definition}{Definitions}%
+ \Crefname{result}{Result}{Results}%
+ \Crefname{example}{Example}{Examples}%
+ \Crefname{remark}{Remark}{Remarks}%
+ \Crefname{note}{Note}{Notes}%
+ \Crefname{algorithm}{Algorithm}{Algorithms}%
+ \Crefname{listing}{Listing}{Listings}%
+ \Crefname{line}{Line}{Lines}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname{equation}{Eq.}{Eqs.}%
+ \crefname{figure}{Fig.}{Figs.}%
+ \crefname{subfigure}{Fig.}{Figs.}%
+ \else%
+ \crefname{equation}{Equation}{Equations}%
+ \crefname{figure}{Figure}{Figures}%
+ \crefname{subfigure}{Figure}{Figures}%
+ \fi%
+ \crefname{page}{Page}{Pages}%
+ \crefname{table}{Table}{Tables}%
+ \crefname{subtable}{Table}{Tables}%
+ \crefname{part}{Part}{Parts}%
+ \crefname{chapter}{Chapter}{Chapters}%
+ \crefname{section}{Section}{Sections}%
+ \crefname{subsection}{Section}{Sections}%
+ \crefname{subsubsection}{Section}{Sections}%
+ \crefname{appendix}{Appendix}{Appendices}%
+ \crefname{subappendix}{Appendix}{Appendices}%
+ \crefname{subsubappendix}{Appendix}{Appendices}%
+ \crefname{subsubsubappendix}{Appendix}{Appendices}%
+ \crefname{enumi}{Item}{Items}%
+ \crefname{enumii}{Item}{Items}%
+ \crefname{enumiii}{Item}{Items}%
+ \crefname{enumiv}{Item}{Items}%
+ \crefname{enumv}{Item}{Items}%
+ \crefname{footnote}{Footnote}{Footnotes}%
+ \crefname{theorem}{Theorem}{Theorems}%
+ \crefname{lemma}{Lemma}{Lemmas}%
+ \crefname{corollary}{Corollary}{Corollaries}%
+ \crefname{proposition}{Proposition}{Propositions}%
+ \crefname{definition}{Definition}{Definitions}%
+ \crefname{result}{Result}{Results}%
+ \crefname{example}{Example}{Examples}%
+ \crefname{remark}{Remark}{Remarks}%
+ \crefname{note}{Note}{Notes}%
+ \crefname{algorithm}{Algorithm}{Algorithms}%
+ \crefname{listing}{Listing}{Listings}%
+ \crefname{line}{Line}{Lines}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname{equation}{eq.}{eqs.}%
+ \crefname{figure}{fig.}{figs.}%
+ \crefname{subfigure}{fig.}{figs.}%
+ \else%
+ \crefname{equation}{equation}{equations}%
+ \crefname{figure}{figure}{figures}%
+ \crefname{subfigure}{figure}{figures}%
+ \fi%
+ \crefname{table}{table}{tables}%
+ \crefname{subtable}{table}{tables}%
+ \crefname{page}{page}{pages}%
+ \crefname{part}{part}{parts}%
+ \crefname{chapter}{chapter}{chapters}%
+ \crefname{section}{section}{sections}%
+ \crefname{subsection}{section}{sections}%
+ \crefname{subsubsection}{section}{sections}%
+ \crefname{appendix}{appendix}{appendices}%
+ \crefname{subappendix}{appendix}{appendices}%
+ \crefname{subsubappendix}{appendix}{appendices}%
+ \crefname{subsubsubappendix}{appendix}{appendices}%
+ \crefname{enumi}{item}{items}%
+ \crefname{enumii}{item}{items}%
+ \crefname{enumiii}{item}{items}%
+ \crefname{enumiv}{item}{items}%
+ \crefname{enumv}{item}{items}%
+ \crefname{footnote}{footnote}{footnotes}%
+ \crefname{theorem}{theorem}{theorems}%
+ \crefname{lemma}{lemma}{lemmas}%
+ \crefname{corollary}{corollary}{corollaries}%
+ \crefname{proposition}{proposition}{propositions}%
+ \crefname{definition}{definition}{definitions}%
+ \crefname{result}{result}{results}%
+ \crefname{example}{example}{examples}%
+ \crefname{remark}{remark}{remarks}%
+ \crefname{note}{note}{notes}%
+ \crefname{algorithm}{algorithm}{algorithms}%
+ \crefname{listing}{listing}{listings}%
+ \crefname{line}{line}{lines}%
+ \fi}% end \cref@addlangagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{German}
+% \begin{macro}{german}
+% German translations kindly provided by Stefan Pinnow, abbreviations
+% by Natanael Arndt, and a few additions by the package author (so you
+% know to blame the latter for any errors!).
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{german}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ bis\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ und\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ und\nobreakspace}%
+% \end{macrocode}
+% We don't want the extra comma before ``und'' that would be added by the
+% default fall-back definitions in terms of the above conjunctions, so we
+% define \cmd{\crefpairgroupconjunction} explicitly. In fact, we have to
+% define the other group conjunctions explicitly too here, in case any
+% other language option defines them explicitly and we need to override
+% them.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ und\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{ und\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Gleichung}{Gleichungen}%
+ \Crefname@preamble{figure}{Abbildung}{Abbildungen}%
+ \Crefname@preamble{table}{Tabelle}{Tabellen}%
+ \Crefname@preamble{page}{Seite}{Seiten}%
+ \Crefname@preamble{part}{Teil}{Teile}%
+ \Crefname@preamble{chapter}{Kapitel}{Kapitel}%
+ \Crefname@preamble{section}{Abschnitt}{Abschnitte}%
+ \Crefname@preamble{appendix}{Anhang}{Anh\"ange}%
+ \Crefname@preamble{enumi}{Punkt}{Punkte}%
+ \Crefname@preamble{footnote}{Fu\ss note}{Fu\ss noten}%
+ \Crefname@preamble{theorem}{Theorem}{Theoreme}%
+ \Crefname@preamble{lemma}{Lemma}{Lemmata}%
+ \Crefname@preamble{corollary}{Korollar}{Korollare}%
+ \Crefname@preamble{proposition}{Satz}{S\"atze}%
+ \Crefname@preamble{definition}{Definition}{Definitionen}%
+ \Crefname@preamble{result}{Ergebnis}{Ergebnisse}%
+ \Crefname@preamble{example}{Beispiel}{Beispiele}%
+ \Crefname@preamble{remark}{Bemerkung}{Bemerkungen}%
+ \Crefname@preamble{note}{Anmerkung}{Anmerkungen}%
+ \Crefname@preamble{algorithm}{Algorithmus}{Algorithmen}%
+ \Crefname@preamble{listing}{Listing}{Listings}%
+ \Crefname@preamble{line}{Zeile}{Zeilen}%
+ %
+ \if@cref@abbrev%
+ \crefname@preamble{figure}{Abb.}{Abb.}%
+ \else%
+ \crefname@preamble{figure}{Abbildung}{Abbildungen}%
+ \fi%
+ \crefname@preamble{equation}{Gleichung}{Gleichungen}%
+ \crefname@preamble{table}{Tabelle}{Tabellen}%
+ \crefname@preamble{page}{Seite}{Seiten}%
+ \crefname@preamble{part}{Teil}{Teile}%
+ \crefname@preamble{chapter}{Kapitel}{Kapitel}%
+ \crefname@preamble{section}{Abschnitt}{Abschnitte}%
+ \crefname@preamble{appendix}{Anhang}{Anh\"ange}%
+ \crefname@preamble{enumi}{Punkt}{Punkte}%
+ \crefname@preamble{footnote}{Fu\ss note}{Fu\ss noten}%
+ \crefname@preamble{theorem}{Theorem}{Theoreme}%
+ \crefname@preamble{lemma}{Lemma}{Lemmata}%
+ \crefname@preamble{corollary}{Korollar}{Korollare}%
+ \crefname@preamble{proposition}{Satz}{S\"atze}%
+ \crefname@preamble{definition}{Definition}{Definitionen}%
+ \crefname@preamble{result}{Ergebnis}{Ergebnisse}%
+ \crefname@preamble{example}{Beispiel}{Beispiele}%
+ \crefname@preamble{remark}{Bemerkung}{Bemerkungen}%
+ \crefname@preamble{note}{Anmerkung}{Anmerkungen}%
+ \crefname@preamble{algorithm}{Algorithmus}{Algorithmen}%
+ \crefname@preamble{listing}{Listing}{Listings}%
+ \crefname@preamble{line}{Zeile}{Zeilen}%
+ \def\cref@language{german}%
+ }}% end \AtBeginDocument and \DeclareOption
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{german}{%
+ \PackageInfo{cleveref}{loaded `german language definitions}%
+ \renewcommand{\crefrangeconjunction}{ bis\nobreakspace}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ und\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ und\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ und\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ und\nobreakspace}%
+ %
+ \Crefname{equation}{Gleichung}{Gleichungen}%
+ \Crefname{figure}{Abbildung}{Abbildungen}%
+ \Crefname{subfigure}{Abbildung}{Abbildungen}%
+ \Crefname{table}{Tabelle}{Tabellen}%
+ \Crefname{subtable}{Tabelle}{Tabellen}%
+ \Crefname{page}{Seite}{Seiten}%
+ \Crefname{part}{Teil}{Teile}%
+ \Crefname{chapter}{Kapitel}{Kapitel}%
+ \Crefname{section}{Abschnitt}{Abschnitte}%
+ \Crefname{subsection}{Abschnitt}{Abschnitte}%
+ \Crefname{subsubsection}{Abschnitt}{Abschnitte}%
+ \Crefname{appendix}{Anhang}{Anh\"ange}%
+ \Crefname{subappendix}{Anhang}{Anh\"ange}%
+ \Crefname{subsubappendix}{Anhang}{Anh\"ange}%
+ \Crefname{subsubsubappendix}{Anhang}{Anh\"ange}%
+ \Crefname{enumi}{Punkt}{Punkte}%
+ \Crefname{enumii}{Punkt}{Punkte}%
+ \Crefname{enumiii}{Punkt}{Punkte}%
+ \Crefname{enumiv}{Punkt}{Punkte}%
+ \Crefname{enumv}{Punkt}{Punkte}%
+ \Crefname{footnote}{Fu\ss note}{Fu\ss noten}%
+ \Crefname{theorem}{Theorem}{Theoreme}%
+ \Crefname{lemma}{Lemma}{Lemmata}%
+ \Crefname{corollary}{Korollar}{Korollare}%
+ \Crefname{proposition}{Satz}{S\"atze}%
+ \Crefname{definition}{Definition}{Definitionen}%
+ \Crefname{result}{Ergebnis}{Ergebnisse}%
+ \Crefname{example}{Beispiel}{Beispiele}%
+ \Crefname{remark}{Bemerkung}{Bemerkungen}%
+ \Crefname{note}{Anmerkung}{Anmerkungen}%
+ \Crefname{algorithm}{Algorithmus}{Algorithmen}%
+ \Crefname{listing}{Listing}{Listings}%
+ \Crefname{line}{Zeile}{Zeilen}%
+ %
+ \if@cref@abbrev%
+ \crefname{figure}{Abb.}{Abb.}%
+ \crefname{subfigure}{Abb.}{Abb.}%
+ \else%
+ \crefname{figure}{Abbildung}{Abbildungen}%
+ \crefname{subfigure}{Abbildung}{Abbildungen}%
+ \fi%
+ \crefname{equation}{Gleichung}{Gleichungen}%
+ \crefname{table}{Tabelle}{Tabellen}%
+ \crefname{subtable}{Tabelle}{Tabellen}%
+ \crefname{page}{Seite}{Seiten}%
+ \crefname{part}{Teil}{Teile}%
+ \crefname{chapter}{Kapitel}{Kapitel}%
+ \crefname{section}{Abschnitt}{Abschnitte}%
+ \crefname{subsection}{Abschnitt}{Abschnitte}%
+ \crefname{subsubsection}{Abschnitt}{Abschnitte}%
+ \crefname{appendix}{Anhang}{Anh\"ange}%
+ \crefname{subappendix}{Anhang}{Anh\"ange}%
+ \crefname{subsubappendix}{Anhang}{Anh\"ange}%
+ \crefname{subsubsubappendix}{Anhang}{Anh\"ange}%
+ \crefname{enumi}{Punkt}{Punkte}%
+ \crefname{enumii}{Punkt}{Punkte}%
+ \crefname{enumiii}{Punkt}{Punkte}%
+ \crefname{enumiv}{Punkt}{Punkte}%
+ \crefname{enumv}{Punkt}{Punkte}%
+ \crefname{footnote}{Fu\ss note}{Fu\ss noten}%
+ \crefname{theorem}{Theorem}{Theoreme}%
+ \crefname{lemma}{Lemma}{Lemmata}%
+ \crefname{corollary}{Korollar}{Korollare}%
+ \crefname{proposition}{Satz}{S\"atze}%
+ \crefname{definition}{Definition}{Definitionen}%
+ \crefname{result}{Ergebnis}{Ergebnisse}%
+ \crefname{example}{Beispiel}{Beispiele}%
+ \crefname{remark}{Bemerkung}{Bemerkungen}%
+ \crefname{note}{Anmerkung}{Anmerkungen}%
+ \crefname{algorithm}{Algorithmus}{Algorithmen}%
+ \crefname{listing}{Listing}{Listings}%
+ \crefname{line}{Zeile}{Zeilen}}% end \cref@addlangagedefs
+% \end{macrocode}
+%
+%
+% \begin{macro}{ngerman}
+% It so happens that none of the cross-reference names differ in the
+% ``Neuerechtschreibung'', so we make \option{ngerman} execute
+% \option{german}.
+% \end{macro}
+% \begin{macrocode}
+\DeclareOption{ngerman}{%
+ \ExecuteOptions{german}%
+ \def\cref@language{ngerman}}%
+% \end{macrocode}
+% However, we still need to add the definitions to \cmd{\extrasngerman}
+% (note the ``n'') so that \cmd{\selectlanguage} etc.\ will work.
+% \begin{macrocode}
+\cref@addlanguagedefs{ngerman}{%
+ \PackageInfo{cleveref}{loaded `ngerman' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ bis\nobreakspace}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ und\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ und\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ und\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ und\nobreakspace}%
+ %
+ \Crefname{equation}{Gleichung}{Gleichungen}%
+ \Crefname{figure}{Abbildung}{Abbildungen}%
+ \Crefname{subfigure}{Abbildung}{Abbildungen}%
+ \Crefname{table}{Tabelle}{Tabellen}%
+ \Crefname{subtable}{Tabelle}{Tabellen}%
+ \Crefname{page}{Seite}{Seiten}%
+ \Crefname{part}{Teil}{Teile}%
+ \Crefname{chapter}{Kapitel}{Kapitel}%
+ \Crefname{section}{Abschnitt}{Abschnitte}%
+ \Crefname{subsection}{Abschnitt}{Abschnitte}%
+ \Crefname{subsubsection}{Abschnitt}{Abschnitte}%
+ \Crefname{appendix}{Anhang}{Anh\"ange}%
+ \Crefname{subappendix}{Anhang}{Anh\"ange}%
+ \Crefname{subsubappendix}{Anhang}{Anh\"ange}%
+ \Crefname{subsubsubappendix}{Anhang}{Anh\"ange}%
+ \Crefname{enumi}{Punkt}{Punkte}%
+ \Crefname{enumii}{Punkt}{Punkte}%
+ \Crefname{enumiii}{Punkt}{Punkte}%
+ \Crefname{enumiv}{Punkt}{Punkte}%
+ \Crefname{enumv}{Punkt}{Punkte}%
+ \Crefname{footnote}{Fu\ss note}{Fu\ss noten}%
+ \Crefname{theorem}{Theorem}{Theoreme}%
+ \Crefname{lemma}{Lemma}{Lemmata}%
+ \Crefname{corollary}{Korollar}{Korollare}%
+ \Crefname{proposition}{Satz}{S\"atze}%
+ \Crefname{definition}{Definition}{Definitionen}%
+ \Crefname{result}{Ergebnis}{Ergebnisse}%
+ \Crefname{example}{Beispiel}{Beispiele}%
+ \Crefname{remark}{Bemerkung}{Bemerkungen}%
+ \Crefname{note}{Anmerkung}{Anmerkungen}%
+ \Crefname{algorithm}{Algorithmus}{Algorithmen}%
+ \Crefname{listing}{Listing}{Listings}%
+ \Crefname{line}{Zeile}{Zeilen}%
+ %
+ \if@cref@abbrev%
+ \crefname{figure}{Abb.}{Abb.}%
+ \crefname{subfigure}{Abb.}{Abb.}%
+ \else%
+ \crefname{figure}{Abbildung}{Abbildungen}%
+ \crefname{subfigure}{Abbildung}{Abbildungen}%
+ \fi%
+ \crefname{equation}{Gleichung}{Gleichungen}%
+ \crefname{table}{Tabelle}{Tabellen}%
+ \crefname{subtable}{Tabelle}{Tabellen}%
+ \crefname{page}{Seite}{Seiten}%
+ \crefname{part}{Teil}{Teile}%
+ \crefname{chapter}{Kapitel}{Kapitel}%
+ \crefname{section}{Abschnitt}{Abschnitte}%
+ \crefname{subsection}{Abschnitt}{Abschnitte}%
+ \crefname{subsubsection}{Abschnitt}{Abschnitte}%
+ \crefname{appendix}{Anhang}{Anh\"ange}%
+ \crefname{subappendix}{Anhang}{Anh\"ange}%
+ \crefname{subsubappendix}{Anhang}{Anh\"ange}%
+ \crefname{subsubsubappendix}{Anhang}{Anh\"ange}%
+ \crefname{enumi}{Punkt}{Punkte}%
+ \crefname{enumii}{Punkt}{Punkte}%
+ \crefname{enumiii}{Punkt}{Punkte}%
+ \crefname{enumiv}{Punkt}{Punkte}%
+ \crefname{enumv}{Punkt}{Punkte}%
+ \crefname{footnote}{Fu\ss note}{Fu\ss noten}%
+ \crefname{theorem}{Theorem}{Theoreme}%
+ \crefname{lemma}{Lemma}{Lemmata}%
+ \crefname{corollary}{Korollar}{Korollare}%
+ \crefname{proposition}{Satz}{S\"atze}%
+ \crefname{definition}{Definition}{Definitionen}%
+ \crefname{result}{Ergebnis}{Ergebnisse}%
+ \crefname{example}{Beispiel}{Beispiele}%
+ \crefname{remark}{Bemerkung}{Bemerkungen}%
+ \crefname{note}{Anmerkung}{Anmerkungen}%
+ \crefname{algorithm}{Algorithmus}{Algorithmen}%
+ \crefname{listing}{Listing}{Listings}%
+ \crefname{line}{Zeile}{Zeilen}}% end \cref@addlangagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Dutch}
+% \begin{macro}{dutch}
+% Dutch translations kindly contributed by Philip H\"olzenspies and Tom Marcoen.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{dutch}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ tot\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ en\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ en\nobreakspace}%
+% \end{macrocode}
+% As in German, we don't want the extra comma before ``en'' that would be
+% added by the default fall-back definitions in terms of the above
+% conjunctions, so we define \cmd{\crefpairgroupconjunction} explicitly.
+% In fact, we have to define the other group conjunctions explicitly too
+% here, in case any other language option defines them explicitly and we
+% need to override them.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ en\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{ en\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Vergel\ij{}king}{Vergel\ij{}kingen}%
+ \Crefname@preamble{figure}{Figuur}{Figuren}%
+ \Crefname@preamble{table}{Tabel}{Tabellen}%
+ \Crefname@preamble{page}{Pagina}{Pagina's}%
+ \Crefname@preamble{part}{Deel}{Delen}%
+ \Crefname@preamble{chapter}{Hoofdstuk}{Hoofdstukken}%
+ \Crefname@preamble{section}{Paragraaf}{Paragrafen}%
+ \Crefname@preamble{appendix}{Appendix}{Appendices}%
+ \Crefname@preamble{enumi}{Punt}{Punten}%
+ \Crefname@preamble{footnote}{Voetnoot}{Voetnoten}%
+ \Crefname@preamble{lemma}{Lemma}{Lemma's}%
+ \Crefname@preamble{corollary}{Corollarium}{Corollaria}%
+ \Crefname@preamble{proposition}{Bewering}{Beweringen}%
+ \Crefname@preamble{definition}{Definitie}{Definities}%
+ \Crefname@preamble{result}{Resultaat}{Resultaten}%
+ \Crefname@preamble{example}{Voorbeeld}{Voorbeelden}%
+ \Crefname@preamble{remark}{Opmerking}{Opmerkingen}%
+ \Crefname@preamble{note}{Aantekening}{Aantekeningen}%
+ \Crefname@preamble{algorithm}{Algoritme}{Algoritmen}%
+ \Crefname@preamble{listing}{Listing}{Listings}%
+ \Crefname@preamble{line}{Lijn}{Lijnen}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{Verg.}{Verg.'s}%
+ \crefname@preamble{figure}{Fig.}{Fig.'s}%
+ \else%
+ \crefname@preamble{equation}{Vergel\ij{}king}{Vergel\ij{}kingen}%
+ \crefname@preamble{figure}{Figuur}{Figuren}%
+ \fi%
+ \crefname@preamble{page}{Pagina}{Pagina's}%
+ \crefname@preamble{table}{Tabel}{Tabellen}%
+ \crefname@preamble{part}{Deel}{Delen}%
+ \crefname@preamble{chapter}{Hoofdstuk}{Hoofdstukken}%
+ \crefname@preamble{section}{Paragraaf}{Paragrafen}%
+ \crefname@preamble{appendix}{Appendix}{Appendices}%
+ \crefname@preamble{enumi}{Punt}{Punten}%
+ \crefname@preamble{footnote}{Voetnoot}{Voetnoten}%
+ \crefname@preamble{theorem}{Theorema}{Theorema's}%
+ \crefname@preamble{lemma}{Lemma}{Lemma's}%
+ \crefname@preamble{corollary}{Corollarium}{Corollaria}%
+ \crefname@preamble{proposition}{Bewering}{Beweringen}%
+ \crefname@preamble{definition}{Definitie}{Definities}%
+ \crefname@preamble{result}{Resultaat}{Resultaten}%
+ \crefname@preamble{example}{Voorbeeld}{Voorbeelden}%
+ \crefname@preamble{remark}{Opmerking}{Opmerkingen}%
+ \crefname@preamble{note}{Aantekening}{Aantekeningen}%
+ \crefname@preamble{algorithm}{Algoritme}{Algoritmen}%
+ \crefname@preamble{listing}{Listing}{Listings}%
+ \crefname@preamble{line}{Lijn}{Lijnen}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{verg.}{verg.'s}%
+ \crefname@preamble{figure}{fig.}{fig.'s}%
+ \else%
+ \crefname@preamble{equation}{vergel\ij{}king}{vergel\ij{}kingen}%
+ \crefname@preamble{figure}{figuur}{figuren}%
+ \fi%
+ \crefname@preamble{page}{pagina}{pagina's}%
+ \crefname@preamble{table}{tabel}{tabellen}%
+ \crefname@preamble{part}{deel}{delen}%
+ \crefname@preamble{chapter}{hoofdstuk}{hoofdstukken}%
+ \crefname@preamble{section}{paragraaf}{paragrafen}%
+ \crefname@preamble{appendix}{appendix}{appendices}%
+ \crefname@preamble{enumi}{punt}{punten}%
+ \crefname@preamble{footnote}{voetnoot}{voetnoten}%
+ \crefname@preamble{theorem}{theorema}{theorema's}%
+ \crefname@preamble{lemma}{lemma}{lemma's}%
+ \crefname@preamble{corollary}{corollarium}{corollaria}%
+ \crefname@preamble{proposition}{bewering}{beweringen}%
+ \crefname@preamble{definition}{definitie}{definities}%
+ \crefname@preamble{result}{resultaat}{resultaten}%
+ \crefname@preamble{example}{voorbeeld}{voorbeelden}%
+ \crefname@preamble{remark}{opmerking}{opmerkingen}%
+ \crefname@preamble{note}{aantekening}{aantekeningen}%
+ \crefname@preamble{algorithm}{algoritme}{algoritmen}%
+ \crefname@preamble{listing}{listing}{listings}%
+ \crefname@preamble{line}{lijn}{lijnen}%
+ \fi%
+ \def\cref@language{dutch}%
+ }}% end \DeclareOption and \AtBeginDocument
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{dutch}{%
+ \PackageInfo{cleveref}{loaded `dutch' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ tot\nobreakspace}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ en\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ en\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ en\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ en\nobreakspace}%
+ %
+ \Crefname{equation}{Vergel\ij{}king}{Vergel\ij{}kingen}%
+ \Crefname{figure}{Figuur}{Figuren}%
+ \Crefname{subfigure}{Figuur}{Figuren}%
+ \Crefname{table}{Tabel}{Tabellen}%
+ \Crefname{subtable}{Tabel}{Tabellen}%
+ \Crefname{page}{Pagina}{Pagina's}%
+ \Crefname{part}{Deel}{Delen}%
+ \Crefname{chapter}{Hoofdstuk}{Hoofdstuken}%
+ \Crefname{section}{Paragraaf}{Paragrafen}%
+ \Crefname{subsection}{Paragraaf}{Paragrafen}%
+ \Crefname{subsubsection}{Paragraaf}{Paragrafen}%
+ \Crefname{appendix}{Appendix}{Appendices}%
+ \Crefname{subappendix}{Appendix}{Appendices}%
+ \Crefname{subsubappendix}{Appendix}{Appendices}%
+ \Crefname{subsubsubappendix}{Appendix}{Appendices}%
+ \Crefname{enumi}{Punt}{Punten}%
+ \Crefname{enumii}{Punt}{Punten}%
+ \Crefname{enumiii}{Punt}{Punten}%
+ \Crefname{enumiv}{Punt}{Punten}%
+ \Crefname{enumv}{Punt}{Punten}%
+ \Crefname{footnote}{Voetnote}{Voetnoten}%
+ \Crefname{theorem}{Theorema}{Theorema's}%
+ \Crefname{lemma}{Lemma}{Lemma's}%
+ \Crefname{corollary}{Corollarium}{Corollaria}%
+ \Crefname{proposition}{Bewering}{Beweringen}%
+ \Crefname{definition}{Definitie}{Definities}%
+ \Crefname{result}{Resultaat}{Resultaten}%
+ \Crefname{example}{Voorbeeld}{Voorbeelden}%
+ \Crefname{remark}{Opmerking}{Opmerkingen}%
+ \Crefname{note}{Aantekening}{Aantekeningen}%
+ \Crefname{algorithm}{Algoritme}{Algoritmen}%
+ \Crefname{listing}{Listing}{Listings}%
+ \Crefname{line}{Lijn}{Lijnen}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname{equation}{Verg.}{Verg's.}%
+ \crefname{figure}{Fig.}{Fig's.}%
+ \crefname{subfigure}{Fig.}{Fig's.}%
+ \else%
+ \crefname{equation}{Vergel\ij{}king}{Vergel\ij{}kingen}%
+ \crefname{figure}{Figuur}{Figuren}%
+ \crefname{subfigure}{Figuur}{Figuren}%
+ \fi%
+ \crefname{table}{Tabel}{Tabellen}%
+ \crefname{subtable}{Tabel}{Tabellen}%
+ \crefname{page}{Pagina}{Pagina's}%
+ \crefname{part}{Deel}{Delen}%
+ \crefname{chapter}{Hoofdstuk}{Hoofdstukken}%
+ \crefname{section}{Paragraaf}{Paragrafen}%
+ \crefname{appendix}{Appendix}{Appendices}%
+ \crefname{enumi}{Punt}{Punten}%
+ \crefname{footnote}{Voetnote}{Voetnoten}%
+ \crefname{theorem}{Theorema}{Theorema's}%
+ \crefname{lemma}{Lemma}{Lemma's}%
+ \crefname{corollary}{Corollarium}{Corollaria}%
+ \crefname{proposition}{Bewering}{Beweringen}%
+ \crefname{definition}{Definitie}{Definities}%
+ \crefname{result}{Resultaat}{Resultaten}%
+ \crefname{example}{Voorbeeld}{Voorbeelden}%
+ \crefname{remark}{Opmerking}{Opmerkingen}%
+ \crefname{note}{Aantekening}{Aantekeningen}%
+ \crefname{algorithm}{Algoritme}{Algoritmen}%
+ \crefname{listing}{Listing}{Listings}%
+ \crefname{line}{Lijn}{Lijnen}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname{equation}{verg.}{verg's.}%
+ \crefname{figure}{fig.}{fig's.}%
+ \crefname{subfigure}{fig.}{fig's.}%
+ \else%
+ \crefname{equation}{vergel\ij{}king}{vergel\ij{}kingen}%
+ \crefname{figure}{figuur}{figuren}%
+ \crefname{subfigure}{figuur}{figuren}%
+ \fi%
+ \crefname{table}{tabel}{tabellen}%
+ \crefname{subtable}{tabel}{tabellen}%
+ \crefname{page}{pagina}{pagina's}%
+ \crefname{part}{deel}{delen}%
+ \crefname{chapter}{hoofdstuk}{hoofdstukken}%
+ \crefname{section}{paragraaf}{paragrafen}%
+ \crefname{appendix}{appendix}{appendices}%
+ \crefname{enumi}{punt}{punten}%
+ \crefname{footnote}{voetnote}{voetnoten}%
+ \crefname{theorem}{theorema}{theorema's}%
+ \crefname{lemma}{lemma}{lemma's}%
+ \crefname{corollary}{corollarium}{corollaria}%
+ \crefname{proposition}{bewering}{beweringen}%
+ \crefname{definition}{definitie}{definities}%
+ \crefname{result}{resultaat}{resultaten}%
+ \crefname{example}{voorbeeld}{voorbeelden}%
+ \crefname{remark}{opmerking}{opmerkingen}%
+ \crefname{note}{aantekening}{aantekeningen}%
+ \crefname{algorithm}{algoritme}{algoritmen}%
+ \crefname{listing}{listing}{listings}%
+ \crefname{line}{lijn}{lijnen}%
+ \fi}% end \cref@addlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{French}
+% \begin{macro}{french}
+% French translations attempted by the package author (please report
+% any corrections that might be needed!).
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{french}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ \`a\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ et\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ et\nobreakspace}%
+% \end{macrocode}
+% Erring on the side of caution, I've left off the extra comma before
+% ``et'' between groups, pending more knowledgeable input on punctuation
+% rules from a native French speaker.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ et\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{, et\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{{\'E}quation}{{\'E}quations}%
+ \Crefname@preamble{figure}{Figure}{Figures}%
+ \Crefname@preamble{table}{Tableau}{Tableaux}%
+ \Crefname@preamble{page}{Page}{Pages}%
+ \Crefname@preamble{part}{Partie}{Parties}%
+ \Crefname@preamble{chapter}{Chapitre}{Chapitres}%
+ \Crefname@preamble{section}{Section}{Sections}%
+ \Crefname@preamble{appendix}{Annexe}{Annexes}%
+ \Crefname@preamble{enumi}{Point}{Points}%
+ \Crefname@preamble{footnote}{Note}{Notes}%
+ \Crefname@preamble{theorem}{Th\'eor\`eme}{Th\'eor\`emes}%
+ \Crefname@preamble{lemma}{Lemme}{Lemmes}%
+ \Crefname@preamble{corollary}{Corollaire}{Corollaires}%
+ \Crefname@preamble{proposition}{Proposition}{Propositions}%
+ \Crefname@preamble{definition}{D\'efinition}{D\'efinitions}%
+ \Crefname@preamble{result}{R\'esultat}{R\'esultats}%
+ \Crefname@preamble{example}{Exemple}{Exemples}%
+ \Crefname@preamble{remark}{Remarque}{Remarques}%
+ \Crefname@preamble{algorithm}{Algorithme}{Algorithmes}%
+ \Crefname@preamble{listing}{Liste}{Listes}%
+ \Crefname@preamble{line}{Ligne}{Lignes}%
+ %
+ \if@cref@capitalise% capitalise set
+ \crefname@preamble{equation}{{\'E}quation}{{\'E}quations}%
+ \crefname@preamble{figure}{Figure}{Figures}%
+ \crefname@preamble{table}{Tableau}{Tableaux}%
+ \crefname@preamble{page}{Page}{Pages}%
+ \crefname@preamble{part}{Partie}{Parties}%
+ \crefname@preamble{chapter}{Chapitre}{Chapitres}%
+ \crefname@preamble{section}{Section}{Sections}%
+ \crefname@preamble{appendix}{Annexe}{Annexes}%
+ \crefname@preamble{enumi}{Point}{Points}%
+ \crefname@preamble{footnote}{Note}{Notes}%
+ \crefname@preamble{theorem}{Th\'eor\`eme}{Th\'eor\`emes}%
+ \crefname@preamble{lemma}{Lemme}{Lemmes}%
+ \crefname@preamble{corollary}{Corollaire}{Corollaires}%
+ \crefname@preamble{proposition}{Proposition}{Propositions}%
+ \crefname@preamble{definition}{D\'efinition}{D\'efinitions}%
+ \crefname@preamble{result}{R\'esultat}{R\'esultats}%
+ \crefname@preamble{example}{Exemple}{Exemples}%
+ \crefname@preamble{remark}{Remarque}{Remarques}%
+ \crefname@preamble{note}{Commentaire}{Commentaires}%
+ \crefname@preamble{algorithm}{Algorithme}{Algorithmes}%
+ \crefname@preamble{listing}{Liste}{Listes}%
+ \crefname@preamble{line}{Ligne}{Lignes}%
+ %
+ \else% capitalise unset
+ \crefname@preamble{equation}{{\'e}quation}{{\'e}quations}%
+ \crefname@preamble{figure}{figure}{figures}%
+ \crefname@preamble{table}{tableau}{tableaux}%
+ \crefname@preamble{page}{page}{pages}%
+ \crefname@preamble{part}{partie}{parties}%
+ \crefname@preamble{chapter}{chapitre}{chapitres}%
+ \crefname@preamble{section}{section}{sections}%
+ \crefname@preamble{appendix}{annexe}{annexes}%
+ \crefname@preamble{enumi}{point}{points}%
+ \crefname@preamble{footnote}{note}{notes}%
+ \crefname@preamble{theorem}{th\'eor\`eme}{th\'eor\`emes}%
+ \crefname@preamble{lemma}{lemme}{lemmes}%
+ \crefname@preamble{corollary}{corollaire}{corollaires}%
+ \crefname@preamble{proposition}{proposition}{propositions}%
+ \crefname@preamble{definition}{d\'efinition}{d\'efinitions}%
+ \crefname@preamble{result}{r\'esultat}{r\'esultats}%
+ \crefname@preamble{example}{exemple}{exemples}%
+ \crefname@preamble{remark}{remarque}{remarques}%
+ \crefname@preamble{note}{commentaire}{commentaires}%
+ \crefname@preamble{algorithm}{algorithme}{algorithmes}%
+ \crefname@preamble{listing}{liste}{listes}%
+ \crefname@preamble{line}{ligne}{lignes}%
+ \fi%
+ \def\cref@language{french}%
+ }}% end \DeclareOption and \AtBeginDocument
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{french}{%
+ \PackageInfo{cleveref}{loaded `french' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ \`a\nobreakspace}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ et\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ et\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ et\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ et\nobreakspace}%
+ %
+ \Crefname{equation}{{\'E}quation}{{\'E}quations}%
+ \Crefname{figure}{Figure}{Figures}%
+ \Crefname{subfigure}{Figure}{Figures}%
+ \Crefname{table}{Tableau}{Tableaux}%
+ \Crefname{subtable}{Tableau}{Tableaux}%
+ \Crefname{page}{Page}{Pages}%
+ \Crefname{part}{Partie}{Parties}%
+ \Crefname{chapter}{Chapitre}{Chapitres}%
+ \Crefname{section}{Section}{Sections}%
+ \Crefname{subsection}{Section}{Sections}%
+ \Crefname{subsubsection}{Section}{Sections}%
+ \Crefname{appendix}{Annexe}{Annexes}%
+ \Crefname{subappendix}{Annexe}{Annexes}%
+ \Crefname{subsubappendix}{Annexe}{Annexes}%
+ \Crefname{subsubsubappendix}{Annexe}{Annexes}%
+ \Crefname{enumi}{Point}{Points}%
+ \Crefname{enumii}{Point}{Points}%
+ \Crefname{enumiii}{Point}{Points}%
+ \Crefname{enumiv}{Point}{Points}%
+ \Crefname{enumv}{Point}{Points}%
+ \Crefname{footnote}{Note}{Notes}%
+ \Crefname{theorem}{Th\'eor\`eme}{Th\'eor\`emes}%
+ \Crefname{lemma}{Lemme}{Lemmes}%
+ \Crefname{corollary}{Corollaire}{Corollaires}%
+ \Crefname{proposition}{Proposition}{Propositions}%
+ \Crefname{definition}{D\'efinition}{D\'efinitions}%
+ \Crefname{result}{R\'esultat}{R\'esultats}%
+ \Crefname{example}{Exemple}{Exemples}%
+ \Crefname{remark}{Remarque}{Remarques}%
+ \Crefname{note}{Commentaire}{Commentaires}%
+ \Crefname{algorithm}{Algorithme}{Algorithmes}%
+ \Crefname{listing}{Liste}{Listes}%
+ \Crefname{line}{Ligne}{Lignes}%
+ %
+ \if@cref@capitalise% capitalise set
+ \crefname{equation}{{\'E}quation}{{\'E}quations}%
+ \crefname{figure}{Figure}{Figures}%
+ \crefname{subfigure}{Figure}{Figures}%
+ \crefname{table}{Tableau}{Tableaux}%
+ \crefname{subtable}{Tableau}{Tableaux}%
+ \crefname{page}{Page}{Pages}%
+ \crefname{part}{Partie}{Parties}%
+ \crefname{chapter}{Chapitre}{Chapitres}%
+ \crefname{section}{Section}{Sections}%
+ \crefname{subsection}{Section}{Sections}%
+ \crefname{subsubsection}{Section}{Sections}%
+ \crefname{appendix}{Annexe}{Annexes}%
+ \crefname{subappendix}{Annexe}{Annexes}%
+ \crefname{subsubappendix}{Annexe}{Annexes}%
+ \crefname{subsubsubappendix}{Annexe}{Annexes}%
+ \crefname{enumi}{Point}{Points}%
+ \crefname{enumii}{Point}{Points}%
+ \crefname{enumiii}{Point}{Points}%
+ \crefname{enumiv}{Point}{Points}%
+ \crefname{enumv}{Point}{Points}%
+ \crefname{footnote}{Note}{Notes}%
+ \crefname{theorem}{Th\'eor\`eme}{Th\'eor\`emes}%
+ \crefname{lemma}{Lemme}{Lemmes}%
+ \crefname{corollary}{Corollaire}{Corollaires}%
+ \crefname{proposition}{Proposition}{Propositions}%
+ \crefname{definition}{D\'efinition}{D\'efinitions}%
+ \crefname{result}{R\'esultat}{R\'esultats}%
+ \crefname{example}{Exemple}{Exemples}%
+ \crefname{remark}{Remarque}{Remarques}%
+ \crefname{note}{Commentaire}{Commentaires}%
+ \crefname{algorithm}{Algorithme}{Algorithmes}%
+ \crefname{listing}{Liste}{Listes}%
+ \crefname{line}{Ligne}{Lignes}%
+ %
+ \else% capitalise unset
+ \crefname{equation}{{\'e}quation}{{\'e}quations}%
+ \crefname{figure}{figure}{figures}%
+ \crefname{subfigure}{figure}{figures}%
+ \crefname{table}{tableau}{tableaux}%
+ \crefname{subtable}{tableau}{tableaux}%
+ \crefname{page}{page}{pages}%
+ \crefname{part}{partie}{parties}%
+ \crefname{chapter}{chapitre}{chapitres}%
+ \crefname{section}{section}{sections}%
+ \crefname{subsection}{section}{sections}%
+ \crefname{subsubsection}{section}{sections}%
+ \crefname{appendix}{annexe}{annexes}%
+ \crefname{subappendix}{annexe}{annexes}%
+ \crefname{subsubappendix}{annexe}{annexes}%
+ \crefname{subsubsubappendix}{annexe}{annexes}%
+ \crefname{enumi}{point}{points}%
+ \crefname{enumii}{point}{points}%
+ \crefname{enumiii}{point}{points}%
+ \crefname{enumiv}{point}{points}%
+ \crefname{enumv}{point}{points}%
+ \crefname{footnote}{note}{notes}%
+ \crefname{theorem}{th\'eor\`eme}{th\'eor\`emes}%
+ \crefname{lemma}{lemme}{lemmes}%
+ \crefname{corollary}{corollaire}{corollaires}%
+ \crefname{proposition}{proposition}{propositions}%
+ \crefname{definition}{d\'efinition}{d\'efinitions}%
+ \crefname{result}{r\'esultat}{r\'esultats}%
+ \crefname{example}{exemple}{exemples}%
+ \crefname{remark}{remarque}{remarques}%
+ \crefname{note}{commentaire}{commentaires}%
+ \crefname{algorithm}{algorithme}{algorithmes}%
+ \crefname{listing}{liste}{listes}%
+ \crefname{line}{ligne}{lignes}%
+ \fi}% end \cref@loadlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Spanish}
+% \begin{macro}{spanish}
+% Spanish translations generously contributed by Gonzalo Medina.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{spanish}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ a\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ y\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ y\nobreakspace}%
+ \def\crefpairgroupconjunction@preamble{ y\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{ y\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Ecuaci\'on}{Ecuaciones}%
+ \Crefname@preamble{figure}{Figura}{Figuras}%
+ \Crefname@preamble{table}{Cuadro}{Cuadros}%
+ \Crefname@preamble{page}{P\'agina}{P\'aginas}%
+ \Crefname@preamble{part}{Parte}{Partes}%
+ \Crefname@preamble{chapter}{Cap\'itulo}{Cap\'itulos}%
+ \Crefname@preamble{section}{Apartado}{Apartados}%
+ \Crefname@preamble{appendix}{Ap\'endice}{Ap\'endices}%
+ \Crefname@preamble{enumi}{Punto}{Puntos}%
+ \Crefname@preamble{footnote}{Nota}{Notas}%
+ \Crefname@preamble{theorem}{Teorema}{Teoremas}%
+ \Crefname@preamble{lemma}{Lema}{Lemas}%
+ \Crefname@preamble{corollary}{Corolario}{Corolarios}%
+ \Crefname@preamble{proposition}{Proposici\'on}{Proposiciones}%
+ \Crefname@preamble{definition}{Definici\'on}{Definiciones}%
+ \Crefname@preamble{result}{Resultado}{Resultados}%
+ \Crefname@preamble{example}{Ejemplo}{Ejemplos}%
+ \Crefname@preamble{remark}{Observaci\'on}{Observaciones}%
+ \Crefname@preamble{note}{Nota}{Notas}%
+ \Crefname@preamble{algorithm}{Algoritmo}{Algoritmos}%
+ \Crefname@preamble{listing}{Listado}{Listados}%
+ \Crefname@preamble{line}{L\'inea}{L\'ineas}%
+ %
+ \if@cref@capitalise% capitalise set
+ \crefname@preamble{equation}{Ecuaci\'on}{Ecuaciones}%
+ \crefname@preamble{figure}{Figura}{Figuras}%
+ \crefname@preamble{table}{Cuadro}{Cuadros}%
+ \crefname@preamble{page}{P\'agina}{P\'aginas}%
+ \crefname@preamble{part}{Parte}{Partes}%
+ \crefname@preamble{chapter}{Cap\'itulo}{Cap\'itulos}%
+ \crefname@preamble{section}{Apartado}{Apartados}%
+ \crefname@preamble{appendix}{Ap\'endice}{Ap\'endices}%
+ \crefname@preamble{enumi}{Punto}{Puntos}%
+ \crefname@preamble{footnote}{Nota}{Notas}%
+ \crefname@preamble{theorem}{Teorema}{Teoremas}%
+ \crefname@preamble{lemma}{Lema}{Lemas}%
+ \crefname@preamble{corollary}{Corolario}{Corolarios}%
+ \crefname@preamble{proposition}{Proposici\'on}{Proposiciones}%
+ \crefname@preamble{definition}{Definici\'on}{Definiciones}%
+ \crefname@preamble{result}{Resultado}{Resultados}%
+ \crefname@preamble{example}{Ejemplo}{Ejemplos}%
+ \crefname@preamble{remark}{Observaci\'on}{Observaciones}%
+ \crefname@preamble{note}{Nota}{Notas}%
+ \crefname@preamble{algorithm}{Algoritmo}{Algoritmos}%
+ \crefname@preamble{listing}{Listado}{Listados}%
+ \crefname@preamble{line}{L\'inea}{L\'ineas}%
+ %
+ \else% capitalise unset
+ \crefname@preamble{equation}{ecuaci\'on}{ecuaciones}%
+ \crefname@preamble{figure}{figura}{figuras}%
+ \crefname@preamble{table}{cuadro}{cuadros}%
+ \crefname@preamble{page}{p\'agina}{p\'aginas}%
+ \crefname@preamble{part}{parte}{partes}%
+ \crefname@preamble{chapter}{cap\'itulo}{cap\'itulos}%
+ \crefname@preamble{section}{apartado}{apartados}%
+ \crefname@preamble{appendix}{ap\'endice}{ap\'endices}%
+ \crefname@preamble{enumi}{punto}{puntos}%
+ \crefname@preamble{footnote}{nota}{notas}%
+ \crefname@preamble{theorem}{teorema}{teoremas}%
+ \crefname@preamble{lemma}{lema}{lemas}%
+ \crefname@preamble{corollary}{corolario}{corolarios}%
+ \crefname@preamble{proposition}{proposici\'on}{proposiciones}%
+ \crefname@preamble{definition}{definici\'on}{definiciones}%
+ \crefname@preamble{result}{resultado}{resultados}%
+ \crefname@preamble{example}{ejemplo}{ejemplos}%
+ \crefname@preamble{remark}{observaci\'on}{observaciones}%
+ \crefname@preamble{note}{nota}{notas}%
+ \crefname@preamble{algorithm}{algoritmo}{algoritmos}%
+ \crefname@preamble{listing}{listado}{listados}%
+ \crefname@preamble{line}{l\'inea}{l\'ineas}%
+ \fi%
+ \def\cref@language{spanish}%
+ }}% end \DeclareOption and \AtBeginDocument
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{spanish}{%
+ \PackageInfo{cleveref}{loaded `spanish' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ a\nobreakspace}%
+ \renewcommand{\crefrangepreconjunction}{}%
+ \renewcommand{\crefrangepostconjunction}{}%
+ \renewcommand{\crefpairconjunction}{ y\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ y\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ y\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ y\nobreakspace}%
+ %
+ \Crefname{equation}{Ecuaci\'on}{Ecuaciones}%
+ \Crefname{figure}{Figura}{Figuras}%
+ \Crefname{subfigure}{Figura}{Figuras}%
+ \Crefname{table}{Cuadro}{Cuadros}%
+ \Crefname{subtable}{Cuadro}{Cuadros}%
+ \Crefname{page}{P\'agina}{P\'aginas}%
+ \Crefname{part}{Parte}{Partes}%
+ \Crefname{chapter}{Cap\'itulo}{Cap\'itulos}%
+ \Crefname{section}{Apartado}{Apartados}%
+ \Crefname{subsection}{Apartado}{Apartados}%
+ \Crefname{subsubsection}{Apartado}{Apartados}%
+ \Crefname{appendix}{Ap\'endice}{Ap\'endices}%
+ \Crefname{subappendix}{Ap\'endice}{Ap\'endices}%
+ \Crefname{subsubappendix}{Ap\'endice}{Ap\'endices}%
+ \Crefname{subsubsubappendix}{Ap\'endice}{Ap\'endices}%
+ \Crefname{enumi}{Punto}{Puntos}%
+ \Crefname{enumii}{Punto}{Puntos}%
+ \Crefname{enumiii}{Punto}{Puntos}%
+ \Crefname{enumiv}{Punto}{Puntos}%
+ \Crefname{enumv}{Punto}{Puntos}%
+ \Crefname{footnote}{Nota}{Notas}%
+ \Crefname{theorem}{Teorema}{Teoremas}%
+ \Crefname{lemma}{Lema}{Lemas}%
+ \Crefname{corollary}{Corolario}{Corolarios}%
+ \Crefname{proposition}{Proposici\'on}{Proposiciones}%
+ \Crefname{definition}{Definici\'on}{Definiciones}%
+ \Crefname{result}{Resultado}{Resultados}%
+ \Crefname{example}{Ejemplo}{Ejemplos}%
+ \Crefname{remark}{Observaci\'on}{Observaci\'on}%
+ \Crefname{note}{Nota}{Notas}%
+ \Crefname{algorithm}{Algoritmo}{Algoritmos}%
+ \Crefname{listing}{Listado}{Listados}%
+ \Crefname{line}{L\'inea}{L\'ineas}%
+ %
+ \if@cref@capitalise% capitalise set
+ \crefname{equation}{Ecuaci\'on}{Ecuaciones}%
+ \crefname{figure}{Figura}{Figuras}%
+ \crefname{subfigure}{Figura}{Figuras}%
+ \crefname{table}{Cuadro}{Cuadros}%
+ \crefname{subtable}{Cuadro}{Cuadros}%
+ \crefname{page}{P\'agina}{P\'aginas}%
+ \crefname{part}{Parte}{Partes}%
+ \crefname{chapter}{Cap\'itulo}{Cap\'itulos}%
+ \crefname{section}{Apartado}{Apartados}%
+ \crefname{subsection}{Apartado}{Apartados}%
+ \crefname{subsubsection}{Apartado}{Apartados}%
+ \crefname{appendix}{Ap\'endice}{Ap\'endices}%
+ \crefname{subappendix}{Ap\'endice}{Ap\'endices}%
+ \crefname{subsubappendix}{Ap\'endice}{Ap\'endices}%
+ \crefname{subsubsubappendix}{Ap\'endice}{Ap\'endices}%
+ \crefname{enumi}{Punto}{Puntos}%
+ \crefname{enumii}{Punto}{Puntos}%
+ \crefname{enumiii}{Punto}{Puntos}%
+ \crefname{enumiv}{Punto}{Puntos}%
+ \crefname{enumv}{Punto}{Puntos}%
+ \crefname{footnote}{Nota}{Notas}%
+ \crefname{theorem}{Teorema}{Teoremas}%
+ \crefname{lemma}{Lema}{Lemas}%
+ \crefname{corollary}{Corolario}{Corolarios}%
+ \crefname{proposition}{Proposici\'on}{Proposiciones}%
+ \crefname{definition}{Definici\'on}{Definiciones}%
+ \crefname{result}{Resultado}{Resultados}%
+ \crefname{example}{Ejemplo}{Ejemplos}%
+ \crefname{remark}{Observaci\'on}{Observaci\'ones}%
+ \crefname{note}{Nota}{Notas}%
+ \crefname{algorithm}{Algoritmo}{Algoritmos}%
+ \crefname{listing}{Listado}{Listados}%
+ \crefname{line}{L\'inea}{L\'ineas}%
+ %
+ \else% capitalise unset
+ \crefname{equation}{ecuaci\'on}{ecuaciones}%
+ \crefname{figure}{figura}{figuras}%
+ \crefname{subfigure}{figura}{figuras}%
+ \crefname{table}{cuadro}{cuadros}%
+ \crefname{subtable}{cuadro}{cuadros}%
+ \crefname{page}{p\'agina}{p\'aginas}%
+ \crefname{part}{parte}{partes}%
+ \crefname{chapter}{cap\'itulo}{cap\'itulos}%
+ \crefname{section}{apartado}{apartados}%
+ \crefname{subsection}{apartado}{apartados}%
+ \crefname{subsubsection}{apartado}{apartados}%
+ \crefname{appendix}{ap\'endice}{ap\'endices}%
+ \crefname{subappendix}{ap\'endice}{ap\'endices}%
+ \crefname{subsubappendix}{ap\'endice}{ap\'endices}%
+ \crefname{subsubsubappendix}{ap\'endice}{ap\'endices}%
+ \crefname{enumi}{punto}{puntos}%
+ \crefname{enumii}{punto}{puntos}%
+ \crefname{enumiii}{punto}{puntos}%
+ \crefname{enumiv}{punto}{puntos}%
+ \crefname{enumv}{punto}{puntos}%
+ \crefname{footnote}{nota}{notas}%
+ \crefname{theorem}{teorema}{teoremas}%
+ \crefname{lemma}{lema}{lemas}%
+ \crefname{corollary}{corolario}{corolarios}%
+ \crefname{proposition}{proposici\'on}{proposiciones}%
+ \crefname{definition}{definici\'on}{definiciones}%
+ \crefname{result}{resultado}{resultados}%
+ \crefname{example}{ejemplo}{ejemplos}%
+ \crefname{remark}{observaci\'on}{observaci\'ones}%
+ \crefname{note}{nota}{notas}%
+ \crefname{algorithm}{algoritmo}{algoritmos}%
+ \crefname{listing}{listado}{listados}%
+ \crefname{line}{l\'inea}{l\'ineas}%
+ \fi}% end \cref@loadlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Italian}
+% \begin{macro}{italian}
+% Italian translations kindly contributed by Massimo Redaelli.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{italian}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ a\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{da\nobreakspace}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ e\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ e\nobreakspace}%
+% \end{macrocode}
+% We have to define the group conjunctions explicitly here, rather than
+% relying on fall-back definitions in terms of the above conjunctions
+% (see \cref{sec:code:default_formats}), in case any other language
+% option defines them explicitly and we need to override those.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ e\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{ e\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Equazione}{Equazioni}%
+ \Crefname@preamble{figure}{Figura}{Figure}%
+ \Crefname@preamble{table}{Tabella}{Tabelle}%
+ \Crefname@preamble{page}{Pagina}{Pagine}%
+ \Crefname@preamble{part}{Parte}{Parti}%
+ \Crefname@preamble{chapter}{Capitolo}{Capitoli}%
+ \Crefname@preamble{section}{Sezione}{Sezioni}%
+ \Crefname@preamble{appendix}{Appendice}{Appendici}%
+ \Crefname@preamble{enumi}{Voce}{Voci}%
+ \Crefname@preamble{footnote}{Nota}{Note}%
+ \Crefname@preamble{theorem}{Teorema}{Teoremi}%
+ \Crefname@preamble{lemma}{Lemma}{Lemmi}%
+ \Crefname@preamble{corollary}{Corollario}{Corollari}%
+ \Crefname@preamble{proposition}{Proposizione}{Proposizioni}%
+ \Crefname@preamble{definition}{Definizioni}{Definizioni}%
+ \Crefname@preamble{result}{Risultato}{Risultati}%
+ \Crefname@preamble{example}{esempio}{esempi}%
+ \Crefname@preamble{remark}{Osservazione}{Osservazioni}%
+ \Crefname@preamble{note}{Nota}{Note}%
+ \Crefname@preamble{algorithm}{Algoritmo}{Algoritmi}%
+ \Crefname@preamble{listing}{Elenco}{Elenchi}%
+ \Crefname@preamble{line}{Linea}{Linee}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{Eq.}{Eq.}%
+ \crefname@preamble{figure}{Fig.}{Fig.}%
+ \else%
+ \crefname@preamble{equation}{Equazione}{Equazioni}%
+ \crefname@preamble{figure}{Figura}{Figure}%
+ \fi%
+ \crefname@preamble{table}{Tabella}{Tabelle}%
+ \crefname@preamble{page}{Pagina}{Pagine}%
+ \crefname@preamble{part}{Parte}{Parti}%
+ \crefname@preamble{chapter}{Capitolo}{Capitoli}%
+ \crefname@preamble{section}{Sezione}{Sezioni}%
+ \crefname@preamble{appendix}{Appendice}{Appendici}%
+ \crefname@preamble{enumi}{Voce}{Voci}%
+ \crefname@preamble{footnote}{Nota}{Note}%
+ \crefname@preamble{theorem}{Teorema}{Teoremi}%
+ \crefname@preamble{lemma}{Lemma}{Lemmi}%
+ \crefname@preamble{corollary}{Corollario}{Corollari}%
+ \crefname@preamble{proposition}{Proposizione}{Proposizioni}%
+ \crefname@preamble{definition}{Definizione}{Definizioni}%
+ \crefname@preamble{result}{Risultato}{Risultati}%
+ \crefname@preamble{example}{Esempio}{Esempi}%
+ \crefname@preamble{remark}{Osservazione}{Osservazioni}%
+ \crefname@preamble{note}{Nota}{Note}%
+ \crefname@preamble{algorithm}{Algoritmo}{Algoritmi}%
+ \crefname@preamble{listing}{Elenco}{Elenchi}%
+ \crefname@preamble{line}{Linea}{Linee}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{eq.}{eq.}%
+ \crefname@preamble{figure}{fig.}{fig.}%
+ \else%
+ \crefname@preamble{equation}{equazione}{equazioni}%
+ \crefname@preamble{figure}{figura}{figure}%
+ \fi%
+ \crefname@preamble{table}{tabella}{tabelle}%
+ \crefname@preamble{page}{pagina}{pagine}%
+ \crefname@preamble{part}{parte}{parti}%
+ \crefname@preamble{chapter}{capitolo}{capitoli}%
+ \crefname@preamble{section}{sezione}{sezioni}%
+ \crefname@preamble{appendix}{appendice}{appendici}%
+ \crefname@preamble{enumi}{voce}{voci}%
+ \crefname@preamble{footnote}{nota}{note}%
+ \crefname@preamble{theorem}{teorema}{teoremi}%
+ \crefname@preamble{lemma}{lemma}{lemmi}%
+ \crefname@preamble{corollary}{corollario}{corollari}%
+ \crefname@preamble{proposition}{proposizione}{proposizioni}%
+ \crefname@preamble{definition}{definizione}{definizioni}%
+ \crefname@preamble{result}{risultato}{risultati}%
+ \crefname@preamble{example}{esempio}{esempi}%
+ \crefname@preamble{remark}{osservazione}{osservazioni}%
+ \crefname@preamble{note}{nota}{note}%
+ \crefname@preamble{algorithm}{algoritmo}{algoritmi}%
+ \crefname@preamble{listing}{elenco}{elenchi}%
+ \crefname@preamble{line}{linea}{linee}%
+ \fi%
+ \def\cref@language{italian}%
+ }}% end \DeclareOption and \AtBeginDocument
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{italian}{%
+ \PackageInfo{cleveref}{loaded `italian' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ a\nobreakspace}%
+ \renewcommand\crefrangepreconjunction{da\nobreakspace}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ e\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ e\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ e\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ e\nobreakspace}%
+ %
+ \Crefname{equation}{Equazione}{Equazioni}%
+ \Crefname{figure}{Figura}{Figure}%
+ \Crefname{subfigure}{Figura}{Figure}%
+ \Crefname{table}{Tabella}{Tabelle}%
+ \Crefname{subtable}{Tabella}{Tabelle}%
+ \Crefname{page}{Pagina}{Pagine}%
+ \Crefname{part}{Parte}{Parti}%
+ \Crefname{chapter}{Capitolo}{Capitoli}%
+ \Crefname{section}{Sezione}{Sezioni}%
+ \Crefname{subsection}{Sezione}{Sezioni}%
+ \Crefname{subsubsection}{Sezione}{Sezioni}%
+ \Crefname{appendix}{Appendice}{Appendici}%
+ \Crefname{subappendix}{Appendice}{Appendici}%
+ \Crefname{subsubappendix}{Appendice}{Appendici}%
+ \Crefname{subsubsubappendix}{Appendice}{Appendici}%
+ \Crefname{enumi}{Voce}{Voci}%
+ \Crefname{enumii}{Voce}{Voci}%
+ \Crefname{enumiii}{Voce}{Voci}%
+ \Crefname{enumiv}{Voce}{Voci}%
+ \Crefname{enumv}{Voce}{Voci}%
+ \Crefname{footnote}{Nota}{Note}%
+ \Crefname{theorem}{Teorema}{Teoremi}%
+ \Crefname{lemma}{Lemma}{Lemmi}%
+ \Crefname{corollary}{Corollario}{Corollari}%
+ \Crefname{proposition}{Proposizione}{Proposizioni}%
+ \Crefname{definition}{Definizione}{Definizione}%
+ \Crefname{result}{Risultato}{Risultati}%
+ \Crefname{example}{esempio}{esempi}%
+ \Crefname{remark}{Osservazione}{Osservazioni}%
+ \Crefname{note}{Nota}{Note}%
+ \Crefname{algorithm}{Algoritmo}{Algoritmi}%
+ \Crefname{listing}{Elenco}{Elenchi}%
+ \Crefname{line}{Linea}{Linee}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname{equation}{Eq.}{Eq.}%
+ \crefname{figure}{Fig.}{Fig.}%
+ \crefname{subfigure}{Fig.}{Fig.}%
+ \else%
+ \crefname{equation}{Equazione}{Equazioni}%
+ \crefname{figure}{Figura}{Figure}%
+ \crefname{figure}{Figura}{Figure}%
+ \fi%
+ \crefname{table}{Tabella}{Tabelle}%
+ \crefname{page}{Pagina}{Pagine}%
+ \crefname{subtable}{Tabella}{Tabelle}%
+ \crefname{part}{Parte}{Parti}%
+ \crefname{chapter}{Capitolo}{Capitoli}%
+ \crefname{section}{Sezione}{Sezioni}%
+ \crefname{subsection}{Sezione}{Sezioni}%
+ \crefname{subsubsection}{Sezione}{Sezioni}%
+ \crefname{appendix}{Appendice}{Appendici}%
+ \crefname{subappendix}{Appendice}{Appendici}%
+ \crefname{subsubappendix}{Appendice}{Appendici}%
+ \crefname{subsubsubappendix}{Appendice}{Appendici}%
+ \crefname{enumi}{Voce}{Voci}%
+ \crefname{enumii}{Voce}{Voci}%
+ \crefname{enumiii}{Voce}{Voci}%
+ \crefname{enumiv}{Voce}{Voci}%
+ \crefname{enumv}{Voce}{Voci}%
+ \crefname{footnote}{Nota}{Note}%
+ \crefname{theorem}{Teorema}{Teoremi}%
+ \crefname{lemma}{Lemma}{Lemmi}%
+ \crefname{corollary}{Corollario}{Corollari}%
+ \crefname{proposition}{Proposizione}{Proposizioni}%
+ \crefname{definition}{Definizione}{Definizione}%
+ \crefname{result}{Risultato}{Risultati}%
+ \crefname{example}{Esempio}{Esempi}%
+ \crefname{remark}{Osservazione}{Osservazioni}%
+ \crefname{note}{Nota}{Note}%
+ \crefname{algorithm}{Algoritmo}{Algoritmi}%
+ \crefname{listing}{Elenco}{Elenchi}%
+ \crefname{line}{Linea}{Linee}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname{equation}{eq.}{eq.}%
+ \crefname{figure}{fig.}{fig.}%
+ \crefname{subfigure}{fig.}{fig.}%
+ \else%
+ \crefname{equation}{equazione}{equazioni}%
+ \crefname{figure}{figura}{figure}%
+ \crefname{figure}{figura}{figure}%
+ \fi%
+ \crefname{table}{tabella}{tabelle}%
+ \crefname{page}{pagina}{pagine}%
+ \crefname{subtable}{tabella}{tabelle}%
+ \crefname{part}{parte}{parti}%
+ \crefname{chapter}{capitolo}{capitoli}%
+ \crefname{section}{sezione}{sezioni}%
+ \crefname{subsection}{sezione}{sezioni}%
+ \crefname{subsubsection}{sezione}{sezioni}%
+ \crefname{appendix}{appendice}{appendici}%
+ \crefname{subappendix}{appendice}{appendici}%
+ \crefname{subsubappendix}{appendice}{appendici}%
+ \crefname{subsubsubappendix}{appendice}{appendici}%
+ \crefname{enumi}{voce}{voci}%
+ \crefname{enumii}{voce}{voci}%
+ \crefname{enumiii}{voce}{voci}%
+ \crefname{enumiv}{voce}{voci}%
+ \crefname{enumv}{voce}{voci}%
+ \crefname{footnote}{nota}{note}%
+ \crefname{theorem}{teorema}{teoremi}%
+ \crefname{lemma}{lemma}{lemmi}%
+ \crefname{corollary}{corollario}{corollari}%
+ \crefname{proposition}{proposizione}{proposizioni}%
+ \crefname{definition}{definizione}{definizione}%
+ \crefname{result}{risultato}{risultati}%
+ \crefname{example}{esempio}{esempi}%
+ \crefname{remark}{osservazione}{osservazioni}%
+ \crefname{note}{nota}{note}%
+ \crefname{algorithm}{algoritmo}{algoritmi}%
+ \crefname{listing}{elenco}{elenchi}%
+ \crefname{line}{linea}{linee}%
+ \fi}% end \cref@loadlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Russian}
+% \begin{macro}{russian}
+% Russian translations generously contributed by Aleksander Gorohovski.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{russian}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{--}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ \cyri\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ \cyri\nobreakspace}%
+% \end{macrocode}
+% We have to define the group conjunctions explicitly here, rather than
+% relying on fall-back definitions in terms of the above conjunctions
+% (see \cref{sec:code:default_formats}), in case any other language
+% option defines them explicitly and we need to override those.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ \cyri\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble%
+ {, \cyra\ \cyrt\cyra\cyrk\cyrzh\cyre\nobreakspace}%
+ %
+ \Crefname@preamble{equation}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyrery}%
+ \Crefname@preamble{figure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \Crefname@preamble{table}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyra}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrery}%
+ \Crefname@preamble{enumi}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \Crefname@preamble{chapter}%
+ {\CYRG\cyrl\cyra\cyrv\cyra}%
+ {\CYRG\cyrl\cyra\cyrv\cyrery}%
+ \Crefname@preamble{section}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \Crefname@preamble{appendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \Crefname@preamble{footnote}%
+ {\CYRS\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\CYRS\cyrn\cyro\cyrs\cyrk\cyri}%
+ \Crefname@preamble{theorem}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyrery}%
+ \Crefname@preamble{lemma}%
+ {\CYRL\cyre\cyrm\cyrm\cyra}%
+ {\CYRL\cyre\cyrm\cyrm\cyrery}%
+ \Crefname@preamble{corollary}%
+ {\CYRV\cyrery\cyrv\cyro\cyrd}%
+ {\CYRV\cyrery\cyrv\cyro\cyrd\cyrery}%
+ \Crefname@preamble{proposition}%
+ {\CYRU\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyre}%
+ {\CYRU\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyrya}%
+ \Crefname@preamble{definition}%
+ {\CYRO\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyre}%
+ {\CYRO\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyrya}%
+ \Crefname@preamble{result}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyrery}%
+ \Crefname@preamble{example}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrr}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrr\cyrery}%
+ \Crefname@preamble{remark}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyrya}%
+ \Crefname@preamble{note}%
+ {\CYRZ\cyra\cyrm\cyre\cyrt\cyrk\cyra}%
+ {\CYRZ\cyra\cyrm\cyre\cyrt\cyrk\cyri}%
+ \Crefname@preamble{algorithm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyrery}%
+ \Crefname@preamble{listing}%
+ {\CYRL\cyri\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\CYRL\cyri\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \Crefname@preamble{line}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyri}%
+ \Crefname@preamble{page}%
+ {\CYRS\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyra}%
+ {\CYRS\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyrery}%
+ \Crefname@preamble{part}%
+ {\CYRCH\cyra\cyrs\cyrt\cyrsftsn}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev% abbrev set
+ \crefname@preamble{equation}%
+ {\CYRF-\cyrl.}%
+ {\CYRF-\cyrl.}%
+ \crefname@preamble{figure}%
+ {\CYRR\cyri\cyrs.}%
+ {\CYRR\cyri\cyrs.}%
+ \crefname@preamble{table}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ \crefname@preamble{enumi}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \else%
+ \crefname@preamble{equation}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyrery}%
+ \crefname@preamble{figure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname@preamble{table}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyra}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrery}%
+ \crefname@preamble{enumi}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \fi%
+ \crefname@preamble{chapter}%
+ {\CYRG\cyrl\cyra\cyrv\cyra}%
+ {\CYRG\cyrl\cyra\cyrv\cyrery}%
+ \crefname@preamble{section}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \crefname@preamble{appendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname@preamble{footnote}%
+ {\CYRS\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\CYRS\cyrn\cyro\cyrs\cyrk\cyri}%
+ \crefname@preamble{theorem}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyrery}%
+ \crefname@preamble{lemma}%
+ {\CYRL\cyre\cyrm\cyrm\cyra}%
+ {\CYRL\cyre\cyrm\cyrm\cyrery}%
+ \crefname@preamble{corollary}%
+ {\CYRV\cyrery\cyrv\cyro\cyrd}%
+ {\CYRV\cyrery\cyrv\cyro\cyrd\cyrery}%
+ \crefname@preamble{proposition}%
+ {\CYRU\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyre}%
+ {\CYRU\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyrya}%
+ \crefname@preamble{definition}%
+ {\CYRO\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyre}%
+ {\CYRO\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyrya}%
+ \crefname@preamble{result}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyrery}%
+ \crefname@preamble{example}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrr}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrr\cyrery}%
+ \crefname@preamble{remark}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyrya}%
+ \crefname@preamble{note}%
+ {\CYRZ\cyra\cyrm\cyre\cyrt\cyrk\cyra}%
+ {\CYRZ\cyra\cyrm\cyre\cyrt\cyrk\cyri}%
+ \crefname@preamble{algorithm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyrery}%
+ \crefname@preamble{listing}%
+ {\CYRL\cyri\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\CYRL\cyri\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \crefname@preamble{line}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyri}%
+ \crefname@preamble{page}%
+ {\CYRS\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyra}%
+ {\CYRS\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyrery}%
+ \crefname@preamble{part}%
+ {\CYRCH\cyra\cyrs\cyrt\cyrsftsn}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev% abbrev set
+ \crefname@preamble{equation}%
+ {\cyrf-\cyrl.}%
+ {\cyrf-\cyrl.}%
+ \crefname@preamble{figure}%
+ {\cyrr\cyri\cyrs.}%
+ {\cyrr\cyri\cyrs.}%
+ \crefname@preamble{table}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ \crefname@preamble{enumi}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname@preamble{chapter}%
+ {\cyrg\cyrl\cyra\cyrv.}%
+ {\cyrg\cyrl\cyra\cyrv.}%
+ \crefname@preamble{section}%
+ {\cyrr\cyra\cyrz\cyrd.}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl.}%
+ \crefname@preamble{appendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ \crefname@preamble{footnote}%
+ {\cyrs\cyrn\cyro\cyrs\cyrk.}%
+ {\cyrs\cyrn\cyro\cyrs\cyrk.}%
+ \crefname@preamble{theorem}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm.}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm.}%
+ \crefname@preamble{lemma}%
+ {\cyrl\cyre\cyrm\cyrm.}%
+ {\cyrl\cyre\cyrm\cyrm.}%
+ \crefname@preamble{corollary}%
+ {\cyrv\cyrery\cyrv\cyro\cyrd}%
+ {\cyrv\cyrery\cyrv\cyro\cyrd.}%
+ \crefname@preamble{proposition}%
+ {\cyru\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd.}%
+ {\cyru\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd.}%
+ \crefname@preamble{definition}%
+ {\cyro\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn.}%
+ {\cyro\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn.}%
+ \crefname@preamble{result}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt.}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt.}%
+ \crefname@preamble{example}%
+ {\cyrp\cyrr\cyri\cyrm.}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrr.}%
+ \crefname@preamble{remark}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrch.}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrch.}%
+ \crefname@preamble{note}%
+ {\cyrz\cyra\cyrm\cyre\cyrt\cyrk.}%
+ {\cyrz\cyra\cyrm\cyre\cyrt\cyrk.}%
+ \crefname@preamble{algorithm}%
+ {\cyra\cyrl\cyrg.}%
+ {\cyra\cyrl\cyrg.}%
+ \crefname@preamble{listing}%
+ {\cyrl\cyri\cyrs\cyrt\cyri\cyrn.}%
+ {\cyrl\cyri\cyrs\cyrt\cyri\cyrn\cyrg.}%
+ \crefname@preamble{line}%
+ {\cyrs\cyrt\cyrr\cyrk.}%
+ {\cyrs\cyrt\cyrr\cyrk.}%
+ \else% abbrev unset
+ \crefname@preamble{equation}%
+ {\cyrf\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\cyrf\cyro\cyrr\cyrm\cyru\cyrl\cyrery}%
+ \crefname@preamble{figure}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname@preamble{table}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyra}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrery}%
+ \crefname@preamble{enumi}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname@preamble{chapter}%
+ {\cyrg\cyrl\cyra\cyrv\cyra}%
+ {\cyrg\cyrl\cyra\cyrv\cyrery}%
+ \crefname@preamble{section}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \crefname@preamble{appendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname@preamble{footnote}%
+ {\cyrs\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\cyrs\cyrn\cyro\cyrs\cyrk\cyri}%
+ \crefname@preamble{theorem}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyrery}%
+ \crefname@preamble{lemma}%
+ {\cyrl\cyre\cyrm\cyrm\cyra}%
+ {\cyrl\cyre\cyrm\cyrm\cyrery}%
+ \crefname@preamble{corollary}%
+ {\cyrv\cyrery\cyrv\cyro\cyrd}%
+ {\cyrv\cyrery\cyrv\cyro\cyrd\cyrery}%
+ \crefname@preamble{proposition}%
+ {\cyru\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyre}%
+ {\cyru\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyrya}%
+ \crefname@preamble{definition}%
+ {\cyro\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyre}%
+ {\cyro\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyrya}%
+ \crefname@preamble{result}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyrery}%
+ \crefname@preamble{example}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrr}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrr\cyrery}%
+ \crefname@preamble{remark}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyre}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyrya}%
+ \crefname@preamble{note}%
+ {\cyrz\cyra\cyrm\cyre\cyrt\cyrk\cyra}%
+ {\cyrz\cyra\cyrm\cyre\cyrt\cyrk\cyri}%
+ \crefname@preamble{algorithm}%
+ {\cyra\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\cyra\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyrery}%
+ \crefname@preamble{listing}%
+ {\cyrl\cyri\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\cyrl\cyri\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \crefname@preamble{line}%
+ {\cyrs\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\cyrs\cyrt\cyrr\cyro\cyrk\cyri}%
+ \fi%
+ \crefname@preamble{page}%
+ {\cyrs\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyre}%
+ {\cyrs\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyra\cyrh}%
+ \crefname@preamble{part}%
+ {\cyrch\cyra\cyrs\cyrt\cyrsftsn}%
+ {\cyrch\cyra\cyrs\cyrt\cyri}%
+ \fi%
+ \def\cref@language{russian}%
+ }}% end \DeclareOption and \AtBeginDocument
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{russian}{%
+ \PackageInfo{cleveref}{loaded `russian' language definitions}%
+ \renewcommand{\crefrangeconjunction}{--}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ \cyri\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ \cyri\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ \cyri\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}%
+ {, \cyra\ \cyrt\cyra\cyrk\cyrzh\cyre\nobreakspace}%
+ %
+ \Crefname{page}%
+ {\CYRS\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyra}%
+ {\CYRS\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyrery}%
+ \Crefname{equation}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyrery}%
+ \Crefname{figure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \Crefname{subfigure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \Crefname{table}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyra}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrery}%
+ \Crefname{subtable}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyra}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrery}%
+ \Crefname{part}%
+ {\CYRCH\cyra\cyrs\cyrt\cyrsftsn}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri}%
+ \Crefname{chapter}%
+ {\CYRG\cyrl\cyra\cyrv\cyra}%
+ {\CYRG\cyrl\cyra\cyrv\cyrery}%
+ \Crefname{section}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \Crefname{subsection}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \Crefname{subsubsection}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \Crefname{appendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \Crefname{subappendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \Crefname{subsubappendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \Crefname{subsubsubappendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \Crefname{enumi}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \Crefname{enumii}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \Crefname{enumiii}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \Crefname{enumiv}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \Crefname{enumv}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \Crefname{footnote}%
+ {\CYRS\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\CYRS\cyrn\cyro\cyrs\cyrk\cyri}%
+ \Crefname{theorem}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyrery}%
+ \Crefname{lemma}%
+ {\CYRL\cyre\cyrm\cyrm\cyra}%
+ {\CYRL\cyre\cyrm\cyrm\cyrery}%
+ \Crefname{corollary}%
+ {\CYRV\cyrery\cyrv\cyro\cyrd}%
+ {\CYRV\cyrery\cyrv\cyro\cyrd\cyrery}%
+ \Crefname{proposition}%
+ {\CYRU\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyre}%
+ {\CYRU\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyrya}%
+ \Crefname{definition}%
+ {\CYRO\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyre}%
+ {\CYRO\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyrya}%
+ \Crefname{result}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyrery}%
+ \Crefname{example}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrr}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrr\cyrery}%
+ \Crefname{remark}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyrya}%
+ \Crefname{note}%
+ {\CYRZ\cyra\cyrm\cyre\cyrt\cyrk\cyra}%
+ {\CYRZ\cyra\cyrm\cyre\cyrt\cyrk\cyri}%
+ \Crefname{algorithm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyrery}%
+ \Crefname{listing}%
+ {\CYRL\cyri\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\CYRL\cyri\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \Crefname{line}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyri}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev% abbrev set
+ \crefname{equation}%
+ {\CYRF-\cyrl.}%
+ {\CYRF-\cyrl.}%
+ \crefname{figure}%
+ {\CYRR\cyri\cyrs.}%
+ {\CYRR\cyri\cyrs.}%
+ \crefname{subfigure}%
+ {\CYRR\cyri\cyrs.}%
+ {\CYRR\cyri\cyrs.}%
+ \crefname{table}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ \crefname{subtable}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ \crefname{enumi}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \crefname{enumii}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \crefname{enumiii}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \crefname{enumiv}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \crefname{enumv}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \else% abbrev unset
+ \crefname{equation}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyrery}%
+ \crefname{figure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname{subfigure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname{table}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyra}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrery}%
+ \crefname{subtable}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyra}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrery}%
+ \crefname{enumi}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname{enumii}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname{enumiii}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname{enumiv}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname{enumv}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \fi%
+ \crefname{page}%
+ {\CYRS\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyra}%
+ {\CYRS\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyrery}%
+ \crefname{part}%
+ {\CYRCH\cyra\cyrs\cyrt\cyrsftsn}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri}%
+ \crefname{chapter}%
+ {\CYRG\cyrl\cyra\cyrv\cyra}%
+ {\CYRG\cyrl\cyra\cyrv\cyrery}%
+ \crefname{section}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \crefname{subsection}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \crefname{subsubsection}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\CYRR\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \crefname{appendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname{subappendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname{subsubappendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname{subsubsubappendix}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname{footnote}%
+ {\CYRS\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\CYRS\cyrn\cyro\cyrs\cyrk\cyri}%
+ \crefname{theorem}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyrery}%
+ \crefname{lemma}%
+ {\CYRL\cyre\cyrm\cyrm\cyra}%
+ {\CYRL\cyre\cyrm\cyrm\cyrery}%
+ \crefname{corollary}%
+ {\CYRV\cyrery\cyrv\cyro\cyrd}%
+ {\CYRV\cyrery\cyrv\cyro\cyrd\cyrery}%
+ \crefname{proposition}%
+ {\CYRU\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyre}%
+ {\CYRU\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyrya}%
+ \crefname{definition}%
+ {\CYRO\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyre}%
+ {\CYRO\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyrya}%
+ \crefname{result}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyrery}%
+ \crefname{example}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrr}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrr\cyrery}%
+ \crefname{remark}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyre}%
+ {\CYRP\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyrya}%
+ \crefname{note}%
+ {\CYRZ\cyra\cyrm\cyre\cyrt\cyrk\cyra}%
+ {\CYRZ\cyra\cyrm\cyre\cyrt\cyrk\cyri}%
+ \crefname{algorithm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyrery}%
+ \crefname{listing}%
+ {\CYRL\cyri\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\CYRL\cyri\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \crefname{line}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyri}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev% abbrev set
+ \crefname{equation}%
+ {\cyrf-\cyrl.}%
+ {\cyrf-\cyrl.}%
+ \crefname{chapter}%
+ {\cyrg\cyrl\cyra\cyrv.}%
+ {\cyrg\cyrl\cyra\cyrv.}%
+ \crefname{section}%
+ {\cyrr\cyra\cyrz\cyrd.}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl.}%
+ \crefname{subsection}%
+ {\cyrr\cyra\cyrz\cyrd.}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl.}%
+ \crefname{subsubsection}%
+ {\cyrr\cyra\cyrz\cyrd.}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl.}%
+ \crefname{appendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ \crefname{subappendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ \crefname{subsubappendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ \crefname{subsubsubappendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh.}%
+ \crefname{enumi}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{enumii}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{enumiii}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{enumiv}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{enumv}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{footnote}%
+ {\cyrs\cyrn\cyro\cyrs\cyrk.}%
+ {\cyrs\cyrn\cyro\cyrs\cyrk.}%
+ \crefname{figure}%
+ {\cyrr\cyri\cyrs.}%
+ {\cyrr\cyri\cyrs.}%
+ \crefname{subfigure}%
+ {\cyrr\cyri\cyrs.}%
+ {\cyrr\cyri\cyrs.}%
+ \crefname{table}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ \crefname{subtable}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ \crefname{theorem}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm.}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm.}%
+ \crefname{lemma}%
+ {\cyrl\cyre\cyrm\cyrm.}%
+ {\cyrl\cyre\cyrm\cyrm.}%
+ \crefname{corollary}%
+ {\cyrv\cyrery\cyrv\cyro\cyrd}%
+ {\cyrv\cyrery\cyrv\cyro\cyrd.}%
+ \crefname{proposition}%
+ {\cyru\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd.}%
+ {\cyru\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd.}%
+ \crefname{definition}%
+ {\cyro\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn.}%
+ {\cyro\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn.}%
+ \crefname{result}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt.}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt.}%
+ \crefname{example}%
+ {\cyrp\cyrr\cyri\cyrm.}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrr.}%
+ \crefname{remark}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrch.}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrch.}%
+ \crefname{note}%
+ {\cyrz\cyra\cyrm\cyre\cyrt\cyrk.}%
+ {\cyrz\cyra\cyrm\cyre\cyrt\cyrk.}%
+ \crefname{algorithm}%
+ {\cyra\cyrl\cyrg.}%
+ {\cyra\cyrl\cyrg.}%
+ \crefname{listing}%
+ {\cyrl\cyri\cyrs\cyrt\cyri\cyrn.}%
+ {\cyrl\cyri\cyrs\cyrt\cyri\cyrn\cyrg.}%
+ \crefname{line}%
+ {\cyrs\cyrt\cyrr\cyrk.}%
+ {\cyrs\cyrt\cyrr\cyrk.}%
+ \else% abbrev unset
+ \crefname{equation}%
+ {\cyrf\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\cyrf\cyro\cyrr\cyrm\cyru\cyrl\cyrery}%
+ \crefname{figure}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname{subfigure}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname{table}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyra}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrery}%
+ \crefname{subtable}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyra}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrery}%
+ \crefname{enumi}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname{enumii}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname{enumiii}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname{enumiv}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname{enumv}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyrery}%
+ \crefname{chapter}%
+ {\cyrg\cyrl\cyra\cyrv\cyra}%
+ {\cyrg\cyrl\cyra\cyrv\cyrery}%
+ \crefname{section}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \crefname{subsection}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \crefname{subsubsection}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl}%
+ {\cyrr\cyra\cyrz\cyrd\cyre\cyrl\cyrery}%
+ \crefname{appendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname{subappendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname{subsubappendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname{subsubsubappendix}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre}%
+ {\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyrya}%
+ \crefname{footnote}%
+ {\cyrs\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\cyrs\cyrn\cyro\cyrs\cyrk\cyri}%
+ \crefname{theorem}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyrery}%
+ \crefname{lemma}%
+ {\cyrl\cyre\cyrm\cyrm\cyra}%
+ {\cyrl\cyre\cyrm\cyrm\cyrery}%
+ \crefname{corollary}%
+ {\cyrv\cyrery\cyrv\cyro\cyrd}%
+ {\cyrv\cyrery\cyrv\cyro\cyrd\cyrery}%
+ \crefname{proposition}%
+ {\cyru\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyre}%
+ {\cyru\cyrt\cyrv\cyre\cyrr\cyrzh\cyrd\cyre\cyrn\cyri\cyrya}%
+ \crefname{definition}%
+ {\cyro\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyre}%
+ {\cyro\cyrp\cyrr\cyre\cyrd\cyre\cyrl\cyre\cyrn\cyri\cyrya}%
+ \crefname{result}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyrery}%
+ \crefname{example}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrr}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrr\cyrery}%
+ \crefname{remark}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyre}%
+ {\cyrp\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyrya}%
+ \crefname{note}%
+ {\cyrz\cyra\cyrm\cyre\cyrt\cyrk\cyra}%
+ {\cyrz\cyra\cyrm\cyre\cyrt\cyrk\cyri}%
+ \crefname{algorithm}%
+ {\cyra\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\cyra\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyrery}%
+ \crefname{listing}%
+ {\cyrl\cyri\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\cyrl\cyri\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \crefname{line}%
+ {\cyrs\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\cyrs\cyrt\cyrr\cyro\cyrk\cyri}%
+ \fi%
+ \crefname{page}%
+ {\cyrs\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyre}%
+ {\cyrs\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyra\cyrh}%
+ \crefname{part}%
+ {\cyrch\cyra\cyrs\cyrt\cyrsftsn}%
+ {\cyrch\cyra\cyrs\cyrt\cyri}%
+ \fi}% end \cref@loadlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Ukrainian}
+% \begin{macro}{ukrainian}
+% Ukrainian translations courtesy of Aleksander Gorohovski.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{ukrainian}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{--}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ \cyrii\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ \cyrii\nobreakspace}%
+% \end{macrocode}
+% We have to define the group conjunctions explicitly here, rather than
+% relying on fall-back definitions in terms of the above conjunctions
+% (see \cref{sec:code:default_formats}), in case any other language
+% option defines them explicitly and we need to override those.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ \cyrt\cyra\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble%
+ {, \cyra\ \cyrt\cyra\cyrk\cyro\cyrzh\nobreakspace}%
+ %
+ \Crefname@preamble{equation}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyri}%
+ \Crefname@preamble{figure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \Crefname@preamble{table}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrya}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrii}%
+ \Crefname@preamble{enumi}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \Crefname@preamble{chapter}%
+ {\CYRG\cyrl\cyra\cyrv\cyra}%
+ {\CYRG\cyrl\cyra\cyrv\cyri}%
+ \Crefname@preamble{section}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \Crefname@preamble{appendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \Crefname@preamble{footnote}%
+ {\CYRV\cyri\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\CYRV\cyri\cyrn\cyro\cyrs\cyrk\cyri}%
+ \Crefname@preamble{theorem}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyri}%
+ \Crefname@preamble{lemma}%
+ {\CYRL\cyre\cyrm\cyrm\cyra}%
+ {\CYRL\cyre\cyrm\cyrm\cyri}%
+ \Crefname@preamble{corollary}%
+ {\CYRV\cyri\cyrs\cyrn\cyro\cyrv\cyro\cyrk}%
+ {\CYRV\cyri\cyrs\cyrn\cyro\cyrv\cyrk\cyri}%
+ \Crefname@preamble{proposition}%
+ {\CYRT\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ {\CYRT\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ \Crefname@preamble{definition}%
+ {\CYRV\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ {\CYRV\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ \Crefname@preamble{result}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyri}%
+ \Crefname@preamble{example}%
+ {\CYRP\cyrr\cyri\cyrk\cyrl\cyra\cyrd}%
+ {\CYRP\cyrr\cyri\cyrk\cyrl\cyra\cyrd\cyri}%
+ \Crefname@preamble{remark}%
+ {\CYRP\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\CYRP\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \Crefname@preamble{note}%
+ {\CYRZ\cyra\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\CYRZ\cyra\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \Crefname@preamble{algorithm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyri}%
+ \Crefname@preamble{listing}%
+ {\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \Crefname@preamble{line}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyri}%
+ \Crefname@preamble{page}%
+ {\CYRS\cyrt\cyro\cyrr\cyri\cyrn\cyrk\cyra}%
+ {\CYRS\cyrt\cyro\cyrr\cyrii\cyrn\cyrk\cyri}%
+ \Crefname@preamble{part}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri\cyrn\cyra}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri\cyrn\cyri}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev% abbrev set
+ \crefname@preamble{equation}%
+ {\CYRF-\cyrl.}%
+ {\CYRF-\cyrl.}%
+ \crefname@preamble{figure}%
+ {\CYRR\cyri\cyrs.}%
+ {\CYRR\cyri\cyrs.}%
+ \crefname@preamble{table}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ \crefname@preamble{enumi}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \else%
+ \crefname@preamble{equation}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyri}%
+ \crefname@preamble{figure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname@preamble{table}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrya}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrii}%
+ \crefname@preamble{enumi}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \fi%
+ \crefname@preamble{chapter}%
+ {\CYRG\cyrl\cyra\cyrv\cyra}%
+ {\CYRG\cyrl\cyra\cyrv\cyri}%
+ \crefname@preamble{section}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \crefname@preamble{appendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname@preamble{footnote}%
+ {\CYRV\cyri\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\CYRV\cyri\cyrn\cyro\cyrs\cyrk\cyri}%
+ \crefname@preamble{theorem}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyri}%
+ \crefname@preamble{lemma}%
+ {\CYRL\cyre\cyrm\cyrm\cyra}%
+ {\CYRL\cyre\cyrm\cyrm\cyri}%
+ \crefname@preamble{corollary}%
+ {\CYRV\cyri\cyrs\cyrn\cyro\cyrv\cyro\cyrk}%
+ {\CYRV\cyri\cyrs\cyrn\cyro\cyrv\cyrk\cyri}%
+ \crefname@preamble{proposition}%
+ {\CYRT\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ {\CYRT\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ \crefname@preamble{definition}%
+ {\CYRV\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ {\CYRV\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ \crefname@preamble{result}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyri}%
+ \crefname@preamble{example}%
+ {\CYRP\cyrr\cyri\cyrk\cyrl\cyra\cyrd}%
+ {\CYRP\cyrr\cyri\cyrk\cyrl\cyra\cyrd\cyri}%
+ \crefname@preamble{remark}%
+ {\CYRP\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\CYRP\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \crefname@preamble{note}%
+ {\CYRZ\cyra\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\CYRZ\cyra\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \crefname@preamble{algorithm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyri}%
+ \crefname@preamble{listing}%
+ {\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \crefname@preamble{line}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyri}%
+ \crefname@preamble{page}%
+ {\CYRS\cyrt\cyro\cyrr\cyri\cyrn\cyrk\cyra}%
+ {\CYRS\cyrt\cyro\cyrr\cyrii\cyrn\cyrk\cyri}%
+ \crefname@preamble{part}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri\cyrn\cyra}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri\cyrn\cyri}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev% abbrev set
+ \crefname@preamble{equation}%
+ {\cyrf-\cyrl.}%
+ {\cyrf-\cyrl.}%
+ \crefname@preamble{figure}%
+ {\cyrr\cyri\cyrs.}%
+ {\cyrr\cyri\cyrs.}%
+ \crefname@preamble{table}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ \crefname@preamble{enumi}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname@preamble{chapter}%
+ {\cyrg\cyrl\cyra\cyrv.}%
+ {\cyrg\cyrl\cyra\cyrv.}%
+ \crefname@preamble{section}%
+ {\cyrr\cyro\cyrz\cyrd.}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl.}%
+ \crefname@preamble{appendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt.}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk.}%
+ \crefname@preamble{footnote}%
+ {\cyrv\cyri\cyrn\cyro\cyrs\cyrk.}%
+ {\cyrv\cyri\cyrn\cyro\cyrs\cyrk.}%
+ \crefname@preamble{theorem}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm.}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm.}%
+ \crefname@preamble{lemma}%
+ {\cyrl\cyre\cyrm\cyrm.}%
+ {\cyrl\cyre\cyrm\cyrm.}%
+ \crefname@preamble{corollary}%
+ {\cyrv\cyri\cyrs\cyrn\cyro\cyrv.}%
+ {\cyrv\cyri\cyrs\cyrn\cyro\cyrv\cyrk.}%
+ \crefname@preamble{proposition}%
+ {\cyrt\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn.}%
+ {\cyrt\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn.}%
+ \crefname@preamble{definition}%
+ {\cyrv\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn.}%
+ {\cyrv\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn.}%
+ \crefname@preamble{result}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt.}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt.}%
+ \crefname@preamble{example}%
+ {\cyrp\cyrr\cyri\cyrk\cyrl.}%
+ {\cyrp\cyrr\cyri\cyrk\cyrl\cyra\cyrd.}%
+ \crefname@preamble{remark}%
+ {\cyrp\cyrr\cyri\cyrm\cyrii\cyrt.}%
+ {\cyrp\cyrr\cyri\cyrm\cyrii\cyrt.}%
+ \crefname@preamble{note}%
+ {\cyrz\cyra\cyrm\cyrii\cyrt.}%
+ {\cyrz\cyra\cyrm\cyrii\cyrt.}%
+ \crefname@preamble{algorithm}%
+ {\cyra\cyrl\cyrg.}%
+ {\cyra\cyrl\cyrg.}%
+ \crefname@preamble{listing}%
+ {\cyrl\cyrii\cyrs\cyrt\cyri\cyrn.}%
+ {\cyrl\cyrii\cyrs\cyrt\cyri\cyrn\cyrg.}%
+ \crefname@preamble{line}%
+ {\cyrs\cyrt\cyrr\cyrk.}%
+ {\cyrs\cyrt\cyrr\cyrk.}%
+ \else% abbrev unset
+ \crefname@preamble{equation}%
+ {\cyrf\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\cyrf\cyro\cyrr\cyrm\cyru\cyrl\cyri}%
+ \crefname@preamble{figure}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname@preamble{table}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrya}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrii}%
+ \crefname@preamble{enumi}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname@preamble{chapter}%
+ {\cyrg\cyrl\cyra\cyrv\cyra}%
+ {\cyrg\cyrl\cyra\cyrv\cyri}%
+ \crefname@preamble{section}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \crefname@preamble{appendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname@preamble{footnote}%
+ {\cyrv\cyri\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\cyrv\cyri\cyrn\cyro\cyrs\cyrk\cyri}%
+ \crefname@preamble{theorem}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyri}%
+ \crefname@preamble{lemma}%
+ {\cyrl\cyre\cyrm\cyrm\cyra}%
+ {\cyrl\cyre\cyrm\cyrm\cyri}%
+ \crefname@preamble{corollary}%
+ {\cyrv\cyri\cyrs\cyrn\cyro\cyrv\cyro\cyrk}%
+ {\cyrv\cyri\cyrs\cyrn\cyro\cyrv\cyrk\cyri}%
+ \crefname@preamble{proposition}%
+ {\cyrt\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ {\cyrt\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ \crefname@preamble{definition}%
+ {\cyrv\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ {\cyrv\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ \crefname@preamble{result}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyri}%
+ \crefname@preamble{example}%
+ {\cyrp\cyrr\cyri\cyrk\cyrl\cyra\cyrd}%
+ {\cyrp\cyrr\cyri\cyrk\cyrl\cyra\cyrd\cyri}%
+ \crefname@preamble{remark}%
+ {\cyrp\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\cyrp\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \crefname@preamble{note}%
+ {\cyrz\cyra\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\cyrz\cyra\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \crefname@preamble{algorithm}%
+ {\cyra\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\cyra\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyri}%
+ \crefname@preamble{listing}%
+ {\cyrl\cyrii\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\cyrl\cyrii\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \crefname@preamble{line}%
+ {\cyrs\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\cyrs\cyrt\cyrr\cyro\cyrk\cyri}%
+ \fi%
+ \crefname@preamble{page}%
+ {\cyrs\cyrt\cyro\cyrr\cyri\cyrn\cyrc\cyrii}%
+ {\cyrs\cyrt\cyro\cyrr\cyrii\cyrn\cyrk\cyra\cyrh}%
+ \crefname@preamble{part}%
+ {\cyrch\cyra\cyrs\cyrt\cyri\cyrn\cyra}%
+ {\cyrch\cyra\cyrs\cyrt\cyri\cyrn\cyri}%
+ \fi%
+ \def\cref@language{ukrainian}%
+ }}% end \DeclareOption and \AtBeginDocument
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{ukrainian}{%
+ \PackageInfo{cleveref}{loaded `ukrainian' language definitions}%
+ \renewcommand{\crefrangeconjunction}{--}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ \cyrii\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ \cyrii\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}%
+ { \cyrt\cyra\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}%
+ {, \cyra\ \cyrt\cyra\cyrk\cyro\cyrzh\nobreakspace}%
+ %
+ \Crefname{equation}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyri}%
+ \Crefname{figure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \Crefname{subfigure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \Crefname{table}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrya}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrii}%
+ \Crefname{subtable}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrya}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrii}%
+ \Crefname{enumi}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \Crefname{enumii}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \Crefname{enumiii}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \Crefname{enumiv}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \Crefname{enumv}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \Crefname{chapter}%
+ {\CYRG\cyrl\cyra\cyrv\cyra}%
+ {\CYRG\cyrl\cyra\cyrv\cyri}%
+ \Crefname{section}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \Crefname{subsection}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \Crefname{subsubsection}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \Crefname{appendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \Crefname{subappendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \Crefname{subsubappendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \Crefname{subsubsubappendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \Crefname{footnote}%
+ {\CYRV\cyri\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\CYRV\cyri\cyrn\cyro\cyrs\cyrk\cyri}%
+ \Crefname{theorem}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyri}%
+ \Crefname{lemma}%
+ {\CYRL\cyre\cyrm\cyrm\cyra}%
+ {\CYRL\cyre\cyrm\cyrm\cyri}%
+ \Crefname{corollary}%
+ {\CYRV\cyri\cyrs\cyrn\cyro\cyrv\cyro\cyrk}%
+ {\CYRV\cyri\cyrs\cyrn\cyro\cyrv\cyrk\cyri}%
+ \Crefname{proposition}%
+ {\CYRT\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ {\CYRT\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ \Crefname{definition}%
+ {\CYRV\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ {\CYRV\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ \Crefname{result}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyri}%
+ \Crefname{example}%
+ {\CYRP\cyrr\cyri\cyrk\cyrl\cyra\cyrd}%
+ {\CYRP\cyrr\cyri\cyrk\cyrl\cyra\cyrd\cyri}%
+ \Crefname{remark}%
+ {\CYRP\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\CYRP\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \Crefname{note}%
+ {\CYRZ\cyra\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\CYRZ\cyra\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \Crefname{algorithm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyri}%
+ \Crefname{listing}%
+ {\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \Crefname{line}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyri}%
+ \Crefname{page}%
+ {\CYRS\cyrt\cyro\cyrr\cyri\cyrn\cyrk\cyra}%
+ {\CYRS\cyrt\cyro\cyrr\cyrii\cyrn\cyrk\cyri}%
+ \Crefname{part}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri\cyrn\cyra}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri\cyrn\cyri}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev% abbrev set
+ \crefname{equation}%
+ {\CYRF-\cyrl.}%
+ {\CYRF-\cyrl.}%
+ \crefname{figure}%
+ {\CYRR\cyri\cyrs.}%
+ {\CYRR\cyri\cyrs.}%
+ \crefname{subfigure}%
+ {\CYRR\cyri\cyrs.}%
+ {\CYRR\cyri\cyrs.}%
+ \crefname{table}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ \crefname{subtable}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ {\CYRT\cyra\cyrb\cyrl.}%
+ \crefname{enumi}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \crefname{enumii}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \crefname{enumiii}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \crefname{enumiv}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \crefname{enumv}%
+ {\CYRP.}%
+ {\CYRP.\cyrp.}%
+ \else% abbrev unset
+ \crefname{equation}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\CYRF\cyro\cyrr\cyrm\cyru\cyrl\cyri}%
+ \crefname{figure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname{subfigure}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\CYRR\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname{table}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrya}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrii}%
+ \crefname{subtable}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrya}%
+ {\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyrii}%
+ \crefname{enumi}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname{enumii}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname{enumiii}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname{enumiv}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname{enumv}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt}%
+ {\CYRP\cyru\cyrn\cyrk\cyrt\cyri}%
+ \fi%
+ \crefname{chapter}%
+ {\CYRG\cyrl\cyra\cyrv\cyra}%
+ {\CYRG\cyrl\cyra\cyrv\cyri}%
+ \crefname{section}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \crefname{subsection}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \crefname{subsubsection}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\CYRR\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \crefname{appendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname{subappendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname{subsubappendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname{subsubsubappendix}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\CYRD\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname{footnote}%
+ {\CYRV\cyri\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\CYRV\cyri\cyrn\cyro\cyrs\cyrk\cyri}%
+ \crefname{theorem}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\CYRT\cyre\cyro\cyrr\cyre\cyrm\cyri}%
+ \crefname{lemma}%
+ {\CYRL\cyre\cyrm\cyrm\cyra}%
+ {\CYRL\cyre\cyrm\cyrm\cyri}%
+ \crefname{corollary}%
+ {\CYRV\cyri\cyrs\cyrn\cyro\cyrv\cyro\cyrk}%
+ {\CYRV\cyri\cyrs\cyrn\cyro\cyrv\cyrk\cyri}%
+ \crefname{proposition}%
+ {\CYRT\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ {\CYRT\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ \crefname{definition}%
+ {\CYRV\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ {\CYRV\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ \crefname{result}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\CYRR\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyri}%
+ \crefname{example}%
+ {\CYRP\cyrr\cyri\cyrk\cyrl\cyra\cyrd}%
+ {\CYRP\cyrr\cyri\cyrk\cyrl\cyra\cyrd\cyri}%
+ \crefname{remark}%
+ {\CYRP\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\CYRP\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \crefname{note}%
+ {\CYRZ\cyra\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\CYRZ\cyra\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \crefname{algorithm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\CYRA\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyri}%
+ \crefname{listing}%
+ {\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \crefname{line}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\CYRS\cyrt\cyrr\cyro\cyrk\cyri}%
+ \crefname{page}%
+ {\CYRS\cyrt\cyro\cyrr\cyri\cyrn\cyrk\cyra}%
+ {\CYRS\cyrt\cyro\cyrr\cyrii\cyrn\cyrk\cyri}%
+ \crefname{part}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri\cyrn\cyra}%
+ {\CYRCH\cyra\cyrs\cyrt\cyri\cyrn\cyri}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev% abbrev set
+ \crefname{equation}%
+ {\cyrf-\cyrl.}%
+ {\cyrf-\cyrl.}%
+ \crefname{chapter}%
+ {\cyrg\cyrl\cyra\cyrv.}%
+ {\cyrg\cyrl\cyra\cyrv.}%
+ \crefname{section}%
+ {\cyrr\cyro\cyrz\cyrd.}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl.}%
+ \crefname{subsection}%
+ {\cyrr\cyro\cyrz\cyrd.}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl.}%
+ \crefname{subsubsection}%
+ {\cyrr\cyro\cyrz\cyrd.}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl.}%
+ \crefname{appendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt.}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk.}%
+ \crefname{subappendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt.}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk.}%
+ \crefname{subsubappendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt.}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk.}%
+ \crefname{subsubsubappendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt.}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk.}%
+ \crefname{enumi}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{enumii}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{enumiii}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{enumiv}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{enumv}%
+ {\cyrp.}%
+ {\cyrp.\cyrp.}%
+ \crefname{footnote}%
+ {\cyrv\cyri\cyrn\cyro\cyrs\cyrk.}%
+ {\cyrv\cyri\cyrn\cyro\cyrs\cyrk.}%
+ \crefname{figure}%
+ {\cyrr\cyri\cyrs.}%
+ {\cyrr\cyri\cyrs.}%
+ \crefname{subfigure}%
+ {\cyrr\cyri\cyrs.}%
+ {\cyrr\cyri\cyrs.}%
+ \crefname{table}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ \crefname{subtable}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ {\cyrt\cyra\cyrb\cyrl.}%
+ \crefname{theorem}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm.}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm.}%
+ \crefname{lemma}%
+ {\cyrl\cyre\cyrm\cyrm.}%
+ {\cyrl\cyre\cyrm\cyrm.}%
+ \crefname{corollary}%
+ {\cyrv\cyri\cyrs\cyrn\cyro\cyrv.}%
+ {\cyrv\cyri\cyrs\cyrn\cyro\cyrv\cyrk.}%
+ \crefname{proposition}%
+ {\cyrt\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn.}%
+ {\cyrt\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn.}%
+ \crefname{definition}%
+ {\cyrv\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn.}%
+ {\cyrv\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn.}%
+ \crefname{result}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt.}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt.}%
+ \crefname{example}%
+ {\cyrp\cyrr\cyri\cyrk\cyrl.}%
+ {\cyrp\cyrr\cyri\cyrk\cyrl\cyra\cyrd.}%
+ \crefname{remark}%
+ {\cyrp\cyrr\cyri\cyrm\cyrii\cyrt.}%
+ {\cyrp\cyrr\cyri\cyrm\cyrii\cyrt.}%
+ \crefname{note}%
+ {\cyrz\cyra\cyrm\cyrii\cyrt.}%
+ {\cyrz\cyra\cyrm\cyrii\cyrt.}%
+ \crefname{algorithm}%
+ {\cyra\cyrl\cyrg.}%
+ {\cyra\cyrl\cyrg.}%
+ \crefname{listing}%
+ {\cyrl\cyrii\cyrs\cyrt\cyri\cyrn.}%
+ {\cyrl\cyrii\cyrs\cyrt\cyri\cyrn\cyrg.}%
+ \crefname{line}%
+ {\cyrs\cyrt\cyrr\cyrk.}%
+ {\cyrs\cyrt\cyrr\cyrk.}%
+ \else% abbrev unset
+ \crefname{equation}%
+ {\cyrf\cyro\cyrr\cyrm\cyru\cyrl\cyra}%
+ {\cyrf\cyro\cyrr\cyrm\cyru\cyrl\cyri}%
+ \crefname{figure}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname{subfigure}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyro\cyrk}%
+ {\cyrr\cyri\cyrs\cyru\cyrn\cyrk\cyri}%
+ \crefname{table}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrya}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrii}%
+ \crefname{subtable}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrya}%
+ {\cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrii}%
+ \crefname{enumi}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname{enumii}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname{enumiii}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname{enumiv}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname{enumv}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt}%
+ {\cyrp\cyru\cyrn\cyrk\cyrt\cyri}%
+ \crefname{chapter}%
+ {\cyrg\cyrl\cyra\cyrv\cyra}%
+ {\cyrg\cyrl\cyra\cyrv\cyri}%
+ \crefname{section}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \crefname{subsection}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \crefname{subsubsection}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl}%
+ {\cyrr\cyro\cyrz\cyrd\cyrii\cyrl\cyri}%
+ \crefname{appendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname{subappendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname{subsubappendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname{subsubsubappendix}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyro\cyrk}%
+ {\cyrd\cyro\cyrd\cyra\cyrt\cyrk\cyri}%
+ \crefname{footnote}%
+ {\cyrv\cyri\cyrn\cyro\cyrs\cyrk\cyra}%
+ {\cyrv\cyri\cyrn\cyro\cyrs\cyrk\cyri}%
+ \crefname{theorem}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+ {\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyri}%
+ \crefname{lemma}%
+ {\cyrl\cyre\cyrm\cyrm\cyra}%
+ {\cyrl\cyre\cyrm\cyrm\cyri}%
+ \crefname{corollary}%
+ {\cyrv\cyri\cyrs\cyrn\cyro\cyrv\cyro\cyrk}%
+ {\cyrv\cyri\cyrs\cyrn\cyro\cyrv\cyrk\cyri}%
+ \crefname{proposition}%
+ {\cyrt\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ {\cyrt\cyrv\cyre\cyrr\cyrd\cyrzh\cyre\cyrn\cyrn\cyrya}%
+ \crefname{definition}%
+ {\cyrv\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ {\cyrv\cyri\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}%
+ \crefname{result}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt}%
+ {\cyrr\cyre\cyrz\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrt\cyri}%
+ \crefname{example}%
+ {\cyrp\cyrr\cyri\cyrk\cyrl\cyra\cyrd}%
+ {\cyrp\cyrr\cyri\cyrk\cyrl\cyra\cyrd\cyri}%
+ \crefname{remark}%
+ {\cyrp\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\cyrp\cyrr\cyri\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \crefname{note}%
+ {\cyrz\cyra\cyrm\cyrii\cyrt\cyrk\cyra}%
+ {\cyrz\cyra\cyrm\cyrii\cyrt\cyrk\cyri}%
+ \crefname{algorithm}%
+ {\cyra\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm}%
+ {\cyra\cyrl\cyrg\cyro\cyrr\cyri\cyrt\cyrm\cyri}%
+ \crefname{listing}%
+ {\cyrl\cyrii\cyrs\cyrt\cyri\cyrn\cyrg}%
+ {\cyrl\cyrii\cyrs\cyrt\cyri\cyrn\cyrg\cyri}%
+ \crefname{line}%
+ {\cyrs\cyrt\cyrr\cyro\cyrk\cyra}%
+ {\cyrs\cyrt\cyrr\cyro\cyrk\cyri}%
+ \fi%
+ \crefname{page}%
+ {\cyrs\cyrt\cyro\cyrr\cyri\cyrn\cyrc\cyrii}%
+ {\cyrs\cyrt\cyro\cyrr\cyrii\cyrn\cyrk\cyra\cyrh}%
+ \crefname{part}%
+ {\cyrch\cyra\cyrs\cyrt\cyri\cyrn\cyra}%
+ {\cyrch\cyra\cyrs\cyrt\cyri\cyrn\cyri}%
+ \fi}% end \cref@loadlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Norwegian}
+% \begin{macro}{norsk}
+% Norwegian translations kindly donated by Sveinung Heggen.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{norsk}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ til\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ og\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ og\nobreakspace}%
+% \end{macrocode}
+% We have to define the group conjunctions explicitly here, rather than
+% relying on fall-back definitions in terms of the above conjunctions
+% (see \cref{sec:code:default_formats}), in case any other language
+% option defines them explicitly and we need to override those.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ og\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{ og\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Likning}{Likningene}%
+ \Crefname@preamble{figure}{Figur}{Figurene}%
+ \Crefname@preamble{table}{Tabell}{Tabellene}%
+ \Crefname@preamble{page}{Side}{Siden}%
+ \Crefname@preamble{part}{Del}{Delene}%
+ \Crefname@preamble{chapter}{Kapittel}{Kapitlene}%
+ \Crefname@preamble{section}{Avsnitt}{Avsnittene}%
+ \Crefname@preamble{appendix}{Tillegg}{Tilleggene}%
+ \Crefname@preamble{enumi}{Punkt}{Punktene}%
+ \Crefname@preamble{footnote}{Fotnote}{Fotnotene}%
+ \Crefname@preamble{theorem}{Teorem}{Teoremene}%
+ \Crefname@preamble{lemma}{Lemma}{Lemma}%
+ \Crefname@preamble{corollary}{Korollar}{Korollarene}%
+ \Crefname@preamble{proposition}{P\aa stand}{P\aa standene}%
+ \Crefname@preamble{definition}{Definisjon}{Definisjonene}%
+ \Crefname@preamble{result}{Resultat}{Resultatene}%
+ \Crefname@preamble{example}{Eksempel}{Eksemplene}%
+ \Crefname@preamble{remark}{Bemerkning}{Bemerkningene}%
+ \Crefname@preamble{note}{Note}{Notene}%
+ \Crefname@preamble{algorithm}{Algoritme}{Algoritmene}%
+ \Crefname@preamble{listing}{Opplisting}{Opplistingene}%
+ \Crefname@preamble{line}{Linje}{Linjene}%
+ %
+ \if@cref@capitalise%
+ \crefname@preamble{page}{Side}{Siden}%
+ \crefname@preamble{equation}{Likning}{Likningene}%
+ \crefname@preamble{figure}{Figur}{Figurene}%
+ \crefname@preamble{table}{Tabell}{Tabellene}%
+ \crefname@preamble{part}{Del}{Delene}%
+ \crefname@preamble{chapter}{Kapittel}{Kapitlene}%
+ \crefname@preamble{section}{Avsnitt}{Avsnittene}%
+ \crefname@preamble{appendix}{Tillegg}{Tilleggene}%
+ \crefname@preamble{enumi}{Punkt}{Punktene}%
+ \crefname@preamble{footnote}{Fotnote}{Fotnotene}%
+ \crefname@preamble{theorem}{Teorem}{Teoremene}%
+ \crefname@preamble{lemma}{Lemma}{Lemma}%
+ \crefname@preamble{corollary}{Korollar}{Korollarene}%
+ \crefname@preamble{proposition}{P\aa stand}{P\aa standene}%
+ \crefname@preamble{definition}{Definisjon}{Definisjonene}%
+ \crefname@preamble{result}{Resultat}{Resultatene}%
+ \crefname@preamble{example}{Eksempel}{Eksemplene}%
+ \crefname@preamble{remark}{Bemerkning}{Bemerkningene}%
+ \crefname@preamble{note}{Note}{Notene}%
+ \crefname@preamble{algorithm}{Algoritme}{Algoritmene}%
+ \crefname@preamble{listing}{Opplisting}{Opplistingene}%
+ \crefname@preamble{line}{Linje}{Linjene}%
+ %
+ \else%
+ \crefname@preamble{equation}{likning}{likningene}%
+ \crefname@preamble{figure}{figur}{figurene}%
+ \crefname@preamble{table}{tabell}{tabeller}%
+ \crefname@preamble{page}{side}{siden}%
+ \crefname@preamble{part}{del}{delene}%
+ \crefname@preamble{chapter}{kapittel}{kapitlene}%
+ \crefname@preamble{section}{avsnitt}{avsnittene}%
+ \crefname@preamble{appendix}{tillegg}{tilleggene}%
+ \crefname@preamble{enumi}{punkt}{punktene}%
+ \crefname@preamble{footnote}{fotnote}{fotnotene}%
+ \crefname@preamble{theorem}{teorem}{teoremene}%
+ \crefname@preamble{lemma}{lemma}{lemma}%
+ \crefname@preamble{corollary}{korollar}{korollarene}%
+ \crefname@preamble{proposition}{p\aa stand}{p\aa standene}%
+ \crefname@preamble{definition}{definisjon}{definisjonene}%
+ \crefname@preamble{result}{resultat}{resultatene}%
+ \crefname@preamble{example}{eksempel}{eksemplene}%
+ \crefname@preamble{remark}{bemerkning}{bemerkningene}%
+ \crefname@preamble{note}{note}{notene}%
+ \crefname@preamble{algorithm}{algoritme}{algoritmene}%
+ \crefname@preamble{listing}{opplisting}{opplistingene}%
+ \crefname@preamble{line}{linje}{linjene}%
+ \fi%
+ \def\cref@language{norsk}%
+ }}% end \DeclareOption and \AtBeginDocument
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{norsk}{%
+ \PackageInfo{cleveref}{loaded `norsk' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ til\nobreakspace}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ og\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ og\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ og\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ og\nobreakspace}%
+ %
+ \Crefname{equation}{Likning}{Likningene}%
+ \Crefname{figure}{Figur}{Figurene}%
+ \Crefname{subfigure}{Figur}{Figurene}%
+ \Crefname{table}{Tabell}{Tabellene}%
+ \Crefname{subtable}{Tabell}{Tabellene}%
+ \Crefname{page}{Side}{Siden}%
+ \Crefname{part}{Del}{Delene}%
+ \Crefname{chapter}{Kapittel}{Kapitlene}%
+ \Crefname{section}{Avsnitt}{Avsnittene}%
+ \Crefname{subsection}{Avsnitt}{Avsnittene}%
+ \Crefname{subsubsection}{Avsnitt}{Avsnittene}%
+ \Crefname{appendix}{Tillegg}{Tilleggene}%
+ \Crefname{subappendix}{Tillegg}{Tilleggene}%
+ \Crefname{subsubappendix}{Tillegg}{Tilleggene}%
+ \Crefname{subsubsubappendix}{Tillegg}{Tilleggene}%
+ \Crefname{enumi}{Punkt}{Punktene}%
+ \Crefname{enumii}{Punkt}{Punktene}%
+ \Crefname{enumiii}{Punkt}{Punktene}%
+ \Crefname{enumiv}{Punkt}{Punktene}%
+ \Crefname{enumv}{Punkt}{Punktene}%
+ \Crefname{footnote}{Fotnote}{Fotnotene}%
+ \Crefname{theorem}{Teorem}{Teoremene}%
+ \Crefname{lemma}{Lemma}{Lemma}%
+ \Crefname{corollary}{Korollar}{Korollarene}%
+ \Crefname{proposition}{P\aa stand}{P\aa standene}%
+ \Crefname{definition}{Definisjon}{Definisjonene}%
+ \Crefname{result}{Resultat}{Resultatene}%
+ \Crefname{example}{Eksempel}{Eksemplene}%
+ \Crefname{remark}{Bemerkning}{Bemerkningene}%
+ \Crefname{note}{Note}{Notene}%
+ \Crefname{algorithm}{Algoritme}{Algoritmene}%
+ \Crefname{listing}{Opplisting}{Opplistingene}%
+ \Crefname{line}{Linje}{Linjene}%
+ %
+ \if@cref@capitalise%
+ \crefname{equation}{Likning}{Likningene}%
+ \crefname{figure}{Figur}{Figurene}%
+ \crefname{subfigure}{Figur}{Figurene}%
+ \crefname{table}{Tabell}{Tabellene}%
+ \crefname{subtable}{Tabell}{Tabellene}%
+ \crefname{page}{Side}{Siden}%
+ \crefname{part}{Del}{Delene}%
+ \crefname{chapter}{Kapittel}{Kapitlene}%
+ \crefname{section}{Avsnitt}{Avsnittene}%
+ \crefname{subsection}{Avsnitt}{Avsnittene}%
+ \crefname{subsubsection}{Avsnitt}{Avsnittene}%
+ \crefname{appendix}{Tillegg}{Tilleggene}%
+ \crefname{subappendix}{Tillegg}{Tilleggene}%
+ \crefname{subsubappendix}{Tillegg}{Tilleggene}%
+ \crefname{subsubsubappendix}{Tillegg}{Tilleggene}%
+ \crefname{enumi}{Punkt}{Punktene}%
+ \crefname{enumii}{Punkt}{Punktene}%
+ \crefname{enumiii}{Punkt}{Punktene}%
+ \crefname{enumiv}{Punkt}{Punktene}%
+ \crefname{enumv}{Punkt}{Punktene}%
+ \crefname{footnote}{Fotnote}{Fotnotene}%
+ \crefname{theorem}{Teorem}{Teoremene}%
+ \crefname{lemma}{Lemma}{Lemma}%
+ \crefname{corollary}{Korollar}{Korollarene}%
+ \crefname{proposition}{P\aa stand}{P\aa standene}%
+ \crefname{definition}{Definisjon}{Definisjonene}%
+ \crefname{result}{Resultat}{Resultatene}%
+ \crefname{example}{Eksempel}{Eksemplene}%
+ \crefname{remark}{Bemerkning}{Bemerkningene}%
+ \crefname{note}{Note}{Notene}%
+ \crefname{algorithm}{Algoritme}{Algoritmene}%
+ \crefname{listing}{Opplisting}{Opplistingene}%
+ \crefname{line}{Linje}{Linjene}%
+ %
+ \else%
+ \crefname{equation}{likning}{likningene}%
+ \crefname{figure}{figur}{figurene}%
+ \crefname{subfigure}{figur}{figurene}%
+ \crefname{table}{tabell}{tabellene}%
+ \crefname{subtable}{tabell}{tabellene}%
+ \crefname{page}{side}{siden}%
+ \crefname{part}{del}{delene}%
+ \crefname{chapter}{kapittel}{kapitlene}%
+ \crefname{section}{avsnitt}{avsnittene}%
+ \crefname{subsection}{avsnitt}{avsnittene}%
+ \crefname{subsubsection}{avsnitt}{avsnittene}%
+ \crefname{appendix}{tillegg}{tilleggene}%
+ \crefname{subappendix}{tillegg}{tilleggene}%
+ \crefname{subsubappendix}{tillegg}{tilleggene}%
+ \crefname{subsubsubappendix}{tillegg}{tilleggene}%
+ \crefname{enumi}{punkt}{punktene}%
+ \crefname{enumii}{punkt}{punktene}%
+ \crefname{enumiii}{punkt}{punktene}%
+ \crefname{enumiv}{punkt}{punktene}%
+ \crefname{enumv}{punkt}{punktene}%
+ \crefname{footnote}{fotnote}{fotnotene}%
+ \crefname{theorem}{teorem}{teoremene}%
+ \crefname{lemma}{lemma}{lemma}%
+ \crefname{corollary}{korollar}{korollarene}%
+ \crefname{proposition}{p\aa stand}{p\aa standene}%
+ \crefname{definition}{definisjon}{definisjonene}%
+ \crefname{result}{resultat}{resultatene}%
+ \crefname{example}{eksempel}{eksemplene}%
+ \crefname{remark}{bemerkning}{bemerkningene}%
+ \crefname{note}{note}{notene}%
+ \crefname{algorithm}{algoritme}{algoritmene}%
+ \crefname{listing}{opplisting}{opplistingene}%
+ \crefname{line}{linje}{linjene}%
+ \fi}% end \cref@loadlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Danish}
+% \begin{macro}{danish}
+% Danish translations courtesy of Benjamin H{\o}yer.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{danish}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ til\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ og\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ og\nobreakspace}%
+% \end{macrocode}
+% We have to define the group conjunctions explicitly here, rather than
+% relying on fall-back definitions in terms of the above conjunctions
+% (see \cref{sec:code:default_formats}), in case any other language
+% option defines them explicitly and we need to override those.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ og\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{ og\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Ligning}{Ligninger}%
+ \Crefname@preamble{figure}{Figur}{Figurer}%
+ \Crefname@preamble{table}{Tabel}{Tabeller}%
+ \Crefname@preamble{page}{Side}{Sider}%
+ \Crefname@preamble{part}{Del}{Dele}%
+ \Crefname@preamble{chapter}{Kapitel}{Kapitler}%
+ \Crefname@preamble{section}{Afsnit}{Afsnit}%
+ \Crefname@preamble{appendix}{Appendiks}{Appendiks}%
+ \Crefname@preamble{enumi}{Punkt}{Punkter}%
+ \Crefname@preamble{footnote}{Fodnote}{Fodnoter}%
+ \Crefname@preamble{theorem}{Teorem}{Teoremer}%
+ \Crefname@preamble{lemma}{Lemma}{Lemma}%
+ \Crefname@preamble{corollary}{F\o lgeslutning}{F\o lgeslutninger}%
+ \Crefname@preamble{proposition}{Udsagn}{Udsagn}%
+ \Crefname@preamble{definition}{Definition}{Definitioner}%
+ \Crefname@preamble{result}{Resultat}{Resultater}%
+ \Crefname@preamble{example}{Eksempel}{Eksempler}%
+ \Crefname@preamble{remark}{Bem\ae rkning}{Bem\ae rkninger}%
+ \Crefname@preamble{note}{Note}{Noter}%
+ \Crefname@preamble{algorithm}{Algoritme}{Algoritmer}%
+ \Crefname@preamble{line}{Linje}{Linjer}%
+ %
+ \if@cref@capitalise%
+ \crefname@preamble{equation}{Ligning}{Ligninger}%
+ \crefname@preamble{figure}{Figur}{Figurer}%
+ \crefname@preamble{table}{Tabel}{Tabeller}%
+ \crefname@preamble{page}{Side}{Sider}%
+ \crefname@preamble{part}{Del}{Dele}%
+ \crefname@preamble{chapter}{Kapitel}{Kapitler}%
+ \crefname@preamble{section}{Afsnit}{Afsnit}%
+ \crefname@preamble{appendix}{Appendiks}{Appendiks}%
+ \crefname@preamble{enumi}{Punkt}{Punkter}%
+ \crefname@preamble{footnote}{Fodnote}{Fodnoter}%
+ \crefname@preamble{theorem}{Teorem}{Teoremer}%
+ \crefname@preamble{lemma}{Lemma}{Lemma}%
+ \crefname@preamble{corollary}{F\o lgeslutning}{F\o lgeslutninger}%
+ \crefname@preamble{proposition}{Udsagn}{Udsagn}%
+ \crefname@preamble{definition}{Definition}{Definitioner}%
+ \crefname@preamble{result}{Resultat}{Resultater}%
+ \crefname@preamble{example}{Eksempel}{Eksempler}%
+ \crefname@preamble{remark}{Bem\ae rkning}{Bem\ae rkninger}%
+ \crefname@preamble{note}{Note}{Noter}%
+ \crefname@preamble{algorithm}{Algoritme}{Algoritmer}%
+ \crefname@preamble{line}{Linje}{Linjer}%
+ %
+ \else%
+ \crefname@preamble{equation}{ligning}{ligninger}%
+ \crefname@preamble{figure}{figur}{figurer}%
+ \crefname@preamble{table}{tabel}{tabeller}%
+ \crefname@preamble{page}{side}{sider}%
+ \crefname@preamble{part}{del}{dele}%
+ \crefname@preamble{chapter}{kapitel}{kapitler}%
+ \crefname@preamble{section}{afsnit}{afsnit}%
+ \crefname@preamble{appendix}{appendiks}{appendiks}%
+ \crefname@preamble{enumi}{punkt}{punkter}%
+ \crefname@preamble{footnote}{fodnote}{fodnoter}%
+ \crefname@preamble{theorem}{teorem}{teoremer}%
+ \crefname@preamble{lemma}{lemma}{lemma}%
+ \crefname@preamble{corollary}{f\o lgeslutning}{f\o lgeslutninger}%
+ \crefname@preamble{proposition}{udsagn}{udsagn}%
+ \crefname@preamble{definition}{definition}{definitioner}%
+ \crefname@preamble{result}{resultat}{resultater}%
+ \crefname@preamble{example}{eksempel}{eksempler}%
+ \crefname@preamble{remark}{bem\ae rkning}{bem\ae rkninger}%
+ \crefname@preamble{note}{note}{noter}%
+ \crefname@preamble{algorithm}{algoritme}{algoritmer}%
+ \crefname@preamble{line}{linje}{linjer}%
+ \fi%
+ \def\cref@language{danish}%
+ }}% end \DeclareOption and \AtBeginDocument
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{danish}{%
+ \PackageInfo{cleveref}{loaded `danish' language definitions}%
+ \renewcommand{\crefrangeconjunction@preamble}{ til\nobreakspace}%
+ \renewcommand\crefrangepreconjunction@preamble{}%
+ \renewcommand\crefrangepostconjunction@preamble{}%
+ \renewcommand{\crefpairconjunction@preamble}{ og\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction@preamble}{, }%
+ \renewcommand{\creflastconjunction@preamble}{ og\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction@preamble}{ og\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction@preamble}{, }%
+ \renewcommand{\creflastgroupconjunction@preamble}{ og\nobreakspace}%
+ %
+ \Crefname{equation}{Ligning}{Ligninger}%
+ \Crefname{figure}{Figur}{Figurer}%
+ \Crefname{subfigure}{Figur}{Figurer}%
+ \Crefname{table}{Tabel}{Tabeller}%
+ \Crefname{subtable}{Tabel}{Tabeller}%
+ \Crefname{page}{Side}{Sider}%
+ \Crefname{part}{Del}{Dele}%
+ \Crefname{chapter}{Kapitel}{Kapitler}%
+ \Crefname{section}{Afsnit}{Afsnit}%
+ \Crefname{subsection}{Afsnit}{Afsnit}%
+ \Crefname{subsubsection}{Afsnit}{Afsnit}%
+ \Crefname{appendix}{Appendiks}{Appendiks}%
+ \Crefname{subappendix}{Appendiks}{Appendiks}%
+ \Crefname{subsubappendix}{Appendiks}{Appendiks}%
+ \Crefname{subsubsubappendix}{Appendiks}{Appendiks}%
+ \Crefname{enumi}{Punkt}{Punkter}%
+ \Crefname{enumii}{Punkt}{Punkter}%
+ \Crefname{enumiii}{Punkt}{Punkter}%
+ \Crefname{enumiv}{Punkt}{Punkter}%
+ \Crefname{enumv}{Punkt}{Punkter}%
+ \Crefname{footnote}{Fodnote}{Fodnoter}%
+ \Crefname{theorem}{Teorem}{Teoremer}%
+ \Crefname{lemma}{Lemma}{Lemma}%
+ \Crefname{corollary}{F\o lgeslutning}{F\o lgeslutninger}%
+ \Crefname{proposition}{Udsagn}{Udsagn}%
+ \Crefname{definition}{Definition}{Definitioner}%
+ \Crefname{result}{Resultat}{Resultater}%
+ \Crefname{example}{Eksempel}{Eksempler}%
+ \Crefname{remark}{Bem\ae rkning}{Bem\ae rkninger}%
+ \Crefname{note}{Note}{Noter}%
+ \Crefname{algorithm}{Algoritme}{Algoritmer}%
+ \Crefname{line}{Linje}{Linjer}%
+ %
+ \if@cref@capitalise%
+ \crefname{equation}{Ligning}{Ligninger}%
+ \crefname{figure}{Figur}{Figurer}%
+ \crefname{subfigure}{Figur}{Figurer}%
+ \crefname{table}{Tabel}{Tabeller}%
+ \crefname{subtable}{Tabel}{Tabeller}%
+ \crefname{page}{Side}{Sider}%
+ \crefname{part}{Del}{Dele}%
+ \crefname{chapter}{Kapitel}{Kapitler}%
+ \crefname{section}{Afsnit}{Afsnit}%
+ \crefname{subsection}{Afsnit}{Afsnit}%
+ \crefname{subsubsection}{Afsnit}{Afsnit}%
+ \crefname{appendix}{Appendiks}{Appendiks}%
+ \crefname{subappendix}{Appendiks}{Appendiks}%
+ \crefname{subsubappendix}{Appendiks}{Appendiks}%
+ \crefname{subsubsubappendix}{Appendiks}{Appendiks}%
+ \crefname{enumi}{Punkt}{Punkter}%
+ \crefname{enumii}{Punkt}{Punkter}%
+ \crefname{enumiii}{Punkt}{Punkter}%
+ \crefname{enumiv}{Punkt}{Punkter}%
+ \crefname{enumv}{Punkt}{Punkter}%
+ \crefname{footnote}{Fodnote}{Fodnoter}%
+ \crefname{theorem}{Teorem}{Teoremer}%
+ \crefname{lemma}{Lemma}{Lemma}%
+ \crefname{corollary}{F\o lgeslutning}{F\o lgeslutninger}%
+ \crefname{proposition}{Udsagn}{Udsagn}%
+ \crefname{definition}{Definition}{Definitioner}%
+ \crefname{result}{Resultat}{Resultater}%
+ \crefname{example}{Eksempel}{Eksempler}%
+ \crefname{remark}{Bem\ae rkning}{Bem\ae rkninger}%
+ \crefname{note}{Note}{Noter}%
+ \crefname{algorithm}{Algoritme}{Algoritmer}%
+ \crefname{line}{Linje}{Linjer}%
+ %
+ \else%
+ \crefname{equation}{ligning}{ligninger}%
+ \crefname{figure}{figur}{figurer}%
+ \crefname{subfigure}{figur}{figurer}%
+ \crefname{table}{tabel}{tabeller}%
+ \crefname{subtable}{tabel}{tabeller}%
+ \crefname{page}{side}{sider}%
+ \crefname{part}{del}{dele}%
+ \crefname{chapter}{kapitel}{kapitler}%
+ \crefname{section}{afsnit}{afsnit}%
+ \crefname{subsection}{afsnit}{afsnit}%
+ \crefname{subsubsection}{afsnit}{afsnit}%
+ \crefname{appendix}{appendiks}{appendiks}%
+ \crefname{subappendix}{appendiks}{appendiks}%
+ \crefname{subsubappendix}{appendiks}{appendiks}%
+ \crefname{subsubsubappendix}{appendiks}{appendiks}%
+ \crefname{enumi}{punkt}{punkter}%
+ \crefname{enumii}{punkt}{punkter}%
+ \crefname{enumiii}{punkt}{punkter}%
+ \crefname{enumiv}{punkt}{punkter}%
+ \crefname{enumv}{punkt}{punkter}%
+ \crefname{footnote}{fodnote}{fodnoter}%
+ \crefname{theorem}{teorem}{teoremer}%
+ \crefname{lemma}{lemma}{lemma}%
+ \crefname{corollary}{f\o lgeslutning}{f\o lgeslutninger}%
+ \crefname{proposition}{udsagn}{udsagn}%
+ \crefname{definition}{definition}{definitioner}%
+ \crefname{result}{resultat}{resultater}%
+ \crefname{example}{eksempel}{eksempler}%
+ \crefname{remark}{bem\ae rkning}{bem\ae rkninger}%
+ \crefname{note}{note}{noter}%
+ \crefname{algorithm}{algoritme}{algoritmer}%
+ \crefname{line}{linje}{linjer}%
+ \fi}% end \cref@loadlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Esperanto}
+% \begin{macro}{esperanto}
+% Esperanto translations courtesy of Johannes Mueller.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{esperanto}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ \^gis\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ kaj\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ kaj\nobreakspace}%
+ \def\crefpairgroupconjunction@preamble{ kaj\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{ kaj\nobreakspace}%
+%
+ \Crefname@preamble{equation}{Ekvacio}{Ekvacioj}%
+ \Crefname@preamble{part}{Parto}{Partoj}%
+ \Crefname@preamble{chapter}{\^Capitro}{\^Capitroj}%
+ \Crefname@preamble{section}{Sekcio}{Sekcioj}%
+ \Crefname@preamble{appendix}{Aldono}{Aldonoj}%
+ \Crefname@preamble{enumi}{Punkto}{Punktoj}%
+ \Crefname@preamble{footnote}{Piednoto}{Piednotoj}%
+ \Crefname@preamble{figure}{Figuro}{Figuroj}%
+ \Crefname@preamble{table}{Tabelo}{Tabeloj}%
+ \Crefname@preamble{theorem}{Teoremo}{Teoremoj}%
+ \Crefname@preamble{lemma}{Lemo}{Lemoj}%
+ \Crefname@preamble{corollary}{Korolario}{Korolarioj}%
+ \Crefname@preamble{proposition}{Propozicio}{Propozicioj}%
+ \Crefname@preamble{definition}{Defino}{Definoj}%
+ \Crefname@preamble{result}{Rezulto}{Rezultoj}%
+ \Crefname@preamble{example}{Ekzemplo}{Ekzemploj}%
+ \Crefname@preamble{remark}{Rimarko}{Rimarkoj}%
+ \Crefname@preamble{note}{Noto}{Notoj}%
+ \Crefname@preamble{algorithm}{Algoritmo}{Algoritmoj}%
+ \Crefname@preamble{listing}{Listado}{Listadoj}%
+ \Crefname@preamble{line}{Linio}{Linioj}%
+%
+ \if@cref@capitalise%
+ \crefname@preamble{equation}{Ekvacio}{Ekvacioj}%
+ \crefname@preamble{part}{Parto}{Partoj}%
+ \crefname@preamble{chapter}{\^Capitro}{\^Capitroj}%
+ \crefname@preamble{section}{Sekcio}{Sekcioj}%
+ \crefname@preamble{appendix}{Aldono}{Aldonoj}%
+ \crefname@preamble{enumi}{Punkto}{Punktoj}%
+ \crefname@preamble{footnote}{Piednoto}{Piednotoj}%
+ \crefname@preamble{figure}{Figuro}{Figuroj}%
+ \crefname@preamble{table}{Tabelo}{Tabeloj}%
+ \crefname@preamble{theorem}{Teoremo}{Teoremoj}%
+ \crefname@preamble{lemma}{Lemo}{Lemoj}%
+ \crefname@preamble{corollary}{Korolario}{Korolarioj}%
+ \crefname@preamble{proposition}{Propozicio}{Propozicioj}%
+ \crefname@preamble{definition}{Defino}{Definoj}%
+ \crefname@preamble{result}{Rezulto}{Rezultoj}%
+ \crefname@preamble{example}{Ekzemplo}{Ekzemploj}%
+ \crefname@preamble{remark}{Rimarko}{Rimarkoj}%
+ \crefname@preamble{note}{Noto}{Notoj}%
+ \crefname@preamble{algorithm}{Algoritmo}{Algoritmoj}%
+ \crefname@preamble{listing}{Listado}{Listadoj}%
+ \crefname@preamble{line}{Linio}{Linioj}%
+%
+ \else%
+ \crefname@preamble{equation}{ekvacio}{ekvacioj}%
+ \crefname@preamble{part}{parto}{partoj}%
+ \crefname@preamble{chapter}{\^capitro}{\^capitroj}%
+ \crefname@preamble{section}{sekcio}{sekcioj}%
+ \crefname@preamble{appendix}{aldono}{aldonoj}%
+ \crefname@preamble{enumi}{punkto}{punktoj}%
+ \crefname@preamble{footnote}{piednoto}{piednotoj}%
+ \crefname@preamble{figure}{figuro}{figuroj}%
+ \crefname@preamble{table}{tabelo}{tabeloj}%
+ \crefname@preamble{theorem}{teoremo}{teoremoj}%
+ \crefname@preamble{lemma}{lemo}{lemoj}%
+ \crefname@preamble{corollary}{korolario}{korolarioj}%
+ \crefname@preamble{proposition}{propozicio}{propozicioj}%
+ \crefname@preamble{definition}{defino}{definoj}%
+ \crefname@preamble{result}{rezulto}{rezultoj}%
+ \crefname@preamble{example}{ekzemplo}{ekzemploj}%
+ \crefname@preamble{remark}{rimarko}{rimarkoj}%
+ \crefname@preamble{note}{noto}{notoj}%
+ \crefname@preamble{algorithm}{algoritmo}{algoritmoj}%
+ \crefname@preamble{listing}{listado}{listadoj}%
+ \crefname@preamble{line}{linio}{linioj}%
+ \fi%
+ \def\cref@language{esperanto}%
+ }}% end \DeclareOption and \AtBeginDocument
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{esperanto}{%
+ \PackageInfo{cleveref}{loaded `esperanto' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ \^gis\nobreakspace}%
+ \renewcommand{\crefrangepreconjunction}{}%
+ \renewcommand{\crefrangepostconjunction}{}%
+ \renewcommand{\crefpairconjunction}{ kaj\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ kaj\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ kaj\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ kaj\nobreakspace}%
+%
+ \Crefname{equation}{Ekvacio}{Ekvacioj}%
+ \Crefname{part}{Parto}{Partoj}%
+ \Crefname{chapter}{\^Capitro}{\^Capitroj}%
+ \Crefname{section}{Sekcio}{Sekcioj}%
+ \Crefname{appendix}{Aldono}{Aldonoj}%
+ \Crefname{enumi}{Punkto}{Punktoj}%
+ \Crefname{footnote}{Piednoto}{Piednotoj}%
+ \Crefname{figure}{Figuro}{Figuroj}%
+ \Crefname{table}{Tabelo}{Tabeloj}%
+ \Crefname{theorem}{Teoremo}{Teoremoj}%
+ \Crefname{lemma}{Lemo}{Lemoj}%
+ \Crefname{corollary}{Korolario}{Korolarioj}%
+ \Crefname{proposition}{Propozicio}{Propozicioj}%
+ \Crefname{definition}{Defino}{Definoj}%
+ \Crefname{result}{Rezulto}{Rezultoj}%
+ \Crefname{example}{Ekzemplo}{Ekzemploj}%
+ \Crefname{remark}{Rimarko}{Rimarkoj}%
+ \Crefname{note}{Noto}{Notoj}%
+ \Crefname{algorithm}{Algoritmo}{Algoritmoj}%
+ \Crefname{listing}{Listado}{Listadoj}%
+ \Crefname{line}{Linio}{Linioj}%
+%
+ \if@cref@capitalise%
+ \crefname{equation}{Ekvacio}{Ekvacioj}%
+ \crefname{part}{Parto}{Partoj}%
+ \crefname{chapter}{\^Capitro}{\^Capitroj}%
+ \crefname{section}{Sekcio}{Sekcioj}%
+ \crefname{appendix}{Aldono}{Aldonoj}%
+ \crefname{enumi}{Punkto}{Punktoj}%
+ \crefname{footnote}{Piednoto}{Piednotoj}%
+ \crefname{figure}{Figuro}{Figuroj}%
+ \crefname{table}{Tabelo}{Tabeloj}%
+ \crefname{theorem}{Teoremo}{Teoremoj}%
+ \crefname{lemma}{Lemo}{Lemoj}%
+ \crefname{corollary}{Korolario}{Korolarioj}%
+ \crefname{proposition}{Propozicio}{Propozicioj}%
+ \crefname{definition}{Defino}{Definoj}%
+ \crefname{result}{Rezulto}{Rezultoj}%
+ \crefname{example}{Ekzemplo}{Ekzemploj}%
+ \crefname{remark}{Rimarko}{Rimarkoj}%
+ \crefname{note}{Noto}{Notoj}%
+ \crefname{algorithm}{Algoritmo}{Algoritmoj}%
+ \crefname{listing}{Listado}{Listadoj}%
+ \crefname{line}{Linio}{Linioj}%
+%
+ \else%
+ \crefname{equation}{ekvacio}{ekvacioj}%
+ \crefname{part}{parto}{partoj}%
+ \crefname{chapter}{\^capitro}{\^capitroj}%
+ \crefname{section}{sekcio}{sekcioj}%
+ \crefname{appendix}{aldono}{aldonoj}%
+ \crefname{enumi}{punkto}{punktoj}%
+ \crefname{footnote}{piednoto}{piednotoj}%
+ \crefname{figure}{figuro}{figuroj}%
+ \crefname{table}{tabelo}{tabeloj}%
+ \crefname{theorem}{teoremo}{teoremoj}%
+ \crefname{lemma}{lemo}{lemoj}%
+ \crefname{corollary}{korolario}{korolarioj}%
+ \crefname{proposition}{propozicio}{propozicioj}%
+ \crefname{definition}{defino}{definoj}%
+ \crefname{result}{rezulto}{rezultoj}%
+ \crefname{example}{ekzemplo}{ekzemploj}%
+ \crefname{remark}{rimarko}{rimarkoj}%
+ \crefname{note}{noto}{notoj}%
+ \crefname{algorithm}{algoritmo}{algoritmoj}%
+ \crefname{listing}{listado}{listadoj}%
+ \crefname{line}{linio}{linioj}%
+ \fi}% end \cref@loadlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Swedish}
+% \begin{macro}{swedish}
+% Swedish definitions thanks to Simon Sigurdhsson.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{swedish}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ till\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ och\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ och\nobreakspace}%
+% \end{macrocode}
+% We have to define the group conjunctions explicitly here, rather than
+% relying on fall-back definitions in terms of the above conjunctions
+% (see \cref{sec:code:default_formats}), in case any other language
+% option defines them explicitly and we need to override those.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ och\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{, och\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Ekvation}{Ekvation}%
+ \Crefname@preamble{figure}{Figur}{Figur}%
+ \Crefname@preamble{table}{Tabell}{Tabell}%
+ \Crefname@preamble{page}{Sida}{Sida}%
+ \Crefname@preamble{part}{Del}{Del}%
+ \Crefname@preamble{chapter}{Kapitel}{Kapitel}%
+ \Crefname@preamble{section}{Avsnitt}{Avsnitt}%
+ \Crefname@preamble{appendix}{Appendix}{Appendix}%
+ \Crefname@preamble{enumi}{Punkt}{Punkt}%
+ \Crefname@preamble{footnote}{Fotnot}{Fotnot}%
+ \Crefname@preamble{theorem}{Sats}{Sats}%
+ \Crefname@preamble{lemma}{Lemma}{Lemmas}%
+ \Crefname@preamble{corollary}{F\"oljdsats}{F\"oljdsats}%
+ \Crefname@preamble{proposition}{Proposition}{Proposition}%
+ \Crefname@preamble{definition}{Definition}{Definition}%
+ \Crefname@preamble{result}{Resultat}{Resultat}%
+ \Crefname@preamble{example}{Exempel}{Exempel}%
+ \Crefname@preamble{remark}{Anm\"arkning}{Anm\"arkning}%
+ \Crefname@preamble{note}{Notering}{Notering}%
+ \Crefname@preamble{algorithm}{Algoritm}{Algoritm}%
+ \Crefname@preamble{listing}{Kodlistning}{Kodlistning}%
+ \Crefname@preamble{line}{Rad}{Rad}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{Ekv.}{Ekv.}%
+ \crefname@preamble{figure}{Fig.}{Fig.}%
+ \else%
+ \crefname@preamble{equation}{Ekvation}{Ekvation}%
+ \crefname@preamble{figure}{Figur}{Figur}%
+ \fi%
+ \crefname@preamble{page}{Sida}{Sida}%
+ \crefname@preamble{table}{Tabell}{Tabell}%
+ \crefname@preamble{part}{Del}{Del}%
+ \crefname@preamble{chapter}{Kapitel}{Kapitel}%
+ \crefname@preamble{section}{Avsnitt}{Avsnitt}%
+ \crefname@preamble{appendix}{Appendix}{Appendix}%
+ \crefname@preamble{enumi}{Punkt}{Punkt}%
+ \crefname@preamble{footnote}{Fotnot}{Fotnot}%
+ \crefname@preamble{theorem}{Sats}{Sats}%
+ \crefname@preamble{lemma}{Lemma}{Lemmas}%
+ \crefname@preamble{corollary}{F\"oljdsats}{F\"oljdsats}%
+ \crefname@preamble{proposition}{Proposition}{Proposition}%
+ \crefname@preamble{definition}{Definition}{Definition}%
+ \crefname@preamble{result}{Resultat}{Resultat}%
+ \crefname@preamble{example}{Exempel}{Exempel}%
+ \crefname@preamble{remark}{Anm\"arkning}{Anm\"arkning}%
+ \crefname@preamble{note}{Notering}{Notering}%
+ \crefname@preamble{algorithm}{Algoritm}{Algoritm}%
+ \crefname@preamble{listing}{Kodlistning}{Kodlistning}%
+ \crefname@preamble{line}{Rad}{Rad}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{ekv.}{ekv.}%
+ \crefname@preamble{figure}{fig.}{fig.}%
+ \crefname@preamble{page}{s.}{ss.}%
+ \else%
+ \crefname@preamble{equation}{ekvation}{ekvation}%
+ \crefname@preamble{figure}{figur}{figur}%
+ \crefname@preamble{page}{sida}{sida}%
+ \fi%
+ \crefname@preamble{table}{tabell}{tabell}%
+ \crefname@preamble{part}{del}{del}%
+ \crefname@preamble{chapter}{kapitel}{kapitel}%
+ \crefname@preamble{section}{avsnitt}{avsnitt}%
+ \crefname@preamble{appendix}{appendix}{appendix}%
+ \crefname@preamble{enumi}{punkt}{punkt}%
+ \crefname@preamble{footnote}{fotnot}{fotnot}%
+ \crefname@preamble{theorem}{sats}{sats}%
+ \crefname@preamble{lemma}{lemma}{lemmas}%
+ \crefname@preamble{corollary}{f\"oljdsats}{f\"oljdsats}%
+ \crefname@preamble{proposition}{proposition}{proposition}%
+ \crefname@preamble{definition}{definition}{definition}%
+ \crefname@preamble{result}{resultat}{resultat}%
+ \crefname@preamble{example}{exempel}{exempel}%
+ \crefname@preamble{remark}{anm\"arkning}{anm\"arkning}%
+ \crefname@preamble{note}{notering}{notering}%
+ \crefname@preamble{algorithm}{algoritm}{algoritm}%
+ \crefname@preamble{listing}{kodlistning}{kodlistning}%
+ \crefname@preamble{line}{rad}{rad}%
+ \fi%
+ \def\cref@language{swedish}%
+ }}% end \AtBeginDocument and \DeclareOption
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{swedish}{%
+ \PackageInfo{cleveref}{loaded `swedish' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ till\nobreakspace}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ och\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ och\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ and\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{, and\nobreakspace}%
+ %
+ \Crefname{equation}{Ekvation}{Ekvation}%
+ \Crefname{figure}{Figur}{Figur}%
+ \Crefname{subfigure}{Figur}{Figur}%
+ \Crefname{table}{Tabell}{Tabell}%
+ \Crefname{subtable}{Tabell}{Tabell}%
+ \Crefname{page}{Sida}{Sida}%
+ \Crefname{part}{Del}{Del}%
+ \Crefname{chapter}{Kapitel}{Kapitel}%
+ \Crefname{section}{Avsnitt}{Avsnitt}%
+ \Crefname{subsection}{Avsnitt}{Avsnitt}%
+ \Crefname{subsubsection}{Avsnitt}{Avsnitt}%
+ \Crefname{appendix}{Appendix}{Appendix}%
+ \Crefname{subappendix}{Appendix}{Appendix}%
+ \Crefname{subsubappendix}{Appendix}{Appendix}%
+ \Crefname{subsubsubappendix}{Appendix}{Appendix}%
+ \Crefname{enumi}{Punkt}{Punkt}%
+ \Crefname{enumii}{Punkt}{Punkt}%
+ \Crefname{enumiii}{Punkt}{Punkt}%
+ \Crefname{enumiv}{Punkt}{Punkt}%
+ \Crefname{enumv}{Punkt}{Punkt}%
+ \Crefname{footnote}{Fotnot}{Fotnot}%
+ \Crefname{theorem}{Sats}{Sats}%
+ \Crefname{lemma}{Lemma}{Lemmas}%
+ \Crefname{corollary}{F\"oljdsats}{F\"oljdsats}%
+ \Crefname{proposition}{Proposition}{Proposition}%
+ \Crefname{definition}{Definition}{Definition}%
+ \Crefname{result}{Resultat}{Resultat}%
+ \Crefname{example}{Exempel}{Exempel}%
+ \Crefname{remark}{Anm\"arkning}{Anm\"arkning}%
+ \Crefname{note}{Notering}{Notering}%
+ \Crefname{algorithm}{Algoritm}{Algoritm}%
+ \Crefname{listing}{Kodlistning}{Kodlistning}%
+ \Crefname{line}{Rad}{Rad}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname{equation}{Ekv.}{Ekv.}%
+ \crefname{figure}{Fig.}{Fig.}%
+ \crefname{subfigure}{Fig.}{Fig.}%
+ \else%
+ \crefname{equation}{Ekvation}{Ekvation}%
+ \crefname{figure}{Figur}{Figur}%
+ \crefname{subfigure}{Figur}{Figur}%
+ \fi%
+ \crefname{page}{Sida}{Sida}%
+ \crefname{table}{Tabell}{Tabell}%
+ \crefname{subtable}{Tabell}{Tabell}%
+ \crefname{part}{Del}{Del}%
+ \crefname{chapter}{Kapitel}{Kapitel}%
+ \crefname{section}{Avsnitt}{Avsnitt}%
+ \crefname{subsection}{Avsnitt}{Avsnitt}%
+ \crefname{subsubsection}{Avsnitt}{Avsnitt}%
+ \crefname{appendix}{Appendix}{Appendix}%
+ \crefname{subappendix}{Appendix}{Appendix}%
+ \crefname{subsubappendix}{Appendix}{Appendix}%
+ \crefname{subsubsubappendix}{Appendix}{Appendix}%
+ \crefname{enumi}{Punkt}{Punkt}%
+ \crefname{enumii}{Punkt}{Punkt}%
+ \crefname{enumiii}{Punkt}{Punkt}%
+ \crefname{enumiv}{Punkt}{Punkt}%
+ \crefname{enumv}{Punkt}{Punkt}%
+ \crefname{footnote}{Fotnot}{Fotnot}%
+ \crefname{theorem}{Sats}{Sats}%
+ \crefname{lemma}{Lemma}{Lemmas}%
+ \crefname{corollary}{F\"oljdsats}{F\"oljdsats}%
+ \crefname{proposition}{Proposition}{Proposition}%
+ \crefname{definition}{Definition}{Definition}%
+ \crefname{result}{Resultat}{Resultat}%
+ \crefname{example}{Exempel}{Exempel}%
+ \crefname{remark}{Anm\"arkning}{Anm\"arkning}%
+ \crefname{note}{Notering}{Notering}%
+ \crefname{algorithm}{Algoritm}{Algoritm}%
+ \crefname{listing}{Kodlistning}{Kodlistnings}%
+ \crefname{line}{Rad}{Rad}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname{equation}{ekv.}{ekv.}%
+ \crefname{figure}{fig.}{fig.}%
+ \crefname{subfigure}{fig.}{fig.}%
+ \crefname{page}{s.}{ss.}%
+ \else%
+ \crefname{equation}{ekvation}{ekvation}%
+ \crefname{figure}{figur}{figur}%
+ \crefname{subfigure}{figur}{figur}%
+ \crefname{page}{sida}{sida}%
+ \fi%
+ \crefname{table}{tabell}{tabell}%
+ \crefname{subtable}{tabell}{tabell}%
+ \crefname{part}{del}{del}%
+ \crefname{chapter}{kapitel}{kapitel}%
+ \crefname{section}{avsnitt}{avsnitt}%
+ \crefname{subsection}{avsnitt}{avsnitt}%
+ \crefname{subsubsection}{avsnitt}{avsnitt}%
+ \crefname{appendix}{appendix}{appendix}%
+ \crefname{subappendix}{appendix}{appendix}%
+ \crefname{subsubappendix}{appendix}{appendix}%
+ \crefname{subsubsubappendix}{appendix}{appendix}%
+ \crefname{enumi}{punkt}{punkt}%
+ \crefname{enumii}{punkt}{punkt}%
+ \crefname{enumiii}{punkt}{punkt}%
+ \crefname{enumiv}{punkt}{punkt}%
+ \crefname{enumv}{punkt}{punkt}%
+ \crefname{footnote}{fotnot}{fotnot}%
+ \crefname{theorem}{sats}{sats}%
+ \crefname{lemma}{lemma}{lemmas}%
+ \crefname{corollary}{f\"oljdsats}{f\"oljdsats}%
+ \crefname{proposition}{proposition}{proposition}%
+ \crefname{definition}{definition}{definition}%
+ \crefname{result}{resultat}{resultat}%
+ \crefname{example}{exempel}{exempel}%
+ \crefname{remark}{anm\"arkning}{anm\"arkning}%
+ \crefname{note}{notering}{notering}%
+ \crefname{algorithm}{algoritm}{algoritm}%
+ \crefname{listing}{kodlistning}{kodlistnings}%
+ \crefname{line}{rad}{rad}%
+ \fi}% end \cref@addlangagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Brazilian}
+% \begin{macro}{brazilian}
+% Brazilian translations courtesy of Paulo Roberto Massa Cereda.
+% \end{macro}
+% \begin{macrocode}
+\DeclareOption{brazilian}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ a\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ e\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ e\nobreakspace}%
+% \end{macrocode}
+% We have to define the group conjunctions explicitly here, rather than
+% relying on fall-back definitions in terms of the above conjunctions
+% (see \cref{sec:code:default_formats}), in case any other language
+% option defines them explicitly and we need to override those.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ e\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{, e\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Equa\c c\~ao}{Equa\c c\~oes}%
+ \Crefname@preamble{figure}{Figura}{Figuras}%
+ \Crefname@preamble{table}{Tabela}{Tabelas}%
+ \Crefname@preamble{page}{P\'agina}{P\'aginas}%
+ \Crefname@preamble{part}{Parte}{Partes}%
+ \Crefname@preamble{chapter}{Cap\'itulo}{Cap\'itulos}%
+ \Crefname@preamble{section}{Se\c c\~ao}{Se\c c\~oes}%
+ \Crefname@preamble{appendix}{Ap\^endice}{Ap\^endices}%
+ \Crefname@preamble{enumi}{Item}{Itens}%
+ \Crefname@preamble{footnote}{Nota de rodap\'e}{Notas de rodap\'e}%
+ \Crefname@preamble{theorem}{Teorema}{Teoremas}%
+ \Crefname@preamble{lemma}{Lema}{Lemas}%
+ \Crefname@preamble{corollary}{Corol\'ario}{Corol\'arios}%
+ \Crefname@preamble{proposition}{Proposi\c c\~ao}{Proposi\c c\~oes}%
+ \Crefname@preamble{definition}{Defini\c c\~ao}{Defini\c c\~oes}%
+ \Crefname@preamble{result}{Resultado}{Resultados}%
+ \Crefname@preamble{example}{Exemplo}{Exemplos}%
+ \Crefname@preamble{remark}{Observa\c c\~ao}{Observa\c c\~oes}%
+ \Crefname@preamble{note}{Nota}{Notas}%
+ \Crefname@preamble{algorithm}{Algoritmo}{Algoritmos}%
+ \Crefname@preamble{listing}{Listagem}{Listagens}%
+ \Crefname@preamble{line}{Linha}{Linhas}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{Eq.}{Eqs.}%
+ \crefname@preamble{figure}{Fig.}{Figs.}%
+ \else%
+ \crefname@preamble{equation}{Equa\c c\~ao}{Equa\c c\~oes}%
+ \crefname@preamble{figure}{Figura}{Figuras}%
+ \fi%
+ \crefname@preamble{page}{P\'agina}{P\'aginas}%
+ \crefname@preamble{table}{Tabela}{Tabelas}%
+ \crefname@preamble{part}{Parte}{Partes}%
+ \crefname@preamble{chapter}{Cap\'itulo}{Cap\'itulos}%
+ \crefname@preamble{section}{Se\c c\~ao}{Se\c c\~oes}%
+ \crefname@preamble{appendix}{Ap\^endice}{Ap\^endices}%
+ \crefname@preamble{enumi}{Item}{Itens}%
+ \crefname@preamble{footnote}{Nota de rodap\'e}{Notas de rodap\'e}%
+ \crefname@preamble{theorem}{Teorema}{Teoremas}%
+ \crefname@preamble{lemma}{Lema}{Lemas}%
+ \crefname@preamble{corollary}{Corol\'ario}{Corol\'arios}%
+ \crefname@preamble{proposition}{Proposi\c c\~ao}{Proposi\c c\~oes}%
+ \crefname@preamble{definition}{Defini\c c\~ao}{Defini\c c\~oes}%
+ \crefname@preamble{result}{Resultado}{Resultados}%
+ \crefname@preamble{example}{Exemplo}{Exemplos}%
+ \crefname@preamble{remark}{Observa\c c\~ao}{Observa\c c\~oes}%
+ \crefname@preamble{note}{Nota}{Notas}%
+ \crefname@preamble{algorithm}{Algoritmo}{Algoritmos}%
+ \crefname@preamble{listing}{Listagem}{Listagens}%
+ \crefname@preamble{line}{Linha}{Linhas}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname@preamble{equation}{eq.}{eqs.}%
+ \crefname@preamble{figure}{fig.}{figs.}%
+ \else%
+ \crefname@preamble{equation}{equa\c c\~ao}{equa\c c\~oes}%
+ \crefname@preamble{figure}{figura}{figuras}%
+ \fi%
+ \crefname@preamble{page}{p\'agina}{p\'aginas}%
+ \crefname@preamble{table}{tabela}{tabelas}%
+ \crefname@preamble{part}{parte}{partes}%
+ \crefname@preamble{chapter}{cap\'itulo}{cap\'itulos}%
+ \crefname@preamble{section}{se\c c\~ao}{se\c c\~oes}%
+ \crefname@preamble{appendix}{ap\^endice}{ap\^endices}%
+ \crefname@preamble{enumi}{item}{itens}%
+ \crefname@preamble{footnote}{nota de rodap\'e}{notas de rodap\'e}%
+ \crefname@preamble{theorem}{teorema}{teoremas}%
+ \crefname@preamble{lemma}{lema}{lemas}%
+ \crefname@preamble{corollary}{corol\'ario}{corol\'arios}%
+ \crefname@preamble{proposition}{proposi\c c\~ao}{proposi\c c\~oes}%
+ \crefname@preamble{definition}{defini\c c\~ao}{defini\c c\~oes}%
+ \crefname@preamble{result}{resultado}{resultados}%
+ \crefname@preamble{example}{exemplo}{exemplos}%
+ \crefname@preamble{remark}{observa\c c\~ao}{observa\c c\~oes}%
+ \crefname@preamble{note}{nota}{notas}%
+ \crefname@preamble{algorithm}{algoritmo}{algoritmos}%
+ \crefname@preamble{listing}{listagem}{listagens}%
+ \crefname@preamble{line}{linha}{linhas}%
+ \fi%
+ \def\cref@language{brazilian}%
+ }}% end \AtBeginDocument and \DeclareOption
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{brazilian}{%
+ \PackageInfo{cleveref}{loaded `brazilian' language definitions}%
+ \renewcommand{\crefrangeconjunction}{ a\nobreakspace}%
+ \renewcommand\crefrangepreconjunction{}%
+ \renewcommand\crefrangepostconjunction{}%
+ \renewcommand{\crefpairconjunction}{ e\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ e\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ e\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ e\nobreakspace}%
+ %
+ \Crefname{equation}{Equa\c c\~ao}{Equa\c c\~oes}%
+ \Crefname{figure}{Figura}{Figuras}%
+ \Crefname{subfigure}{Figura}{Figuras}%
+ \Crefname{table}{Tabela}{Tabelas}%
+ \Crefname{subtable}{Tabela}{Tabelas}%
+ \Crefname{page}{P\'agina}{P\'aginas}%
+ \Crefname{part}{Parte}{Partes}%
+ \Crefname{chapter}{Cap\'itulo}{Cap\'itulos}%
+ \Crefname{section}{Se\c c\~ao}{Se\c c\~oes}%
+ \Crefname{subsection}{Se\c c\~ao}{Se\c c\~oes}%
+ \Crefname{subsubsection}{Se\c c\~ao}{Se\c c\~oes}%
+ \Crefname{appendix}{Ap\^endice}{Ap\^endices}%
+ \Crefname{subappendix}{Ap\^endice}{Ap\^endices}%
+ \Crefname{subsubappendix}{Ap\^endice}{Ap\^endices}%
+ \Crefname{subsubsubappendix}{Ap\^endice}{Ap\^endices}%
+ \Crefname{enumi}{Item}{Itens}%
+ \Crefname{enumii}{Item}{Itens}%
+ \Crefname{enumiii}{Item}{Itens}%
+ \Crefname{enumiv}{Item}{Itens}%
+ \Crefname{enumv}{Item}{Itens}%
+ \Crefname{footnote}{Nota de rodap\'e}{Notas de rodap\'e}%
+ \Crefname{theorem}{Teorema}{Teoremas}%
+ \Crefname{lemma}{Lema}{Lemas}%
+ \Crefname{corollary}{Corol\'ario}{Corol\'arios}%
+ \Crefname{proposition}{Proposi\c c\~ao}{Proposi\c c\~oes}%
+ \Crefname{definition}{Defini\c c\~ao}{Defini\c c\~oes}%
+ \Crefname{result}{Resultado}{Resultados}%
+ \Crefname{example}{Exemplo}{Exemplos}%
+ \Crefname{remark}{Observa\c c\~ao}{Observa\c c\~oes}%
+ \Crefname{note}{Nota}{Notas}%
+ \Crefname{algorithm}{Algoritmo}{Algoritmos}%
+ \Crefname{listing}{Listagem}{Listagens}%
+ \Crefname{line}{Linha}{Linhas}%
+ %
+ \if@cref@capitalise% capitalise set
+ \if@cref@abbrev%
+ \crefname{equation}{Eq.}{Eqs.}%
+ \crefname{figure}{Fig.}{Figs.}%
+ \crefname{subfigure}{Fig.}{Figs.}%
+ \else%
+ \crefname{equation}{Equa\c c\~ao}{Equa\c c\~oes}%
+ \crefname{figure}{Figura}{Figuras}%
+ \crefname{subfigure}{Figura}{Figuras}%
+ \fi%
+ \crefname{page}{P\'agina}{P\'aginas}%
+ \crefname{table}{Tabela}{Tabelas}%
+ \crefname{subtable}{Tabela}{Tabelas}%
+ \crefname{part}{Parte}{Partes}%
+ \crefname{chapter}{Cap\'itulo}{Cap\'itulos}%
+ \crefname{section}{Se\c c\~ao}{Se\c c\~oes}%
+ \crefname{subsection}{Se\c c\~ao}{Se\c c\~oes}%
+ \crefname{subsubsection}{Se\c c\~ao}{Se\c c\~oes}%
+ \crefname{appendix}{Ap\^endice}{Ap\^endices}%
+ \crefname{subappendix}{Ap\^endice}{Ap\^endices}%
+ \crefname{subsubappendix}{Ap\^endice}{Ap\^endices}%
+ \crefname{subsubsubappendix}{Ap\^endice}{Ap\^endices}%
+ \crefname{enumi}{Item}{Itens}%
+ \crefname{enumii}{Item}{Itens}%
+ \crefname{enumiii}{Item}{Itens}%
+ \crefname{enumiv}{Item}{Itens}%
+ \crefname{enumv}{Item}{Itens}%
+ \crefname{footnote}{Nota de rodap\'e}{Notas de rodap\'e}%
+ \crefname{theorem}{Teorema}{Teoremas}%
+ \crefname{lemma}{Lema}{Lemas}%
+ \crefname{corollary}{Corol\'ario}{Corol\'arios}%
+ \crefname{proposition}{Proposi\c c\~ao}{Proposi\c c\~oes}%
+ \crefname{definition}{Defini\c c\~ao}{Defini\c c\~oes}%
+ \crefname{result}{Resultado}{Resultados}%
+ \crefname{example}{Exemplo}{Exemplos}%
+ \crefname{remark}{Observa\c c\~ao}{Observa\c c\~oes}%
+ \crefname{note}{Nota}{Notas}%
+ \crefname{algorithm}{Algoritmo}{Algoritmos}%
+ \crefname{listing}{Listagem}{Listagens}%
+ \crefname{line}{Linha}{Linhas}%
+ %
+ \else% capitalise unset
+ \if@cref@abbrev%
+ \crefname{equation}{eq.}{eqs.}%
+ \crefname{figure}{fig.}{figs.}%
+ \crefname{subfigure}{fig.}{figs.}%
+ \else%
+ \crefname{equation}{equa\c c\~ao}{equa\c c\~oes}%
+ \crefname{figure}{figura}{figuras}%
+ \crefname{subfigure}{figura}{figuras}%
+ \fi%
+ \crefname{table}{tabela}{tabelas}%
+ \crefname{subtable}{tabela}{tabelas}%
+ \crefname{page}{p\'agina}{p\'aginas}%
+ \crefname{part}{parte}{partes}%
+ \crefname{chapter}{cap\'itulo}{cap\'itulos}%
+ \crefname{section}{se\c c\~ao}{se\c c\~oes}%
+ \crefname{subsection}{se\c c\~ao}{se\c c\~oes}%
+ \crefname{subsubsection}{se\c c\~ao}{se\c c\~oes}%
+ \crefname{appendix}{ap\^endice}{ap\^endices}%
+ \crefname{subappendix}{ap\^endice}{ap\^endices}%
+ \crefname{subsubappendix}{ap\^endice}{ap\^endices}%
+ \crefname{subsubsubappendix}{ap\^endice}{ap\^endices}%
+ \crefname{enumi}{item}{itens}%
+ \crefname{enumii}{item}{itens}%
+ \crefname{enumiii}{item}{itens}%
+ \crefname{enumiv}{item}{itens}%
+ \crefname{enumv}{item}{itens}%
+ \crefname{footnote}{nota de rodap\'e}{notas de rodap\'e}%
+ \crefname{theorem}{teorema}{teoremas}%
+ \crefname{lemma}{lema}{lemas}%
+ \crefname{corollary}{corol\'ario}{corol\'arios}%
+ \crefname{proposition}{proposi\c c\~ao}{proposi\c c\~oes}%
+ \crefname{definition}{defini\c c\~ao}{defini\c c\~oes}%
+ \crefname{result}{resultado}{resultados}%
+ \crefname{example}{exemplo}{exemplos}%
+ \crefname{remark}{observa\c c\~ao}{observa\c c\~oes}%
+ \crefname{note}{nota}{notas}%
+ \crefname{algorithm}{algoritmo}{algoritmos}%
+ \crefname{listing}{listagem}{listagens}%
+ \crefname{line}{linha}{linhas}%
+ \fi}% end \cref@addlangagedefs
+% \end{macrocode}
+%
+%
+% \subsubsection{Catalan}
+% \begin{macro}{catalan}
+% Catalan definitions thanks to Rafel Jaume Deya and Eva Bosch Roura.
+% \end{macro}
+%
+% Set up the definitions used at the beginning of the document to define
+% the formats created by the document preamble.
+% \begin{macrocode}
+\DeclareOption{catalan}{%
+ \AtBeginDocument{%
+ \def\crefrangeconjunction@preamble{ a\nobreakspace}%
+ \def\crefrangepreconjunction@preamble{}%
+ \def\crefrangepostconjunction@preamble{}%
+ \def\crefpairconjunction@preamble{ i\nobreakspace}%
+ \def\crefmiddleconjunction@preamble{, }%
+ \def\creflastconjunction@preamble{ i\nobreakspace}%
+% \end{macrocode}
+% We have to define the group conjunctions explicitly here, rather than
+% relying on fall-back definitions in terms of the above conjunctions
+% (see \cref{sec:code:default_formats}), in case any other language
+% option defines them explicitly and we need to override those.
+% \begin{macrocode}
+ \def\crefpairgroupconjunction@preamble{ i\nobreakspace}%
+ \def\crefmiddlegroupconjunction@preamble{, }%
+ \def\creflastgroupconjunction@preamble{ i\nobreakspace}%
+ %
+ \Crefname@preamble{equation}{Equaci\'o}{Equacions}%
+ \Crefname@preamble{figure}{Gr\`afic}{Gr\`afics}%
+ \Crefname@preamble{table}{Taula}{Taules}%
+ \Crefname@preamble{page}{P\`agina}{P\`agines}%
+ \Crefname@preamble{part}{Part}{Parts}%
+ \Crefname@preamble{chapter}{Cap\'itol}{Cap\'itols}%
+ \Crefname@preamble{section}{Secci\'o}{Seccions}%
+ \Crefname@preamble{appendix}{Ap\`endix}{Ap\`endixs}%
+ \Crefname@preamble{enumi}{Punt}{Punts}%
+ \Crefname@preamble{footnote}{Nota}{Notes}%
+ \Crefname@preamble{theorem}{Teorema}{Teoremes}%
+ \Crefname@preamble{lemma}{Lema}{Lemes}%
+ \Crefname@preamble{corollary}{Coro\lgem ari}{Coro\lgem aris}%
+ \Crefname@preamble{proposition}{Proposici\'o}{Proposicions}%
+ \Crefname@preamble{definition}{Definici\'o}{Definicions}%
+ \Crefname@preamble{result}{Resultat}{Resultats}%
+ \Crefname@preamble{example}{Exemple}{Exemples}%
+ \Crefname@preamble{remark}{Observaci\'o}{Observacions}%
+ \Crefname@preamble{note}{Nota}{Notes}%
+ \Crefname@preamble{algorithm}{Algorisme}{Algorismes}%
+ \Crefname@preamble{listing}{Llistat}{Llistats}%
+ \Crefname@preamble{line}{L\'inia}{L\'inies}%
+ %
+ \if@cref@capitalise% capitalise set
+ \crefname@preamble{equation}{Equaci\'o}{Equacions}%
+ \crefname@preamble{figure}{Gr\`afic}{Gr\`afics}%
+ \crefname@preamble{table}{Taula}{Taules}%
+ \crefname@preamble{page}{P\`agina}{P\`agines}%
+ \crefname@preamble{part}{Part}{Parts}%
+ \crefname@preamble{chapter}{Cap\'itol}{Cap\'itols}%
+ \crefname@preamble{section}{Secci\'o}{Seccions}%
+ \crefname@preamble{appendix}{Ap\`endix}{Ap\`endixs}%
+ \crefname@preamble{enumi}{Punt}{Punts}%
+ \crefname@preamble{footnote}{Nota}{Notes}%
+ \crefname@preamble{theorem}{Teorema}{Teoremes}%
+ \crefname@preamble{lemma}{Lema}{Lemes}%
+ \crefname@preamble{corollary}{Coro\lgem ari}{Coro\lgem aris}%
+ \crefname@preamble{proposition}{Proposici\'o}{Proposicions}%
+ \crefname@preamble{definition}{Definici\'o}{Definicions}%
+ \crefname@preamble{result}{Resultat}{Resultats}%
+ \crefname@preamble{example}{Exemple}{Exemples}%
+ \crefname@preamble{remark}{Observaci\'o}{Observacions}%
+ \crefname@preamble{note}{Nota}{Notes}%
+ \crefname@preamble{algorithm}{Algorisme}{Algorismes}%
+ \crefname@preamble{listing}{Llistat}{Llistats}%
+ \crefname@preamble{line}{L\'inia}{L\'inies}%
+ %
+ \else% capitalise unset
+ \crefname@preamble{equation}{equaci\'o}{equacions}%
+ \crefname@preamble{figure}{gr\`afic}{gr\`afics}%
+ \crefname@preamble{table}{taula}{taules}%
+ \crefname@preamble{page}{p\`agina}{p\`agines}%
+ \crefname@preamble{part}{part}{parts}%
+ \crefname@preamble{chapter}{cap\'itol}{cap\'itols}%
+ \crefname@preamble{section}{secci\'o}{seccions}%
+ \crefname@preamble{appendix}{ap\`endix}{ap\`endixs}%
+ \crefname@preamble{enumi}{punt}{punts}%
+ \crefname@preamble{footnote}{nota}{notes}%
+ \crefname@preamble{theorem}{teorema}{teoremes}%
+ \crefname@preamble{lemma}{lema}{lemes}%
+ \crefname@preamble{corollary}{coro\lgem ari}{coro\lgem aris}%
+ \crefname@preamble{proposition}{proposici\'o}{proposicions}%
+ \crefname@preamble{definition}{definici\'o}{definicions}%
+ \crefname@preamble{result}{resultat}{resultats}%
+ \crefname@preamble{example}{exemple}{exemples}%
+ \crefname@preamble{remark}{observaci\'o}{observacions}%
+ \crefname@preamble{note}{nota}{notes}%
+ \crefname@preamble{algorithm}{algorisme}{algorismes}%
+ \crefname@preamble{listing}{llistat}{llistats}%
+ \crefname@preamble{line}{l\'inia}{l\'inies}%
+ \fi%
+ \def\cref@language{catalan}%
+ }}% end \AtBeginDocument and \DeclareOption
+% \end{macrocode}
+%
+% If using \package{babel} and the corresponding option is set, or if
+% using \package{polyglossia} and the language has been loaded, add
+% format definition commands to \cmd{\extras}\meta{language} or
+% \cmd{\captions}\meta{language} so that language switching commands will
+% change the cross-reference formats appropriately.
+% \begin{macrocode}
+\cref@addlanguagedefs{catalan}{%
+ \PackageInfo{cleveref}{loaded `catalan language definitions}%
+ \renewcommand{\crefrangeconjunction}{ a\nobreakspace}%
+ \renewcommand{\crefrangepreconjunction}{}%
+ \renewcommand{\crefrangepostconjunction}{}%
+ \renewcommand{\crefpairconjunction}{ i\nobreakspace}%
+ \renewcommand{\crefmiddleconjunction}{, }%
+ \renewcommand{\creflastconjunction}{ i\nobreakspace}%
+ \renewcommand{\crefpairgroupconjunction}{ i\nobreakspace}%
+ \renewcommand{\crefmiddlegroupconjunction}{, }%
+ \renewcommand{\creflastgroupconjunction}{ i\nobreakspace}%
+ %
+ \Crefname{equation}{Equaci\'o}{Equacions}%
+ \Crefname{figure}{Gr\`afic}{Gr\`afics}%
+ \Crefname{subfigure}{Gr\`afic}{Gr\`afics}%
+ \Crefname{table}{Taula}{Taules}%
+ \Crefname{subtable}{Taula}{Taules}%
+ \Crefname{page}{P\`agina}{P\`aginas}%
+ \Crefname{part}{Part}{Parts}%
+ \Crefname{chapter}{Cap\'itol}{Cap\'itols}%
+ \Crefname{section}{Secci\'o}{Seccions}%
+ \Crefname{subsection}{Secci\'o}{Seccions}%
+ \Crefname{subsubsection}{Secci\'o}{Seccions}%
+ \Crefname{appendix}{Ap\`endix}{Ap\`endixs}%
+ \Crefname{subappendix}{Ap\`endix}{Ap\`endixs}%
+ \Crefname{subsubappendix}{Ap\`endix}{Ap\`endixs}%
+ \Crefname{subsubsubappendix}{Ap\`endix}{Ap\`endixs}%
+ \Crefname{enumi}{Punt}{Punts}%
+ \Crefname{enumii}{Punt}{Punts}%
+ \Crefname{enumiii}{Punt}{Punts}%
+ \Crefname{enumiv}{Punt}{Punts}%
+ \Crefname{enumv}{Punt}{Punts}%
+ \Crefname{footnote}{Nota}{Notes}%
+ \Crefname{theorem}{Teorema}{Teoremes}%
+ \Crefname{lemma}{Lema}{Lemes}%
+ \Crefname{corollary}{Coro\lgem ari}{Coro\lgem aris}%
+ \Crefname{proposition}{Proposici\'o}{Proposicions}%
+ \Crefname{definition}{Definici\'o}{Definicions}%
+ \Crefname{result}{Resultat}{Resultats}%
+ \Crefname{example}{Exemple}{Exemples}%
+ \Crefname{remark}{Observaci\'o}{Observacions}%
+ \Crefname{note}{Nota}{Notes}%
+ \Crefname{algorithm}{Algorisme}{Algorismes}%
+ \Crefname{listing}{Llistat}{Llistats}%
+ \Crefname{line}{L\'inia}{L\'inies}%
+ %
+ \if@cref@capitalise% capitalise set
+ \crefname{equation}{Equaci\'o}{Equacions}%
+ \crefname{figure}{Gr\`afic}{Gr\`afics}%
+ \crefname{subfigure}{Gr\`afic}{Gr\`afics}%
+ \crefname{table}{Taula}{Taules}%
+ \crefname{subtable}{Taula}{Taules}%
+ \crefname{page}{P\`agina}{P\`aginas}%
+ \crefname{part}{Part}{Parts}%
+ \crefname{chapter}{Cap\'itol}{Cap\'itols}%
+ \crefname{section}{Secci\'o}{Seccions}%
+ \crefname{subsection}{Secci\'o}{Seccions}%
+ \crefname{subsubsection}{Secci\'o}{Seccions}%
+ \crefname{appendix}{Ap\`endix}{Ap\`endixs}%
+ \crefname{subappendix}{Ap\`endix}{Ap\`endixs}%
+ \crefname{subsubappendix}{Ap\`endix}{Ap\`endixs}%
+ \crefname{subsubsubappendix}{Ap\`endix}{Ap\`endixs}%
+ \crefname{enumi}{Punt}{Punts}%
+ \crefname{enumii}{Punt}{Punts}%
+ \crefname{enumiii}{Punt}{Punts}%
+ \crefname{enumiv}{Punt}{Punts}%
+ \crefname{enumv}{Punt}{Punts}%
+ \crefname{footnote}{Nota}{Notes}%
+ \crefname{theorem}{Teorema}{Teoremes}%
+ \crefname{lemma}{Lema}{Lemes}%
+ \crefname{corollary}{Coro\lgem ari}{Coro\lgem aris}%
+ \crefname{proposition}{Proposici\'o}{Proposicions}%
+ \crefname{definition}{Definici\'o}{Definicions}%
+ \crefname{result}{Resultat}{Resultats}%
+ \crefname{example}{Exemple}{Exemples}%
+ \crefname{remark}{Observaci\'o}{Observacions}%
+ \crefname{note}{Nota}{Notes}%
+ \crefname{algorithm}{Algorisme}{Algorismes}%
+ \crefname{listing}{Llistat}{Llistats}%
+ \crefname{line}{L\'inia}{L\'inies}%
+ %
+ \else% capitalise unset
+ \crefname{equation}{equaci\'o}{equacions}%
+ \crefname{figure}{gr\`afic}{gr\`afics}%
+ \crefname{subfigure}{gr\`afic}{gr\`afics}%
+ \crefname{table}{taula}{taules}%
+ \crefname{subtable}{taula}{taules}%
+ \crefname{page}{p\`agina}{p\`aginas}%
+ \crefname{part}{part}{parts}%
+ \crefname{chapter}{cap\'itol}{cap\'itols}%
+ \crefname{section}{secci\'o}{seccions}%
+ \crefname{subsection}{secci\'o}{seccions}%
+ \crefname{subsubsection}{secci\'o}{seccions}%
+ \crefname{appendix}{ap\`endix}{ap\`endixs}%
+ \crefname{subappendix}{ap\`endix}{ap\`endixs}%
+ \crefname{subsubappendix}{ap\`endix}{ap\`endixs}%
+ \crefname{subsubsubappendix}{ap\`endix}{ap\`endixs}%
+ \crefname{enumi}{punt}{punts}%
+ \crefname{enumii}{punt}{punts}%
+ \crefname{enumiii}{punt}{punts}%
+ \crefname{enumiv}{punt}{punts}%
+ \crefname{enumv}{punt}{punts}%
+ \crefname{footnote}{nota}{notes}%
+ \crefname{theorem}{teorema}{teoremes}%
+ \crefname{lemma}{lema}{lemes}%
+ \crefname{corollary}{coro\lgem ari}{coro\lgem aris}%
+ \crefname{proposition}{proposici\'o}{proposicions}%
+ \crefname{definition}{definici\'o}{definicions}%
+ \crefname{result}{resultat}{resultats}%
+ \crefname{example}{exemple}{exemples}%
+ \crefname{remark}{observaci\'o}{observacions}%
+ \crefname{note}{nota}{notes}%
+ \crefname{algorithm}{algorisme}{algorismes}%
+ \crefname{listing}{llistat}{llistats}%
+ \crefname{line}{l\'inia}{l\'inies}%
+ \fi}% end \cref@loadlanguagedefs
+% \end{macrocode}
+%
+%
+% \subsection{Default Cross-Reference Formats}
+% \label{sec:code:default_formats}
+% The \option{capitalise} and \option{nameinlink} options must be
+% processed before we process any language options and define the default
+% formats, so that they take effect in the default format definitions.
+% Therefore, we have to manually check whether they're present, and force
+% processing of those before the other options.
+% \begin{macrocode}
+\edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+\@expandtwoargs\in@{,capitalise,}{%
+ ,\@classoptionslist,\@curroptions,}%
+\ifin@%
+ \ExecuteOptions{capitalise}%
+\else%
+ \@expandtwoargs\in@{,capitalize,}{%
+ ,\@classoptionslist,\@curroptions,}%
+ \ifin@%
+ \ExecuteOptions{capitalise}%
+ \fi%
+\fi%
+\@expandtwoargs\in@{,nameinlink,}{%
+ ,\@classoptionslist,\@curroptions,}%
+\ifin@%
+ \ExecuteOptions{nameinlink}%
+\fi%
+% \end{macrocode}
+%
+%
+% \begin{macro}{\crefdefaultlabelformat}
+% \begin{macro}{\creflabelformat}
+% Define the default label formats, which don't depend on language. We
+% override the default format for equations, to follow the near
+% universal convention of enclosing equation labels in parentheses.
+% However, if the \option{nameinlink} option is enabled, the end of the
+% hyperlink must come outside the group or it will cause \LaTeX{}
+% grouping errors, so we must define it differently in that case.
+% \begin{macrocode}
+\crefdefaultlabelformat{#2#1#3}%
+\if@cref@nameinlink%
+ \creflabelformat{equation}{#2\textup{(#1)}#3}%
+\else%
+ \creflabelformat{equation}{\textup{(#2#1#3)}}%
+\fi%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% Set up the default English format definitions, then process options in
+% the order they were supplied.
+% \begin{macrocode}
+\@ifpackageloaded{polyglossia}%
+ {\ifcsdef{languagename}%
+ {\ExecuteOptions{\languagename}}%
+ {\PackageWarning{cleveref}%
+ {`polyglossia' loaded but default language not set
+ - defaulting to english}%
+ \ExecuteOptions{english}}}%
+ {\ExecuteOptions{english}}%
+\ProcessOptions*\relax%
+% \end{macrocode}
+%
+%
+% Define the component-derived formats.
+% \begin{macrocode}
+\AtBeginDocument{%
+% \end{macrocode}
+% Use whatever's in the \dots|@preamble| definitions at the beginning of
+% the document to set up the default cross-reference names, unless
+% overridden by explicit definitions.
+% \begin{macrocode}
+ \edef\@tempa{%
+ \expandafter\noexpand\csname extras\cref@language\endcsname}%
+ \@ifundefined{crefrangeconjunction}{%
+ \let\crefrangeconjunction\crefrangeconjunction@preamble%
+ }{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \expandafter\renewcommand\expandafter%
+ {\expandafter\crefrangeconjunction\expandafter}%
+ \expandafter{\crefrangeconjunction}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempa\expandafter{\@tempb}%
+ }%
+ \@ifundefined{crefrangepreconjunction}{%
+ \let\crefrangepreconjunction\crefrangepreconjunction@preamble%
+ }{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \expandafter\renewcommand\expandafter%
+ {\expandafter\crefrangepreconjunction\expandafter}%
+ \expandafter{\crefrangepreconjunction}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempa\expandafter{\@tempb}%
+ }%
+ \@ifundefined{crefrangepostconjunction}{%
+ \let\crefrangepostconjunction\crefrangepostconjunction@preamble%
+ }{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \expandafter\renewcommand\expandafter%
+ {\expandafter\crefrangepostconjunction\expandafter}%
+ \expandafter{\crefrangepostconjunction}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempa\expandafter{\@tempb}%
+ }%
+% \end{macrocode}
+% If the group conjunctions haven't been defined, but explicit
+% definitions \emph{have} been given for the reference list conjunctions,
+% define the group conjunctions to be identical to the reference
+% conjunctions.
+% \begin{macrocode}
+ \@ifundefined{crefpairconjunction}{%
+ \let\crefpairconjunction\crefpairconjunction@preamble%
+ }{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \expandafter\renewcommand\expandafter%
+ {\expandafter\crefpairconjunction\expandafter}%
+ \expandafter{\crefpairconjunction}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempa\expandafter{\@tempb}%
+ \@ifundefined{crefpairgroupconjunction}{%
+ \let\crefpairgroupconjunction\crefpairconjunction}{}%
+ }%
+ \@ifundefined{crefmiddleconjunction}{%
+ \let\crefmiddleconjunction\crefmiddleconjunction@preamble%
+ }{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \expandafter\renewcommand\expandafter%
+ {\expandafter\crefmiddleconjunction\expandafter}%
+ \expandafter{\crefmiddleconjunction}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempa\expandafter{\@tempb}%
+ \@ifundefined{crefmiddlegroupconjunction}{%
+ \let\crefmiddlegroupconjunction\crefmiddleconjunction}{}%
+ }%
+ \@ifundefined{creflastconjunction}{%
+ \let\creflastconjunction\creflastconjunction@preamble%
+ }{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \expandafter\renewcommand\expandafter%
+ {\expandafter\creflastconjunction\expandafter}%
+ \expandafter{\creflastconjunction}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempa\expandafter{\@tempb}%
+% \end{macrocode}
+% Define the last group conjunction to include an extra comma.
+% \begin{macrocode}
+ \@ifundefined{creflastgroupconjunction}{%
+ \edef\creflastgroupconjunction{, \creflastconjunction}}{}%
+ }%
+ \@ifundefined{crefpairgroupconjunction}{%
+ \let\crefpairgroupconjunction%
+ \crefpairgroupconjunction@preamble%
+ }{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \expandafter\renewcommand\expandafter%
+ {\expandafter\crefpairgroupconjunction\expandafter}%
+ \expandafter{\crefpairgroupconjunction}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempa\expandafter{\@tempb}%
+ }%
+ \@ifundefined{crefmiddlegroupconjunction}{%
+ \let\crefmiddlegroupconjunction%
+ \crefmiddlegroupconjunction@preamble%
+ }{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \expandafter\renewcommand\expandafter%
+ {\expandafter\crefmiddlegroupconjunction\expandafter}%
+ \expandafter{\crefmiddlegroupconjunction}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempa\expandafter{\@tempb}%
+ }%
+ \@ifundefined{creflastgroupconjunction}{%
+ \let\creflastgroupconjunction%
+ \creflastgroupconjunction@preamble%
+ }{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \expandafter\renewcommand\expandafter%
+ {\expandafter\creflastgroupconjunction\expandafter}%
+ \expandafter{\creflastgroupconjunction}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempa\expandafter{\@tempb}%
+ }%
+% \end{macrocode}
+%
+% Define any undefined formats listed in \cmd{\cref@label@types} using
+% the components.
+% \begin{macrocode}
+ \let\@tempstack\cref@label@types%
+ \cref@isstackfull{\@tempstack}%
+ \@whilesw\if@cref@stackfull\fi{%
+ \edef\@tempa{\cref@stack@top{\@tempstack}}%
+ \@ifundefined{cref@\@tempa @name}{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \csname cref@\@tempa @name\endcsname}%
+ \expandafter\def\expandafter\@tempc\expandafter{%
+ \csname cref@\@tempa @name@preamble\endcsname}%
+ \expandafter\expandafter\expandafter%
+ \let\expandafter\@tempb\@tempc%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \csname cref@\@tempa @name@plural\endcsname}%
+ \expandafter\def\expandafter\@tempc\expandafter{%
+ \csname cref@\@tempa @name@plural@preamble\endcsname}%
+ \expandafter\expandafter\expandafter%
+ \let\expandafter\@tempb\@tempc%
+ }{%
+ \edef\@tempb{%
+ \expandafter\noexpand\csname extras\cref@language\endcsname}%
+ \expandafter\def\expandafter\@tempc\expandafter{%
+ \expandafter\crefname\expandafter{\@tempa}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\expandafter\expandafter\@tempc%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter{%
+ \csname cref@\@tempa @name\endcsname}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\expandafter\expandafter\@tempc%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter{%
+ \csname cref@\@tempa @name@plural\endcsname}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempb\expandafter{\@tempc}%
+ }%
+ \@ifundefined{Cref@\@tempa @name}{%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \csname Cref@\@tempa @name\endcsname}%
+ \expandafter\def\expandafter\@tempc\expandafter{%
+ \csname Cref@\@tempa @name@preamble\endcsname}%
+ \expandafter\expandafter\expandafter%
+ \let\expandafter\@tempb\@tempc%
+ \expandafter\def\expandafter\@tempb\expandafter{%
+ \csname Cref@\@tempa @name@plural\endcsname}%
+ \expandafter\def\expandafter\@tempc\expandafter{%
+ \csname Cref@\@tempa @name@plural@preamble\endcsname}%
+ \expandafter\expandafter\expandafter%
+ \let\expandafter\@tempb\@tempc%
+ }{%
+ \edef\@tempb{%
+ \expandafter\noexpand\csname extras\cref@language\endcsname}%
+ \expandafter\def\expandafter\@tempc\expandafter{%
+ \expandafter\Crefname\expandafter{\@tempa}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\expandafter\expandafter\@tempc%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter{%
+ \csname Cref@\@tempa @name\endcsname}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\expandafter\expandafter\@tempc%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter{%
+ \csname Cref@\@tempa @name@plural\endcsname}}%
+ \expandafter\expandafter\expandafter\cref@addto%
+ \expandafter\@tempb\expandafter{\@tempc}%
+ }%
+% \end{macrocode}
+% We only define the reference-range and multi-reference formats if the
+% plural form of the name is defined in the corresponding
+% \cmd{\cref\meta{type}@name@plural}. Though \cmd{\crefname} and
+% \cmd{\Crefname} always define both the singular and plural forms
+% together, cross-reference names can also be defined automatically by
+% \cmd{\newtheorem}, which can only define the singular form. For
+% symmetry, we apply the same logic to the normal cross-reference format
+% definition (only defining it if the singular form of the name is
+% defined in \cmd{\cref\meta{type}@name}), though this should always be
+% the case.
+% \begin{macrocode}
+ \@ifundefined{cref@\@tempa @format}{%
+ \@ifundefined{cref@\@tempa @name}{}{%
+ \expandafter\@crefdefineformat\expandafter{\@tempa}}}{}%
+ \@ifundefined{crefrange@\@tempa @format}{%
+ \@ifundefined{cref@\@tempa @name@plural}{}{%
+ \expandafter\@crefrangedefineformat\expandafter{\@tempa}}}{}%
+ \@ifundefined{cref@\@tempa @format@first}{%
+ \@ifundefined{cref@\@tempa @name@plural}{}{%
+ \expandafter\@crefdefinemultiformat\expandafter{\@tempa}}}{}%
+ \@ifundefined{crefrange@\@tempa @format@first}{%
+ \@ifundefined{cref@\@tempa @name@plural}{}{%
+ \expandafter\@crefrangedefinemultiformat%
+ \expandafter{\@tempa}}}{}%
+ \cref@stack@pop{\@tempstack}%
+ \cref@isstackfull{\@tempstack}}%
+% \end{macrocode}
+%
+% If formats for subsections are undefined, define them to be identical
+% to the formats for sections. Similarly for subsections within
+% appendices, subfigures, subtables, subequations and enums.
+% \begin{macrocode}
+ \@crefcopyformats{section}{subsection}%
+ \@crefcopyformats{subsection}{subsubsection}%
+ \@crefcopyformats{appendix}{subappendix}%
+ \@crefcopyformats{subappendix}{subsubappendix}%
+ \@crefcopyformats{figure}{subfigure}%
+ \@crefcopyformats{table}{subtable}%
+ \@crefcopyformats{equation}{subequation}%
+%
+ \@crefcopyformats{enumi}{enumii}%
+ \@crefcopyformats{enumii}{enumiii}%
+ \@crefcopyformats{enumiii}{enumiv}%
+ \@crefcopyformats{enumiv}{enumv}%
+% \end{macrocode}
+% Definition of default |\labelcref| formats also needs to be postponed
+% until beginning of document, in case |\crefdefaultlabelformat| has been
+% modified.
+% \begin{macrocode}
+ \@labelcrefdefinedefaultformats%
+ %
+ \let\cref@language\relax%
+}% end of \AtBeginDocument
+% \end{macrocode}
+%
+%
+%
+% \subsection{\file{cleveref.cfg} Config File}
+% \begin{macro}{cleveref.cfg}
+% If \LaTeX{} can find a \file{cleveref.cfg} file in its search path,
+% then we read in whatever's in it. The intended use of
+% \file{cleveref.cfg} is to make it easy for authors to customise the
+% cross-reference formats for all their documents, without having to
+% manually include the definitions in every document preamble. In order
+% for these customisations to override the default formats, we input
+% \file{cleveref.cfg} right at the end, after the rest of
+% \package{cleveref} has loaded.
+% \begin{macrocode}
+\InputIfFileExists{cleveref.cfg}%
+ {\PackageInfo{cleveref}{reading definitions from cleveref.cfg}}{}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \Finale
+\endinput
+%%
+%% End of file `cleveref.dtx'.
+
+%%% Local Variables:
+%%% mode: doctex
+%%% TeX-command-default: "Make"
+%%% fill-column: 73
+%%% TeX-master: t
+%%% End:
diff --git a/macros/latex/contrib/cleveref/cleveref.ins b/macros/latex/contrib/cleveref/cleveref.ins
new file mode 100644
index 0000000000..2a9bc3a0ce
--- /dev/null
+++ b/macros/latex/contrib/cleveref/cleveref.ins
@@ -0,0 +1,34 @@
+%%
+%% cleveref.ins
+%% Batch file, run through LaTeX.
+%%
+%% Copyright (C) 2006--2013 Toby Cubitt
+%% See the files README and COPYING.
+%%
+\def\batchfile{cleveref.ins}
+\input docstrip.tex
+\preamble
+
+LaTeX package for intelligent cross-referencing.
+
+Copyright (C) 2006--2016 Toby Cubitt
+See the files README and COPYING.
+
+\endpreamble
+\keepsilent
+\generateFile{cleveref.sty}{t}{\from{cleveref.dtx}{package}}
+\Msg{**************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by LaTeX:}
+\Msg{*}
+\Msg{* \space\space cleveref.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the following files}
+\Msg{* through LaTeX:}
+\Msg{*}
+\Msg{* \space\space cleveref.dtx}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{**************************************************************}
diff --git a/macros/latex/contrib/cleveref/cleveref.pdf b/macros/latex/contrib/cleveref/cleveref.pdf
new file mode 100644
index 0000000000..ba58f27170
--- /dev/null
+++ b/macros/latex/contrib/cleveref/cleveref.pdf
Binary files differ