diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/tufte-latex')
-rw-r--r-- | Master/texmf-dist/tex/latex/tufte-latex/tufte-handout.cls | 483 |
1 files changed, 483 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tufte-latex/tufte-handout.cls b/Master/texmf-dist/tex/latex/tufte-latex/tufte-handout.cls new file mode 100644 index 00000000000..581af3a31b7 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tufte-latex/tufte-handout.cls @@ -0,0 +1,483 @@ +\NeedsTeXFormat{LaTeX2e}[1994/06/01] + +\ProvidesClass{tufte-handout}[2008/06/06 v2.0.0 Tufte-handout class] + +%% +% a4paper option + +\newif\if@tufteh@afourpaper \@tufteh@afourpaperfalse +\DeclareOption{a4paper}{\@tufteh@afourpapertrue} + +%% +% sfsidenotes option -- typesets sidenotes in sans serif typeface + +\newif\if@tufteh@sfsidenotes \@tufteh@sfsidenotesfalse +\DeclareOption{sfsidenotes}{\@tufteh@sfsidenotestrue} + +%% +% symmetric option -- puts marginpar space to the outside edge of the page +% Note: this forces twoside + +\newif\if@tufteh@symmetric\@tufteh@symmetricfalse +\DeclareOption{symmetric}{ + \@tufteh@symmetrictrue + \PassOptionsToClass{twoside}{article} +} + +%% +% justified option -- uses fully justified text (flush left and flush +% right) instead of ragged right. + +\newif\if@tufteh@justified\@tufteh@justifiedfalse +\DeclareOption{justified}{\@tufteh@justifiedtrue} + + +% FIXME: should probably specify options not supported like Mittelbach's aipproc.cls + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\ProcessOptions + +\LoadClass{article} + +%% +% Detect whether we're in two-side mode or not. (Used to set up running +% heads later.) + +\newif\if@tufteh@twoside\let\if@tufteh@twoside\if@twoside + +%% +% Set page layout geometry + +\RequirePackage[letterpaper,includemp,width=6.5in,marginparsep=0.375in,marginparwidth=2in]{geometry} + +\if@tufteh@afourpaper + \geometry{a4paper,includemp,width=170mm,marginparsep=10mm,marginparwidth=50mm} +\fi + +\if@tufteh@symmetric +\else + \geometry{asymmetric} +\fi + + +%% +% Separation marginpars by a line's worth of space. + +\setlength\marginparpush{\baselineskip} + +%% +% Font for margin items + +\if@tufteh@sfsidenotes + \newcommand{\@tufteh@marginfont}{\normalfont\scriptsize\sffamily} +\else + \newcommand{\@tufteh@marginfont}{\normalfont\scriptsize} +\fi + +%% +% \RaggedRight allows hyphenation + +\RequirePackage{ragged2e} +\setlength{\RaggedRightRightskip}{\z@ plus 0.08\hsize} + +%% +% Set the justification baesed on the `justified' class option + +\newcommand{\@tufteh@justification}{% + \if@tufteh@justified + \justifying + \else + \RaggedRight + \fi +} + +%% +% Turn off section numbering + +\setcounter{secnumdepth}{-1} + +%% +% Tighten up space between displays (e.g., a figure or table) and make symmetric + +\setlength\abovedisplayskip{6pt plus 2pt minus 4pt} +\setlength\belowdisplayskip{6pt plus 2pt minus 4pt} + +%% +% To implement full-width display environments + +\RequirePackage[strict]{chngpage} + +% Compute length used for full-width displays + +\newlength{\@tufteh@overhang} +\setlength{\@tufteh@overhang}{\marginparwidth} +\addtolength{\@tufteh@overhang}{\marginparsep} + +%% +% Alter \maketitle from article.cls + +\renewcommand\maketitle{\par + \global\let\and\relax + \global\let\thanks\footnote + \begingroup + \newpage + \global\@topnum\z@ + \@maketitle + \endgroup + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@maketitle\relax + \global\let\@thanks\@empty + %\global\let\@author\@empty + %\global\let\@date\@empty + %\global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax +} +\def\@maketitle{% + \newpage + \noindent\sffamily\large{\allcaps{\@title}}\\ + \vskip0.5\baselineskip + \noindent\normalsize{\allcaps{\@author}}\\ + \vskip0.3\baselineskip + \noindent{\allcaps{\@date}} + \thispagestyle{plain} +} + +%% +% Abstract + +\renewenvironment{abstract}% + {\begin{quotation} + \begin{sffamily} + \begin{small}}% + { \end{small} + \end{sffamily} + \end{quotation}} + +%% +% Require paralist package for tighter lists + +\RequirePackage{paralist} + +% Add rightmargin to compactenum + +\def\@compactenum@{% + \expandafter\list\csname label\@enumctr\endcsname{% + \usecounter{\@enumctr}% + \rightmargin=2em% added this + \parsep\plparsep + \itemsep\plitemsep + \topsep\pltopsep + \partopsep\plpartopsep + \def\makelabel##1{\hss\llap{##1}}}} + +%% +% Improved letterspacing of small caps and all-caps text. +% +% First, try to use the `microtype' package, if it's available. +% Failing that, try to use the `soul' package, if it's available. +% Failing that, well, I give up. + +\RequirePackage{textcase} % provides \MakeTextUppercase and \MakeTextLowercase +\newcommand{\allcaps}[1]{\MakeTextUppercase{#1}} +\newcommand{\smallcaps}[1]{\textsc{\MakeTextLowercase{#1}}} +\newcommand{\smallcapsspacing}[1]{#1} + +\IfFileExists{microtype.sty}{% + \RequirePackage[final]{microtype} + % Set up letterspacing (using microtype package) -- requires pdfTeX v1.40+ + \renewcommand{\smallcapsspacing}[1]{\textls[50]{##1}} + \renewcommand{\allcaps}[1]{\textls[200]{\MakeTextUppercase{##1}}} + \renewcommand{\smallcaps}[1]{\textsc{\MakeTextLowercase{##1}}} +}{% microtype failed, check for soul + \IfFileExists{soul.sty}{% + \RequirePackage{soul} + \sodef\allcapsspacing{\upshape}{0.15em}{0.65em}{0.6em} + \sodef\smallcapsspacing{\scshape}{0.075em}{0.5em}{0.6em} + \renewcommand{\allcaps}[1]{\allcapsspacing{\MakeTextUppercase{##1}}} + \renewcommand{\smallcaps}[1]{\textsc{\MakeTextLowercase{##1}}} + }{}% neither microtype nor soul are installed... giving up. +} + +\DeclareTextFontCommand{\textsmallcaps}{\scshape} +\renewcommand{\textsc}[1]{\textsmallcaps{\smallcapsspacing{#1}}} + + +%% +% An environment for paragraph-style section + +\providecommand\newthought[1]{\vspace{1.8\baselineskip plus 3pt minus 2pt}% + {\noindent\textsc{#1}}} + +%% +% Transform existing \footnotes into \sidenotes +% Sidenote: ``Where God meant footnotes to go.'' ---Tufte + +\RequirePackage[side,multiple]{footmisc} +\newcommand{\footnotelayout}{\@tufteh@marginfont\@tufteh@justification} + +% Override footmisc's definition to set the sidenote marks (numbers) inside the +% sidenote's text block. +\long\def\@makefntext#1{\@textsuperscript{\@tufteh@marginfont\tiny\@thefnmark}\,\footnotelayout#1} + +% Set the in-text footnote mark in the same typeface as the body text itself. +\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\scriptsize\@thefnmark}}} + +\let\sidenote\footnote + +%% +% Sidenote without the footnote mark + +\providecommand\marginnote[1]% + {\marginpar{\@tufteh@marginfont\@tufteh@justification #1}} + +%% +% Citations should go in the margin as well + +\RequirePackage{natbib} +\RequirePackage{bibentry} % allows bibitems to be typeset outside thebibliography environment +\nobibliography* % pre-loads the bibliography keys +\renewcommand{\cite}[1]{\sidenote{\bibentry{#1}.}} +\providecommand{\doi}[1]{\textsc{doi:} #1} % pre-defining this so it may be used before the \bibliography command it issued + +% TODO: Rewrite \cite so that you can specify multiple bib keys +% at once. For example, \cite{Author01,Author02} +% TODO: Combine sequences of citations so that 2,3,4,6 becomes 2-4,6 +% but be careful of hyperref interaction + +%% +% Make Tuftian-style section headings + +% TODO: I'd prefer to use the 'titlesec' package for this formatting, but +% I'll do it old-style for now. --Kevin + +\renewcommand\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\normalfont\large\it}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\normalsize\it}} + +% Subsubsection and following section headings shouldn't be used. +% See Bringhurst's _The Elements of Typography_, section 4.2.2. +\renewcommand\subsubsection{% + \PackageError{tufte-handout}{\noexpand\subsubsection is undefined by this class.% + \MessageBreak See Robert Bringhurst's _The Elements of + \MessageBreak Typographic Style_, section 4.2.2. + \MessageBreak \noexpand\subsubsection was used} + {From Bringhurst's _The Elements of Typographic Style_, section 4.2.2: Use as + \MessageBreak many levels of headings as you need, no more and no fewer. Also see the many + \MessageBreak related threads on Ask E.T. at http://www.edwardtufte.com/.} +} + +\renewcommand\paragraph{% + \PackageError{tufte-handout}{\noexpand\paragraph is undefined by this class.% + \MessageBreak See Robert Bringhurst's _The Elements of + \MessageBreak Typographic Style_, section 4.2.2. + \MessageBreak \noexpand\paragraph was used} + {From Bringhurst's _The Elements of Typographic Style_, section 4.2.2: Use as + \MessageBreak many levels of headings as you need, no more and no fewer. Also see the many + \MessageBreak related threads on Ask E.T. at http://www.edwardtufte.com/.} +} + +\renewcommand\subparagraph{% + \PackageError{tufte-handout}{\noexpand\subparagraph is undefined by this class.% + \MessageBreak See Robert Bringhurst's _The Elements of + \MessageBreak Typographic Style_, section 4.2.2. + \MessageBreak \noexpand\subparagraph was used} + {From Bringhurst's _The Elements of Typographic Style_, section 4.2.2: Use as + \MessageBreak many levels of headings as you need, no more and no fewer. Also see the many + \MessageBreak related threads on Ask E.T. at http://www.edwardtufte.com/.} +} + + +%% +% The placeins package provides the \FloatBarrier command. This forces +% LaTeX to place all of the floats before proceeding. We'll use this to +% keep the float (figure and table) numbers in sequence. +\RequirePackage{placeins} + +%% +% Margin figure environment + +\newsavebox{\@tufteh@marginfigbox} +\newenvironment{marginfigure}[1] + [-1.2ex] + {\FloatBarrier% process all floats before this point so the figure numbers stay in order. + \begin{lrbox}{\@tufteh@marginfigbox} + \begin{minipage}{\marginparwidth} + \@tufteh@marginfont + \def\@captype{figure} + \vspace*{#1} + \@tufteh@justification + } + {\end{minipage}% + \end{lrbox}% + \marginpar{\usebox{\@tufteh@marginfigbox}}} + + +%% +% Margin table environment +\newsavebox{\@tufteh@margintablebox} +\newenvironment{margintable}[1] + [-1.2ex] + {\FloatBarrier% process all floats before this point so the figure numbers stay in order. + \begin{lrbox}{\@tufteh@margintablebox} + \begin{minipage}{\marginparwidth} + \@tufteh@marginfont + \def\@captype{table} + \vspace*{#1} + \@tufteh@justification + } + {\end{minipage}% + \end{lrbox}% + \marginpar{\usebox{\@tufteh@margintablebox}}} + + +%% +% Full-width figure + +\renewenvironment{figure*}[1]% + [htbp]% + {\@float{figure}[#1]% + \if@tufteh@symmetric + \begin{adjustwidth}[]{}{-\@tufteh@overhang}% + \else + \begin{adjustwidth}{}{-\@tufteh@overhang}% + \fi + \begin{minipage}{\linewidth}}% + {\end{minipage}% + \end{adjustwidth}% + \end@float} + +%% +% Full-width table + +\renewenvironment{table*}[1] + [htbp]% + {\@float{table}[#1]% + \if@tufteh@symmetric + \begin{adjustwidth}[]{}{-\@tufteh@overhang}% + \else + \begin{adjustwidth}{}{-\@tufteh@overhang}% + \fi + \begin{minipage}{\linewidth}}% + {\end{minipage}% + \end{adjustwidth}% + \end@float} + +%% +% Full-page-width area + +\newenvironment{fullwidth} + {\if@tufteh@symmetric + \begin{adjustwidth}[]{}{-\@tufteh@overhang}% + \else + \begin{adjustwidth}{}{-\@tufteh@overhang}% + \fi + } + {\end{adjustwidth}} + +%% +% Format the captions in a style similar to the sidenotes + +\RequirePackage[format=default,font={rm,scriptsize},justification=raggedright,singlelinecheck=false]{caption} + +% if the `sfsidenotes' option is specified, set the captions in sf, too. +\if@tufteh@sfsidenotes + \captionsetup{font={sf,scriptsize}} +\else + \captionsetup{font={rm,scriptsize}} +\fi + +% if the `justified' option is specified, set the captions in flush left +% and flush right +\if@tufteh@justified + \captionsetup{justification=justified} +\else + \captionsetup{justification=raggedright} +\fi + +%% +% If the Palatino typeface (and its math symbol set) are installed, load them. + +\IfFileExists{palatino.sty}{% + \RequirePackage{palatino} + \IfFileExists{mathpazo.sty}{\RequirePackage[osf,sc]{mathpazo}}{} +}{} % if the Palatino typefaces aren't found, do nothing. + + +%% +% If the Bera Mono typeface is available, use it. + +\IfFileExists{beramono.sty}{% + \RequirePackage[T1]{fontenc} + \RequirePackage[scaled=0.85]{beramono} +}{} + + +%% +% Sets up the running heads and folios. + +\RequirePackage{fancyhdr} + +% Set the header/footer width to be the body text block plus the margin +% note area. +\if@tufteh@symmetric + \fancyhfoffset[LE,RO]{\@tufteh@overhang} +\else + \fancyhfoffset[RE,RO]{\@tufteh@overhang} +\fi + +% The 'fancy' page style is the default style for all pages. +\fancyhf{} % clear header and footer fields +\if@tufteh@twoside + \fancyhead[LE]{\thepage\quad\smallcaps{\@author}} + \fancyhead[RO]{\smallcaps{\@title}\quad\thepage} +\else + \fancyhead[RE,RO]{\smallcaps{\@title}\quad\thepage} +\fi +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} + +% The 'plain' page style is used on chapter opening pages. +\fancypagestyle{plain}{ + \fancyhf{} % clear header and footer fields + \if@tufteh@twoside + \fancyfoot[LE,RO]{\thepage} + \else + \fancyfoot[RE,RO]{\thepage} + \fi +} + +% The 'empty' page style suppresses all headers and footers. +% It's used on title pages and `intentionally blank' pages. +\fancypagestyle{empty}{ + \fancyhf{} % clear header and footer fields +} + +% Set the default page style to 'fancy' +\pagestyle{fancy} + + +%% +% Set raggedright and paragraph indentation for document + +\AtBeginDocument{\@tufteh@justification\setlength\parindent{1em}} + + +%% +% Prints the list of class options and their states. +\newcommand{\printclassoptions}{% + \texttt{symmetric}---\if@tufteh@symmetric true\else false\fi\\ + \texttt{a4paper}---\if@tufteh@afourpaper true\else false\fi\\ + \texttt{twoside}---\if@tufteh@twoside true\else false\fi\\ + \texttt{sfsidenotes}---\if@tufteh@sfsidenotes true\else false\fi\\ + \texttt{justified}---\if@tufteh@justified true\else false\fi +} + +\endinput |