diff options
author | Karl Berry <karl@freefriends.org> | 2007-09-16 00:13:07 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-09-16 00:13:07 +0000 |
commit | 11826a2e3ed54621c66e5c34ebe977a0ba45c8ae (patch) | |
tree | 0fdd2516ae1c1675b81539c363888ab2ee078f71 /Master/texmf-dist | |
parent | d85f248e3b38ea0ecda38c5340e3cadd08d65346 (diff) |
hepthesis 1.4 (14sep07)
git-svn-id: svn://tug.org/texlive/trunk@4948 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
16 files changed, 3378 insertions, 238 deletions
diff --git a/Master/texmf-dist/doc/latex/hepthesis/ChangeLog b/Master/texmf-dist/doc/latex/hepthesis/ChangeLog index 7843f7d11e3..2c4dfe988af 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/ChangeLog +++ b/Master/texmf-dist/doc/latex/hepthesis/ChangeLog @@ -1,3 +1,87 @@ +2007-09-12 Andy Buckley <andy@insectnation.org> + + * Updated documentation about changed mandatory packages, some + package clashes, and improved example formatting with framed + boxes. + + * Added a couple of required earliest release dates to the + \RequirePackage lines. + + * Added subfig/continued caption example chapter to the example + thesis. + + * Removed subfig reqirement. + +2007-07-03 Andy Buckley <andy@insectnation.org> + + * Added command arguments etc. to the documentation. + + * Improved dedication command alignment as for \pagequote. + +2007-07-02 Andy Buckley <andy@insectnation.org> + + * Removed "Appendix" label from the colophon page (copied from the + book class thebibliography environment). + +2007-06-30 Andy Buckley <andy@insectnation.org> + + * Improved the positioning of the \pagequote using the varwidth + package - getting csquotes to work with the likes of fancybox was + a nightmare. + + * Sorted out some extra \cleardoublepage effects that resulted + from re-using the frontmatter and mainmatter definitions. + +2007-06-28 Andy Buckley <andy@insectnation.org> + + * Improved the horizonal and vertical centering of the page quote. + + * Restricted the width of the document in the page and chapter + quotes. + + * The front quote is now implemented with the name \pagequote and + \frontquote is an alias via \let. This is just to give a better + name, should someone decide to use it somewhere other than at the + front (not that I'm recommending that!) + + * Added 1.5 cm to each margin in the abstract and declaration + pages - I think this looks better since they are likely to be + short sections. + + * Added the chngpage mechanism for adding extra margin widths on + section by section bases. + +2007-06-27 Andy Buckley <andy@insectnation.org> + + * Added the \set...spacing commands and the variables that they influence. + +2007-06-25 Andy Buckley <andy@insectnation.org> + + * Added optional language argument to \frontquote and \chapterquote. These + use the csquotes commands \enquote and \foreignquote if csquotes is loaded. + +2007-06-11 Andy Buckley <andy@insectnation.org> + + * Added definite v1.5 to \thesis... command deprecation notices. + + * Tidied up, and removed a few obsolete references to + \thesis... commands in the user guide. + +2007-06-10 Andy Buckley <andy@insectnation.org> + + * Added the "plainpages=false" fix to hyperref package loading to + stop the pdfTeX "destination with the same identifier" warning. + + * Incorporated a variety of improvements from Albert Neumüller: + + Babel integration and \enquote + + Using subfig rather than subfigure + + Introduced penalties to stop enumeration breaking across pages + + Using KOMA-script base classes to fix some errors with onepage mode + + Avoiding fancyhdr warnings in onepage mode. + + * Fix to make sfheaders.sty only be loaded if the sftitles option + is in force. Thanks to Stuart Cook for the bug report and fix. + 2006-09-28 Andy Buckley <andy@insectnation.org> * Updated date to today, ready for release 1.3. diff --git a/Master/texmf-dist/doc/latex/hepthesis/TODO b/Master/texmf-dist/doc/latex/hepthesis/TODO new file mode 100644 index 00000000000..e4c21a67c77 --- /dev/null +++ b/Master/texmf-dist/doc/latex/hepthesis/TODO @@ -0,0 +1,8 @@ +TODO list for hepthesis +----------------------- + +* Provide control options for caption formatting. +* Integrated loading of csquotes and babel? +* Multilingual titles etc. +* Provide an option for centre/right-justifying section titles? +* Documentation/install in DTX/INS format diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/abhep.sty b/Master/texmf-dist/doc/latex/hepthesis/example/abhep.sty index 9bb0d868770..a0145aca09a 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/example/abhep.sty +++ b/Master/texmf-dist/doc/latex/hepthesis/example/abhep.sty @@ -81,9 +81,12 @@ \DeclareRobustCommand{\sqrtS}{\mymath{\sqrt{s}}\xspace} %% CP violation -\DeclareRobustCommand{\opC}{\mymath{\maybebm{\mathcal{C}}}\xspace} -\DeclareRobustCommand{\opP}{\mymath{\maybebm{\mathcal{P}}}\xspace} -\DeclareRobustCommand{\opT}{\mymath{\maybebm{\mathcal{T}}}\xspace} +%% \DeclareRobustCommand{\opC}{\mymath{\maybebm{\mathcal{C}}}\xspace} +%% \DeclareRobustCommand{\opP}{\mymath{\maybebm{\mathcal{P}}}\xspace} +%% \DeclareRobustCommand{\opT}{\mymath{\maybebm{\mathcal{T}}}\xspace} +\DeclareRobustCommand{\opC}{\texorpdfstring{\mymath{\maybebm{\mathcal{C}}}}{C}\xspace} +\DeclareRobustCommand{\opP}{\texorpdfstring{\mymath{\maybebm{\mathcal{P}}}}{P}\xspace} +\DeclareRobustCommand{\opT}{\texorpdfstring{\mymath{\maybebm{\mathcal{T}}}}{T}\xspace} \DeclareRobustCommand{\opCP}{\mymath{\opC\opP}\xspace} \DeclareRobustCommand{\opCPT}{\mymath{\opC\opP\opT}\xspace} %% and for convenience... diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/appendices.tex b/Master/texmf-dist/doc/latex/hepthesis/example/appendices.tex index 91b9dc1ee26..9d649510e62 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/example/appendices.tex +++ b/Master/texmf-dist/doc/latex/hepthesis/example/appendices.tex @@ -2,6 +2,13 @@ %% of the "appendices" environment (see thesis.tex). \chapter{Pointless extras} \label{app:Pointless} + +\chapterquote[french]% +{Le savant n'\'etudie pas la nature parce que cela est utile; \\ +\indent il l'\'etudie parce qu'il y prend plaisir, \\ +\indent et il y prend plaisir parce qu'elle est belle.}% +{Henri Poincar\'e, 1854--1912} + Appendixes (or should that be ``appendices''?) make you look really clever, 'cos it's like you had more clever stuff to say than could be fitted into the main bit of your thesis. Yeah. So everyone should have at least three of them\dots diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/backmatter.tex b/Master/texmf-dist/doc/latex/hepthesis/example/backmatter.tex index d00ed3fb8ad..3926f699a24 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/example/backmatter.tex +++ b/Master/texmf-dist/doc/latex/hepthesis/example/backmatter.tex @@ -14,5 +14,6 @@ \listoftables %% If you have time and interest to generate a (decent) index, -%% then you've clearly spent more time on the write-up than the research :) +%% then you've clearly spent more time on the write-up than the +%% research ;-) %\printindex diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/chap1.tex b/Master/texmf-dist/doc/latex/hepthesis/example/chap1.tex index a7f50e0c1b3..dd3ad06e632 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/example/chap1.tex +++ b/Master/texmf-dist/doc/latex/hepthesis/example/chap1.tex @@ -9,7 +9,7 @@ %% some point myself. \chapterquote{Laws were made to be broken.}% -{Christopher North 1785--1854}%: Blackwood's Magazine May 1830 +{Christopher North, 1785--1854}%: Blackwood's Magazine May 1830 Symmetries, either intact or broken, have proved to be at the heart of how matter interacts. The Standard Model of fundamental interactions 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 diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/example.pdf b/Master/texmf-dist/doc/latex/hepthesis/example/example.pdf Binary files differindex 2109618b44c..5b213fb4a98 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/example/example.pdf +++ b/Master/texmf-dist/doc/latex/hepthesis/example/example.pdf diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/example.tex b/Master/texmf-dist/doc/latex/hepthesis/example/example.tex index b37f1e42438..a7708ed2442 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/example/example.tex +++ b/Master/texmf-dist/doc/latex/hepthesis/example/example.tex @@ -1,6 +1,11 @@ \documentclass{thesis} \usepackage{thesis} +%% You can set the line spacing this way +%\setallspacing{double} +%% or a section at a time like this +%\setfrontmatterspacing{double} + %% PDF metadata \makeatletter \@ifpackageloaded{hyperref}{% @@ -33,6 +38,32 @@ pdfauthor = {\textcopyright\ Andy Buckley} %% To ignore a specific chapter while working on another, %% making the build faster, comment it out like this: %\input{chap3} + + +\chapter{Continued captions} +\label{chap:ContCaptions} + +Here are some funky ``continued captions''\dots + +\begin{figure} + \subfloat[][Example 1a]{\label{fig:cc1a}\rule{3cm}{3cm}} + \subfloat[][Example 1b]{\label{fig:cc1b}\rule{3cm}{3cm}} + \subfloat[][Example 1c]{\label{fig:cc1c}\rule{3cm}{3cm}} + \subfloat[][Example 1d]{\label{fig:cc1d}\rule{3cm}{3cm}} + \caption{Demonstration of \texttt{ccaption}.} + \label{fig:cc1} +\end{figure} + +\begin{figure} + \ContinuedFloat + \subfloat[][Example 1e]{\label{fig:cc1e}\rule{3cm}{3cm}} + \subfloat[][Example 1f]{\label{fig:cc1f}\rule{3cm}{3cm}} + \subfloat[][Example 1g]{\label{fig:cc1g}\rule{3cm}{3cm}} + \subfloat[][Example 1h]{\label{fig:cc1h}\rule{3cm}{3cm}} + \caption[]{Demonstration of \texttt{ccaption} (continued).} + %\label{fig:cc1} +\end{figure} + \end{mainmatter} %% Produce the appendices diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/thesis.cls b/Master/texmf-dist/doc/latex/hepthesis/example/thesis.cls index 17307ffeda1..46781ce9e08 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/example/thesis.cls +++ b/Master/texmf-dist/doc/latex/hepthesis/example/thesis.cls @@ -1,6 +1,6 @@ \ProvidesClass{thesis} %% For normal draft builds -\LoadClass[hyperpdf,nobind,draft,sftitles]{hepthesis} +\LoadClass[hyperpdf,nobind,draft,sftitles,twoside]{hepthesis} %% For short draft builds (breaks citations by necessity) %\LoadClass[hyperpdf,nobind,draft,hidefrontback]{hepthesis} %% For Cambridge soft-bound version @@ -11,8 +11,19 @@ %% ------------------------------------- %% Standard packages %% ------------------------------------- -\RequirePackage{rotating} \RequirePackage{cite} %\RequirePackage{morefloats} \RequirePackage{mathrsfs} % script font \RequirePackage{afterpage} + +%% Using Babel allows other languages to be used and mixed-in easily +\RequirePackage[ngerman,english]{babel} +\selectlanguage{english} + +%% Quotes in different languages are different. +%% Using \enquote{bla} automatically uses the correct quotes +%% according to the Babel language that is set +\RequirePackage[babel]{csquotes} + +%% Subfigures - note subfig is incompatible with ccaption +\RequirePackage{subfig} diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/thesis.sty b/Master/texmf-dist/doc/latex/hepthesis/example/thesis.sty index c6d4cc55e8a..c26f4c5b166 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/example/thesis.sty +++ b/Master/texmf-dist/doc/latex/hepthesis/example/thesis.sty @@ -63,4 +63,3 @@ \def\gamma{gamma}% }% }{} - diff --git a/Master/texmf-dist/doc/latex/hepthesis/example/varwidth.sty b/Master/texmf-dist/doc/latex/hepthesis/example/varwidth.sty new file mode 100644 index 00000000000..32c1a8fb639 --- /dev/null +++ b/Master/texmf-dist/doc/latex/hepthesis/example/varwidth.sty @@ -0,0 +1,302 @@ +% varwidth.sty v 0.9a Mar 2003 Donald Arseneau asnd@triumf.ca +% +% Copyright 2003 by Donald Arseneau (asnd@triumf.ca). +% This software is released under the terms of the LaTeX Project Public +% License (ftp://ctan.tug.org/tex-archive/macros/latex/base/lppl.txt). +% (Essentially: Free to use, copy, distribute (sell) and change, but, if +% changed, the name must be changed.) +% +% The varwidth environment is based on minipage, and takes the same +% parameters, but the specified width is just a maximum value -- the +% environment will be typeset with a narrower "natural" width if +% possible. +% +% In a varwidth environment, paragraph line-breaks are chosen +% according to the specified width, but each line is reset to +% match a narrower natural width, if there is one. +% +% The \narrowragged command works like \raggedright, but produces +% generally narrower lines in paragraphs, but more text in the last +% line (the lines have more-equal lengths). +% +% This version works fine, but there are still many questions about +% how it would work best. Should there be a version that avoids the +% usual minipage formatting style? +% +% Numbered equations are not handled well, especially with leqno. +% AMSmath environments have not been tried, and undoubtedly fail. +% +% To do: Extend v-list wrappers to handle all e-TeX primitives. +% (pdfTeX too?) +% Capture marks and floats, propagating them out of the box +% Support numbered equations, including ams math. +% + +\ProvidesPackage{varwidth}[2003/03/10 ver 0.9a; \space + Variable-width minipages] + +\newcommand\narrowragged{\rightskip \z@ plus .25\hsize + \@rightskip\rightskip \parfillskip\z@ plus .15\hsize + \sloppy } + +\newbox\@vwid@box + +% The varwidth environment is based on minipage, and takes the same +% parameters, but the specified width is only a limit -- a narrower +% natural width may be used. \varwidth uses \minipage. + +\def\varwidth{\let\@minipagerestore\@vwid@setup \minipage} + +% Many things may appear on vertical lists that can't be re-processed, +% so they have to be modified. + +\def\@vwid@setup{% + % several things can't appear in vertical mode, so they may get + % a \vbox wrapped around them. + \let\@bsphack\@vwid@bsphack % \label and others + \let\mark\@gobble % Marks disappear in minipages anyway + \let\@special\@vwid@special % \color and others + \let\addtocontents\@vwid@addtocontents % \addcontentsline + % Shifted boxes (\parshape,\hangindent) will have their shifts + % indicated in a separate box. + \let\@hangfrom\@vwid@hangfrom % hanging indents + \let\list\@vwid@list + \let\endtrivlist\@vwid@endtrivlist + \postdisplaypenalty\@vwid@posteqp + \predisplaypenalty\@vwid@preeqp + \def\@eqnnum{\aftergroup\@vwid@afterva\@@vwid@eqnnum}% + \global\@vwid@roff\z@ \global\@vwid@loff\z@ + % Begin an inner minipage-like vertical box (in \@tempboxa) + \let\@minipagerestore\@@vwid@minipagerestore \@minipagerestore + \setbox\@tempboxa\vbox\bgroup\begingroup + % Flag the top of the list + \penalty\@vwid@toppen +} + +\let\@@vwid@minipagerestore\@minipagerestore + +% At end of varwidth environment. +\def\endvarwidth{\par\@@par + % Handle minipage-style notes. + \ifvoid\@mpfootins\else + \vskip\skip\@mpfootins + \normalcolor + \@vwid@wrap\footnoterule + \unvbox\@mpfootins + \fi + \unskip + \endgroup\egroup % got my \@tempboxa +% {\showoutput\showbox\@tempboxa}% + % in a discarded box, sift through list measuring max width. + \begingroup\setbox\z@\vbox\bgroup +%\message{-------------------------------------------------------------}% +%\message{First pass; hsize=\the\hsize... }%{\tracingall\showlists}%% + \unvcopy\@tempboxa + \@tempdima-\maxdimen + \let\@vwid@resetb\@vwid@measure + \let\@vwid@append\relax + \sift@deathcycles\z@ + \@vwid@sift + \xdef\@vwid@{\the\@tempdima}% + \egroup\endgroup + % Done measuring. Now empty \@tempboxa onto current vertical list + % which is the contents of a minipage environment +%\message{Got natural width \@vwid@. }% + \unvbox\@tempboxa + % If the natural width is narrower, then go back through the list + % reboxing and moving everything into \@vwid@box; then spill \@vwid@box + \ifdim\@vwid@<\hsize + \hsize\@vwid@ + \setbox\@vwid@box\vbox{}% + \sift@deathcycles\z@ +%\message{----------------------------------------------------------------}% +%\message{Second pass; hsize=\the\hsize... }%{\tracingall\showlists}% + \@vwid@sift + \unvbox\@vwid@box + \fi + % end the minipage environment + \endminipage} + +% +% Here are definitions for sifting through the vertical list, either +% measuring things or reboxing them. +% +% Penalties used as signals to the vertical-list processor: + +\mathchardef\@vwid@posteqp 17321 % Penalty below equations +\mathchardef\@vwid@preeqp 17322 % Penalty above equations +\mathchardef\@vwid@postnump 17323 % Penalty below numbered equations +\mathchardef\@vwid@toppen 17324 % Penalty marking top of vertical list +\mathchardef\@vwid@offsets 17325 % Penalty below special h-offsets box +\mathchardef\@vwid@postw 17326 % Penalty below a \vbox-wrapped object + +\newcount\sift@deathcycles + +\def\@vwid@sift{% + \skip@\lastskip\unskip + \dimen@\lastkern\unkern + \count@\lastpenalty\unpenalty + \setbox\z@\lastbox +%{\showoutput\showbox\z@}% + \ifvoid\z@ \advance\sift@deathcycles\@ne \else \sift@deathcycles\z@ \fi + \ifnum\sift@deathcycles>33 + \let\@vwid@sift\relax + \PackageWarning{varwidth}{Failed to reprocess entire contents}% + \fi +%\message{\the\sift@deathcycles: skip \the\skip@; kern \the\dimen@; penalty \the\count@. }% +%\ifhbox\z@\setbox99\hbox to0pt{\unhcopy\z@}\fi % = message + \ifnum\count@=\@vwid@preeqp \@vwid@eqmodefalse\fi +%\ifnum\count@=\@vwid@preeqp \message{End equation mode. }\fi + \ifnum\count@=\@vwid@posteqp \@vwid@eqmodetrue\fi +%\ifnum\count@=\@vwid@posteqp\message{Begin equation mode. }\fi +%\if@vwid@eqmode {\showoutput\showbox\z@}\fi + \ifnum\count@=\@vwid@toppen % finished + \let\@vwid@sift\relax + \else\ifnum\count@=\@vwid@offsets + \@vwid@setoffsets + \else + \ifnum\count@=\@vwid@postw + \else + \@vwid@resetb % reset box \z@ or measure it + \fi + \@vwid@append + \fi\fi + \@vwid@sift} + +\def\@vwid@setoffsets{% + \setbox\z@=\hbox{\unhbox\z@ + \global\@vwid@roff\lastkern\unkern + \global\@vwid@loff\lastkern\unkern}% +%\message{Set offsets to \the\@vwid@loff, \the\@vwid@roff. }% +} + +\def\@vwid@append{% Append contents of box \z@ and glue to \@vwid@box + \setbox\@vwid@box\vbox{% + \unvbox\z@ + \ifdim\dimen@=\z@\else \kern\dimen@ \fi + \vskip\skip@ + \unvbox\@vwid@box + }%{\tracingall\showbox\@vwid@box}% +} + +% reset box \z@ to \hsize, applying shifts, and wrap in vbox +% Don't worry about numbered equations because we won't get +% here if there are any. +\def\@vwid@resetb{% + \setbox\z@\vbox\bgroup + \ifvoid\z@ + \else + \ifvbox\z@ + \box\z@ + \else % \hbox + \@tempdima\hsize + \advance\@tempdima-\@vwid@roff + \advance\@tempdima-\@vwid@loff + \advance\@tempdima-\p@ + \ifdim\wd\z@>\@tempdima % full-width line; rebox it +%\message{An ordinary line or alignment. }% + \hbox to\hsize + {\kern\@vwid@loff \unhbox\z@ \kern\@vwid@roff}% + \else % an equation or direct \hbox + \if@vwid@eqmode % re-center unnumbered equations +%\message{A centered equation hsize=\the\hsize. }% + \hbox to\hsize + {\hskip\@vwid@loff\@plus1fil + \unhbox\z@ \hskip\@vwid@roff\@plus1fil}% + \else % plain narrow \hbox; leave it as-is + \box\z@ + \fi\fi\fi\fi + \egroup} + +\def\@vwid@measure{% + \ifvoid\z@ + \else + % numbered equations not part of alignments can't be reset, + % so force retention of full width. + \ifnum\count@=\@vwid@postnump \ifdim\wd\z@<\linewidth + \ifdim\@tempdima<\linewidth \@tempdima\linewidth \fi + \fi\fi + \ifhbox\z@ + \setbox\z@=\hbox + {\kern\@vwid@loff \unhbox\z@ \kern\@vwid@roff}% + \fi + \ifdim\wd\z@>\@tempdima \@tempdima\wd\z@ \fi + \fi} + +\newdimen\@vwid@loff +\newdimen\@vwid@roff + +\let\@@bsphack\@bsphack +\let\@@esphack\@esphack +\let\@@esphack\@Esphack + +\def\@vwid@bsphack{\@@bsphack + \ifx\@vwid@wrap\@firstofone + \bgroup + \else + \ifvmode + \setbox\@vwid@box \vbox\bgroup \vbox\bgroup + \let\@vwid@wrap\@firstofone + \def\@esphack{\@vwid@esphack\@@esphack}% + \def\@Esphack{\@vwid@esphack\@@Esphack}% + \fi + \fi} + +\def\@vwid@esphack{\egroup + \ifx\@vwid@wrap\@firstofone\else + \egroup % end outer box + \unvbox\@vwid@box % put inner box on list without lineskip + \penalty\@vwid@postw + \fi} + +% \vbox Wrapper for misc vlist items +\long\def\@vwid@wrap{\relax + \ifvmode\expandafter\@vwid@dowrap \else \expandafter\@firstofone \fi} +\long\def\@vwid@dowrap#1{% + \setbox\@vwid@box \vbox{\vbox{\let\@vwid@wrap\@firstofone + #1}\penalty\@vwid@postw + }\unvbox\@vwid@box } + +\let\@@vwid@special\special +\let\@@vwid@addtocontents\addtocontents +\let\@@vwid@list\list +\let\@@vwid@endtrivlist\endtrivlist +\let\@@vwid@eqnnum\@eqnnum + +\long\def\@vwid@special#1{\@vwid@wrap{\@@vwid@special{#1}}} +\long\def\@vwid@addtocontents#1#2{\@vwid@wrap{\@@vwid@addtocontents{#1}{#2}}} + +\long\def\@vwid@hangfrom#1{\par + \setbox\@tempboxa\hbox{{#1}}% + \setbox\@vwid@box \vbox{\hbox{\kern\z@ \kern\z@ + }\penalty\@vwid@offsets}\unvbox\@vwid@box + \def\par{\relax\ifhmode\unskip\fi + \vadjust{\hbox{\kern\hangindent\kern\z@}\penalty\@vwid@offsets}% + \@restorepar\par}% + \hangindent \wd\@tempboxa\noindent\box\@tempboxa} + +\def\@vwid@list{\@vwid@setlist\@@vwid@list} +\def\@vwid@endtrivlist{\@vwid@setlist\@@vwid@endtrivlist} + +\def\@vwid@setlist{\relax\ifhmode \unskip\expandafter\vadjust\fi + {\setbox\@vwid@box \vbox{\hbox{% + \advance\hsize-\linewidth \advance\hsize-\@totalleftmargin + \kern\@totalleftmargin \kern\hsize}% + \penalty\@vwid@offsets}% + \unvbox\@vwid@box}} + +\newif\if@vwid@eqmode + +\def\@vwid@afterva{\vadjust{\penalty\@vwid@postnump}} + +% Should I do this? ... + +\@ifundefined{newcolumntype}{}{% + \@ifundefined{NC@rewrite@V}{ + \newcolumntype{V}[1]{% + >{\begin{varwidth}[t]{#1}\narrowragged\let\\\tabularnewline}% + l% + <{\@finalstrut\@arstrutbox\end{varwidth}}} + }{} +} + diff --git a/Master/texmf-dist/doc/latex/hepthesis/hepthesis.pdf b/Master/texmf-dist/doc/latex/hepthesis/hepthesis.pdf Binary files differindex 9d10d6b2ba8..adfc5ecf64d 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/hepthesis.pdf +++ b/Master/texmf-dist/doc/latex/hepthesis/hepthesis.pdf diff --git a/Master/texmf-dist/doc/latex/hepthesis/hepthesis.tex b/Master/texmf-dist/doc/latex/hepthesis/hepthesis.tex index 6f709b49053..fddedc38438 100644 --- a/Master/texmf-dist/doc/latex/hepthesis/hepthesis.tex +++ b/Master/texmf-dist/doc/latex/hepthesis/hepthesis.tex @@ -1,56 +1,63 @@ \documentclass[12pt]{article} -%\usepackage{booktabs} -\usepackage{maybemath, xspace, setspace, fancyvrb, a4wide, url, relsize} +\usepackage{maybemath,xspace,setspace,fancyvrb,fancybox} +\usepackage{a4wide,url,relsize,sfheaders,underscore} \usepackage[colorlinks=true,bookmarks=true]{hyperref} \newcommand{\maybemath}{\texttt{maybemath}\xspace} \newcommand{\hepthesis}{\texttt{hepthesis}\xspace} -\let\OldCite\cite -\renewcommand{\cite}[1]{\mbox{\!\!\OldCite{#1}}} - - \onehalfspacing \DefineShortVerb{\|} +\setlength{\fboxsep}{10pt} +\addtolength{\fboxrule}{0.6\fboxrule} +\newcommand{\hepthesisversion}{v1.4} \author{Andy Buckley, \texttt{andy@insectnation.org}} -\title{The \hepthesis \LaTeX{} class} - -\newcommand{\Or}{\ensuremath{\vert}\xspace} -\newcommand{\manifestsAs}{\ensuremath{\Rightarrow\quad}\xspace} -\newcommand{\texcmd}[1]{\texttt{\char`\\#1}} -\newcommand{\texenv}[1]{\texttt{\char`#1}} -\newcommand{\texopt}[1]{\texttt{\char`#1}} -\newcommand{\texarg}[1]{\texttt{\char`#1}} -\newcommand{\texcommand}[1]{\texcmd{#1}} +\title{\hepthesis \hepthesisversion \\ \smaller A class for typesetting academic theses} + +\newcommand{\Or}{\texorpdfstring{\ensuremath{\vert}\xspace}{or}} +\newcommand{\manifestsAs}{\texorpdfstring{\ensuremath{\Rightarrow\quad}\xspace}{->}} +\newcommand{\texcmd}[1]{\texorpdfstring{\texttt{\char`\\#1}}{#1}} +\newcommand{\texenv}[1]{\texorpdfstring{\texttt{#1}}{#1}} +\newcommand{\texopt}[1]{\texorpdfstring{\texttt{#1}}{#1}} +\newcommand{\texarg}[1]{\texorpdfstring{\texttt{\{#1\}}}{\textbraceleft#1\textbraceright}} +\newcommand{\texargoptgen}[1]{\texorpdfstring{\texttt{[}\gen{#1}\texttt{]}}{\textbraceleft<#1>\textbraceright}} +\newcommand{\texarggen}[1]{\texorpdfstring{\texttt{\{}\gen{#1}\texttt{\}}}{\textbraceleft<#1>\textbraceright}} +\newcommand{\gen}[1]{\ensuremath{\langle\text{\mdseries\itshape#1\/}\rangle}} +\newcommand{\texpkg}[1]{#1} \newcommand{\texoption}[1]{\texopt{#1}} \newenvironment{snippet}{\Verbatim}{\endVerbatim} +\newenvironment{fsnippet}% + {\VerbatimEnvironment + \begin{Sbox}\begin{minipage}{0.82\textwidth}\begin{Verbatim}}% + {\end{Verbatim}\end{minipage}\end{Sbox} + \setlength{\fboxsep}{12pt}\vspace*{4mm}\newline\fbox{\TheSbox}\vspace{4mm}} \begin{document} -\maketitle +{\sf \maketitle} \abstract{% - The \hepthesis package provides an attractive framework in which to write a - PhD or Masters' degree dissertation. The commands provided by this package - permit most structural aspects of the thesis to be defined more or less - semantically, rather than in terms of raw text sizings and position shifts. - Special equation, figure and table environments are provided, along with - pre-defined figure widths and macros for typesetting chapter quotes, - introductory paragraphs and incliner section headings. + The \hepthesis class provides an attractive framework in which to write a PhD + or Masters' degree dissertation. The commands provided by this package permit + most structural aspects of the thesis to be defined more or less semantically, + rather than in terms of raw text sizings and position shifts. } + \section{Introduction} -When I began my PhD, I was surprised to find that there was no standard \LaTeX -thesis class used by students in my field (high-energy particle physics, hence -the ``hep''). In retrospect, this is not so surprising --- research groups tend -to have an informal system of handing down slightly tailored thesis templates -(complete with in line \texcmd{vspace}s, \texcmd{Huge}s and all the -rest) through generations of students without ever formalising the style and -attempting to do it ``properly''. By the time it came to write my own thesis it -was obvious that I would only retain my sanity through measures of extreme -procrastination and so this package came to be. It has now been edited and -hacked for about 2 years, taking stylistic features from other theses that I've -thought attractive. As my own thesis has been recently submitted, this seems an -apt time to release the first official version of \hepthesis upon the world. +When I began my PhD in 2001, I was surprised to find that there was no standard +\LaTeX{} thesis class used by students in my field (high-energy particle +physics, hence the ``hep''). In retrospect, this is not so surprising --- +research groups tend to have an informal system of handing down slightly +tailored thesis templates (complete with in line \texcmd{vspace}s, +\texcmd{Huge}s and all the rest) through generations of students without ever +formalising the style and attempting to do it ``properly''. By the time it came +to write my own thesis it was obvious that I would only retain my sanity through +measures of extreme procrastination and so this package came to be. It has now +been edited and hacked on and off since roughly mid-2004, taking stylistic +features from other theses that I've thought attractive and adding features +based on my own pickiness and user requests. The typography isn't motivated by +any formal understanding of the subject, though, so I'm sure there's still +plenty of room for improvement! This document will document the structure of \hepthesis and how to make it work with you rather than against you. I may be unable to resist including other @@ -88,8 +95,8 @@ Appendix~\ref{app:DerivedClass}. Although strictly unrelated to \hepthesis, it is usual to write each thesis chapter as a separate |.tex| file and to include it with -\texcommand{include} or \texcommand{input}. You may find it useful to set your -|LATEXINPUTS| environment variable to ensure that the \texcommand{input}'d +\texcmd{include} or \texcmd{input}. You may find it useful to set your +|LATEXINPUTS| environment variable to ensure that the \texcmd{input}'d files are found by \LaTeX. \hepthesis takes several optional arguments. Personally, I use @@ -111,20 +118,37 @@ be natively available in your \TeX{} distribution; the rest from CTAN. Here's the mandatory packages: \begin{itemize} +\item \textbf{scrbook~\cite{scrbook}} (from KOMA-scripts) \item \textbf{cite~\cite{cite}} \item \textbf{setspace~\cite{setspace}} \item \textbf{fancyhdr~\cite{fancyhdr}} -\item \textbf{tocbibind~\cite{tocbibind}} \item \textbf{rotating~\cite{rotating}} -\item \textbf{subfigure~\cite{subfigure}} (needs updating to use |subfig| instead) -\item \textbf{ccaption~\cite{ccaption}} -\item \textbf{caption~\cite{caption}} (need updating to be able to use |caption2| instead). +\item \textbf{tocbibind~\cite{tocbibind}} +\item \textbf{caption~\cite{caption}} +\item \textbf{chngpage~\cite{chngpage}} +\item \textbf{varwidth~\cite{varwidth}} \end{itemize} +\vspace{0.4cm} +\noindent\fbox{\begin{minipage}{0.85\textwidth}\textsl{ +% +Note that the \texpkg{subfig}\cite{subfig} (previously \texpkg{subfigure}) +and \texpkg{ccaption}\cite{ccaption} package, which were required up to +version 1.3, are no longer needed. +If you need sub-figures then you should \texcmd{usepackage} the package as +usual in your document preamble or custom class file, and make use of the +\texcmd{ContinuedFloat} command for continuation captions, which is +provided by the mandatory \texpkg{caption} package. +% +}\end{minipage}} +\vspace{0.4cm} + Additionally, there are several packages which are only required depending on the class options: \begin{itemize} +\item \textbf{csquotes~\cite{csquotes}:} very standard. Quotation commands will use this if loaded. +\item \textbf{babel~\cite{babel}:} very standard. Quotation commands will use this if loaded. \item \textbf{a4wide~\cite{a4wide}:} very standard. Disabled with any paper size option other than |a4paper| \item \textbf{amsmath~\cite{amsmath}:} very, \emph{very} standard. Disabled with the |noams| option \item \textbf{hyperref~\cite{hyperref}:} very standard. Enabled with the |hyper| option @@ -139,37 +163,68 @@ Some other handy packages (which aren't required at all for compatibility with |hepthesis| but may well help you to write your thesis) are summarised in Section~\ref{sec:ExtraPackages}. +\subsection{Troublesome interactions} +Unfortunately not all \LaTeX{} packages get on well with each other --- if +you are unlucky then you may get some of \TeX's wondertully cryptic error +messages on trying to use \texpkg{hepthesis}. Here are the problems that I'm +aware of\dots + +\begin{itemize} +\item +If you have problems with \LaTeX{} complaining about bad definitions of +\texcmd{pdfstringdefPreHook}, you may be using an old version of \texpkg{csquotes}, +which doesn't interface well to \texpkg{hyperref}. I think this is fixed in +\texpkg{csquotes} version 3.2 and later --- it certainly works for version +3.7. Try including the \texpkg{csquotes} package with +% +\begin{snippet} +\usepackage{csquotes}[2007/03/25] +\end{snippet} +% +so that a new enough version will be used. + +\item +Similarly, version 0.9 of the \texpkg{varwidth} package has a deformed version +string which means that the package doesn't load properly. This version seems to +have made its way into some \LaTeX{} package distributions, so if you see such +an error then version 0.9a or later can be obtained from CTAN and will work +properly. \texpkg{hepthesis} will check to make sure that the version is as +required and issue a warning if the version on your system is earlier than those +known to be good. + +\end{itemize} + \section{Class options} \label{sec:Options} -\subsection{\texoption{oneside} \Or \texoption{twoside}} +\subsection{\texopt{oneside} \Or \texopt{twoside}} Typeset the thesis for printing in one- or two-sided format: for example, you may wish to present preview and draft copies in two-sided format, but the final submission may be required to be single-sided. Changing to single-sided form will remove the blank facing pages and only use the margins and header/footer format specified for right-hand pages. -\subsection{\texoption{bind} \Or \texoption{nobind} \Or \texoption{bindnopdf}} +\subsection{\texopt{bind} \Or \texopt{nobind} \Or \texopt{bindnopdf}} Set the margins to be suitable for printing or screen-viewing. Using the -\texoption{bind} option produces larger inner margins, so that left- and -right-facing pages have LR-reflection symmetry. Using the \texoption{nobind} +\texopt{bind} option produces larger inner margins, so that left- and +right-facing pages have LR-reflection symmetry. Using the \texopt{nobind} option makes the margins equal, so that the pages don't jump around when you -flick through them in |gv| or Adobe Acrobat. The \texoption{bindnopdf} option +flick through them in |gv| or Adobe Acrobat. The \texopt{bindnopdf} option will use binding margins when making a PostScript document and screen-view margins when building a PDF. Note that this option requires some carefulness with the |.aux| files: this is described in Appendix \ref{app:AuxFileProblem}. -\subsection{\texoption{ams} \Or \texoption{noams}} +\subsection{\texopt{ams} \Or \texopt{noams}} Make use of the AMS mathematical package. This re-defines several \hepthesis mathematical environments using more powerful macros and is enabled by default. If you don't plan on having any maths in your thesis, then disabling this option may speed up your build-time a little. -\subsection{\texoption{alphafoot}} +\subsection{\texopt{alphafoot}} Use alphanumeric footnote markers. -\subsection{\texoption{hidefront} \Or \texoption{hideback} \Or \texoption{hidefrontback}} +\subsection{\texopt{hidefront} \Or \texopt{hideback} \Or \texopt{hidefrontback}} Useful for draft builds, these options respectively hide the front matter, the back matter or both from the \LaTeX{} compilation, giving a faster build time and meaning you don't have to flick through 20 pages of garbage before @@ -177,16 +232,16 @@ proof-checking the first real content. Note that hiding the back matter will fail to include the bit where you generate your bibliography, so unless you make a work-around, all your citations will break. -\subsection{\texoption{draft}} +\subsection{\texopt{draft}} Prints ``DRAFT'' diagonally across the pages and numbers the lines, suitable for proof-reading. This makes use of the standard |draftcopy| and the less-standard |lineno| packages. -\subsection{\texoption{sftitles}} +\subsection{\texopt{sftitles}} Uses a sans-serif font for the title page and all chapter, section and subsection headings. Requires the |sfheaders| package. -\subsection{\texoption{booktabs} \Or \texoption{nobooktabs}} +\subsection{\texopt{booktabs} \Or \texopt{nobooktabs}} Use the |booktabs| package to define the \hepthesis tabular environment. |booktabs| produces publication quality tables, as opposed to \TeX's rather ropey defaults, and so this option is enabled by default. You can disable it if @@ -194,8 +249,8 @@ your thesis doesn't have any tables and get a slightly faster build, but it is strongly encouraged that any table presentation uses the |booktabs| look and feel because it's so much better! -\subsection{\texoption{hyper}} -The |hyper| option is used to activate the |hyperref| package, with some reasonably] +\subsection{\texopt{hyper}} +The |hyper| option is used to activate the |hyperref| package, with some reasonably sensible default options. Essentially, it's equivalent to putting % \begin{snippet} @@ -205,7 +260,7 @@ sensible default options. Essentially, it's equivalent to putting % in the preamble of your document. -\subsection{\texoption{hyperpdf}} +\subsection{\texopt{hyperpdf}} |hyperpdf| has the effect of the |hyper| option when building PDF output, and no effect at all if building PostScript. This can be handy if you consider the PDFs to be for screen-reading purposes and the PS for printing: you probably don't @@ -231,10 +286,9 @@ where the author includes a \texcmd{thanks}) where |titling| may do a better job. This is untested, though, and the result of using \texcmd{thanks} in a |hepthesis| document is to be considered undefined. -\subsection{\texopt{a4paper} \Or \texoption{a4narrow} \Or \texoption{letterpaper} \Or \dots} +\subsection{\texopt{a4paper} \Or \texopt{a4narrow} \Or \texopt{letterpaper} \Or \dots} Choose the paper size. Duh. -%\subsection{\texoption{hep} \Or \texoption{hep\{fd,layout,hyper,float,all\}}} \section{Environments and commands} The \hepthesis environments and commands are a mix of new macros and tweaked @@ -246,26 +300,98 @@ choice is yours! Here are the environments and commands, roughly in the order that you'd use them: -\subsection{\texcmd{title} and \texcmd{author}} -Up to version 1.3, a special \texcmd{definethesis} command was used to specify -the thesis author and title. While this is still retained for backwards compatibility, -it is deprecated and you should use the standard \texcmd{title} and \texcmd{author} -macros instead. Don't use \texcmd{thanks} in the author argument: the results are -undefined! +\subsection{\texcmd{set{\dots}spacing}\texarggen{spacing}} +A selection of spacing commands are available to change the overall line spacing +of the thesis, or to change the spacing within specific document sections if for +some reason you want to do that. (Personally, I wouldn't --- inconsistent spacing +is very disconcerting.) Here are the available commands, explicitly: +\begin{itemize} +\item \texcmd{setspacing} --- set the following spacings all at once; +\item \texcmd{setfrontmatterspacing} +\item \texcmd{setmainmatterspacing} +\item \texcmd{setappendixspacing} +\item \texcmd{setbackmatterspacing} +\end{itemize} % -\begin{snippet} +Each command takes a single argument, which can take the values |single|, +|onehalf| and |double|, for single spacing, one-and-a-half spacing +and double spacing respectively. The default is |onehalf|, since I think +that looks most elegant. If making a draft version, double spacing might be +useful since it leaves a bit of room for annotations. I can't recommend single +spacing --- it just looks cramped. +% +\begin{fsnippet} +\documentclass[...]{hepthesis} +\setmainmatterspacing{double} +... +\begin{document} + ... +\end{fsnippet} + + +\subsection{\texcmd{set{\dots}extramargins}\texarggen{length}} +A selection of commands are available to change the text width on a per-section +basis. These shouldn't be tweaked too much, but in case you need it, the ability +for configuration is available. The text width itself is not explicitly +specified --- instead the commands take as an argument the width to be added to +both margins. Unless explicitly specified below, all these lengths are zero by +default so any use of these commands with a positive argument is likely to +reduce the text width. Here are the ``large-scale'' extra margins commands: +% +\begin{itemize} +\item \texcmd{setextramargins}\texarggen{len} --- set the following lengths all at once; +\item \texcmd{setfrontmatterextramargins}\texarggen{len} +\item \texcmd{setmainmatterextramargins}\texarggen{len} +\item \texcmd{setappendixextramargins}\texarggen{len} +\item \texcmd{setbackmatterextramargins}\texarggen{len} +\end{itemize} +% +The following commands all add extra margin widths to subsections within the +front matter. Note that they apply \emph{in addition} to the front matter length. +% +\begin{itemize} +\item \texcmd{setabstractextramargins}\texarggen{len} --- |1.5cm| by default; +\item \texcmd{setdeclarationextramargins}\texarggen{len} --- |1.5cm| by default; +\item \texcmd{setacknowledgementsextramargins}\texarggen{len} +\item \texcmd{setprefaceextramargins}\texarggen{len} +\end{itemize} +% +Each command takes a single argument, which is just a \TeX{} length. Here's an example: +\nobreak +% +\begin{fsnippet} +\documentclass[...]{hepthesis} +\setfrontmatterextramargins{1.5} +... +\begin{document} + ... +\end{fsnippet} + + +%% TODO Change in v1.5 +\subsection{\texcmd{title}\texarggen{title} and \texcmd{author}\texarggen{author}} +The usual commands for setting the author and title. Don't use \texcmd{thanks} in +the \hepthesis author argument: the results are undefined! +% +\begin{fsnippet} \title{A study of \BToKPi decays with the \LHCb experiment} \author{Andrew Gordon Buckley} ... \begin{document} ... -\end{snippet} +\end{fsnippet} Once these commands have been executed, the title and author strings are available -via the \texcommand{thetitle} and \texcommand{theauthor} commands. These are used by +via the \texcmd{thetitle} and \texcmd{theauthor} commands. These are used by \texcmd{titlepage}. -\subsection{\texenv{frontmatter} \Or \texenv{mainmatter} \Or \texenv{appendices} \Or \texenv{backmatter}} +N.B. Up to version 1.3, a special \texcmd{definethesis} command was used to specify +the thesis author and title. While this is still retained for backwards compatibility, +it is deprecated and you should use the standard \texcmd{title} and \texcmd{author} +macros instead. \textbf{\texcmd{definethesis} will be removed in version 1.5} + + +\subsection{\texenv{frontmatter}, \texenv{mainmatter}, \texenv{appendices} and \texenv{backmatter} environments} Use these to delimit the auxiliary parts of your thesis from the main feature (being all that clever work you spent years working on). In practice, these commands change the page-numbering style and set/reset some section counters @@ -284,11 +410,11 @@ your institution has a very different prescribed format for the layout of thesis title pages: in such a case, the \texcmd{theauthor} and \texcmd{thetitle} commands will probably be useful. Here's an example of usage: % -\begin{snippet} -\thesistitlepage[of \\ Churchill College]% +\begin{fsnippet} +\titlepage[of \\ Churchill College]% {A dissertation submitted to the University of Cambridge\\ for the degree of Doctor of Philosophy} -\end{snippet} +\end{fsnippet} % Additionally, the \texcmd{maketitle} command has been redefined to behave as \texcmd{titlepage} with two empty arguments. This is only provided to not @@ -296,26 +422,26 @@ confuse users who convert to |hepthesis| from a standard \LaTeX{} class and expect \texcmd{maketitle} to work: \texcmd{titlepage} is a more powerful command and should be used by those who are aware of it. That includes you! -\subsection{\texenv{abstract}} +\subsection{\texenv{abstract} environment} Where you present the summary of your thesis: this should be within the \texenv{frontmatter} environment. The \texenv{abstract} environment takes one optional argument, which will be the heading above the abstract. If this isn't specified, the heading will simply be ``Abstract''. This may be useful for providing a stand-alone summary page, with a snippet like: % -\begin{snippet} +\begin{fsnippet} \begin{abstract}% [\smaller\thetitle\\ \vspace*{1cm} \smaller{\theauthor}] \thispagestyle{empty} This thesis describes all the really cool work I did on... \end{abstract} -\end{snippet} +\end{fsnippet} -\subsection{\texenv{declaration}} +\subsection{\texenv{declaration} environment} Where you declare that the thesis was all your own work, lies within word limits, etc. Use it in the front matter area, of course, with something like % -\begin{snippet} +\begin{fsnippet} \begin{declaration} This dissertation is the result of my own work... \vspace*{1cm} @@ -323,97 +449,113 @@ limits, etc. Use it in the front matter area, of course, with something like Andy Buckley \end{flushright} \end{declaration} -\end{snippet} +\end{fsnippet} -\subsection{\texenv{acknowledgements}} +\subsection{\texenv{acknowledgements} environment} A nice little environment for putting all those gushing thank-you's (and the obligatory thanks to a supervisor). Use it (in the front matter again) like: % -\begin{snippet} +\begin{fsnippet} \begin{acknowledgements} Of the many people who deserve thanks, some are particularly prominent, for example... \end{acknowledgements} -\end{snippet} +\end{fsnippet} -\subsection{\texenv{preface}} +\subsection{\texenv{preface} environment} Here's where you summarise the structure of the thesis to come, just before the main matter starts, with something like: % -\begin{snippet} +\begin{fsnippet} \begin{preface} This thesis describes my research on various aspects of... \end{preface} -\end{snippet} +\end{fsnippet} -\subsection{\texcmd{dedication}} +\subsection{\texcmd{dedication}\texarggen{text}} Dedicate your thesis to someone/something: % -\begin{snippet} +\begin{fsnippet} \begin{mainmatter} \dedication{For Jo} ... \end{frontmatter} -\end{snippet} +\end{fsnippet} -\subsection{\texcmd{frontquote}} -Use this at the start of the main matter if you want to encapsulate your thesis -in a few choice words, for example: +\subsection{\texcmd{frontquote}\texargoptgen{lang}\texarggen{quote}\texarggen{who}} +Use this at the start of the main matter if you want to present the ethos of +your thesis in a few choice words, for example: % -\begin{snippet} +\begin{fsnippet} \frontquote% {Writing in English is the most ingenious torture\\ ever devised for sins committed in previous lives.}% {James Joyce} ... \end{frontmatter} -\end{snippet} +\end{fsnippet} +% +\texcmd{frontquote} also takes an optional argument indicating which language the +quote is in. This will change the quotation mark and hyphenation styles, if the +\texpkg{babel} and \texpkg{csquotes} packages are loaded: +% +\begin{fsnippet} + \frontquote[french]% + {Le savant n'\'etudie pas la nature parce que cela est utile; \\ + il l'\'etudie parce qu'il y prend plaisir et il y prend plaisir + parce qu'elle est belle.}% + {Henri Poincar\'e, 1854--1912} + ... + \end{frontmatter} +\end{fsnippet} -\subsection{\texcmd{chapterquote}} +\subsection{\texcmd{chapterquote}\texargoptgen{lang}\texarggen{quote}\texarggen{who}} Something flippant/emotive to put at the start of chapters: % -\begin{snippet} +\begin{fsnippet} \chapter{\CP violation in the \Bmeson system} \label{chap:basictheory} -\thesischapterquote{Laws were made to be broken.}% +\chapterquote{Laws were made to be broken.}% {Christopher North 1785--1854} ... -\end{snippet} +\end{fsnippet} +% +As for \texcmd{frontquote}, an optional language argument can be used. -\subsection{\texenv{colophon}} +\subsection{\texenv{colophon} environment} A colophon is an inscription placed at the end of a book or other work that talks about how the work was created and what things were used in its creation. This should go in the back matter of your thesis and is completely optional. If you use this, please mention \hepthesis' r\^ole in making your thesis! Here's an example: % -\begin{snippet} +\begin{fsnippet} \begin{backmatter} \begin{colophon} This thesis was made with ``hepthesis'' and it was really cool... \end{colophon} ... -\end{snippet} +\end{fsnippet} -\subsection{\texenv{table}} +\subsection{\texenv{table} environment} Tables --- use like any other table (probably combined with the tabular environment). It has been slightly modified to be horizontally centered and have an slightly increased vertical spacing at the top. It supports the standard \LaTeX{} ``[!htbp]'' float placement specifiers. -\subsection{\texenv{tabular}} +\subsection{\texenv{tabular} environment} If the |booktabs| package is used (enabled by default), then the tabular environment is re-defined to have a horizontal bar at top and bottom, which looks much nicer than \TeX's default tables. -\subsection{\texenv{figure} and \texenv{sidewaysfigure}} +\subsection{\texenv{figure} and \texenv{sidewaysfigure} environments} The \texenv{figure}, \texenv{figure*} and \texenv{sidewaysfigure} environments are re-defined to be automatically centered. They support the standard \LaTeX{} ``[!htbp]'' float placement specifiers. -\subsection{\texenv{equation \Or displaymath}} +\subsection{\texenv{equation} and \texenv{displaymath} environments} These environments and their starred versions are re-defined so that \texenv{equation} behaves like the normal \texenv{displaymath} environment. If the AMS package is used (which it is by default) then both are redefined to use @@ -423,17 +565,17 @@ syntax than the default \LaTeX{} displayed math environments. The AMS re-defined \texenv{equation} is suitable for most purposes --- \emph{all} my purposes, in fact. -\subsection{\texcmd{verysubsection}} +\subsection{\texcmd{verysubsection}\texarggen{title}} A little command for in-line mini section headings, consisting of a boldened phrase specified by the argument, a bold colon and a space. Just for convenience, really, when all you want to do is label a paragraph without incurring all the vertical space of \texcmd{subsubsub...subsection}s. Use it like: % -\begin{snippet} +\begin{fsnippet} \verysubsection{\Tevatron Run II experiments} Since 1983 and until the commissioning of the \LHC is complete... -\end{snippet} +\end{fsnippet} \subsection{Semantic figure widths} Rather than specifying figure widths in raw terms, like centimetres, or document @@ -444,13 +586,13 @@ standard figure widths, \texcmd{smallfigwidth}, \texcmd{mediumfigwidth}, \texcmd{largefigwidth} and \texcmd{hugefigwidth}, which are defined in terms of the text width and chosen to avoid overflows. Use them like this: % -\begin{snippet} +\begin{fsnippet} \begin{figure} \includegraphics[width=\largefigwidth]{ckmfitter-alpha-combined} \caption{CKM Fitter constraints on \alphaCKM.} \label{fig:CKMFitter} \end{figure} -\end{snippet} +\end{fsnippet} Note also that this way of including images will automatically look for an |.eps| file when building PostScript and a |.pdf| file when building PDF. You @@ -499,8 +641,8 @@ which is the version described above, prefixed with ``thesis''\footnote{This is a hang-over from early versions of my thesis, when I didn't know how to robustly extend and re-define environments and commands.}. These forms are frankly a bit of a pain to use, so use the short versions, please. The -``thesis---'' versions should be considered deprecated and may be removed in -future releases. +``thesis---'' versions should be considered deprecated and \textbf{will be removed +in the next release, version 1.5}. \section{Recommended extra packages} @@ -519,7 +661,7 @@ and some related software: % \begin{itemize} \item \textbf{FeynDiagram~\cite{feyndiagram} and Jaxodraw~\cite{jaxodraw}}: for Feynman diagrams outside \TeX. You might also - be interested in my |pyfeyn|~\cite{pyfeyn} program, once it's publically released. + be interested in my |pyfeyn|~\cite{pyfeyn} program. \item \textbf{SLAC SPIRES' biblio tools service:} see \url{www.slac.stanford.edu/spires/} \end{itemize} @@ -529,10 +671,10 @@ and some related software: Here are some selected snippets from my thesis, which hopefully demonstrate the features described. I split my thesis into |thesis.cls|, |thesis.sty| and |thesis.tex| files, with the front matter, back matter and chapters -\texcommand{input}'d into |thesis.tex|. The output was built by running e.g. +\texcmd{input}'d into |thesis.tex|. The output was built by running e.g. % \begin{snippet} -latex thesis.tex && bibtex thesis && latex thesis.tex +pdflatex thesis.tex && bibtex thesis && pdflatex thesis.tex \end{snippet} % (though I used a Makefile rather than do it directly). You should note that you @@ -574,7 +716,6 @@ including it in the package (and will give you some credit, of course). But anyw here's the TODO: % \begin{itemize} -\item Make |hepthesis| use |subfig| in place of |subfigure| and check out compatibility between |caption| and |caption2|. \item Make the spacing in the \texcmd{SectionRef} etc. commands customisable. \item Allow the PDF page style to be specified as a class argument \item Allow section titles to be centre / right justified? @@ -586,7 +727,7 @@ here's the TODO: \section{Feedback} -|hepthesis| has taken a lot of work\dots I hope you think it was worthwhile and +\hepthesis has taken a lot of work\dots I hope you think it was worthwhile and that you enjoy using it. Or at least, I hope you enjoy writing your thesis more than you would have done without it! If you're feeling appreciative, then a teeny credit in your thesis acknowledgements would be hugely appreciated. @@ -596,6 +737,12 @@ constructive criticism! Email your thoughts to \texttt{hepthesis@insectnation.org}, please. +\section{Acknowledgements} +I'd like to thank all the people who have provided bug reports, patches, suggestions +and who have otherwise helped me to get \hepthesis to the state it's in. See the +|ChangeLog| file in the distribution for names! + + \appendix \section{Using your own derived document class} @@ -673,7 +820,7 @@ GNU automake) elsewhere, but to save on Make-newbie angst, I'll tell you that the indents in the following snippet \emph{must} be tabs, rather than spaces! Here goes --- put the following into a file called |Makefile|, change the |DOCNAME| variable to something which suits your project and run |make thesis| or |make thesispdf|: -\begin{snippet} +\begin{fsnippet} # For a main thesis LaTeX file called ``thesis.tex'' DOCNAME = thesis @@ -690,7 +837,7 @@ thesispdf: $(TEXSOURCES) $(DOCNAME).bbl pdflatex $(DOCNAME) cp $(DOCNAME).aux $(DOCNAME).aux.pdf ./thesisstats.sh >> buildlog.dat -\end{snippet} +\end{fsnippet} Otherwise you can just delete the |.aux| file when you change between using |latex| and |pdflatex|, but this will require more passes, since the @@ -698,14 +845,19 @@ Otherwise you can just delete the |.aux| file when you change between using \begin{thebibliography}{99} \bibitem{CTAN}{CTAN: \url{http://www.ctan.org}. \url{http://www.tex.ac.uk/tex-archive} is shortened to |ctan:| below.} +\bibitem{scrbook}{scrbook: \url{ctan:/macros/latex/contrib/komascript/}} \bibitem{cite}{cite: \url{ctan:/macros/latex/contrib/cite/}} \bibitem{setspace}{setspace: \url{ctan:/macros/latex/setspace/}} \bibitem{fancyhdr}{fancyhdr: \url{ctan:/macros/latex/contrib/fancyhdr/}} \bibitem{rotating}{rotating: \url{ctan:/macros/latex/contrib/rotating/}} \bibitem{tocbibind}{tocbibind: \url{ctan:/macros/latex/contrib/tocbibind/}} -\bibitem{subfigure}{subfigure: \url{ctan:/obsolete/macros/latex/contrib/subfigure/}} -\bibitem{ccaption}{ccaption: \url{ctan:/macros/latex/contrib/ccaption/}} +\bibitem{subfig}{subfig: \url{ctan:/obsolete/macros/latex/contrib/subfig/}} \bibitem{caption}{caption: \url{ctan:/macros/latex/contrib/caption/}} +\bibitem{ccaption}{ccaption: \url{ctan:/macros/latex/contrib/ccaption/}} +\bibitem{chngpage}{chngpage: \url{ctan:/macros/latex/contrib/chngpage/}} +\bibitem{varwidth}{varwidth: \url{ctan:/macros/latex/contrib/varwidth/}} +\bibitem{csquotes}{csquotes: \url{ctan:/macros/latex/contrib/csquotes/}} +\bibitem{babel}{babel: \url{ctan:/macros/latex/contrib/babel/}} \bibitem{a4wide}{a4wide: \url{ctan:/macros/latex/contrib/misc/a4wide.sty}} \bibitem{amsmath}{amsmath: \url{ctan:/macros/latex/required/amslatex/math/}} \bibitem{hyperref}{hyperref: \url{ctan:/macros/latex/contrib/hyperref/}} @@ -723,9 +875,9 @@ Otherwise you can just delete the |.aux| file when you change between using \bibitem{cancel}{cancel: \url{ctan:/macros/latex/contrib/misc/cancel.sty}} \bibitem{feynmf}{feynmf: \url{ctan:/macros/latex/contrib/feynmf/}} \bibitem{axodraw}{axodraw: \url{http://www.nikhef.nl/~form/FORMdistribution/axodraw/}} -\bibitem{feyndiagram}{feyndiagram: \url{http://www.feyndiagram.com}} -\bibitem{jaxodraw}{jaxodraw: \url{http://http://jaxodraw.sourceforge.net/}} -\bibitem{pyfeyn}{|pyfeyn|: \url{http://hepforge.cedar.ac.uk/pyfeyn/}} +\bibitem{feyndiagram}{FeynDiagram: \url{http://www.feyndiagram.com}} +\bibitem{jaxodraw}{Jaxodraw: \url{http://http://jaxodraw.sourceforge.net/}} +\bibitem{pyfeyn}{PyFeyn: \url{http://hepforge.cedar.ac.uk/pyfeyn/}} \end{thebibliography} \end{document} diff --git a/Master/texmf-dist/source/latex/hepthesis/Makefile b/Master/texmf-dist/source/latex/hepthesis/Makefile new file mode 100644 index 00000000000..9dad91545f8 --- /dev/null +++ b/Master/texmf-dist/source/latex/hepthesis/Makefile @@ -0,0 +1,29 @@ +HT := hepthesis +.PHONY: all clean + +all: $(HT).tar.gz + @true + +$(HT).tar.gz: README ChangeLog $(HT).pdf example/example.pdf + mkdir $(HT) + cp README TODO ChangeLog Makefile $(HT).pdf $(HT).cls $(HT).tex $(HT) + mkdir $(HT)/example + cp example/*.pdf example/*.tex example/*.cls example/*.sty $(HT)/example + tar czf $@ $(HT) + +$(HT).pdf: $(HT).tex example/example.pdf + (rm -f $(HT).{aux,toc,lof,lot} && pdflatex $(HT).tex && pdflatex $(HT).tex && rm -f $(HT).{aux,toc,lof,lot}) + +example/example.pdf: example/example.tex + (cd example && rm -f example.{aux,toc,lof,lot} && pdflatex example && bibtex example && pdflatex example && pdflatex example && rm -f example.{aux,toc,lof,lot}) + +clean: + @rm -rf $(HT) + @rm -f $(HT).tar.gz + @rm -f $(HT).pdf $(HT).log $(HT).aux $(HT).out $(HT).dvi comment.cut + @rm -f example/example.pdf example/example.log example/example.aux + +check: $(HT).tar.gz + rm -rf $(HT) + tar xzf $(HT).tar.gz + (cd $(HT) && make $(HT).pdf && make example/example.pdf) diff --git a/Master/texmf-dist/tex/latex/hepthesis/hepthesis.cls b/Master/texmf-dist/tex/latex/hepthesis/hepthesis.cls index 71cf0c6769b..e15f2982b05 100644 --- a/Master/texmf-dist/tex/latex/hepthesis/hepthesis.cls +++ b/Master/texmf-dist/tex/latex/hepthesis/hepthesis.cls @@ -15,8 +15,8 @@ %% ======================================================================== %% Admin %% ======================================================================== -\def\fileversion{1.3} -\def\filedate{2006/09/28} +\def\fileversion{1.4} +\def\filedate{2007/09/12} \NeedsTeXFormat{LaTeX2e} \ProvidesClass{hepthesis}[\filedate\space HEP thesis class by Andy Buckley (v\fileversion)] @@ -37,18 +37,26 @@ \def\@useAFour{yes} \def\@requireAFourWide{} \def\@oneside{} +\def\@sftitles{} \def\@bindmargins{yes} \def\@hidefrontmatter{} \def\@hidebackmatter{} +%% TODO: how to handle this? +%\usepackage[babel]{csquotes}[2007/03/25] +%% Part-wise spacing commands and definitions +\def\@frontmatterspacing{onehalfspacing} +\def\@mainmatterspacing{onehalfspacing} +\def\@appendixspacing{onehalfspacing} +\def\@backmatterspacing{onehalfspacing} %% One-sided or two-sided (bound copies may have to be single-sided) \DeclareOption{oneside}{% \def\@oneside{yes} - \PassOptionsToClass{oneside}{book}} + \PassOptionsToClass{oneside}{scrbook}} \DeclareOption{twoside}{% \def\@oneside{} - \PassOptionsToClass{twoside}{book}} + \PassOptionsToClass{twoside}{scrbook}} %% Sans serif titles? \DeclareOption{sftitles}{% @@ -111,6 +119,11 @@ \fi% } +%% Don't break enumerations (etc.) across pages in +%% an ugly manner +\clubpenalty = 10000 +\widowpenalty = 10000 + %% Use nice-looking tables \DeclareOption{booktabs}{% \def\@requirebooktabs{yes}} @@ -144,27 +157,27 @@ } \DeclareOption{a5paper}{% \def\@useAFour{}% - \PassOptionsToClass{a5paper}{book}% + \PassOptionsToClass{a5paper}{scrbook}% } \DeclareOption{b5paper}{% \def\@useAFour{}% - \PassOptionsToClass{b5paper}{book}% + \PassOptionsToClass{b5paper}{scrbook}% } \DeclareOption{letterpaper}{% \def\@useAFour{}% - \PassOptionsToClass{letterpaper}{book}% + \PassOptionsToClass{letterpaper}{scrbook}% } \DeclareOption{legalpaper}{% \def\@useAFour{}% - \PassOptionsToClass{legalpaper}{book}% + \PassOptionsToClass{legalpaper}{scrbook}% } \DeclareOption{executivepaper}{% \def\@useAFour{}% - \PassOptionsToClass{executivepaper}{book}% + \PassOptionsToClass{executivepaper}{scrbook}% } %% Handle the A4 default paper size \ifx\@useAFour\@empty\else% - \PassOptionsToClass{a4paper}{book}% + \PassOptionsToClass{a4paper}{scrbook}% \fi @@ -178,19 +191,23 @@ %% Process the options (no package requirement allowed above here) \ProcessOptions + %% ======================================================================== %% Base class and packages %% ======================================================================== %% Base class -\LoadClass[12pt]{book} +\LoadClass[12pt]{scrbook} %% Use wide format if using A4 paper \ifx\@requireAFourWide\@empty\else\RequirePackage{a4wide}\fi -%% Hyperlinks (optional, has to come early in the package list) -\ifx\@requirehyper\@empty\else\RequirePackage[colorlinks=true,bookmarks=true]{hyperref}\fi -%pdfpagemode=None, FullScreen, UseThumbs, UseOutlines +%% Need to be able to locally change the text width. +\RequirePackage{chngpage} + +%% Used to center the variable width page quote (must be version >= 0.9a) +\RequirePackage{varwidth}[2003/03/10] + %% AMS math package (optional) \ifx\@requireamsmath\@empty\else% @@ -225,6 +242,11 @@ \RequirePackage{sfheaders} \fi +%% In standard tabular: aligns \hline properly with vertical +%% lines (check with zoom). But you shouldn't using vertical +%% lines, should you? See booktabs documentation ;-) +%\RequirePackage{array} + %% Nice tables (optional) \ifx\@requirebooktabs\@empty\else% \RequirePackage{booktabs} @@ -249,12 +271,14 @@ %% ``DRAFT'' underprint and line numbering in draft mode (optional) \ifx\@requiredraft\@empty\else% - \RequirePackage[pagewise, mathlines, displaymath]{lineno} + \RequirePackage[pagewise, mathlines]{lineno} \RequirePackage{draftcopy} \fi %% The right way to do custom spacing \RequirePackage{setspace} +%% \singlespacing, \onehalfspacing, \doublespacing +%% \begin{spacing}{2.5} ... %% Funky headers \RequirePackage{fancyhdr} @@ -265,22 +289,25 @@ %% Verbatim things \RequirePackage{verbatim,comment} -%% Subfigures -\RequirePackage[loose]{subfigure} -\subfiglabelskip=0pt - -%% Nice captions (with continuation option) -\RequirePackage[subfigure]{ccaption} % this one must come first... -\RequirePackage[margin=20pt,labelfont=bf]{caption} - %% Rotated figures \RequirePackage{rotating} +%% Re-defines captions of figures and tables +%% TODO: make configurable / optional? +\RequirePackage[format=hang,labelfont=bf,labelsep=colon,font=small]{caption}[2004/01/23] + +%% Hyperlinks (optional, has to come late in the package list) +\ifx\@requirehyper\@empty\else% +\RequirePackage[colorlinks=true,bookmarks=true,plainpages=false]{hyperref}% +%pdfpagemode=None, FullScreen, UseThumbs, UseOutlines +\fi + %% Make maths in titles go automatically bold \AtEndOfClass{% \g@addto@macro\bfseries{\boldmath} } + %% ======================================================================== %% Length definitions %% ======================================================================== @@ -303,35 +330,49 @@ \setlength{\oddsidemargin}{\@bindextramargin} \setlength{\evensidemargin}{-\@bindextramargin} } -%% + %% Redefine bits of document shape \renewcommand{\topfraction}{0.95}% \renewcommand{\bottomfraction}{0.95}% \renewcommand{\textfraction}{0.05}% \renewcommand{\arraystretch}{1.25}% -%% + %% Reset rule widths and the header width \renewcommand{\headwidth}{\textwidth}% \renewcommand{\headrulewidth}{0.5pt}% \renewcommand{\footrulewidth}{0pt}% \addtolength{\headheight}{2.5pt}% \addtolength{\headsep}{20pt}% -\newlength{\@maintextwidth}% -\setlength{\@maintextwidth}{\textwidth}% -\newlength{\@frontmattertextwidth}% -\setlength{\@frontmattertextwidth}{\@maintextwidth}% + +%% Extra margins for various sections +\newlength{\@mainmatterextramargin}% +\setlength{\@mainmatterextramargin}{0cm}% +\newlength{\@backmatterextramargin}% +\setlength{\@backmatterextramargin}{0cm}% +\newlength{\@frontmatterextramargin}% +\setlength{\@frontmatterextramargin}{0cm}% +\newlength{\@appendixextramargin}% +\setlength{\@appendixextramargin}{0cm}% \newlength{\@abstractextramargin}% \setlength{\@abstractextramargin}{1.5cm}% -%% +\newlength{\@declarationextramargin}% +\setlength{\@declarationextramargin}{1cm}% +\newlength{\@acknowledgementsextramargin}% +\setlength{\@acknowledgementsextramargin}{0cm}% +\newlength{\@prefaceextramargin}% +\setlength{\@prefaceextramargin}{0cm}% +\newlength{\@pagequoteextramargin}% +\setlength{\@pagequoteextramargin}{2cm}% + %% Top vertical spacing in the front matter \newlength{\@frontmattertopskip}% \newlength{\@frontmattertitletopskip}% \newlength{\frontmattertitleskip}% -\addtolength{\frontmattertitleskip}{3cm}% +\addtolength{\frontmattertitleskip}{2cm}% \addtolength{\@frontmattertitletopskip}{0cm}% \setlength{\@frontmattertopskip}{\frontmattertitleskip}% \addtolength{\@frontmattertopskip}{\@frontmattertitletopskip}% -%% + %% Figure widths \newlength{\smallfigwidth} \newlength{\mediumfigwidth} @@ -341,6 +382,7 @@ \setlength{\mediumfigwidth}{0.6\textwidth} \setlength{\largefigwidth}{0.75\textwidth} \setlength{\hugefigwidth}{0.9\textwidth} + %% Figure width aliases \newlength{\littlefigwidth} \newlength{\bigfigwidth} @@ -356,13 +398,14 @@ %% Use funky headers and footers \pagestyle{fancy} + %% Normal headers and footers (headers are all like RH pages for oneside) \ifx\@oneside\@empty% \fancyhead[RO,LE]{\bfseries\thepage}% \fancyhead[LO,RE]{\bfseries\leftmark}% \else% - \fancyhead[RO,RE]{\bfseries\thepage}% - \fancyhead[LO,LE]{\bfseries\leftmark}% + \fancyhead[RO,R]{\bfseries\thepage}% + \fancyhead[LO,L]{\bfseries\leftmark}% \fi% \fancyfoot{}% %% Lower case header content @@ -370,6 +413,7 @@ \markboth{#1}{}% } + %% Headers and footers for plain (blank) pages \fancypagestyle{plain}{% \fancyhf{}% @@ -379,6 +423,7 @@ \renewcommand{\footrulewidth}{0pt}% } + %% Treat forced blank pages in the same way as chapter title pages \def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else% \hbox{}% @@ -387,12 +432,14 @@ \newpage% \if@twocolumn\hbox{}\newpage\fi\fi\fi}% + %% Provide mixed-case versions of the Table of contents, %% List of tables, List of figures, Bibliography etc. header names \DeclareRobustCommand{\contentsname}{Contents} \DeclareRobustCommand{\bibname}{Bibliography} -\DeclareRobustCommand{\listfigurename}{List of Figures} -\DeclareRobustCommand{\listtablename}{List of Tables} +\DeclareRobustCommand{\listfigurename}{List of figures} +\DeclareRobustCommand{\listtablename}{List of tables} + %% Commenting out front and back matter \ifx\@hidefrontmatter\@yes\AtBeginDocument{\excludecomment{frontmatter}}\fi @@ -403,24 +450,11 @@ %% Internal environments and commands %% ======================================================================== -%% Narrow environment (doesn't work) -\DeclareRobustCommand{\@narrowbegin}[1]{% - \begin{list} - %\begingroup - \setlength{\topsep}{0pt}% - \setlength{\leftmargin}{#1}% - \setlength{\rightmargin}{#1}% - \setlength{\listparindent}{\parindent}% - \setlength{\itemindent}{\parindent}% - \setlength{\parsep}{\parskip}% - \item[]% -} -\DeclareRobustCommand{\@narrowend}{% - %\endgroup - \end{list}% -} -\newenvironment{@narrow}[1]{\@narrowbegin{#1}}{\@narrowend} - +%% Provide dumb quoting commands in case the csquotes package hasn't been used. +\AtEndOfClass{% + \providecommand{\enquote}[1]{``#1''}% + \providecommand{\foreignquote}[1]{``#1''}% +} %% ======================================================================== @@ -428,66 +462,97 @@ %% ======================================================================== -%% Re-define the sectioning commands with optional 1st arg now being the label -%% Oops, actually a bad idea since it clashes with the existing 1st option arg! -%\let\@oldchapter\chapter -%\DeclareRobustCommand{\chapter}[2][]{\def\@argone{#1}\def\@empty{}\chapter{#2}\ifx\@argone\@empty\else\label{#1}\fi} -%\let\@oldsection\section -%\DeclareRobustCommand{\chapter}[2][]{\def\@argone{#1}\def\@empty{}\section{#2}\ifx\@argone\@empty\else\label{#1}\fi} -%\let\@oldsubsection\subsection -%\DeclareRobustCommand{\chapter}[2][]{\def\@argone{#1}\def\@empty{}\subsection{#2}\ifx\@argone\@empty\else\label{#1}\fi} -%\let\@old\ +%% Change the spacing of lines +\DeclareRobustCommand{\setspacing}[1]{% + \setfrontmatterspacing{#1}% + \setmainmatterspacing{#1}% + \setappendixspacing{#1}% + \setbackmatterspacing{#1}% +} +\DeclareRobustCommand{\setfrontmatterspacing}[1]{\def\@frontmatterspacing{#1spacing}} +\DeclareRobustCommand{\setmainmatterspacing}[1]{\def\@mainmatterspacing{#1spacing}} +\DeclareRobustCommand{\setappendixspacing}[1]{\def\@appendixspacing{#1spacing}} +\DeclareRobustCommand{\setbackmatterspacing}[1]{\def\@backmatterspacing{#1spacing}} + + +%% Change the extra margin size +\DeclareRobustCommand{\setextramargins}[1]{% + \setfrontmatterextramargins{#1}% + \setmainmatterextramargins{#1}% + \setappendixextramargins{#1}% + \setbackmatterextramargins{#1}% +} +\DeclareRobustCommand{\setfrontmatterextramarginsg}[1]{\setlength{\@frontmatterextramargin}{#1}} +\DeclareRobustCommand{\setmainmatterextramargins}[1]{\setlength{\@mainmatterextramargin}{#1}} +\DeclareRobustCommand{\setappendixextramargins}[1]{\setlength{\@appendixextramargin}{#1}} +\DeclareRobustCommand{\setbackmatterextramargins}[1]{\setlength{\@backmatterextramargin}{#1}} +\DeclareRobustCommand{\setabstractextramargins}[1]{\setlength{\@abstractextramargin}{#1}} +\DeclareRobustCommand{\setdeclarationextramargins}[1]{\setlength{\@declarationextramargin}{#1}} +\DeclareRobustCommand{\setacknowledgementsextramargins}[1]{\setlength{\@acknowledgementsextramargin}{#1}} +\DeclareRobustCommand{\setprefaceextramargins}[1]{\setlength{\@prefaceextramargin}{#1}} %% An environment for the rubbish at the front of a typical thesis \let\@oldfrontmatter\frontmatter -%\renewenvironment{frontmatter}{% \specialcomment{frontmatter}{% \setcounter{tocdepth}{2}% show down to subsections in contents \setcounter{secnumdepth}{2}% number down to subsections \newcounter{iterlist}% \@oldfrontmatter% - \begin{onehalfspace}% + \adjustwidth[]{\@frontmatterextramargin}{\@frontmatterextramargin}% + \begin{\@frontmatterspacing}% }{% - \end{onehalfspace}% + \end{\@frontmatterspacing}% + \endadjustwidth% \ignorespacesafterend% } + %% Environment for the thesis main body \let\@oldmainmatter\mainmatter \specialcomment{mainmatter}{% - \@oldmainmatter% + %\@oldmainmatter% + \@mainmattertrue \pagenumbering{arabic}% - \begin{onehalfspace}% + \adjustwidth[]{\@mainmatterextramargin}{\@mainmatterextramargin}% + \begin{\@mainmatterspacing}% }{% - \end{onehalfspace}% + \end{\@mainmatterspacing}% + \endadjustwidth% \ignorespacesafterend% } + %% Environment for appendices \specialcomment{appendices}{% - \begin{onehalfspace}% + \adjustwidth[]{\@appendixextramargin}{\@appendixextramargin}% + \begin{\@appendixspacing}% \appendix% }{% - \end{onehalfspace}% + \end{\@appendixspacing}% + \endadjustwidth% \ignorespacesafterend% } + %% Environment for all the junk at the end of the thesis \let\@oldbackmatter\backmatter \specialcomment{backmatter}{% \@oldbackmatter% - \begin{onehalfspace}% + \adjustwidth[]{\@backmatterextramargin}{\@backmatterextramargin}% + \begin{\@backmatterspacing}% \appendix% }{% - \end{onehalfspace}% + \end{\@backmatterspacing}% + \endadjustwidth% \ignorespacesafterend% } + %% Environment for acknowledgements page in frontmatter \newenvironment{acknowledgements}{% - \setlength{\textwidth}{\@frontmattertextwidth}% \cleardoublepage% + \adjustwidth[]{\@acknowledgementsextramargin}{\@acknowledgementsextramargin}% \vspace*{\@frontmattertopskip}% \begin{center}% \begingroup @@ -497,14 +562,15 @@ \end{center}% \vspace*{1cm}% }{% - \setlength{\textwidth}{\@maintextwidth}% + \endadjustwidth% \ignorespacesafterend% } + %% Environment for preface page in frontmatter \newenvironment{preface}{% - \setlength{\textwidth}{\@frontmattertextwidth}% \cleardoublepage% + \adjustwidth[]{\@prefaceextramargin}{\@prefaceextramargin}% \vspace*{\@frontmattertopskip}% \begin{center}% \begingroup @@ -514,17 +580,18 @@ \end{center}% \vspace*{1cm}% }{% - \setlength{\textwidth}{\@maintextwidth}% + \endadjustwidth% \ignorespacesafterend % } + %% Environment for declaration rubrik page in frontmatter %% (flushright doesn't work in this macro for some reason, %% so you'll have to do that bit yourself like in the %% example file) \newenvironment{declaration}{% - \setlength{\textwidth}{\@frontmattertextwidth}% \cleardoublepage% + \adjustwidth[]{\@declarationextramargin}{\@declarationextramargin}% \vspace*{\@frontmattertopskip}% \begin{center}% \begingroup @@ -539,15 +606,15 @@ % \thesisauthor\newline % \today\newline %\end{flushright} - %\setlength{\textwidth}{\@maintextwidth}% + \endadjustwidth% \ignorespacesafterend% } + %% Environment for thesis abstract in frontmatter %% (argument is the thesis title) \newenvironment{abstract}[1][Abstract]{% - %\setlength{\textwidth}{\@frontmattertextwidth}% - %\begin{@narrow}{\@abstractextramargin} + \adjustwidth[]{\@abstractextramargin}{\@abstractextramargin}% \cleardoublepage% \vspace*{\@frontmattertopskip}% \begin{center}% @@ -557,28 +624,29 @@ \endgroup \end{center}% \vspace*{1cm}% - %\larger{% }{% - %}% - %\setlength{\textwidth}{\@maintextwidth}% - %\end{@narrow} + \endadjustwidth% \ignorespacesafterend% } + %% Deprecated: combined command for defining the title and author in the preamble +%% TODO Remove in 1.5 \DeclareRobustCommand{\definethesis}[2]{% \typeout{hepthesis: definethesis macro is deprecated. Use author and title macros instead.} \author{#1}% \title{#2}% } + %% Makes a thesis title page \let\@oldtitlepage\titlepage \let\@oldendtitlepage\endtitlepage \DeclareRobustCommand{\titlepage}[2][]{% - \@oldtitlepage% - \begingroup - \ifx\@sftitles\@empty\else\sf\fi + %\@oldtitlepage% + \thispagestyle{empty}% + \begingroup% + \ifx\@sftitles\@empty\else\sf\fi% \begin{center}% \vspace*{\frontmattertitleskip}% \begin{doublespace}% @@ -589,51 +657,82 @@ \vspace*{8cm}% {#2}% \end{center}% - \endgroup - \@oldendtitlepage - \cleardoublepage% + \endgroup% + %\@oldendtitlepage% + %\cleardoublepage% } \renewcommand{\maketitle}[1]{\titlepage{}} -%% A main quote page -\DeclareRobustCommand{\frontquote}[2]{% + +%% A quote on its own page +\newlength{\@oldparindent} +\setlength{\@oldparindent}{\parindent} +\DeclareRobustCommand{\pagequote}[3][same]{% \cleardoublepage% - \vspace*{6.5cm}% - \thispagestyle{plain} - \pagestyle{plain} + \vspace*{\stretch{2}}% + \thispagestyle{plain}% + \pagestyle{plain}% \begin{center}% - \noindent\emph{``#1''}% + \begin{varwidth}{\textwidth}% + \def\@samelang{same}% + \def\@reqlang{#1}% + \ifx\@samelang\@reqlang% + \noindent\textsl{\enquote{#2}}% + \else% + \noindent\textsl{\foreignquote{\@reqlang}{#2}}% + \fi% \newline% - \indent --- #2% + \setlength{\parindent}{\@oldparindent} + \indent --- {#3}% + \end{varwidth}% \end{center}% - \cleardoublepage% + \vspace*{\stretch{4}}% + %\cleardoublepage% + \pagestyle{plain}% } +%% Alias +\let\frontquote\pagequote + -%% A dedication page +%% A quote on its own page \DeclareRobustCommand{\dedication}[1]{% \cleardoublepage% - \vspace*{7cm}% - \thispagestyle{plain} - \pagestyle{plain} + \vspace*{\stretch{2}}% + \thispagestyle{plain}% + \pagestyle{plain}% \begin{center}% - \noindent\emph{#1}% + \begin{varwidth}{\textwidth}% + \noindent\textsl{\enquote{#1}}% + \end{varwidth}% \end{center}% - \cleardoublepage% + \vspace*{\stretch{4}}% + %\cleardoublepage% + \pagestyle{plain}% } + %% Environment for colophon in backmatter \newenvironment{colophon}{% - \chapter{Colophon} + \chapter*{Colophon}% + \@mkboth{\MakeUppercase{Colophon}}{\MakeUppercase{Colophon}}% }{% \ignorespacesafterend % } %% Typesets a chapter quote -\DeclareRobustCommand{\chapterquote}[2]{% - \noindent\emph{``#1''}% +\DeclareRobustCommand{\chapterquote}[3][same]{% + \def\@samelang{same}% + \def\@reqlang{#1}% + \begin{adjustwidth}[]{}{3cm}% + \ifx\@samelang\@reqlang% + \noindent\emph{\enquote{#2}}% + \else% + \noindent\emph{\foreignquote{\@reqlang}{#2}}% + \fi% \newline% - \indent --- #2% + \indent --- #3% + \end{adjustwidth}% \vspace{1cm}% } @@ -714,7 +813,7 @@ %% ``Thesis''-prefixed duplicate commands and environments (deprecated) -\newcommand{\thesistypeout}{\typeout{hepthesis: thesis- prefix commands are deprecated and will soon be removed}} +\newcommand{\thesistypeout}{\typeout{hepthesis: thesis- prefix commands are deprecated and will be removed from hepthesis v1.5 onwards}} \newenvironment{thesistable}{\thesistypeout\table}{\endtable\ignorespacesafterend} \newenvironment{thesistabular}{\thesistypeout\tabular}{\endtabular\ignorespacesafterend} \newenvironment{thesisfigure}{\thesistypeout\expandafter\let\expandafter\@oldoldfigurestar \csname figure*\endcsname \@oldoldfigurestar}% |