diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/hepthesis/example/csquotes.sty')
-rw-r--r-- | Master/texmf-dist/doc/latex/hepthesis/example/csquotes.sty | 2414 |
1 files changed, 2414 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/csquotes.sty b/Master/texmf-dist/doc/latex/hepthesis/example/csquotes.sty new file mode 100644 index 00000000000..f26ae8bae8d --- /dev/null +++ b/Master/texmf-dist/doc/latex/hepthesis/example/csquotes.sty @@ -0,0 +1,2414 @@ +% $Id: csquotes.sty,v 3.7 2007/03/25 20:23:41 lehman stable $ + +% Copyright (c) 2003--2007 Philipp Lehman, author-maintained. +% +% Permission is granted to copy, distribute and/or modify this +% software under the terms of the LaTeX Project Public License +% (LPPL), version 1.3. +% +% This software is provided `as is', without warranty of any kind, +% either expressed or implied, including, but not limited to, the +% implied warranties of merchantability and fitness for a particular +% purpose. + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{csquotes}[2007/03/25 v3.7 Quotation facilities] + +%% Compatibility and requirements + +\RequirePackage{keyval} + +\@ifpackageloaded{inputenc} + {} + {\AtBeginDocument{% + \@ifpackageloaded{inputenc} + {\csq@warning + {Load `inputenc' before `csquotes'} + {`inputenc' package loaded too late} + {Always load `inputenc' before `csquotes'}} + {}}} + +\@ifpackageloaded{ucs} + {\let\csq@ifucs\@firstoftwo} + {\let\csq@ifucs\@secondoftwo + \AtBeginDocument{% + \@ifpackageloaded{ucs} + {\let\csq@ifucs\@firstoftwo} + {}}} + +%% Category codes + +\def\csq@docatcodes{\do\~\do\&\do\:\do\"} +\def\do#1{\noexpand\do\noexpand#1{\the\catcode`#1}} +\edef\csq@docatcodes{\csq@docatcodes} + +\AtEndOfPackage{% + \def\do#1#2{\catcode`#1=#2\relax} + \csq@docatcodes + \let\csq@docatcodes\csq@undefined + \let\do\noexpand} + +\catcode`\~=\active +\catcode`\&=3 +\catcode`\:=12 +\catcode`\"=12 + +%% General things + +\newif\ifcsq@block +\newif\ifcsq@quiet +\newif\ifcsq@active + +\newcount\csq@reset +\newcount\csq@gtype +\newcount\csq@glevel +\newcount\csq@qlevel +\newcount\csq@tshold + +\def\csq@ifcsundefined#1{% + \begingroup + \expandafter\ifx\csname#1\endcsname\relax + \endgroup\expandafter\@firstoftwo + \else + \endgroup\expandafter\@secondoftwo + \fi} + +\def\csq@ifundefined#1{% + \begingroup + \escapechar\m@ne + \expandafter\csq@ifcsundefined + \expandafter{\string#1} + {\endgroup\@firstoftwo} + {\endgroup\@secondoftwo}} + +\providecommand{\@gobblethree}[3]{} +\providecommand{\@gobblefive}[5]{} + +% Hook management (and some syntactic sugar) + +\long\def\csq@add#1#2{% + \csq@ifundefined{#1}{\let#1\@empty}{}% + \begingroup + \toks@=\expandafter{#1#2}% + \edef#1{\endgroup\def\noexpand#1{\the\toks@}}#1} + +\long\def\csq@eadd#1#2{% + \csq@ifundefined{#1}{\let#1\@empty}{}% + \begingroup + \toks@=\expandafter{#1}% + \edef#1{\endgroup\def\noexpand#1{\the\toks@#2}}#1} + +\long\def\csq@gadd#1{% + \csq@ifundefined{#1}{\let#1\@empty}{}% + \g@addto@macro#1} + +\long\def\csq@xadd#1#2{% + \csq@ifundefined{#1}{\let#1\@empty}{}% + \begingroup + \toks@=\expandafter{#1}% + \xdef#1{\the\toks@#2}% + \endgroup} + +\def\csq@csdef#1{\expandafter\def\csname#1\endcsname} +\def\csq@csedef#1{\expandafter\edef\csname#1\endcsname} +\def\csq@csgdef#1{\expandafter\gdef\csname#1\endcsname} +\def\csq@csxdef#1{\expandafter\xdef\csname#1\endcsname} +\def\csq@csgadd#1{\expandafter\csq@gadd\csname#1\endcsname} +\def\csq@csxadd#1{\expandafter\csq@xadd\csname#1\endcsname} + +\def\csq@cslet#1#2{\expandafter\let\csname#1\endcsname#2} +\def\csq@letcs#1#2{\expandafter\let\expandafter#1\csname#2\endcsname} +\def\csq@csletcs#1{\expandafter\csq@letcs\csname#1\endcsname} + +% {<item>}{<list>}{<separator>} + +\def\csq@addto@list#1{% + \expandafter\csq@addto@list@i\csname\string#1\endcsname} +\def\csq@addto@list@i#1#2#3{% + \begingroup + \@tempswatrue + \def#3##1{\ifnum`#1=`##1\relax\@tempswafalse\fi}#2% + \expandafter\endgroup\if@tempswa + \csq@add#2{#3#1}% + \fi} + +\newtoks\csq@ltxeverypar +\def\csq@addto@everypar#1{% + \let\csq@everypar\everypar + \csq@ltxeverypar=\expandafter{\the\everypar}% + \csq@everypar={\the\csq@ltxeverypar#1}% + \let\everypar\csq@ltxeverypar + \let\csq@addto@everypar\@gobble} + +% Miscellaneous tests + +\long\def\csq@ifblank#1{% from url.sty + \csq@ifblank@i#1&&\@secondoftwo\@firstoftwo:} +\long\def\csq@ifblank@i#1#2#4#5:{#4} + +\providecommand*{\ifstringblank}{\csq@ifblank} + +\newcommand*{\ifblockquote}{% + \ifcsq@block + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@ifsafeactives{% + \ifx\if@safe@actives\iftrue + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@iftypeset{% + \ifx\protect\@typeset@protect + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@ifstrings{% + \ifx\protect\string + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@ifmmode{% + \ifmmode + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@ifnested{% + \ifcsq@block + \expandafter\@firstoftwo + \else + \ifnum\csq@qlevel>\z@ + \expandafter\expandafter + \expandafter\@firstoftwo + \else + \expandafter\expandafter + \expandafter\@secondoftwo + \fi + \fi} + +% Parsers for UTF-8 + +\def\csq@string#1{\csq@string@i#1&} +\def\csq@string@i#1#2&{% + \string#1\csq@ifblank{#2}{}{\csq@string@i#2&}} + +\def\csq@number#1{\csq@number@i#1&} +\def\csq@number@i#1#2&{% + \number`#1 \csq@ifblank{#2}{}{.\csq@number@i#2&}} + +\def\csq@utfprint#1{u8:\csq@utfprint@i#1&} +\def\csq@utfprint@i#1#2&{% + \number`#1 \csq@ifblank{#2}{}{:\csq@utfprint@i#2&}} + +% Grouping control + +\csq@ifcsundefined{eTeXversion} + {\let\csq@bqgroup\begingroup + \let\csq@eqgroup\endgroup} + {\def\csq@bqgroup{% + \bgroup\leavevmode + \csq@glevel\currentgrouplevel + \csq@gtype\currentgrouptype} + \def\csq@eqgroup{% + \ifnum\csq@gtype=\currentgrouptype + \ifnum\csq@glevel=\currentgrouplevel + \else + \csq@err@mismatch{% + I have detected a group level mismatch. Verify that all + groups\MessageBreak and all active quotes are properly + balanced and nested. If you\MessageBreak continue, I + will write a summary of all previously opened + groups\MessageBreak to the transcript file}% + \aftergroup\showgroups + \fi + \else + \csq@err@mismatch{% + I have detected a group type mismatch. Verify that all + groups\MessageBreak and all active quotes are properly + balanced and nested. If you\MessageBreak continue, I + will write a summary of all previously opened + groups\MessageBreak to the transcript file}% + \aftergroup\showgroups + \fi + \egroup}} + +%% User feedback + +\def\csq@error#1#2{% + \PackageError{csquotes}{#1}{#2.}} + +\def\csq@warning@loose#1#2#3{% + \PackageWarning{csquotes}{#1}} +\def\csq@warning@strict#1#2#3{% + \PackageError{csquotes}{#2}{#3.}} +\let\csq@warning\csq@warning@loose + +\def\csq@info#1{% + \ifcsq@quiet + \else + \PackageInfo{csquotes}{#1\csq@noline}% + \fi} + +\let\csq@noline\@gobble +\AtEndOfPackage{\let\csq@noline\@empty} + +% Errors + +\def\csq@err@mismatch#1{% + \csq@errormark + \csq@error + {Unbalanced groups or invalid nesting} + {#1}} + +\def\csq@err@mmode#1{% + \csq@error + {`\string#1' invalid in math mode} + {This command may not be used in math mode}} + +\def\csq@err@notdef#1{% + \csq@error + {`\string#1' not defined} + {This command or environment environment appears to + be\MessageBreak undefined}} + +\def\csq@err@invldopt#1{% + \csq@error + {Option `#1' invalid} + {The option you have supplied is invalid. See the csquotes + manual\MessageBreak for valid option keys and their + possible values}} + +\def\csq@err@alloc{% + \csq@error + {Invalid argument} + {One of the arguments you have supplied is already allocated + as\MessageBreak active quote or delimiter}} + +\def\csq@err@invldchar{% + \csq@error + {Invalid argument} + {Only single characters with category code 12 or 13 may + be\MessageBreak allocated as active quotes. Numbers, + punctuation marks, and\MessageBreak characters which + are part of the LaTeX syntax or reserved\MessageBreak + for a specific purpose are invalid}} + +\def\csq@err@invldutf{% + \csq@error + {Invalid argument} + {Only valid UTF-8 sequences representing a single + character\MessageBreak may be allocated as active quotes}} + +\def\csq@err@ucs{% + \csq@error + {ucs package not supported} + {The ucs package is not supported. If you want to use + UTF-8\MessageBreak encoded active quotes, try + `\string\usepackage[utf8]{inputenc}'.\MessageBreak + If you continue now, I will reject all UTF-8 encoded + arguments\MessageBreak as invalid}} + +\def\csq@err@nbquote{% + \csq@err@mismatch{% + You have nested a block quotation. Block quotation + commands\MessageBreak may only be used on quotation level 0}}% + +% Warnings + +\def\csq@warn@nobabel#1{% + \csq@warning + {The `babel' package is not available.\MessageBreak #1} + {#1} + {Load the `babel' package to use this feature}} + +\def\csq@warn@noomega#1{% + \csq@warning + {Quote style `#1' requires Omega.\MessageBreak + Some features will be missing} + {Quote style `#1' requires Omega} + {Compile the document with `lambda' instead of `latex'}} + +\def\csq@warn@location#1{% + \csq@warning + {`\string#1' invalid at this point.\MessageBreak + Ignoring command} + {`\string#1' invalid at this point} + {This command may not be used at this particular + point.\MessageBreak See the user manual of the `csquotes' + package for details}} + +\def\csq@warn@legacy#1#2{% + \csq@warning + {`\string#1' is deprecated.\MessageBreak + Using `\string#2' instead} + {`\string#1' is deprecated} + {Please use `\string#2' instead}% + \let#1#2#2} + +%% Opening quotation mark + +% Outer marks + +\def\csq@oqmark{% + \ifnum\csq@qlevel>\z@ + \csq@err@mismatch{% + Level 1 quote group invalid at this point: + the current level is \the\csq@qlevel}% + \csq@bqgroup + \advance\csq@qlevel\@ne + \let\csq@oqmark\csq@qerror + \else + \csq@bqgroup + \csq@qlevel\@ne + \csq@resetstyle + \csq@init + \let\csq@oqmark\csq@qclose + \let\csq@kerntok@i\csq@theqmark@oopen + \csq@theqmark@oopen + \csq@setmark@open + \expandafter\csq@restkern + \fi} + +% Inner marks + +\def\csq@iqmark{% + \ifnum\csq@qlevel>\@ne + \csq@err@mismatch{% + Level 2 quote group invalid at this point: + the current level is \the\csq@qlevel}% + \csq@bqgroup + \advance\csq@qlevel\@ne + \let\csq@iqmark\csq@qerror + \else + \csq@bqgroup + \csq@qlevel\tw@ + \csq@resetstyle + \csq@init + \let\csq@iqmark\csq@qclose + \csq@addkern@open + \csq@theqmark@iopen + \fi} + +% Nestable marks + +\def\csq@qopen{% + \csq@bqgroup\csq@qopen@i} + +\def\csq@qopen@i{% + \ifnum\csq@qlevel>\@ne + \csq@err@mismatch{% + New quote group invalid at this point: + the current level is \the\csq@qlevel}% + \advance\csq@qlevel\@ne + \else + \advance\csq@qlevel\@ne + \csq@resetstyle + \csq@init + \ifnum\csq@qlevel=\@ne + \let\csq@kerntok@i\csq@theqmark@oopen + \csq@theqmark@oopen + \csq@setmark@open + \expandafter\expandafter + \expandafter\csq@restkern + \else + \csq@addkern@open + \csq@theqmark@iopen + \fi + \fi} + +\def\csq@iqopen{% + \csq@bqgroup\csq@iqopen@i} + +\def\csq@iqopen@i{% + \ifnum\csq@qlevel>\@ne + \csq@err@mismatch{% + Level 2 quote group invalid at this point: + the current level is \the\csq@qlevel}% + \advance\csq@qlevel\@ne + \else + \csq@qlevel\tw@ + \csq@resetstyle + \csq@init + \csq@addkern@open + \csq@theqmark@iopen + \fi} + +%% Closing quotation mark + +\def\csq@qclose{% + \ifnum\csq@qlevel=\@ne + \ifdim\lastkern=\csq@frenchmark + \unkern\unkern + \csq@eqgroup + \else + \csq@addkern@close + \csq@theqmark@oclose + \let\csq@kerntok@i\csq@theqmark@oclose + \csq@qclose@i + \expandafter\expandafter + \expandafter\csq@restkern + \fi + \else + \ifnum\csq@qlevel=\tw@ + \csq@theqmark@iclose + \csq@setmark@close + \let\csq@kerntok@i\csq@theqmark@iclose + \csq@qclose@i + \expandafter\expandafter + \expandafter\csq@restkern + \else + \ifnum\csq@qlevel>\z@ + \csq@qerror + \else + \csq@err@mismatch{% + Cannot close the current quote group: + the current level is \the\csq@qlevel}% + \fi + \fi + \fi} + +\def\csq@qclose@i{% + \expandafter\def + \expandafter\csq@tempa + \expandafter{% + \expandafter\csq@eqgroup + \expandafter\def + \expandafter\csq@kerntok@i + \expandafter{\csq@kerntok@i}}% + \csq@tempa} + +\def\csq@qerror{% + \csq@eqgroup + \csq@errormark} + +%% Style initialization + +\def\csq@init{% + \csq@setsfcodes + \ifnum\csq@qlevel=\@ne + \csq@theqmark@oinit + \ifx\csq@theqmark@omiddle\@empty + \else + \let\csq@theeverypar\csq@theqmark@omiddle + \leavevmode + \csq@addto@everypar{\csq@theeverypar}% + \fi + \begingroup + \settowidth{\@tempdima}{% + \csq@theqmark@oopen\csq@theqmark@iopen}% + \settowidth{\@tempdimb}{% + \csq@theqmark@oopen\unkern\csq@theqmark@iopen}% + \ifdim\@tempdima=\@tempdimb + \def\csq@tempa{\endgroup + \let\csq@thekern@open\csq@theqmark@kern}% + \else + \addtolength{\@tempdima}{-\@tempdimb}% + \edef\csq@tempa{\endgroup + \def\noexpand\csq@thekern@open{\the\@tempdima}}% + \fi + \csq@tempa + \begingroup + \settowidth{\@tempdima}{% + \csq@theqmark@iclose\csq@theqmark@oclose}% + \settowidth{\@tempdimb}{% + \csq@theqmark@iclose\unkern\csq@theqmark@oclose}% + \ifdim\@tempdima=\@tempdimb + \def\csq@tempa{\endgroup + \let\csq@thekern@close\csq@theqmark@kern}% + \else + \addtolength{\@tempdima}{-\@tempdimb}% + \edef\csq@tempa{\endgroup + \def\noexpand\csq@thekern@close{\the\@tempdima}}% + \fi + \csq@tempa + \fi + \ifnum\csq@qlevel=\tw@ + \csq@theqmark@iinit + \ifx\csq@theqmark@imiddle\@empty + \else + \let\csq@theeverypar\csq@theqmark@imiddle + \leavevmode + \csq@addto@everypar{\csq@theeverypar}% + \fi + \fi} + +\csq@add\@parboxrestore{% + \let\csq@bquote@i\csq@bquote@iii + \csq@qlevel\z@ + \csq@blockfalse} + +%% Restore kerning + +\def\csq@restkern{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \expandafter\csq@restkern@i} + +\def\csq@restkern@i{% + \futurelet\csq@kerntok@ii\csq@restkern@ii} + +\def\csq@restkern@ii{% + \ifcat a\noexpand\csq@kerntok@ii + \expandafter\csq@restkern@iii + \fi + \ifcat 1\noexpand\csq@kerntok@ii + \expandafter\csq@restkern@iii + \fi} + +\def\csq@restkern@iii{% + \begingroup + \settowidth{\@tempdima}{% + \csq@kerntok@i\csq@kerntok@ii}% + \settowidth{\@tempdimb}{% + \csq@kerntok@i\relax\csq@kerntok@ii}% + \ifdim\@tempdima=\@tempdimb + \else + \addtolength{\@tempdima}{-\@tempdimb}% + \penalty\@M\hskip\@tempdima\relax + \fi + \endgroup} + +%% Detect and kern adjoining quotes + +\def\csq@kernmark{13sp} +\def\csq@frenchmark{17sp} +\let\csq@themark\csq@kernmark + +\def\csq@setmark@open{% + \penalty\@M + \hskip-\csq@themark\relax + \hskip\csq@themark\relax} + +\def\csq@setmark@close{% + \kern-\csq@themark + \kern\csq@themark} + +\def\csq@addkern@open{% + \ifdim\lastskip=\csq@kernmark + \unskip\unskip\unpenalty + \unkern % EC fix + \ifdim\csq@thekern@open=\z@ + \else + \penalty\@M\hskip\csq@thekern@open\relax + \fi + \fi} + +\def\csq@addkern@close{% + \ifdim\lastkern=\csq@kernmark + \unkern\unkern + \ifdim\csq@thekern@close=\z@ + \else + \penalty\@M\hskip\csq@thekern@close\relax + \fi + \fi} + +%% Punctuation + +% 1001 apostrophe (biblatex) +% 1002 abbreviation dot (biblatex) +% 1003/1250 comma +% 1004/1500 semicolon +% 1005/2000 colon +% 1006/3000 period +% 1007/3001 exclamation mark +% 1008/3002 question mark +% 1009 suppress punctuation (biblatex) + +\def\csq@setsfcodes{% + \csq@ifcsundefined{csq@sfcodes@\f@encoding} + {} + {\@nameuse{csq@sfcodes@\f@encoding}}% + \sfcode`\)=\z@ + \sfcode`\]=\z@ + \ifnum\sfcode`\.>2000 + \csq@setencodes + \else + \csq@setfrcodes + \fi + \let\frenchspacing\csq@setfrcodes + \let\nonfrenchspacing\csq@setencodes} + +\def\csq@setfrcodes{% + \sfcode`\,=1003 + \sfcode`\;=1004 + \sfcode`\:=1005 + \sfcode`\.=1006 + \sfcode`\!=1007 + \sfcode`\?=1008 +} + +\def\csq@setencodes{% + \sfcode`\,=1250 + \sfcode`\;=1500 + \sfcode`\:=2000 + \sfcode`\.=3000 + \sfcode`\!=3001 + \sfcode`\?=3002 +} + +\csq@csdef{csq@sfactor@1250}{1003} +\csq@csdef{csq@sfactor@1500}{1004} +\csq@csdef{csq@sfactor@2000}{1005} +\csq@csdef{csq@sfactor@3000}{1006} +\csq@csdef{csq@sfactor@3001}{1007} +\csq@csdef{csq@sfactor@3002}{1008} + +\def\csq@spacefactor{% + \ifhmode + \@ifundefined{csq@sfactor@\the\spacefactor} + {\the\spacefactor} + {\@nameuse{csq@sfactor@\the\spacefactor}}% + \else + 1000% + \fi} + +\newcommand*{\ifquotepunct}{% + \ifnum\csq@spacefactor>1002 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\newcommand*{\ifquotecomma}{% + \ifnum\csq@spacefactor=1003 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\newcommand*{\ifquotesemicolon}{% + \ifnum\csq@spacefactor=1004 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\newcommand*{\ifquotecolon}{% + \ifnum\csq@spacefactor=1005 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\newcommand*{\ifquoteterm}{% + \ifnum\csq@spacefactor>1005 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\newcommand*{\ifquoteperiod}{% + \ifnum\csq@spacefactor=1006 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\newcommand*{\ifquoteexclam}{% + \ifnum\csq@spacefactor=1007 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +\newcommand*{\ifquotequestion}{% + \ifnum\csq@spacefactor=1008 + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} + +%% Babel interface + +\def\csq@setstyle#1{% + \begingroup + \let\if@safe@actives\iftrue + \csq@ifcsundefined{csq@qstyle@#1} + {\csq@warning + {Quote style `#1' not defined.\MessageBreak Ignoring command} + {Quote style `#1' not defined} + {Define the style or alias first} + \endgroup} + {\edef\csq@tempa{\endgroup + \def\noexpand\csq@currentstyle{#1}% + \noexpand\@nameuse{csq@qstyle@#1}}% + \csq@tempa}} + +\def\csq@resetstyle{% + \ifnum\csq@reset=\@ne + \ifx\csq@currentstyle\languagename + \else + \csq@ifcsundefined{csq@qstyle@\languagename} + {\csq@warning + {No style for language `\languagename'.\MessageBreak + Using fallback style} + {No style for language `\languagename'} + {Define a style or alias for this language first}% + \csq@setstyle{fallback}} + {\csq@setstyle{\languagename}}% + \fi + \fi} + +\def\csq@savelang{% + \csq@ifcsundefined{csq@mainlang} + {\edef\csq@mainlang{\languagename}} + {}} + +\def\csq@resetlang{% + \csq@ifcsundefined{csq@mainlang} + {} + {\@nameuse{otherlanguage*}{\csq@mainlang}}} + +% \lowercase: workaround for page headers of book.cls et al. + +\def\csq@lang#1{% + \csq@savelang + \lowercase{\@nameuse{otherlanguage*}{#1}}} + +\def\csq@nolang#1{% + \begingroup + \lowercase{\def\csq@tempa{#1}}% + \csq@warn@nobabel{Cannot switch to language `\csq@tempa'}% + \endgroup} + +\def\csq@hyph#1{% + \csq@savelang + \lowercase{\hyphenrules{#1}}} + +\def\csq@nohyph#1{% + \begingroup + \lowercase{\def\csq@tempa{#1}}% + \csq@warn@nobabel{No hyphenation rules for `\csq@tempa'}% + \endgroup} + +\csq@add\csq@mkbabel{% + \csq@add\@parboxrestore{\csq@resetlang}% + \csq@ifcsundefined{l@usenglish} + {\csq@ifcsundefined{l@USenglish} + {} + {\let\l@usenglish\l@USenglish}} + {}% + \csq@ifcsundefined{l@ukenglish} + {\csq@ifcsundefined{l@UKenglish} + {} + {\let\l@ukenglish\l@UKenglish}} + {}% + \ifcase\csq@reset + \or + \or + \csq@info{Enabling multilingual support}% + \csq@reset\@ne + \else + \csq@info{Adjusting default style}% + \DeclareQuoteAlias{\bbl@main@language}{default}% + \fi} + +\csq@add\csq@mknobabel{% + \ifcase\csq@reset + \or + \csq@warn@nobabel{Cannot enable multilingual support}% + \or + \or + \csq@warn@nobabel{Cannot adjust default style}% + \fi + \csq@reset\z@ + \def\csq@resetqstyle{% + \csq@warn@nobabel{Cannot enable multilingual support}}% + \let\csq@lang\csq@nolang + \let\csq@hyph\csq@nohyph} + +%% Markup with control sequences + +% Argument parsers + +% {<macro>}[<arg1>][<arg2>] => +% <macro>{\mkcitation}{<arg1>}{<arg2>} + +\def\csq@getcargs#1{% + \@ifnextchar[%] + {\csq@getcargs@i{#1}} + {\csq@getcargs@i{#1}[]}} + +\long\def\csq@getcargs@i#1[#2]{% + \@ifnextchar[%] + {\csq@getcargs@ii{#1}{#2}} + {\csq@getcargs@ii{#1}{#2}[]}} + +\long\def\csq@getcargs@ii#1#2[#3]{% + #1{\mkcitation}{#2}{#3}} + +% {<macro>}[<arg1>][<arg2>]{<arg3>}[<arg4>] => +% <macro>{\mkccitation}{\csq@cite[<arg1>][<arg2>]{<arg3>}}{<arg4>} + +\def\csq@getccargs#1{% + \@ifnextchar[%] + {\csq@getccargs@i{#1}{}} + {\csq@getccargs@ii{#1}{}}} + +\long\def\csq@getccargs@i#1#2[#3]{% + \@ifnextchar[%] + {\csq@getccargs@i{#1}{#2[{#3}]}} + {\csq@getccargs@ii{#1}{#2[{#3}]}}} + +\long\def\csq@getccargs@ii#1#2#3{% + \@ifnextchar[%] + {\csq@getccargs@iii{#1}{#2}{#3}} + {\csq@getccargs@iii{#1}{#2}{#3}[]}} + +\long\def\csq@getccargs@iii#1#2#3[#4]{% + #1{\mkccitation}{\csq@cite#2{#3}}{#4}} + +% Plain quotes + +\DeclareRobustCommand*{\enquote}{% + \csq@ifmmode + {\csq@err@mmode\enquote} + {\@ifstar + {\csq@quote@ii{}} + {\csq@quote@i{}}}} + +\long\def\csq@quote@i#1#2{% + \csq@bqgroup #1\csq@qopen@i #2\csq@qclose} +\long\def\csq@quote@ii#1#2{% + \csq@bqgroup #1\csq@iqopen@i #2\csq@qclose} + +% Plain quotes + babel + +\DeclareRobustCommand*{\foreignquote}{% + \csq@ifmmode + {\csq@err@mmode\foreignquote} + {\@ifstar\csq@fquote@ii\csq@fquote@i}} + +\def\csq@fquote@i#1{\csq@quote@i{\csq@lang{#1}}} +\def\csq@fquote@ii#1{\csq@quote@ii{\csq@lang{#1}}} + +\DeclareRobustCommand*{\hyphenquote}{% + \csq@ifmmode + {\csq@err@mmode\hyphenquote} + {\@ifstar\csq@hquote@ii\csq@hquote@i}} + +\def\csq@hquote@i#1{\csq@quote@i{\csq@hyph{#1}}} +\def\csq@hquote@ii#1{\csq@quote@ii{\csq@hyph{#1}}} + +% PDF strings + +\long\def\csq@pdf@quote#1{% + \if#1*\relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {\csq@pdf@quote@ii} + {\csq@pdf@quote@i{#1}}} + +\long\def\csq@pdf@quote@i#1{% + \csq@pdf@ooqmark #1\csq@pdf@coqmark} +\long\def\csq@pdf@quote@ii#1{% + \csq@pdf@oiqmark #1\csq@pdf@ciqmark} + +\long\def\csq@pdf@fquote#1{% + \if#1*\relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {\expandafter\csq@pdf@quote@ii\@gobble} + {\csq@pdf@quote@i}} + +\csq@add\csq@mkhyperref{% + \let\enquote\csq@pdf@quote + \let\foreignquote\csq@pdf@fquote + \let\hyphenquote\csq@pdf@fquote} + +% Text quotes + +\DeclareRobustCommand*{\textquote}{% + \csq@ifmmode + {\csq@err@mmode\textquote} + {\@ifstar + {\csq@getcargs{\csq@tquote{\csq@iqopen@i}}} + {\csq@getcargs{\csq@tquote{\csq@qopen@i}}}}} + +% {<init><macro>}{<hook>}{<cite>}{<punct>}{<text>} + +\long\def\csq@tquote#1#2#3#4#5{% + \csq@bqgroup + \def\csq@tempa{% + \mkpretextpunct{#4}% + \csq@qclose + \mkmidtextpunct{#4}}% + \csq@ifblank{#3} + {} + {\csq@add\csq@tempa{#2{#3}}}% + #1\quotetext#5\endquotetext + \csq@tempa\mkfintextpunct{#4}} + +% Text quotes + babel + +\DeclareRobustCommand*{\foreigntextquote}{% + \csq@ifmmode + {\csq@err@mmode\foreigntextquote} + {\@ifstar\csq@ftquote@ii\csq@ftquote@i}} + +\def\csq@ftquote@i#1{% + \csq@getcargs{\csq@tquote{\csq@lang{#1}\csq@qopen@i}}} +\def\csq@ftquote@ii#1{% + \csq@getcargs{\csq@tquote{\csq@lang{#1}\csq@iqopen@i}}} + +\DeclareRobustCommand*{\hyphentextquote}{% + \csq@ifmmode + {\csq@err@mmode\hyphentextquote} + {\@ifstar\csq@htquote@ii\csq@htquote@i}} + +\def\csq@htquote@i#1{% + \csq@getcargs{\csq@tquote{\csq@hyph{#1}\csq@qopen@i}}} +\def\csq@htquote@ii#1{% + \csq@getcargs{\csq@tquote{\csq@hyph{#1}\csq@iqopen@i}}} + +% Integrated text quotes + +\DeclareRobustCommand*{\textcquote}{% + \csq@ifmmode + {\csq@err@mmode\textcquote} + {\@ifstar + {\csq@getccargs{\csq@tquote{\csq@iqopen@i}}} + {\csq@getccargs{\csq@tquote{\csq@qopen@i}}}}} + +% Integrated text quotes + babel + +\DeclareRobustCommand*{\foreigntextcquote}{% + \csq@ifmmode + {\csq@err@mmode\foreigntextcquote} + {\@ifstar\csq@ftcquote@ii\csq@ftcquote@i}} + +\def\csq@ftcquote@i#1{% + \csq@getccargs{\csq@tquote{\csq@lang{#1}\csq@qopen@i}}} +\def\csq@ftcquote@ii#1{% + \csq@getccargs{\csq@tquote{\csq@lang{#1}\csq@iqopen@i}}} + +\DeclareRobustCommand*{\hyphentextcquote}{% + \csq@ifmmode + {\csq@err@mmode\hyphentextcquote} + {\@ifstar\csq@htcquote@ii\csq@htcquote@i}} + +\def\csq@htcquote@i#1{% + \csq@getccargs{\csq@tquote{\csq@hyph{#1}\csq@qopen@i}}} +\def\csq@htcquote@ii#1{% + \csq@getccargs{\csq@tquote{\csq@hyph{#1}\csq@iqopen@i}}} + +% PDF strings + +\csq@add\csq@mkhyperref{% + \def\textquote{\pdfstringdefWarn\textquote}% + \def\foreigntextquote{\pdfstringdefWarn\foreigntextquote}% + \def\hyphentextquote{\pdfstringdefWarn\hyphentextquote}% + \def\textcquote{\pdfstringdefWarn\textcquote}% + \def\foreigntextcquote{\pdfstringdefWarn\foreigntextcquote}% + \def\hyphentextcquote{\pdfstringdefWarn\hyphentextcquote}} + +% Block quotes + +\DeclareRobustCommand*{\blockquote}{% + \csq@ifmmode + {\csq@err@mmode\blockquote} + {\csq@getcargs{\csq@bquote{}}}} + +\def\csq@bquote{% + \csq@ifnested + {\csq@err@nbquote\@gobblefive} + {\ifinner + \expandafter\csq@bquote@iii + \else + \expandafter\csq@bquote@i + \fi}} + +% {<init>}{<hook>}{<cite>}{<punct>}{<text>} + +\long\def\csq@bquote@i#1#2#3#4#5{% + \begingroup + \def\@elt##1{\global\value{##1}\the\value{##1}\relax}% + \edef\csq@tempa{\cl@@ckpt}% + \let\@elt\relax + \csq@mkblockquote + \@fileswfalse + \csq@blockfalse + \setbox\@tempboxa=\vbox{% + \def\par{\aftergroup\csq@blocktrue\@par}% + \parfillskip\z@ \@plus 1fil\relax + \parindent\z@ + \vrule \@height1\baselineskip \@width\z@ #1#5}% + \ifdim\ht\@tempboxa>\csq@tshold\baselineskip + \csq@blocktrue + \fi + \ifcsq@block + \aftergroup\@firstoftwo + \else + \aftergroup\@secondoftwo + \fi + \csq@tempa + \endgroup + \csq@bquote@ii\csq@bquote@iii{#1}{#2}{#3}{#4}{#5}} + +\let\csq@nbgobble\@firstofone + +\def\csq@mkblockquote{% + \let\csq@nbgobble\@gobble + \let\csq@bquote\@gobblefive + \let\csq@error\@gobbletwo + \let\csq@warning\@gobblethree + \let\csq@info\@gobble + \let\label\@gobble + \let\index\@gobble + \let\glossary\@gobble} + +\long\def\csq@bquote@ii#1#2#3#4#5{% + \begin{\csq@blockenvironment}% + \csq@blocktrue + \begingroup#1% + \csq@setsfcodes + \quoteblock + #5% + \mkpreblockpunct{#4}% + \endquoteblock + \mkmidblockpunct{#4}% + \endgroup + \csq@ifblank{#3} + {} + {#2{#3}}% + \mkfinblockpunct{#4}% + \end{\csq@blockenvironment}} + +\long\def\csq@bquote@iii#1#2#3#4#5{% + \csq@bqgroup + \def\csq@tempa{% + \mkpreblockpunct{#4}% + \csq@qclose + \mkmidblockpunct{#4}}% + \csq@ifblank{#3} + {} + {\csq@add\csq@tempa{#2{#3}}}% + #1\csq@qopen@i\quotetext#5\endquotetext + \csq@tempa\mkfinblockpunct{#4}} + +\newcommand*{\BlockquoteDisable}[1]{% + \begingroup + \toks@=\expandafter{\csq@mkblockquote}% + \@temptokena={#1}% + \xdef\csq@mkblockquote{\the\toks@ \the\@temptokena}% + \endgroup} + +% Block quotes + babel + +\DeclareRobustCommand*{\foreignblockquote}[1]{% + \csq@ifmmode + {\csq@err@mmode\foreignblockquote} + {\csq@getcargs{\csq@bquote{\csq@lang{#1}}}}} + +\DeclareRobustCommand*{\hyphenblockquote}[1]{% + \csq@ifmmode + {\csq@err@mmode\hyphenblockquote} + {\csq@getcargs{\csq@bquote{\csq@hyph{#1}}}}} + +% Integrated block quotes + +\DeclareRobustCommand*{\blockcquote}{% + \csq@ifmmode + {\csq@err@mmode\blockcquote} + {\csq@getccargs{\csq@bquote{}}}} + +% Integrated block quotes + babel + +\DeclareRobustCommand*{\foreignblockcquote}[1]{% + \csq@ifmmode + {\csq@err@mmode\foreignblockcquote} + {\csq@getccargs{\csq@bquote{\csq@lang{#1}}}}} + +\DeclareRobustCommand*{\hyphenblockcquote}[1]{% + \csq@ifmmode + {\csq@err@mmode\hyphenblockcquote} + {\csq@getccargs{\csq@bquote{\csq@hyph{#1}}}}} + +% PDF strings + +\csq@add\csq@mkhyperref{% + \def\blockquote{\pdfstringdefWarn\blockquote}% + \def\foreignblockquote{\pdfstringdefWarn\foreignblockquote}% + \def\hyphenblockquote{\pdfstringdefWarn\hyphenblockquote}% + \def\blockcquote{\pdfstringdefWarn\blockcquote}% + \def\foreignblockcquote{\pdfstringdefWarn\foreignblockcquote}% + \def\hyphenblockcquote{\pdfstringdefWarn\hyphenblockcquote}} + +% Display quotes + +\newenvironment*{displayquote} + {\csq@getcargs{\csq@dquote{}}} + {\csq@edquote} + +% {<init>}{<hook>}{<cite>}{<punct>} + +\def\csq@dquote#1#2#3#4{% + \csq@ifblank{#3} + {\let\csq@tempb\@empty} + {\def\csq@tempb{#2{#3}}}% + \def\csq@tempc{#4}% + \csq@bdquote{#1}} + +\def\csq@bdquote#1{% + \@nameuse{\csq@blockenvironment}% + \csq@blocktrue + \begingroup#1% + \csq@setsfcodes + \quoteblock} + +\def\csq@edquote{% + \ifdim\lastskip>\z@\unskip\fi + \expandafter\mkpredisppunct + \expandafter{\csq@tempc}% + \endquoteblock + \expandafter\mkmiddisppunct + \expandafter{\csq@tempc}% + \endgroup + \csq@tempb + \expandafter\mkfindisppunct + \expandafter{\csq@tempc}% + \@nameuse{end\csq@blockenvironment}} + +% Display quotes + babel + +\newenvironment*{foreigndisplayquote}[1] + {\csq@getcargs{\csq@dquote{\csq@lang{#1}}}} + {\csq@edquote} + +\newenvironment*{hyphendisplayquote}[1] + {\csq@getcargs{\csq@dquote{\csq@hyph{#1}}}} + {\csq@edquote} + +% Integrated display quotes + +\newenvironment*{displaycquote} + {\csq@getccargs{\csq@dcquote{}}} + {\csq@edquote} + +% {<init>}{<hook>}{<cite>}{<punct>} + +\def\csq@dcquote#1#2#3#4{% + \def\csq@tempb{#2{#3}}% + \def\csq@tempc{#4}% + \csq@bdquote{#1}} + +% Integrated display quotes + babel + +\newenvironment*{foreigndisplaycquote}[1] + {\csq@getccargs{\csq@dcquote{\csq@lang{#1}}}} + {\csq@edquote} + +\newenvironment*{hyphendisplaycquote}[1] + {\csq@getccargs{\csq@dcquote{\csq@hyph{#1}}}} + {\csq@edquote} + +% Hooks + +\newcommand*{\mkcitation}[1]{\space(#1)} +\newcommand*{\mkccitation}[1]{\space#1} + +\newcommand*{\mkpretextpunct}[1]{} +\newcommand*{\mkmidtextpunct}[1]{} +\newcommand*{\mkfintextpunct}[1]{#1} +\newcommand*{\mkpreblockpunct}[1]{} +\newcommand*{\mkmidblockpunct}[1]{} +\newcommand*{\mkfinblockpunct}[1]{#1} +\newcommand*{\mkpredisppunct}[1]{} +\newcommand*{\mkmiddisppunct}[1]{} +\newcommand*{\mkfindisppunct}[1]{#1} + +\newenvironment*{quotetext}{}{} +\newenvironment*{quoteblock}{}{} + +% Legacy commands + +\newcommand*{\cquote}{% + \csq@warn@legacy\cquote\textcquote} +\newcommand*{\foreigncquote}{% + \csq@warn@legacy\foreigncquote\foreigntextcquote} +\newcommand*{\hyphencquote}{% + \csq@warn@legacy\hyphencquote\hyphentextcquote} + +%% Markup with active characters + +\let\csq@dospecials\@empty +\let\csq@doutfspecials\@empty + +\def\csq@do@dospecial#1#2{% + \ifnum\catcode`#1=\active + \csq@info{Redefining character \string#1}% + \csq@letspecial{#1}{csq@special@\number`#1}% + \else + \csq@info{Making character \string#1 active}% + \csq@letspecial{#1}{csq@special@\number`#1}% + \catcode`#1=\active + \fi} + +\def\csq@do@undospecial#1#2{% + \ifnum#2=\active + \csq@info{Resetting character \string#1}% + \csq@letspecial{#1}{csq@saved@\number`#1}% + \else + \csq@info{Resetting catcode of \string#1}% + \catcode`#1=#2\relax + \fi} + +\def\csq@do@verbspecial#1#2{% + \csq@info{Redefining character \string#1}% + \ifnum`#1<128\relax + \csq@edefspecial{#1}{\string#1}% + \else + \csq@letspecial{#1}{csq@saved@\number`#1}% + \fi} + +\def\csq@do@doutfspecial#1{% + \csq@info{Redefining character \csq@utfprint{#1}}% + \csq@csletcs{u8:\csq@string{#1}}{csq@special@\csq@number{#1}}} + +\def\csq@do@undoutfspecial#1{% + \csq@info{Resetting character \csq@utfprint{#1}}% + \csq@csletcs{u8:\csq@string{#1}}{csq@saved@\csq@number{#1}}} + +\def\csq@do@delspecial#1#2{% + \csq@info{Deallocating character \string#1}% + \csq@cslet{csq@special@\number`#1}\csq@undefined + \csq@cslet{csq@saved@\number`#1}\csq@undefined + \csq@cslet{csq@string@\number`#1}\csq@undefined + \csq@cslet{csq@textdef@\number`#1}\csq@undefined + \csq@cslet{csq@xtxtdef@\number`#1}\csq@undefined + \csq@cslet{csq@pdfdef@\number`#1}\csq@undefined} + +\def\csq@do@delutfspecial#1{% + \csq@info{Deallocating character \csq@utfprint{#1}}% + \csq@cslet{csq@special@\csq@number{#1}}\csq@undefined + \csq@cslet{csq@saved@\csq@number{#1}}\csq@undefined + \csq@cslet{csq@string@\csq@number{#1}}\csq@undefined + \csq@cslet{csq@textdef@\csq@number{#1}}\csq@undefined + \csq@cslet{csq@xtxtdef@\csq@number{#1}}\csq@undefined + \csq@cslet{csq@pdfdef@\csq@number{#1}}\csq@undefined} + +\def\csq@mkenable{% + \let\do\csq@do@dospecial + \csq@dospecials + \let\do\csq@do@doutfspecial + \csq@doutfspecials + \let\do\noexpand + \csq@activetrue} + +\def\csq@mkdisable{% + \ifcsq@active + \let\do\csq@do@undospecial + \csq@dospecials + \let\do\csq@do@undoutfspecial + \csq@doutfspecials + \let\do\noexpand + \csq@activefalse + \fi} + +\def\csq@mkverbatim{% + \ifcsq@active + \let\do\csq@do@verbspecial + \csq@dospecials + \let\do\csq@do@undoutfspecial + \csq@doutfspecials + \let\do\noexpand + \fi} + +\def\csq@mkdelete{% + \csq@mkdisable + \let\do\csq@do@delspecial + \csq@dospecials + \let\do\csq@do@delutfspecial + \csq@doutfspecials + \let\do\noexpand + \let\csq@dospecials\@empty + \let\csq@doutfspecials\@empty + \let\csq@mkpdfstrings\@empty} + +\let\csq@mkpdfstrings\@empty +\csq@add\csq@mkhyperref{\csq@mkpdfstrings} + +\csq@ifcsundefined{inpenc@prehook}% inputenc 2006/05/05 v1.1b + {} + {\addto@hook\inpenc@prehook{% + \csq@info{Input encoding change}% + \csq@mkdelete}} + +% Regular specials + +% {<char>}{<textdef>}{<pdfdef1>}{<pdfdef2>} + +\def\csq@addspecial#1#2#3#4{% + \csq@validate{#1} + {\csq@addspecial@i@s{#1}{\csqQQ}{#2}{#3}{#4}} + {\csq@addspecial@i@u{#1}{\csqQQ}{#2}{#3}{#4}}} + +% {<char>}{<macro>}{<textdef>}{<pdfdef1>}{<pdfdef2>} + +\def\csq@addspecial@i@s#1#2#3#4#5{% + \csq@info{Allocating character \string#1}% + \csq@csedef{csq@special@\number`#1}{\noexpand#2{\number`#1}}% + \ifnum\catcode`#1=\active + \csq@cslet{csq@saved@\number`#1}{#1}% + \else + \csq@csdef{csq@saved@\number`#1}{#1}% + \fi + \csq@csedef{csq@string@\number`#1}{\string#1}% + \csq@csdef{csq@textdef@\number`#1}{#3}% + \csq@ifblank{#5} + {\csq@csdef{csq@pdfdef@\number`#1}{#4}} + {\csq@add\csq@mkpdfstrings{\csq@defpspecial{#1}{#4}{#5}}}% + \csq@eadd\csq@dospecials{\noexpand\do{\string#1}{\the\catcode`#1}}% + \ifnum`#1<128\relax + \csq@addto@list{#1}{\dospecials}{\do}% + \csq@addto@list{#1}{\@sanitize}{\@makeother}% + \fi} + +% {<char>}{<macro>}{<textdef>}{<pdfdef1>}{<pdfdef2>} + +\def\csq@addspecial@i@u#1#2#3#4#5{% + \csq@info{Allocating character \csq@utfprint{#1}}% + \csq@csedef{csq@special@\csq@number{#1}}{% + \noexpand#2{\csq@number{#1}}}% + \csq@ifcsundefined{u8:\csq@string{#1}} + {\csq@error + {\csq@utfprint{#1} not supported by inputenc} + {This UTF-8 sequence does not seem to be supported by the + inputenc\MessageBreak package}% + \csq@csdef{csq@saved@\csq@number{#1}}{}} + {\csq@csletcs{csq@saved@\csq@number{#1}}{u8:\csq@string{#1}}}% + \csq@csedef{csq@string@\csq@number{#1}}{\csq@string{#1}}% + \csq@csdef{csq@textdef@\csq@number{#1}}{#3}% + \csq@ifblank{#5} + {\csq@csdef{csq@pdfdef@\csq@number{#1}}{#4}} + {\csq@add\csq@mkpdfstrings{\csq@defupspecial{#1}{#4}{#5}}}% + \csq@eadd\csq@doutfspecials{\noexpand\do{\csq@string{#1}}}} + +% Block specials + +% {<char1>}{<delim>}{<char2>}{<textdef>} + +\def\csq@addbspecial#1#2#3#4{% + \csq@validate{#1} + {\csq@addbspecial@i@s{#1}{#2}{#3}{#4}} + {\csq@addbspecial@i@u{#1}{#2}{#3}{#4}}} + +\def\csq@addbspecial@i@s#1#2#3#4{% + \begingroup + \def\csq@tempa{\endgroup\csq@addspecial@i@s{#1}{\csqBQ}{}}% + \csq@eadd\csq@tempa{% + {\expandafter\noexpand\csname csq@saved@\number`#1\endcsname + \noexpand\pdfstringdefWarn{\string#1}}{}}% + \csq@tempa + \csq@validate{#2} + {\csq@addbspecial@ii@s{\number`#1}{#2}{#3}{#4}} + {\csq@addbspecial@ii@u{\number`#1}{#2}{#3}{#4}}} + +\def\csq@addbspecial@i@u#1#2#3#4{% + \begingroup + \def\csq@tempa{\endgroup\csq@addspecial@i@u{#1}{\csqBQ}{}}% + \csq@eadd\csq@tempa{% + {\expandafter\noexpand\csname csq@saved@\csq@number{#1}\endcsname + \noexpand\pdfstringdefWarn{\csq@utfprint{#1}}}{}}% + \csq@tempa + \csq@validate{#2} + {\csq@addbspecial@ii@s{\csq@number{#1}}{#2}{#3}{#4}} + {\csq@addbspecial@ii@u{\csq@number{#1}}{#2}{#3}{#4}}} + +\def\csq@addbspecial@ii@s#1#2#3#4{% + \csq@addspecial@i@s{#2}{\csqBQsep}{}{}{}% + \begingroup + \let\csq@tempa\@empty + \def\csq@tempb{{#1}}% + \uccode`\~=`#2\relax + \uppercase{\csq@add\csq@tempb{{~}}}% + \csq@add\csq@tempb{{#3}{#4}}% + \csq@validate{#3} + {\expandafter\def\expandafter\csq@tempa + \expandafter{\expandafter\csq@addbspecial@iii@s\csq@tempb}} + {\expandafter\def\expandafter\csq@tempa + \expandafter{\expandafter\csq@addbspecial@iii@u\csq@tempb}}% + \expandafter\endgroup\csq@tempa} + +\def\csq@addbspecial@ii@u#1#2#3#4{% + \csq@addspecial@i@u{#2}{\csqBQsep}{}{}{}% + \csq@validate{#3} + {\csq@addbspecial@iii@s{#1}{#2}{#3}{#4}} + {\csq@addbspecial@iii@u{#1}{#2}{#3}{#4}}} + +\def\csq@addbspecial@iii@s#1#2#3#4{% + \csq@addspecial@i@s{#3}{\csqBQend}{}{}{}% + \begingroup + \def\csq@tempa{{#1}{#2}}% + \uccode`\~=`#3\relax + \uppercase{\csq@add\csq@tempa{~}}% + \csq@add\csq@tempa{{#4}}% + \expandafter\endgroup + \expandafter\csq@addbspecial@iv\csq@tempa} + +\def\csq@addbspecial@iii@u#1#2#3#4{% + \csq@addspecial@i@u{#3}{\csqBQend}{}{}{}% + \csq@addbspecial@iv{#1}{#2}{#3}{#4}} + +\def\csq@addbspecial@iv#1#2#3#4{% + \expandafter\csq@defbspecial + \expandafter{\csname csq@textdef@#1\endcsname}{#2}{#3}{#4}% + \expandafter\csq@defxbspecial + \expandafter{\csname csq@xtxtdef@#1\endcsname}{#4}} + +% Specials + +\newcommand*{\csqQQ}[1]{% + \csq@ifsafeactives + {\@nameuse{csq@string@#1}} + {\csq@iftypeset + {\csq@ifmmode + {\@nameuse{csq@saved@#1}} + {\@nameuse{csq@textdef@#1}}} + {\csq@ifstrings + {\@nameuse{csq@string@#1}} + {\noexpand\csqQQ{#1}}}}} + +\newcommand*{\csqBQ}[1]{% + \csq@ifsafeactives + {\@nameuse{csq@string@#1}} + {\csq@iftypeset + {\csq@ifmmode + {\@nameuse{csq@saved@#1}} + {\csq@ifnested + {\csq@err@nbquote} + {\csq@nbgobble{\@nameuse{csq@textdef@#1}}}}} + {\csq@ifstrings + {\@nameuse{csq@string@#1}} + {\noexpand\csqBQbeg{#1}}}}} + +\newcommand*{\csqBQbeg}[1]{% + \csq@ifsafeactives + {\@nameuse{csq@string@#1}} + {\csq@iftypeset + {\csq@ifmmode + {\@nameuse{csq@saved@#1}} + {\csq@ifnested + {\csq@err@nbquote} + {\csq@nbgobble{\@nameuse{csq@xtxtdef@#1}}}}} + {\csq@ifstrings + {\@nameuse{csq@string@#1}} + {\noexpand\csqBQbeg{#1}}}}} + +\newcommand*{\csqBQsep}[1]{% + \csq@ifsafeactives + {\@nameuse{csq@string@#1}} + {\csq@iftypeset + {\@nameuse{csq@saved@#1}} + {\csq@ifstrings + {\@nameuse{csq@string@#1}} + {\noexpand\csqBQsep{#1}}}}} + +\newcommand*{\csqBQend}[1]{% + \csq@ifsafeactives + {\@nameuse{csq@string@#1}} + {\csq@iftypeset + {\@nameuse{csq@saved@#1}} + {\csq@ifstrings + {\@nameuse{csq@string@#1}} + {\noexpand\csqBQend{#1}}}}} + +\csq@add\csq@mkhyperref{% + \def\csqQQ##1{\@nameuse{csq@pdfdef@##1}}% + \def\csqBQ##1{\@nameuse{csq@pdfdef@##1}}% + \def\csqBQbeg##1{\@nameuse{csq@pdfdef@##1}}% + \def\csqBQsep##1{\@nameuse{csq@saved@##1}}% + \def\csqBQend##1{\@nameuse{csq@saved@##1}}} + +% Legacy commands + +\def\csq@special{\csqQQ} + +% Define specials + +% {<char>}{<def>} + +\def\csq@edefspecial#1#2{% + \begingroup + \uccode`\~=`#1\relax + \uppercase{\endgroup\edef~}{#2}} + +% {<char>}{<csname>} + +\def\csq@letspecial#1#2{% + \begingroup + \uccode`\~=`#1\relax + \uppercase{\def\csq@tempa{\endgroup\let~}}% + \expandafter\csq@tempa\csname#2\endcsname} + +% {<macro>}{<delim>}{<char2>}{<def>} + +\def\csq@defbspecial#1#2#3#4{% + \long\def#1##1#3{\csq@bspecial@i{##1}{#2}{#4}}} + +% {<text>}{<delim>}{<macro>} + +\long\def\csq@bspecial@i#1#2#3{% + \long\def\csq@bspecial@ii##1#2##2&{% + \csq@ifblank{##2} + {#3{}{}{#1}} + {\csq@bspecial@iii#1&}}% + \long\def\csq@bspecial@iii##1#2##2&{% + #3{##2}{}{##1}}% + \csq@bspecial@ii#1#2&} + +% {<macro>}{<def>} + +\def\csq@defxbspecial#1#2{% + \long\def#1##1\csqBQend##2{\csq@xbspecial@i{##1}{#2}}} + +% {<text>}{<macro>} + +\long\def\csq@xbspecial@i#1#2{% + \long\def\csq@xbspecial@ii##1\csqBQsep##2&{% + \csq@ifblank{##2} + {#2{}{}{#1}} + {\csq@xbspecial@iii#1&}}% + \long\def\csq@xbspecial@iii##1\csqBQsep##2##3&{% + #2{##3}{}{##1}}% + \csq@xbspecial@ii#1\csqBQsep&} + +% {<char>}{<pdfomark>}{<pdfcmark>} + +\def\csq@defpspecial#1#2#3{% + \begingroup + \uccode`\~=`#1\relax + \uppercase{\endgroup\def~##1~}{#2##1#3}} + +% {<char>}{<pdfomark>}{<pdfcmark>} + +\def\csq@defupspecial#1#2#3{% + \expandafter\def\csname u8:\csq@string{#1}\endcsname##1#1{#2##1#3}} + +% Validate user input + +% {<char>}{<macro>}{<utfmacro>} + +\def\csq@validate#1#2#3{% + \csq@ifutfchar{#1} + {\csq@ifvalidutf{#1} + {\csq@ifcsundefined{csq@special@\csq@number{#1}} + {#3} + {\csq@err@alloc}} + {\csq@err@invldutf}} + {\csq@ifvalidchar{#1} + {\csq@ifcsundefined{csq@special@\number`#1} + {#2} + {\csq@err@alloc}} + {\csq@err@invldchar}}} + +% {<char>}{<true>}{<false>} + +\def\csq@ifutfchar#1{% + \csq@ifcsundefined{@inpenc@undefined} + {\@secondoftwo} + {\csq@ifutfenc}% + {\csq@ifsingle{#1} + {\ifnum`#1<128\relax + \expandafter\@secondoftwo + \else + \csq@err@invldutf + \expandafter\@gobbletwo + \fi} + {\@firstoftwo}} + {\csq@ifsingle{#1} + {\@secondoftwo} + {\csq@err@invldchar + \@gobbletwo}}} + +\csq@ifcsundefined{inputencodingname}% inputenc 2006/05/05 v1.1b + {\def\csq@ifutfenc{% + \csq@ifucs + {\csq@err@ucs\@secondoftwo} + {\begingroup + \def\@inpenc@undefined@##1{\def\csq@tempa{##1}}% + \@inpenc@undefined + \ifx\csq@tempa\csq@utfenc + \aftergroup\@firstoftwo + \else + \aftergroup\@secondoftwo + \fi + \endgroup}}} + {\def\csq@ifutfenc{% + \csq@ifucs + {\csq@err@ucs\@secondoftwo} + {\ifx\inputencodingname\csq@utfenc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi}}} + +\def\csq@utfenc{utf8} + +% {<char>}{<true>}{<false>} + +\long\def\csq@ifsingle#1{% + \csq@ifblank{#1} + {\@secondoftwo} + {\expandafter\csq@ifsingle@i + \string#1&&\@secondoftwo\@firstoftwo:}} +\long\def\csq@ifsingle@i#1#2#3#5#6:{#5} + +% {<char>}{<true>}{<false>} + +\def\csq@ifvalidchar#1{% + \begingroup + \@tempswafalse + \ifnum\active=\catcode`#1\relax + \@tempswatrue + \else\ifnum12=\catcode`#1\relax + \@tempswatrue + \fi\fi + \if@tempswa + \csq@ifvalidchar@i{#1}% + \fi + \if@tempswa + \aftergroup\@firstoftwo + \else + \aftergroup\@secondoftwo + \fi + \endgroup} + +\def\csq@ifvalidchar@i#1{% + \def\break\fi##1\relax{\fi\@tempswafalse}% + \def\do##1{\ifnum`##1=`#1\relax\break\fi}% + \csq@resrvdchars\relax} + +\def\csq@resrvdchars{% + \do\[\do\]\do\*\do\@\do\~\do\-\do\`\do\'\do\.\do\,\do\;\do\:% + \do\!\do\?\do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9} + +% {<char>}{<true>}{<false>} + +\def\csq@ifvalidutf#1{% + \csq@ifblank{#1}{\@secondoftwo}{\csq@ifvalidutf@i#1&}} + +\def\csq@ifvalidutf@i#1#2&{% + \csq@ifblank{#2} + {\@secondoftwo}% 0x00-0x7F handled elsewhere + {\csq@ifutfstart{#1}{\csq@ifvalidutf@ii#2&}{\@secondoftwo}}} + +\def\csq@ifvalidutf@ii#1#2&{% + \csq@ifutfnext{#1} + {\csq@ifblank{#2}{\@firstoftwo}{\csq@ifvalidutf@ii#2&}} + {\@secondoftwo}} + +% 0xC0-0xFD, 0x80-0xBF, 0x80-0xBF, ... + +\def\csq@ifutfstart#1{% + \ifnum`#1>191\relax + \ifnum`#1<254\relax + \expandafter\expandafter + \expandafter\@firstoftwo + \else + \expandafter\expandafter + \expandafter\@secondoftwo + \fi + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@ifutfnext#1{% + \ifnum`#1>127\relax + \ifnum`#1<192\relax + \expandafter\expandafter + \expandafter\@firstoftwo + \else + \expandafter\expandafter + \expandafter\@secondoftwo + \fi + \else + \expandafter\@secondoftwo + \fi} + +\def\csq@isvalid#1#2#3{#2} + +% User interface + +\newcommand*{\MakeOuterQuote}[1]{% + \csq@addspecial{#1}{\csq@oqmark} + {\csq@pdf@ooqmark}{\csq@pdf@coqmark}} + +\newcommand*{\MakeInnerQuote}[1]{% + \csq@addspecial{#1}{\csq@iqmark} + {\csq@pdf@oiqmark}{\csq@pdf@ciqmark}} + +\newcommand*{\MakeAutoQuote}{% + \@ifstar + {\csq@mkaquote\csq@iqopen} + {\csq@mkaquote\csq@qopen}} +\def\csq@mkaquote#1#2#3{% + \csq@addspecial{#2}{#1}{\csq@pdf@ooqmark}{}% + \csq@addspecial{#3}{\csq@qclose}{\csq@pdf@coqmark}{}} + +\newcommand*{\MakeForeignQuote}{% + \@ifstar + {\csq@mkfquote\csq@iqopen@i} + {\csq@mkfquote\csq@qopen@i}} +\def\csq@mkfquote#1#2#3#4{% + \csq@addspecial{#3} + {\csq@bqgroup\csq@lang{#2}#1} + {\csq@pdf@ooqmark}{}% + \csq@addspecial{#4}{\csq@qclose}{\csq@pdf@coqmark}{}} + +\newcommand*{\MakeHyphenQuote}{% + \@ifstar + {\csq@mkhquote\csq@iqopen@i} + {\csq@mkhquote\csq@qopen@i}} +\def\csq@mkhquote#1#2#3#4{% + \csq@addspecial{#3} + {\csq@bqgroup\csq@hyph{#2}#1} + {\csq@pdf@ooqmark}{}% + \csq@addspecial{#4}{\csq@qclose}{\csq@pdf@coqmark}{}} + +\newcommand*{\MakeBlockQuote}[3]{% + \csq@addbspecial{#1}{#2}{#3}{\csq@bquote{}{\mkcitation}}} + +\newcommand*{\MakeForeignBlockQuote}[4]{% + \csq@addbspecial{#2}{#3}{#4}% + {\csq@bquote{\csq@lang{#1}}{\mkcitation}}} + +\newcommand*{\MakeHyphenBlockQuote}[4]{% + \csq@addbspecial{#2}{#3}{#4}% + {\csq@bquote{\csq@hyph{#1}}{\mkcitation}}} + +\newcommand*{\EnableQuotes}{} +\newcommand*{\DisableQuotes}{} +\newcommand*{\VerbatimQuotes}{} +\newcommand*{\DeleteQuotes}{\csq@mkdelete} + +\AtBeginDocument{% + \def\EnableQuotes{\csq@mkenable}% + \def\DisableQuotes{\csq@mkdisable}% + \def\VerbatimQuotes{\csq@mkverbatim}} + +% Author interface + +\newcommand*{\@enablequotes}{} +\newcommand*{\@disablequotes}{} +\newcommand*{\@verbatimquotes}{} +\newcommand*{\@deletequotes}{% + \csq@quiettrue + \csq@mkdelete + \csq@quietfalse} + +\AtBeginDocument{% + \def\@enablequotes{% + \csq@quiettrue + \csq@mkenable + \csq@quietfalse}% + \def\@disablequotes{% + \csq@quiettrue + \csq@mkdisable + \csq@quietfalse}% + \def\@verbatimquotes{% + \csq@quiettrue + \csq@mkverbatim + \csq@quietfalse}} + +% Legacy + +\newcommand*{\RestoreQuotes}{% + \csq@warn@legacy\RestoreQuotes\EnableQuotes} +\newcommand*{\@restorequotes}{\@enablequotes} + +%% Switch quote styles manually + +\newcommand*{\setquotestyle}{% + \@ifstar + {\csq@resetqstyle} + {\@ifnextchar[%] + {\csq@setqstyle} + {\csq@setqstyle[]}}} + +\def\csq@setqstyle[#1]#2{% + \ifnum\csq@reset=\@ne + \csq@info{Disabling multilingual support}% + \csq@reset\z@ + \fi + \csq@ifblank{#1} + {\csq@setstyle{#2}} + {\csq@setstyle{#2/#1}}} + +\def\csq@resetqstyle{% + \csq@info{Enabling multilingual support}% + \csq@reset\@ne} + +%% Define quote styles + +\newcommand*{\DeclareQuoteStyle}[2][]{% + \begingroup + \let\if@safe@actives\iftrue + \csq@ifblank{#1} + {\edef\csq@tempa{#2}} + {\edef\csq@tempa{#2/#1}}% + \csq@ifcsundefined{csq@qstyle@\csq@tempa} + {} + {\csq@info{Redefining quotation style `\csq@tempa'}}% + \@ifnextchar[%] + {\csq@declareqstyle@i} + {\csq@declareqstyle@i[]}} + +\def\csq@declareqstyle@i[#1]{% + \csq@csgdef{csq@qstyle@\csq@tempa}{% + \def\csq@theqmark@oinit{#1}}% + \@ifnextchar[%] + {\csq@declareqstyle@ii} + {\csq@declareqstyle@ii[]}} + +\def\csq@declareqstyle@ii[#1]#2{% + \csq@csgadd{csq@qstyle@\csq@tempa}{% + \def\csq@theqmark@iinit{#1}% + \def\csq@theqmark@oopen{#2}}% + \@ifnextchar[%] + {\csq@declareqstyle@iii} + {\csq@declareqstyle@iii[]}} + +\def\csq@declareqstyle@iii[#1]#2{% + \csq@csgadd{csq@qstyle@\csq@tempa}{% + \def\csq@theqmark@omiddle{#1}% + \def\csq@theqmark@oclose{#2}}% + \@ifnextchar[%] + {\csq@declareqstyle@iv} + {\csq@declareqstyle@iv[]}} + +\def\csq@declareqstyle@iv[#1]#2{% + \csq@ifblank{#1} + {\def\csq@theqmark@kern{\z@}} + {\def\csq@theqmark@kern{#1}}% + \csq@csxadd{csq@qstyle@\csq@tempa}{% + \def\noexpand\csq@theqmark@kern{\csq@theqmark@kern}}% + \csq@csgadd{csq@qstyle@\csq@tempa}{% + \def\csq@theqmark@iopen{#2}}% + \@ifnextchar[%] + {\csq@declareqstyle@v} + {\csq@declareqstyle@v[]}} + +\def\csq@declareqstyle@v[#1]#2{% + \csq@csgadd{csq@qstyle@\csq@tempa}{% + \def\csq@theqmark@imiddle{#1}% + \def\csq@theqmark@iclose{#2}}% + \endgroup} + +\@onlypreamble\DeclareQuoteStyle + +%% Define quote aliases + +\newcommand*{\DeclareQuoteAlias}[3][]{% + \begingroup + \let\if@safe@actives\iftrue + \csq@ifblank{#1} + {\edef\csq@tempa{#2}} + {\edef\csq@tempa{#2/#1}}% + \csq@ifcsundefined{csq@qstyle@\csq@tempa} + {\csq@error + {Quote style not defined} + {Define the style or alias `\csq@tempa' first}} + {\csq@ifcsundefined{csq@qstyle@#3} + {} + {\csq@info{Redefining alias `#3' -> `\csq@tempa'}}% + \csq@csxdef{csq@qstyle@#3}{% + \noexpand\@nameuse{csq@qstyle@\csq@tempa}}}% + \endgroup} + +\@onlypreamble\DeclareQuoteAlias + +%% Define quotes for PDF strings + +\newcommand*{\DeclarePlainStyle}[4]{% + \def\csq@pdf@ooqmark{#1}% + \def\csq@pdf@coqmark{#2}% + \def\csq@pdf@oiqmark{#3}% + \def\csq@pdf@ciqmark{#4}} + +\@onlypreamble\DeclarePlainStyle + +%% Define package options + +\newcommand*{\DeclareQuoteOption}[1]{% + \define@key{csq}{#1}{\DeclareQuoteAlias[##1]{#1}{#1}}} + +\AtEndOfPackage{% + \def\DeclareQuoteOption#1{% + \csq@warn@location\DeclareQuoteOption}} + +%% Set defaults + +\newcommand*{\SetBlockThreshold}[1]{% + \csq@tshold=#1\relax} + +\newcommand*{\SetBlockEnvironment}[1]{% + \csq@ifcsundefined{#1} + {\csq@err@notdef{#1}} + {\def\csq@blockenvironment{#1}}} + +\newcommand*{\SetCiteCommand}[1]{% + \csq@ifundefined{#1} + {\csq@err@notdef{#1}} + {\def\csq@cite{#1}}} + +% Legacy commands + +\newcommand*{\setblockthreshold}{% + \csq@warn@legacy\setblockthreshold\SetBlockThreshold} +\newcommand*{\setblockenvironment}{% + \csq@warn@legacy\setblockenvironment\SetBlockEnvironment} + +%% Author interface to internal marks + +\newcommand*{\initoquote}{% + \csq@resetstyle + \csq@qlevel\@ne + \csq@theqmark@oinit} + +\newcommand*{\initiquote}{% + \csq@resetstyle + \csq@qlevel\tw@ + \csq@theqmark@iinit} + +\newcommand*{\textooquote}{% + \csq@resetstyle + \csq@theqmark@oopen} + +\newcommand*{\textmoquote}{% + \csq@resetstyle + \csq@theqmark@omiddle} + +\newcommand*{\textcoquote}{% + \csq@resetstyle + \csq@theqmark@oclose} + +\newcommand*{\textoiquote}{% + \csq@resetstyle + \csq@theqmark@iopen} + +\newcommand*{\textmiquote}{% + \csq@resetstyle + \csq@theqmark@imiddle} + +\newcommand*{\textciquote}{% + \csq@resetstyle + \csq@theqmark@iclose} + +%% Space factor codes + +\csq@csdef{csq@sfcodes@OT1}{% + \sfcode 96=\z@ % textquoteleft + \sfcode 39=\z@ % textquoteright + \sfcode 92=\z@ % textquotedblleft + \sfcode 34=\z@ % textquotedblright +} + +\csq@csdef{csq@sfcodes@T1}{% + \sfcode 96=\z@ % textquoteleft + \sfcode 39=\z@ % textquoteright + \sfcode 16=\z@ % textquotedblleft + \sfcode 17=\z@ % textquotedblright + \sfcode 13=\z@ % quotesinglbase + \sfcode 18=\z@ % quotedblbase + \sfcode 14=\z@ % guilsinglleft + \sfcode 15=\z@ % guilsinglright + \sfcode 19=\z@ % guillemotleft + \sfcode 60=\z@ % guillemotleft (<< ligature) + \sfcode 20=\z@ % guillemotright + \sfcode 62=\z@ % guillemotright (>> ligature) + \sfcode 34=\z@ % textquotedbl +} + +\csq@csdef{csq@sfcodes@LY1}{% + \sfcode 96=\z@ % textquoteleft + \sfcode 39=\z@ % textquoteright + \sfcode147=\z@ % textquotedblleft + \sfcode148=\z@ % textquotedblright + \sfcode130=\z@ % quotesinglbase + \sfcode132=\z@ % quotedblbase + \sfcode139=\z@ % guilsinglleft + \sfcode155=\z@ % guilsinglright + \sfcode171=\z@ % guillemotleft + \sfcode187=\z@ % guillemotright + \sfcode129=\z@ % textquotesingle + \sfcode 34=\z@ % textquotedbl +} + +%% Auxiliary commands for some styles + +% Wrappers for Omega primitives + +\newcommand*{\seteverylineleft}[1]{% + \csq@ifcsundefined{localleftbox} + {\csq@warn@noomega\csq@currentstyle} + {\leavevmode\null\localleftbox{#1}}} + +\newcommand*{\seteverylineright}[1]{% + \csq@ifcsundefined{localrightbox} + {\csq@warn@noomega\csq@currentstyle} + {\localrightbox{#1}}} + +% Improved spacing for French + +\newcommand*{\frenchnbspace}{% + \penalty\@M + \hskip 0.8\fontdimen2\font + plus 0.3\fontdimen3\font + minus 0.8\fontdimen4\font} + +\newcommand*{\mkfrenchopenquote}[1]{% + \leavevmode#1\frenchnbspace} + +\newcommand*{\mkfrenchclosequote}[1]{% + \frenchnbspace#1} + +\newcommand*{\initfrenchquotes}{% + \let\csq@themark\csq@frenchmark} + +% Prevent undesirable T1 ligatures (?` and !`) + +\newcommand*{\fixligatures}{% + \ifhmode + \ifnum\spacefactor>3000 + \relax + \else + \ifnum\spacefactor=1007 + \relax + \else + \ifnum\spacefactor=1008 + \relax + \fi + \fi + \fi + \fi} + +%% Built-in backend styles + +\DeclareQuoteStyle[quotes]{danish} + {\quotedblbase} + {\textquotedblleft} + [0.05em] + {\textquoteright}% unsure + {\textquoteright}% unsure +\DeclareQuoteStyle[guillemets]{danish} + {\guillemotright} + {\guillemotleft} + {\textquoteright}% unsure + {\textquoteright}% unsure +\DeclareQuoteStyle{dutch} + {\quotedblbase} + {\textquotedblright} + [0.05em] + {\quotesinglbase}% unsure + {\textquoteright}% unsure +\DeclareQuoteStyle[american]{english}% verified + {\textquotedblleft} + {\textquotedblright} + [0.05em] + {\textquoteleft} + {\textquoteright} +\DeclareQuoteStyle[british]{english}% verified + {\textquoteleft} + {\textquoteright} + [0.05em] + {\textquotedblleft} + {\textquotedblright} +\DeclareQuoteStyle[oldstyle]{english}% verified + [\seteverylineleft{\textquoteleft}] + {\textquoteleft} + {\textquoteright} + [0.05em] + {\textquotedblleft} + {\textquotedblright} +\DeclareQuoteStyle{finnish} + {\textquotedblright} + {\textquotedblright} + [0.05em] + {\textquoteright} + {\textquoteright} +\DeclareQuoteStyle[quotes]{french} + {\mkfrenchopenquote{\guillemotleft}} + {\mkfrenchclosequote{\guillemotright}} + {\textquotedblleft} + {\textquotedblright} +\DeclareQuoteStyle[quotes*]{french} + {\mkfrenchopenquote{\guillemotleft}} + {\mkfrenchclosequote{\guillemotright}} + {\mkfrenchopenquote{\textquotedblleft}} + {\mkfrenchclosequote{\textquotedblright}} +\DeclareQuoteStyle[guillemets]{french} + [\initfrenchquotes] + {\mkfrenchopenquote{\guillemotleft}} + [\mkfrenchopenquote{\guillemotleft}] + {\mkfrenchclosequote{\guillemotright}} + {\mkfrenchopenquote{\guillemotleft}} + {\mkfrenchclosequote{\guillemotright}} +\DeclareQuoteStyle[guillemets*]{french} + [\initfrenchquotes] + {\mkfrenchopenquote{\guillemotleft}} + [\mkfrenchopenquote{\guillemotright}] + {\mkfrenchclosequote{\guillemotright}} + {\mkfrenchopenquote{\guillemotleft}} + {\mkfrenchclosequote{\guillemotright}} +\DeclareQuoteStyle[oldstyle]{french} + [\initfrenchquotes + \seteverylineleft{\mkfrenchopenquote{\guillemotleft}}] + {\mkfrenchopenquote{\guillemotleft}} + {\mkfrenchclosequote{\guillemotright}} + {\mkfrenchopenquote{\guillemotleft}} + {\mkfrenchclosequote{\guillemotright}} +\DeclareQuoteStyle[imprimerie]{french} + [\initfrenchquotes] + [\seteverylineleft{\guillemotleft\nobreakspace}] + {\guillemotleft\nobreakspace} + [\guillemotleft\nobreakspace] + {\nobreakspace\guillemotright} + {\guillemotleft\nobreakspace} + [\relax] + {\nobreakspace\guillemotright} +\DeclareQuoteStyle[quotes]{german}% verified + {\quotedblbase} + {\textquotedblleft} + [0.05em] + {\quotesinglbase} + {\fixligatures\textquoteleft} +\DeclareQuoteStyle[guillemets]{german}% verified + {\guillemotright} + {\guillemotleft} + [0.025em] + {\guilsinglright} + {\guilsinglleft} +\DeclareQuoteStyle[swiss]{german}% verified + {\guillemotleft} + {\guillemotright} + [0.025em] + {\guilsinglleft} + {\guilsinglright} +\DeclareQuoteStyle[quotes]{italian} + {\textquotedblleft} + {\textquotedblright} + [0.05em] + {\textquoteleft} + {\textquoteright} +\DeclareQuoteStyle[guillemets]{italian} + {\guillemotleft} + [\textquotedblright]% unsure + {\guillemotright} + [0.025em] + {\textquotedblleft} + {\textquotedblright} +\DeclareQuoteStyle[guillemets]{norwegian} + {\guillemotleft} + {\guillemotright} + [0.025em] + {\guilsinglleft} + {\guilsinglright} +\DeclareQuoteStyle[quotes]{norwegian} + {\quotedblbase} + {\textquotedblright} + [0.05em] + {\quotesinglbase} + {\textquoteright} +\DeclareQuoteStyle{spanish}% verified + {\guillemotleft} + [\guillemotright] + {\guillemotright} + [0.025em] + {\textquotedblleft} + [\textquotedblright] + {\textquotedblright} +\DeclareQuoteStyle[quotes]{swedish}% verified + {\textquotedblright} + {\textquotedblright} + [0.05em] + {\textquoteright} + {\textquoteright} +\DeclareQuoteStyle[guillemets]{swedish}% verified + {\guillemotright} + {\guillemotright} + [0.025em] + {\guilsinglright} + {\guilsinglright} + +% Fallback style + +\DeclareQuoteStyle{fallback} + {\csq@dummymark} + {\csq@dummymark} + {\csq@dummymark} + {\csq@dummymark} + +\def\csq@dummymark{\textbf{?}} +\def\csq@errormark{\rule{1ex}{1ex}} + +% PDF strings + +\DeclarePlainStyle{"}{"}{'}{'} + +%% Built-in aliases + +\DeclareQuoteAlias[american]{english}{american} +\DeclareQuoteAlias[american]{english}{canadian} +\DeclareQuoteAlias[american]{english}{english} +\DeclareQuoteAlias[british]{english}{british} +\DeclareQuoteAlias[guillemets]{norwegian}{norwegian} +\DeclareQuoteAlias[quotes]{danish}{danish} +\DeclareQuoteAlias[quotes]{french}{french} +\DeclareQuoteAlias[quotes]{german}{austrian} +\DeclareQuoteAlias[quotes]{german}{german} +\DeclareQuoteAlias[quotes]{italian}{italian} +\DeclareQuoteAlias[quotes]{swedish}{swedish} +\DeclareQuoteAlias[swiss]{german}{swiss} + +% Babel aliases + +\DeclareQuoteAlias{american}{USenglish} +\DeclareQuoteAlias{american}{usenglish} +\DeclareQuoteAlias{british}{UKenglish} +\DeclareQuoteAlias{british}{ukenglish} +\DeclareQuoteAlias{french}{frenchb} +\DeclareQuoteAlias{german}{ngerman} +\DeclareQuoteAlias{austrian}{naustrian} +\DeclareQuoteAlias{norwegian}{norsk} +\DeclareQuoteAlias{norwegian}{nynorsk} + +%% Package options + +\newcommand*{\ExecuteQuoteOptions}{\setkeys{csq}} +\@onlypreamble\ExecuteQuoteOptions + +% Core options + +\define@key{csq}{strict}[true]{% + \csq@ifcsundefined{csq@opt@strict@#1} + {\csq@err@invldopt{strict=#1}} + {\@nameuse{csq@opt@strict@#1}}} +\def\csq@opt@strict@true{% + \csq@info{Enabling strict warnings}% + \let\csq@warning\csq@warning@strict} +\def\csq@opt@strict@false{% + \csq@info{Disabling strict warnings}% + \let\csq@warning\csq@warning@loose} + +\define@key{csq}{babel}[true]{% + \csq@ifcsundefined{csq@opt@babel@#1} + {\csq@err@invldopt{babel=#1}} + {\@nameuse{csq@opt@babel@#1}}} +\def\csq@opt@babel@false{% + \csq@info{Disabling multilingual support}% + \csq@reset\z@} +\def\csq@opt@babel@true{% + \csq@info{Enabling multilingual support}% + \csq@reset\@ne} +\def\csq@opt@babel@try{% + \csq@reset\tw@} +\def\csq@opt@babel@once{% + \csq@reset\thr@@} +\def\csq@opt@babel@tryonce{% + \csq@reset4\relax} + +\define@key{csq}{style}{% + \csq@opt@babel@false + \DeclareQuoteAlias{#1}{default}} + +% Language options + +\DeclareQuoteOption{danish} +\DeclareQuoteOption{english} +\DeclareQuoteOption{french} +\DeclareQuoteOption{german} +\DeclareQuoteOption{italian} +\DeclareQuoteOption{norwegian} +\DeclareQuoteOption{swedish} + +%% Initial setup + +% Set defaults + +\DeclareQuoteAlias[american]{english}{default} + +\csq@ifcsundefined{quote} + {\csq@info{% + The `quote' environment appears to be undefined.\MessageBreak + I'm defining a typical `quote' environment now} + \def\quote{% + \list{}{\rightmargin\leftmargin}% + \item\relax} + \def\endquote{\endlist}} + {} + +\SetBlockEnvironment{quote} +\SetBlockThreshold{3} +\SetCiteCommand{\cite} + +%% Last minute setup + +\AtBeginDocument{% + \@ifpackageloaded{babel} + {\csq@mkbabel} + {\csq@mknobabel}% + \let\csq@mkbabel\csq@undefined + \let\csq@mknobabel\csq@undefined + \@ifpackageloaded{hyperref} + {\expandafter\pdfstringdefDisableCommands + \expandafter{\csq@mkhyperref}} + {}% + \let\csq@mkhyperref\csq@undefined + \csq@add\@noligs{\@verbatimquotes}% + \@ifpackageloaded{verbatim} + {\addto@hook\every@verbatim{\@verbatimquotes}} + {}% + \@ifpackageloaded{fancyvrb} + {\csq@add\FV@CatCodes{\@verbatimquotes}} + {}% + \@ifpackageloaded{amsmath} + {\let\csq@collect@body\collect@body + \def\collect@body{\@disablequotes\csq@collect@body}} + {\@ifpackageloaded{amstext} + {\let\csq@collect@body\collect@body + \def\collect@body{\@disablequotes\csq@collect@body}} + {}}% + \@ifpackageloaded{endnotes} + {\BlockquoteDisable{% + \renewcommand{\endnote}[2][]{% + \csq@ifblank{#1} + {\endnotemark\relax} + {\endnotemark[#1]}}% + \renewcommand{\endnotetext}[2][]{}% + \let\addtoendnotes\@gobble}} + {}% + \csq@setstyle{default}% + \csq@mkenable} + +% Load configuration file + +\csq@info{Trying to load configuration file `csquotes.cfg'..} +\InputIfFileExists{csquotes.cfg} + {\csq@info{... configuration file loaded successfully}} + {\csq@info{... configuration file not used}} + +% Process options + +\DeclareOption*{% + \begingroup + \edef\csq@tempa{\endgroup + \noexpand\setkeys{csq}{\CurrentOption}}% + \csq@tempa} +\ProcessOptions* + +\endinput |