* Created a new tufte-book document class. * Moved most of the tufte-handout code into a tufte-common.sty file. * The tufte-handout.cls and tufte-book.cls files now include tufte-common.sty. * No documentation for the new stuff yet -- read the code. * The tufte-book class is very much unfinished -- I've only just started. * Bugs abound! git-svn-id: https://tufte-latex.googlecode.com/svn/trunk@63 516e2f36-ce3a-0410-bea4-1d4a03f5df72master
| @@ -0,0 +1,342 @@ | |||||
| \documentclass{tufte-book} | |||||
| %% | |||||
| % Book metadata | |||||
| \title{A Tufte-Style Book\thanks{Thanks to Edward R.~Tufte for his inspiration.}} | |||||
| \author[The Tufte-LaTeX Developers]{The Tufte-\LaTeX\ Developers} | |||||
| \publisher{Publisher of This Book} | |||||
| %% | |||||
| % If they're installed, use Bergamo and Chantilly from www.fontsite.com. | |||||
| % They're clones of Bembo and Gill Sans, respectively. | |||||
| \IfFileExists{bergamo.sty}{\usepackage[osf]{bergamo}}{}% Bembo | |||||
| \IfFileExists{chantill.sty}{\usepackage{chantill}}{}% Gill Sans | |||||
| %\usepackage{microtype} | |||||
| %% | |||||
| % Just some sample text | |||||
| \usepackage{lipsum} | |||||
| %% | |||||
| % For nicely typeset tabular material | |||||
| \usepackage{booktabs} | |||||
| %% | |||||
| % For graphics / images | |||||
| \usepackage{graphicx} | |||||
| %% | |||||
| % Prints argument within hanging parentheses (i.e., parentheses that take | |||||
| % up no horizontal space). Useful in tabular environments. | |||||
| \newcommand{\hangp}[1]{\makebox[0pt][r]{(}#1\makebox[0pt][l]{)}} | |||||
| %% | |||||
| % Prints an asterisk that takes up no horizontal space. | |||||
| % Useful in tabular environments. | |||||
| \newcommand{\hangstar}{\makebox[0pt][l]{*}} | |||||
| %% | |||||
| % Prints a trailing space in a smart way. | |||||
| \usepackage{xspace} | |||||
| %% | |||||
| % Some shortcuts for Tufte's book titles. The lowercase commands will | |||||
| % produce the initials of the book title in italics. The all-caps commands | |||||
| % will print out the full title of the book in italics. | |||||
| \newcommand{\vdqi}{\textit{VDQI}\xspace} | |||||
| \newcommand{\ei}{\textit{EI}\xspace} | |||||
| \newcommand{\ve}{\textit{VE}\xspace} | |||||
| \newcommand{\be}{\textit{BE}\xspace} | |||||
| \newcommand{\VDQI}{\textit{The Visual Display of Quantitative Information}\xspace} | |||||
| \newcommand{\EI}{\textit{Envisioning Information}\xspace} | |||||
| \newcommand{\VE}{\textit{Visual Explanations}\xspace} | |||||
| \newcommand{\BE}{\textit{Beautiful Evidence}\xspace} | |||||
| % Prints the month name (e.g., January) and the year (e.g., 2008) | |||||
| \newcommand{\monthyear}{% | |||||
| \ifcase\month\or January\or February\or March\or April\or May\or June\or | |||||
| July\or August\or September\or October\or November\or | |||||
| December\fi\space\number\year | |||||
| } | |||||
| % Prints an epigraph and speaker in sans serif, all-caps type. | |||||
| \newcommand{\openepigraph}[2]{% | |||||
| %\sffamily\fontsize{14}{16}\selectfont | |||||
| \begin{fullwidth} | |||||
| \sffamily\large | |||||
| \begin{doublespace} | |||||
| \noindent\allcaps{#1}\\% epigraph | |||||
| \noindent\allcaps{#2}% author | |||||
| \end{doublespace} | |||||
| \end{fullwidth} | |||||
| } | |||||
| % Inserts a blank page | |||||
| \newcommand{\blankpage}{% | |||||
| \newpage~\\\thispagestyle{empty}\newpage | |||||
| } | |||||
| \begin{document} | |||||
| % Front matter | |||||
| \frontmatter | |||||
| % r.1 blank page | |||||
| \blankpage | |||||
| % v.2 epigraphs | |||||
| \newpage\thispagestyle{empty} | |||||
| \openepigraph{% | |||||
| The public is more familiar with bad design than good design. | |||||
| It is, in effect, conditioned to prefer bad design, | |||||
| because that is what it lives with. | |||||
| The new becomes threatening, the old reassuring. | |||||
| }{Paul Rand%, {\itshape Design, Form, and Chaos} | |||||
| } | |||||
| \vfill | |||||
| \openepigraph{% | |||||
| A designer knows that he has achieved perfection | |||||
| not when there is nothing left to add, | |||||
| but when there is nothing left to take away. | |||||
| }{Antoine de St-Expurey} | |||||
| \vfill | |||||
| \openepigraph{% | |||||
| \ldots the designer of a new system must not only be the implementor and the first | |||||
| large-scale user; the designer should also write the first user manual\ldots | |||||
| If I had not participated fully in all these activities, | |||||
| literally hundreds of improvements would never have been made, | |||||
| because I would never have thought of them or perceived | |||||
| why they were important. | |||||
| }{Donald E. Knuth} | |||||
| % r.3 full title page | |||||
| \maketitle | |||||
| % v.4 copyright page | |||||
| \newpage | |||||
| \begin{fullwidth} | |||||
| ~\vfill | |||||
| \thispagestyle{empty} | |||||
| \setlength{\parindent}{0pt} | |||||
| \setlength{\parskip}{\baselineskip} | |||||
| Copyright \copyright\ \the\year\ \thanklessauthor | |||||
| \par\smallcaps{Published by \thanklesspublisher} | |||||
| \par\smallcaps{tufte-latex.googlecode.com} | |||||
| \par Licensed under the Apache License, Version 2.0 (the ``License''); you may not | |||||
| use this file except in compliance with the License. You may obtain a copy | |||||
| of the License at \url{http://www.apache.org/licenses/LICENSE-2.0}. Unless | |||||
| required by applicable law or agreed to in writing, software distributed | |||||
| under the License is distributed on an \smallcaps{``AS IS'' BASIS, WITHOUT | |||||
| WARRANTIES OR CONDITIONS OF ANY KIND}, either express or implied. See the | |||||
| License for the specific language governing permissions and limitations | |||||
| under the License. | |||||
| \par\textit{First printing, \monthyear} | |||||
| \end{fullwidth} | |||||
| % r.5 contents | |||||
| \tableofcontents | |||||
| % r.7 dedication | |||||
| \cleardoublepage | |||||
| ~\vfill | |||||
| \begin{doublespace} | |||||
| \noindent\fontsize{18}{22}\selectfont\itshape | |||||
| \nohyphenation | |||||
| Dedicated to those who appreciate \LaTeX{} | |||||
| and the work of \mbox{Edward R.~Tufte} | |||||
| and \mbox{Donald E.~Knuth}. | |||||
| \end{doublespace} | |||||
| \vfill | |||||
| \vfill | |||||
| % r.9 introduction | |||||
| \cleardoublepage | |||||
| \chapter*{Introduction} | |||||
| This sample book discusses the design of Edward Tufte's | |||||
| %books\cite{Tufte2001}\cite{Tufte1990}\cite{Tufte1997}\cite{Tufte2006} | |||||
| books\cite{Tufte2001,Tufte1990,Tufte1997,Tufte2006} | |||||
| and the use of the \texttt{tufte-book} document class. | |||||
| \lipsum[1-20] | |||||
| %% | |||||
| % Start the main matter (normal chapters) | |||||
| \mainmatter | |||||
| \chapter{The Design of Tufte's Books} | |||||
| \label{ch:tufte-design} | |||||
| \newthought{The pages} of a book are usually divided into three major | |||||
| sections: the front matter (also called preliminary matter or prelim), the | |||||
| main matter (the core text of the book), and the back matter (or end | |||||
| matter). | |||||
| \newthought{The front matter} of a book refers to all of the material that | |||||
| comes before the main text. The following table from shows a list of | |||||
| material that appears in the front matter of \VDQI, \EI, \VE, and \BE | |||||
| along with its page number. Page numbers that appear in parentheses refer | |||||
| to folios that do not have a printed page number (but they are still | |||||
| counted in the page number sequence). | |||||
| \bigskip | |||||
| \begin{minipage}{\textwidth} | |||||
| \begin{center} | |||||
| \begin{tabular}{lcccc} | |||||
| \toprule | |||||
| & \multicolumn{4}{c}{Books} \\ | |||||
| \cmidrule(l){2-5} | |||||
| Page content & \vdqi & \ei & \ve & \be \\ | |||||
| \midrule | |||||
| Blank half title page & \hangp{1} & \hangp{1} & \hangp{1} & \hangp{1} \\ | |||||
| Frontispiece\footnotemark{} | |||||
| & \hangp{2} & \hangp{2} & \hangp{2} & \hangp{2} \\ | |||||
| Full title page & \hangp{3} & \hangp{3} & \hangp{3} & \hangp{3} \\ | |||||
| Copyright page & \hangp{4} & \hangp{4} & \hangp{4} & \hangp{4} \\ | |||||
| Contents & \hangp{5} & \hangp{5} & \hangp{5} & \hangp{5} \\ | |||||
| %Blank & -- & \hangp{6} & \hangp{6} & \hangp{6} \\ | |||||
| Dedication & \hangp{6} & \hangp{7} & \hangp{7} & 7 \\ | |||||
| %Blank & -- & \hangp{8} & -- & \hangp{8} \\ | |||||
| Epigraph & -- & -- & \hangp{8} & -- \\ | |||||
| Introduction & \hangp{7} & \hangp{9} & \hangp{9} & 9 \\ | |||||
| \bottomrule | |||||
| \end{tabular} | |||||
| \end{center} | |||||
| \end{minipage} | |||||
| \vspace{-7\baselineskip}\footnotetext{The contents of this page vary from book to book. In | |||||
| \vdqi this page is blank; in \ei and \ve this page holds a frontispiece; | |||||
| and in \be this page contains three epigraphs.} | |||||
| \vspace{7\baselineskip} | |||||
| \bigskip | |||||
| The design of the front matter in Tufte's books varies slightly from the | |||||
| traditional design of front matter. First, the pages in front matter are | |||||
| traditionally numbered with lowercase roman numerals (e.g., i, ii, iii, | |||||
| iv,~\ldots). Second, the front matter page numbering sequence is usually | |||||
| separate from the main matter page numbering. That is, the page numbers | |||||
| restart at 1 when the main matter begins. In contrast, Tufte has | |||||
| enumerated his pages with arabic numerals that share the same page counting | |||||
| sequence as the main matter. | |||||
| There are also some variations in design across Tufte's four books. The | |||||
| page opposite the full title page (labeled ``frontispiece'' in the above | |||||
| table) has different content in each of the books. In \VDQI, this page is | |||||
| blank; in \EI and \VE, this page holds a frontispiece; and in \BE, this | |||||
| page contains three epigraphs. | |||||
| The dedication appears on page~6 in \vdqi (opposite the introduction), and | |||||
| is placed on its own spread in the other books. In \ve, an epigraph shares | |||||
| the spread with the opening page of the introduction. | |||||
| None of the page numbers (folios) of the front matter are expressed except in | |||||
| \be, where the folios start to appear on the dedication page. | |||||
| \newthought{The full title page} of each of the books varies slightly in | |||||
| design. In all the books, the author's name appears at the top of the | |||||
| page, the title it set just above the center line, and the publisher is | |||||
| printed along the bottom margin. Some of the differences are outlined in | |||||
| the following table. | |||||
| \bigskip | |||||
| \begin{center} | |||||
| \footnotesize | |||||
| \begin{tabular}{lllll} | |||||
| \toprule | |||||
| Feature & \vdqi & \ei & \ve & \be \\ | |||||
| \midrule | |||||
| Author & & & & \\ | |||||
| \quad Typeface & serif & serif & serif & sans serif \\ | |||||
| \quad Style & italics & italics & italics & upright, caps \\ | |||||
| \quad Size & 24 pt & 20 pt & 20 pt & 20 pt \\ | |||||
| \addlinespace | |||||
| Title & & & & \\ | |||||
| \quad Typeface & serif & serif & serif & sans serif \\ | |||||
| \quad Style & upright & italics & upright & upright, caps \\ | |||||
| \quad Size & 36 pt & 48 pt & 48 pt & 36 pt \\ | |||||
| \addlinespace | |||||
| Subtitle & & & & \\ | |||||
| \quad Typeface & -- & -- & serif & -- \\ | |||||
| \quad Style & -- & -- & upright & -- \\ | |||||
| \quad Size & -- & -- & 20 pt & -- \\ | |||||
| \addlinespace | |||||
| Edition & & & & \\ | |||||
| \quad Typeface & sans serif & -- & -- & -- \\ | |||||
| \quad Style & upright, caps & -- & -- & -- \\ | |||||
| \quad Size & 14 pt & -- & -- & -- \\ | |||||
| \addlinespace | |||||
| Publisher & & & & \\ | |||||
| \quad Typeface & serif & serif & serif & sans serif \\ | |||||
| \quad Style & italics & italics & italics & upright, caps \\ | |||||
| \quad Size & 14 pt & 14 pt & 14 pt & 14 pt \\ | |||||
| \bottomrule | |||||
| \end{tabular} | |||||
| \end{center} | |||||
| %\begin{figure*}[p] | |||||
| %\fbox{\includegraphics[width=0.45\textwidth]{graphics/vdqi-title.pdf}} | |||||
| %\hfill | |||||
| %\fbox{\includegraphics[width=0.45\textwidth]{graphics/ei-title.pdf}} | |||||
| %\\\vspace{\baselineskip} | |||||
| %\fbox{\includegraphics[width=0.45\textwidth]{graphics/ve-title.pdf}} | |||||
| %\hfill | |||||
| %\fbox{\includegraphics[width=0.45\textwidth]{graphics/be-title.pdf}} | |||||
| %\end{figure*} | |||||
| \newthought{The tables of contents} in Tufte's books give us our first | |||||
| glimpse of the structure of the main matter. \VDQI is split into two | |||||
| parts, each containing some number of chapters. His other three books only | |||||
| contain chapters---they're not broken into parts. | |||||
| %\begin{figure*}[p] | |||||
| %\fbox{\includegraphics[width=0.45\textwidth]{graphics/vdqi-contents.pdf}} | |||||
| %\hfill | |||||
| %\fbox{\includegraphics[width=0.45\textwidth]{graphics/ei-contents.pdf}} | |||||
| %\\\vspace{\baselineskip} | |||||
| %\fbox{\includegraphics[width=0.45\textwidth]{graphics/ve-contents.pdf}} | |||||
| %\hfill | |||||
| %\fbox{\includegraphics[width=0.45\textwidth]{graphics/be-contents.pdf}} | |||||
| %\end{figure*} | |||||
| \lipsum[21-50] | |||||
| \chapter{On the Use of the \texttt{tufte-book} Document Class} | |||||
| \label{ch:tufte-book} | |||||
| The \texttt{tufte-book} document class is modeled primarily on \BE, since | |||||
| it's the most recent of Tufte's books and the design is (presumably) more | |||||
| refined. | |||||
| This choice of book design has a few important implications: | |||||
| \begin{inparaenum} | |||||
| \item there are no parts---the highest heading level is the chapter; | |||||
| \item the use of a sans serif font for many design elements (especially the | |||||
| title page and epigraphs); and | |||||
| \item \emph{something else---yyy}. | |||||
| \end{inparaenum} | |||||
| \lipsum[1-25] | |||||
| %% | |||||
| % The back matter contains appendices, indices, glossaries, etc. | |||||
| \backmatter | |||||
| \bibliography{sample-handout} | |||||
| \bibliographystyle{plainnat} | |||||
| \end{document} | |||||
| @@ -6,7 +6,7 @@ | |||||
| month = {May}, | month = {May}, | ||||
| edition = {First}, | edition = {First}, | ||||
| place = {Cheshire, Connecticut}, | place = {Cheshire, Connecticut}, | ||||
| isbn = {0961392177} | |||||
| isbn = {0-9613921-7-7} | |||||
| } | } | ||||
| @BOOK{Tufte2001, | @BOOK{Tufte2001, | ||||
| @@ -15,7 +15,7 @@ | |||||
| publisher = {Graphics Press}, | publisher = {Graphics Press}, | ||||
| year = {2001}, | year = {2001}, | ||||
| address = {Cheshire, Connecticut}, | address = {Cheshire, Connecticut}, | ||||
| isbn = {0961392142} | |||||
| isbn = {0-9613921-4-2} | |||||
| } | } | ||||
| @BOOK{Tufte1990, | @BOOK{Tufte1990, | ||||
| @@ -24,7 +24,7 @@ | |||||
| publisher = {Graphics Press}, | publisher = {Graphics Press}, | ||||
| year = {1990}, | year = {1990}, | ||||
| address = {Cheshire, Connecticut}, | address = {Cheshire, Connecticut}, | ||||
| isbn = {0961392118} | |||||
| isbn = {0-9613921-1-8} | |||||
| } | } | ||||
| @BOOK{Tufte1997, | @BOOK{Tufte1997, | ||||
| @@ -1,4 +1,4 @@ | |||||
| \documentclass{tufte-handout} | |||||
| \documentclass[nofonts]{tufte-handout} | |||||
| \usepackage{amsmath} | \usepackage{amsmath} | ||||
| @@ -9,12 +9,26 @@ | |||||
| \usepackage{mcaption} % FIXME move to .cls file | \usepackage{mcaption} % FIXME move to .cls file | ||||
| %\title{An Example of the Usage of the Tufte-Handout Style\thanks{Inspired by Edward~R. Tufte!}} | |||||
| \title{An Example of the Usage of the Tufte-Handout Style} | |||||
| \author{The Tufte-\LaTeX\ Developers} | |||||
| %\date{22 February 2008} % if the \date{} command is left out, the current date will be used | |||||
| \title{An Example of the Usage of the Tufte-Handout Style\thanks{Inspired by Edward~R. Tufte!}} | |||||
| \author[The Tufte-LaTeX Developers]{The Tufte-\LaTeX\ Developers} | |||||
| \date{22 February 2008} % if the \date{} command is left out, the current date will be used | |||||
| \usepackage{helvet} | |||||
| %% | |||||
| % If we have Bergamo and Chantilly fonts (from www.fontsite.com) installed, | |||||
| % use them. Bergamo is a clone of Bembo and Chantilly is similar to Gill Sans. | |||||
| \makeatletter | |||||
| \ifthenelse{\NOT\boolean{@tufte@xetex}} | |||||
| {% | |||||
| \IfFileExists{bergamo.sty}{\usepackage[osf]{bergamo}}{}% Bembo clone | |||||
| \IfFileExists{chantill.sty}{\usepackage{chantill}}{}% Gill Sans clone | |||||
| }{% We're using XeTeX -- load fontspec, etc. | |||||
| \usepackage{fontspec} | |||||
| \usepackage{xltxtra} | |||||
| \setromanfont{Bergamo}% Bembo clone | |||||
| \setsansfont{Chantilly}% Gill Sans clone | |||||
| \setmonofont{Bitstream Vera Sans Mono}% | |||||
| } | |||||
| \makeatother | |||||
| % The following package makes prettier tables. We're all about the bling! | % The following package makes prettier tables. We're all about the bling! | ||||
| \usepackage{booktabs} | \usepackage{booktabs} | ||||
| @@ -28,19 +42,18 @@ | |||||
| \usepackage{fancyvrb} | \usepackage{fancyvrb} | ||||
| \fvset{fontsize=\normalsize} | \fvset{fontsize=\normalsize} | ||||
| % Small sections of multiple columns | |||||
| \usepackage{multicol} | \usepackage{multicol} | ||||
| %\usepackage[savepos]{zref} | |||||
| % Provides paragraphs of dummy text | |||||
| \usepackage{lipsum} | \usepackage{lipsum} | ||||
| \usepackage{url} | |||||
| \urldef{\asyurl}\url{http://asymptote.sf.net/} | |||||
| \begin{document} | \begin{document} | ||||
| \maketitle % this prints the handout title, author, and date | \maketitle % this prints the handout title, author, and date | ||||
| \begin{abstract} | \begin{abstract} | ||||
| \noindent This document describes the Tufte handout \LaTeX\ document style. | \noindent This document describes the Tufte handout \LaTeX\ document style. | ||||
| It also provides examples and comments on the style's use. | It also provides examples and comments on the style's use. | ||||
| @@ -112,7 +125,7 @@ example.) If you do not want to print a bibliography at the end of your | |||||
| document, use the \Verb|\nobibliography| command in its place. | document, use the \Verb|\nobibliography| command in its place. | ||||
| To enter multiple citations at one | To enter multiple citations at one | ||||
| location,\cite{Tufte2006}\cite{Tufte1990} you will need to use multiple | |||||
| location,\cite{Tufte2006,Tufte1990} you will need to use multiple | |||||
| \Verb|\cite| commands: \Verb|\cite{Tufte2006}| \Verb|\cite{Tufte1990}|. Each | \Verb|\cite| commands: \Verb|\cite{Tufte2006}| \Verb|\cite{Tufte1990}|. Each | ||||
| \Verb|\cite| command will generate its own sidenote and its own sidenote | \Verb|\cite| command will generate its own sidenote and its own sidenote | ||||
| number. | number. | ||||
| @@ -132,7 +145,7 @@ use the \Verb|marginfigure| or \Verb|margintable| environments as follows | |||||
| \includegraphics[width=\marginparwidth]{helix} | \includegraphics[width=\marginparwidth]{helix} | ||||
| \caption{This is a margin figure. The helix is defined by | \caption{This is a margin figure. The helix is defined by | ||||
| $x = \cos(2\pi z)$, $y = \sin(2\pi z)$, and $z = [0, 2.7]$. The figure was | $x = \cos(2\pi z)$, $y = \sin(2\pi z)$, and $z = [0, 2.7]$. The figure was | ||||
| drawn using Asymptote (\asyurl).} | |||||
| drawn using Asymptote (\url{http://asymptote.sf.net/}).} | |||||
| \label{fig:marginfig} | \label{fig:marginfig} | ||||
| \end{marginfigure} | \end{marginfigure} | ||||
| \begin{Verbatim} | \begin{Verbatim} | ||||
| @@ -0,0 +1,83 @@ | |||||
| \NeedsTeXFormat{LaTeX2e}[1994/06/01] | |||||
| \ProvidesClass{tufte-book}[2008/11/16 v3.0.0 Tufte-book class] | |||||
| \PassOptionsToPackage{book}{tufte-common} | |||||
| \DeclareOption*{% pass options to tufte-common package and the article class | |||||
| \PassOptionsToPackage{\CurrentOption}{tufte-common} | |||||
| \PassOptionsToClass{\CurrentOption}{book} | |||||
| \PackageInfo{tufte-book}{Passing \CurrentOption\space to `book' class} | |||||
| } | |||||
| \ProcessOptions | |||||
| \LoadClass{book} | |||||
| \RequirePackage{tufte-common} | |||||
| %% | |||||
| % Set up any book-specific stuff now | |||||
| %% | |||||
| % The front matter in Tufte's /Beautiful Evidence/ contains everything up | |||||
| % to the opening page of Chapter 1. The running heads, when they appear, | |||||
| % contain only the (arabic) page number in the outside corner. | |||||
| %\newif\if@mainmatter \@mainmattertrue | |||||
| \renewcommand\frontmatter{% | |||||
| \cleardoublepage | |||||
| \@mainmatterfalse | |||||
| \pagenumbering{arabic} | |||||
| %\pagestyle{plain} | |||||
| \fancyhf{} | |||||
| \if@tufte@twoside | |||||
| \fancyhead[LE,RO]{\thepage} | |||||
| \else | |||||
| \fancyhead[RE,RO]{\thepage} | |||||
| \fi | |||||
| } | |||||
| %% | |||||
| % The main matter in Tufte's /Beautiful Evidence/ doesn't restart the page | |||||
| % numbering---it continues where it left off in the front matter. | |||||
| \renewcommand\mainmatter{% | |||||
| \cleardoublepage | |||||
| \@mainmattertrue | |||||
| % TODO The book should have the book title on the left and the chapter | |||||
| % title on the right. | |||||
| \fancyhf{} | |||||
| \if@tufte@twoside | |||||
| \renewcommand{\chaptermark}[1]{\markboth{##1}{}} | |||||
| \fancyhead[LE]{\thepage\quad\smallcaps{\thetitle}}% book title | |||||
| \fancyhead[RO]{\smallcaps{\leftmark}\quad\thepage}% chapter title | |||||
| \else | |||||
| \fancyhead[RE,RO]{\smallcaps{\thetitle}\quad\thepage}% book title | |||||
| \fi | |||||
| } | |||||
| %% | |||||
| % The back matter contains appendices, indices, glossaries, endnotes, | |||||
| % biliographies, list of contributors, illustration credits, etc. | |||||
| \renewcommand\backmatter{% | |||||
| \if@openright | |||||
| \cleardoublepage | |||||
| \else | |||||
| \clearpage | |||||
| \fi | |||||
| \@mainmatterfalse | |||||
| } | |||||
| %% | |||||
| % If there is a `tufte-book-local.sty' file, load it. | |||||
| \IfFileExists{tufte-book-local.tex} | |||||
| {\input{tufte-book-local.tex}} | |||||
| {} | |||||
| %% | |||||
| % End of file | |||||
| \endinput | |||||
| @@ -0,0 +1,810 @@ | |||||
| \NeedsTeXFormat{LaTeX2e}[1994/06/01] | |||||
| \ProvidesPackage{tufte-common}[2008/11/16 v3.0.0 Common code for the Tufte-LaTeX styles] | |||||
| %% | |||||
| % We use the `xifthen' package to handle our package option switches | |||||
| \RequirePackage{xifthen} | |||||
| %% | |||||
| % `debug' option -- provides more information in the .log file for use in | |||||
| % troubleshooting problems | |||||
| \newboolean{@tufte@debug} | |||||
| \DeclareOption{debug}{\setboolean{@tufte@debug}{true}} | |||||
| %% | |||||
| % `nofonts' option -- doesn't load any fonts | |||||
| % `fonts' option -- tries to load fonts | |||||
| \newboolean{@tufte@loadfonts}\setboolean{@tufte@loadfonts}{true} | |||||
| \DeclareOption{fonts}{\setboolean{@tufte@loadfonts}{true}} | |||||
| \DeclareOption{nofonts}{\setboolean{@tufte@loadfonts}{false}} | |||||
| %% | |||||
| % `nols' option -- doesn't configure letterspacing | |||||
| % `ls' option -- configures letterspacing | |||||
| \newboolean{@tufte@letterspace}\setboolean{@tufte@letterspace}{true} | |||||
| \DeclareOption{ls}{\setboolean{@tufte@letterspace}{true}} | |||||
| \DeclareOption{nols}{\setboolean{@tufte@letterspace}{false}} | |||||
| %% | |||||
| % `book' and `handout' options | |||||
| \newcommand{\@tufte@class}{article}% the base LaTeX class (defaults to the article/handout style) | |||||
| \newcommand{\@tufte@pkgname}{tufte-handout}% the name of the package (defaults to tufte-handout) | |||||
| \DeclareOption{book}{% | |||||
| \renewcommand{\@tufte@class}{book} | |||||
| \renewcommand{\@tufte@pkgname}{tufte-book} | |||||
| \setboolean{@tufte@titlepage}{true} | |||||
| } | |||||
| \DeclareOption{handout}{% | |||||
| \renewcommand{\@tufte@class}{article} | |||||
| \renewcommand{\@tufte@pkgname}{tufte-handout} | |||||
| \setboolean{@tufte@titlepage}{false} | |||||
| } | |||||
| \DeclareOption{article}{% `article' is just an alias for `handout' | |||||
| \renewcommand{\@tufte@class}{article} | |||||
| \renewcommand{\@tufte@pkgname}{tufte-handout} | |||||
| \setboolean{@tufte@titlepage}{false} | |||||
| } | |||||
| %% | |||||
| % `titlepage' option -- creates a full title page with \maketitle | |||||
| \newboolean{@tufte@titlepage} | |||||
| \DeclareOption{titlepage}{\setboolean{@tufte@titlepage}{true}} | |||||
| \DeclareOption{notitlepage}{\setboolean{@tufte@titlepage}{false}} | |||||
| %% | |||||
| % `a4paper' option | |||||
| \newboolean{@tufte@afourpaper} | |||||
| \DeclareOption{a4paper}{\setboolean{@tufte@afourpaper}{true}} | |||||
| %% | |||||
| % `sfsidenotes' option -- typesets sidenotes in sans serif typeface | |||||
| \newboolean{@tufte@sfsidenotes} | |||||
| \DeclareOption{sfsidenotes}{\setboolean{@tufte@sfsidenotes}{true}} | |||||
| %% | |||||
| % `symmetric' option -- puts marginpar space to the outside edge of the page | |||||
| % Note: this option forces the twoside option | |||||
| \newboolean{@tufte@symmetric} | |||||
| \DeclareOption{symmetric}{ | |||||
| \setboolean{@tufte@symmetric}{true} | |||||
| \PassOptionsToClass{twoside}{\@tufte@class} | |||||
| } | |||||
| %% | |||||
| % `justified' option -- uses fully justified text (flush left and flush | |||||
| % right) instead of ragged right. | |||||
| \newboolean{@tufte@justified} | |||||
| \DeclareOption{justified}{\setboolean{@tufte@justified}{true}} | |||||
| % FIXME: should probably specify options not supported like Mittelbach's aipproc.cls | |||||
| \DeclareOption*{\PassOptionsToClass{\CurrentOption}{\@tufte@class}} | |||||
| \ProcessOptions | |||||
| %\LoadClass{\@tufte@class} | |||||
| %% | |||||
| % Detect whether we're in two-side mode or not. (Used to set up running | |||||
| % heads later.) | |||||
| \newboolean{@tufte@twoside} | |||||
| \ifthenelse{\boolean{@twoside}} | |||||
| {\setboolean{@tufte@twoside}{true}} | |||||
| {\setboolean{@tufte@twoside}{false}} | |||||
| %% | |||||
| % Detect if we're using pdfLaTeX | |||||
| \newboolean{@tufte@pdf} | |||||
| \IfFileExists{ifpdf.sty}{% | |||||
| \RequirePackage{ifpdf} | |||||
| \ifthenelse{\boolean{pdf}} | |||||
| {\setboolean{@tufte@pdf}{true}} | |||||
| {\setboolean{@tufte@pdf}{false}} | |||||
| }{% assume we're not using pdfTex? | |||||
| \setboolean{@tufte@pdf}{false} | |||||
| } | |||||
| %% | |||||
| % Detect if we're using XeLaTeX | |||||
| \newboolean{@tufte@xetex} | |||||
| \IfFileExists{ifxetex.sty}{% | |||||
| \RequirePackage{ifxetex} | |||||
| \ifthenelse{\boolean{xetex}} | |||||
| {\setboolean{@tufte@xetex}{true}} | |||||
| {\setboolean{@tufte@xetex}{false}} | |||||
| }{% not using xelatex | |||||
| \setboolean{@tufte@xetex}{false} | |||||
| } | |||||
| %% | |||||
| % Load the `hyperref' package. We will set more options later. | |||||
| % TODO Set nice defaults for hyperref options | |||||
| \ifthenelse{\boolean{@tufte@xetex}} | |||||
| {\RequirePackage[xetex]{hyperref}} | |||||
| {\RequirePackage{hyperref}} | |||||
| \hypersetup{% | |||||
| pdfborder = {0 0 0} | |||||
| } | |||||
| %% | |||||
| % Set page layout geometry | |||||
| \RequirePackage[letterpaper,includemp,width=6.5in,marginparsep=0.375in,marginparwidth=2in]{geometry} | |||||
| \ifthenelse{\boolean{@tufte@afourpaper}} | |||||
| {\geometry{a4paper,includemp,width=170mm,marginparsep=10mm,marginparwidth=50mm}} | |||||
| {} | |||||
| \ifthenelse{\boolean{@tufte@symmetric}} | |||||
| {} | |||||
| {\geometry{asymmetric}} | |||||
| %% | |||||
| % Separation marginpars by a line's worth of space. | |||||
| \setlength\marginparpush{\baselineskip} | |||||
| %% | |||||
| % Font for margin items | |||||
| \ifthenelse{\boolean{@tufte@sfsidenotes}} | |||||
| {\newcommand{\@tufte@marginfont}{\normalfont\scriptsize\sffamily}} | |||||
| {\newcommand{\@tufte@marginfont}{\normalfont\scriptsize}} | |||||
| %% | |||||
| % \RaggedRight allows hyphenation | |||||
| \RequirePackage{ragged2e} | |||||
| \setlength{\RaggedRightRightskip}{\z@ plus 0.08\hsize} | |||||
| %% | |||||
| % Set the justification baesed on the `justified' class option | |||||
| \newcommand{\@tufte@justification}{% | |||||
| \ifthenelse{\boolean{@tufte@justified}} | |||||
| {\justifying} | |||||
| {\RaggedRight} | |||||
| } | |||||
| %% | |||||
| % 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} | |||||
| % TODO this package may be obsolete -- see the changepage package for a replacement | |||||
| % Compute length used for full-width displays | |||||
| \newlength{\@tufte@overhang} | |||||
| \setlength{\@tufte@overhang}{\marginparwidth} | |||||
| \addtolength{\@tufte@overhang}{\marginparsep} | |||||
| %% | |||||
| % Modified \title, \author, and \date commands. These store the | |||||
| % (footnote-less) values in \thetitle, \theauthor, and \thedate, respectively. | |||||
| \newcommand{\thetitle}{}% plain-text-only title | |||||
| \newcommand{\theauthor}{}% plain-text-only author | |||||
| \newcommand{\thepublisher}{}% plain-text-only publisher | |||||
| \newcommand{\thanklesstitle}{}% full title text minus \thanks{} | |||||
| \newcommand{\thanklessauthor}{}% full author text minus \thanks{} | |||||
| \newcommand{\thanklesspublisher}{}% full publisher minus \thanks{} | |||||
| \newcommand{\@publisher}{}% full publisher with \thanks{} | |||||
| \newcommand{\thedate}{\today} | |||||
| % TODO Fix it so that \thanks is not spaced out (with `soul') and can be | |||||
| % used in \maketitle when the `sfsidenotes' option is provided. | |||||
| \renewcommand{\thanks}[1]{\NoCaseChange{\footnote{#1}}} | |||||
| \renewcommand{\title}[2][]{% | |||||
| \gdef\@title{#2}% | |||||
| \begingroup% | |||||
| % TODO store contents of \thanks command | |||||
| \renewcommand{\thanks}[1]{}% swallow \thanks contents | |||||
| \protected@xdef\thanklesstitle{#2}% | |||||
| \endgroup% | |||||
| \ifthenelse{\isempty{#1}}% | |||||
| {\renewcommand{\thetitle}{\thanklesstitle}}% use thankless title | |||||
| {\renewcommand{\thetitle}{#1}}% use provided plain-text title | |||||
| \hypersetup{pdftitle={\thetitle}}% set the PDF metadata title | |||||
| } | |||||
| \renewcommand*{\author}[2][]{% | |||||
| \gdef\@author{#2}% | |||||
| \begingroup% | |||||
| % TODO store contents of \thanks command | |||||
| \renewcommand{\thanks}[1]{}% swallow \thanks contents | |||||
| \protected@xdef\thanklessauthor{#2}% | |||||
| \endgroup% | |||||
| \ifthenelse{\isempty{#1}} | |||||
| {\renewcommand{\theauthor}{\thanklessauthor}}% use thankless author | |||||
| {\renewcommand{\theauthor}{#1}}% use provided plain-text author | |||||
| \hypersetup{pdfauthor={\theauthor}}% set the PDF metadata author | |||||
| } | |||||
| \renewcommand*{\date}[1]{% | |||||
| \gdef\@date{#1}% | |||||
| \begingroup% | |||||
| % TODO store contents of \thanks command | |||||
| \renewcommand{\thanks}[1]{}% swallow \thanks contents | |||||
| \protected@xdef\thedate{#1}% | |||||
| \endgroup% | |||||
| } | |||||
| %% | |||||
| % Provides a \publisher command to set the publisher | |||||
| \newcommand{\publisher}[2][]{% | |||||
| \gdef\@publisher{#2}% | |||||
| \begingroup% | |||||
| \renewcommand{\thanks}[1]{}% swallow \thanks contents | |||||
| \protected@xdef\thanklesspublisher{#2}% | |||||
| \endgroup% | |||||
| \ifthenelse{\isempty{#1}} | |||||
| {\renewcommand{\thepublisher}{\thanklesspublisher}}% use thankless publisher | |||||
| {\renewcommand{\thepublisher}{#1}}% use provided plain-text publisher | |||||
| } | |||||
| % TODO: Test \hypersetup{pdfauthor,pdftitle} with DVI and XeTeX | |||||
| %% | |||||
| % 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 | |||||
| \def\allcapsspacing{\relax} | |||||
| \def\smallcapsspacing{\relax} | |||||
| \newcommand{\allcaps}[1]{\MakeTextUppercase{\allcapsspacing{#1}}} | |||||
| \newcommand{\smallcaps}[1]{\MakeTextLowercase{\textsc{#1}}} | |||||
| \newcommand{\@tufte@loadsoul}{% | |||||
| \IfFileExists{soul.sty}{% | |||||
| \RequirePackage{soul} | |||||
| \sodef\allcapsspacing{\upshape}{0.15em}{0.65em}{0.6em} | |||||
| \sodef\smallcapsspacing{\scshape}{0.075em}{0.5em}{0.6em} | |||||
| }{ | |||||
| \PackageWarningNoLine{\@tufte@pkgname}{Couldn't locate `soul' package.} | |||||
| }% soul not installed... giving up. | |||||
| } | |||||
| % If we're using pdfLaTeX v1.40+, use the letterspace package. | |||||
| % If we're using pdfLaTex < v1.40, use the soul package. | |||||
| % If we're using XeLaTeX, use XeLaTeX letterspacing options. | |||||
| % Otherwise fall back on the soul package. | |||||
| \ifthenelse{\boolean{@tufte@pdf}} | |||||
| {\PackageInfo{\@tufte@pkgname}{ifpdf = true}} | |||||
| {\PackageInfo{\@tufte@pkgname}{ifpdf = false}} | |||||
| \ifthenelse{\boolean{@tufte@xetex}} | |||||
| {\PackageInfo{\@tufte@pkgname}{ifxetex = true}} | |||||
| {\PackageInfo{\@tufte@pkgname}{ifxetex = false}} | |||||
| % Check pdfLaTeX version | |||||
| \def\@tufte@pdftexversion{0} | |||||
| \ifx\normalpdftexversion\@undefined \else | |||||
| \let\pdftexversion \normalpdftexversion | |||||
| \let\pdftexrevision\normalpdftexrevision | |||||
| \let\pdfoutput \normalpdfoutput | |||||
| \fi | |||||
| \ifx\pdftexversion\@undefined \else | |||||
| \ifx\pdftexversion\relax \else | |||||
| \def\@tufte@pdftexversion{6} | |||||
| \ifnum\pdftexversion < 140 | |||||
| \def\@tufte@pdftexversion{5} | |||||
| \fi | |||||
| \fi | |||||
| \fi | |||||
| \ifthenelse{\boolean{@tufte@letterspace}} | |||||
| {% | |||||
| \ifnum\@tufte@pdftexversion<6 | |||||
| % pdfLaTeX version is too old or not using pdfLaTeX | |||||
| \ifthenelse{\boolean{@tufte@xetex}} | |||||
| {% TODO use xetex letterspacing | |||||
| \PackageInfo{\@tufte@pkgname}{XeTeX detected. Reverting to `soul' package for letterspacing.} | |||||
| \@tufte@loadsoul} | |||||
| {% use `soul' package for letterspacing | |||||
| \PackageInfo{\tufte@pkgname}{Old version of pdfTeX detected. Reverting to `soul' package for letterspacing.} | |||||
| \@tufte@loadsoul} | |||||
| \else | |||||
| \IfFileExists{letterspace.sty}{% | |||||
| \PackageInfo{\@tufte@pkgname}{Modern version of pdfTeX detected. Using `letterspace' package.} | |||||
| \RequirePackage{letterspace} | |||||
| % Set up letterspacing (using microtype package) -- requires pdfTeX v1.40+ | |||||
| \renewcommand{\allcapsspacing}[1]{\textls[200]{##1}} | |||||
| \renewcommand{\smallcapsspacing}[1]{\textls[50]{##1}} | |||||
| \renewcommand{\allcaps}[1]{\textls[200]{\MakeTextUppercase{##1}}} | |||||
| \renewcommand{\smallcaps}[1]{\textsc{\MakeTextLowercase{##1}}} | |||||
| }{% microtype failed, check for soul | |||||
| \PackageInfo{\@tufte@pkgname}{Modern version of pdfTeX detected, but `letterspace' package not installed. Reverting to `soul' package for letterspacing.} | |||||
| \@tufte@loadsoul | |||||
| } | |||||
| \fi} | |||||
| {} | |||||
| \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}}} | |||||
| %% | |||||
| % Used for doublespacing, and other linespacing | |||||
| % Note that setspace must be loaded before footmisc or it'll break sidenotes | |||||
| \usepackage{setspace} | |||||
| %% | |||||
| % Transform existing \footnotes into \sidenotes | |||||
| % Sidenote: ``Where God meant footnotes to go.'' ---Tufte | |||||
| \RequirePackage[side,multiple,stable]{footmisc} | |||||
| \providecommand*{\footnotelayout}{\@tufte@marginfont\@tufte@justification} | |||||
| \renewcommand{\footnotelayout}{\@tufte@marginfont\@tufte@justification} | |||||
| % Override footmisc's definition to set the sidenote marks (numbers) inside the | |||||
| % sidenote's text block. | |||||
| \long\def\@makefntext#1{\@textsuperscript{\@tufte@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{\@tufte@marginfont\@tufte@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 | |||||
| \providecommand{\doi}[1]{\textsc{doi:} #1} % pre-defining this so it may be used before the \bibliography command it issued | |||||
| \renewcommand{\cite}[1]{% | |||||
| \@for\@temp@bibkey:=#1\do{% | |||||
| \sidenote{\bibentry{\@temp@bibkey}.}% | |||||
| } | |||||
| } | |||||
| % TODO: Combine sequences of citations so that 2,3,4,6 becomes 2--4,6 | |||||
| % but be careful of hyperref interaction | |||||
| %% | |||||
| % 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{\@tufte@marginfigbox} | |||||
| \newenvironment{marginfigure}[1] | |||||
| [-1.2ex] | |||||
| {\FloatBarrier% process all floats before this point so the figure numbers stay in order. | |||||
| \begin{lrbox}{\@tufte@marginfigbox} | |||||
| \begin{minipage}{\marginparwidth} | |||||
| \@tufte@marginfont | |||||
| \def\@captype{figure} | |||||
| \vspace*{#1} | |||||
| \@tufte@justification | |||||
| } | |||||
| {\end{minipage}% | |||||
| \end{lrbox}% | |||||
| \marginpar{\usebox{\@tufte@marginfigbox}}} | |||||
| %% | |||||
| % Margin table environment | |||||
| \newsavebox{\@tufte@margintablebox} | |||||
| \newenvironment{margintable}[1] | |||||
| [-1.2ex] | |||||
| {\FloatBarrier% process all floats before this point so the figure numbers stay in order. | |||||
| \begin{lrbox}{\@tufte@margintablebox} | |||||
| \begin{minipage}{\marginparwidth} | |||||
| \@tufte@marginfont | |||||
| \def\@captype{table} | |||||
| \vspace*{#1} | |||||
| \@tufte@justification | |||||
| } | |||||
| {\end{minipage}% | |||||
| \end{lrbox}% | |||||
| \marginpar{\usebox{\@tufte@margintablebox}}} | |||||
| %% | |||||
| % Full-width figure | |||||
| \renewenvironment{figure*}[1]% | |||||
| [htbp]% | |||||
| {\@float{figure}[#1]% | |||||
| \ifthenelse{\boolean{@tufte@symmetric}} | |||||
| {\begin{adjustwidth}[]{}{-\@tufte@overhang}} | |||||
| {\begin{adjustwidth}{}{-\@tufte@overhang}} | |||||
| \begin{minipage}{\linewidth}}% | |||||
| {\end{minipage}% | |||||
| \end{adjustwidth}% | |||||
| \end@float} | |||||
| %% | |||||
| % Full-width table | |||||
| \renewenvironment{table*}[1] | |||||
| [htbp]% | |||||
| {\@float{table}[#1]% | |||||
| \ifthenelse{\boolean{@tufte@symmetric}} | |||||
| {\begin{adjustwidth}[]{}{-\@tufte@overhang}} | |||||
| {\begin{adjustwidth}{}{-\@tufte@overhang}} | |||||
| \begin{minipage}{\linewidth}}% | |||||
| {\end{minipage}% | |||||
| \end{adjustwidth}% | |||||
| \end@float} | |||||
| %% | |||||
| % Full-page-width area | |||||
| \newenvironment{fullwidth} | |||||
| {\ifthenelse{\boolean{@tufte@symmetric}} | |||||
| {\begin{adjustwidth}[]{}{-\@tufte@overhang}} | |||||
| {\begin{adjustwidth}{}{-\@tufte@overhang}} | |||||
| } | |||||
| {\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. | |||||
| \ifthenelse{\boolean{@tufte@sfsidenotes}} | |||||
| {\captionsetup{font={sf,scriptsize}}} | |||||
| {\captionsetup{font={rm,scriptsize}}} | |||||
| % if the `justified' option is specified, set the captions in flush left | |||||
| % and flush right | |||||
| \ifthenelse{\boolean{@tufte@justified}} | |||||
| {\captionsetup{justification=justified}} | |||||
| {\captionsetup{justification=raggedright}} | |||||
| %% | |||||
| % If the Palatino typeface (and its math symbol set) are installed, load | |||||
| % them unless the `nofonts' class option was provided, or if we're | |||||
| % compiling with XeLaTeX. | |||||
| \ifthenelse{\boolean{@tufte@loadfonts}\AND\NOT\boolean{@tufte@xetex}}{% | |||||
| \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 unless the `nofonts' class | |||||
| % option was provided, or if we're compiling with XeLaTeX. | |||||
| \ifthenelse{\boolean{@tufte@loadfonts}\AND\NOT\boolean{@tufte@xetex}}{% | |||||
| \IfFileExists{beramono.sty}{% | |||||
| \RequirePackage[T1]{fontenc} | |||||
| \RequirePackage[scaled=0.85]{beramono} | |||||
| }{} | |||||
| }{} | |||||
| %% | |||||
| % Sets up the running heads and folios. | |||||
| \RequirePackage{fancyhdr} | |||||
| % Set the default page style to 'fancy' | |||||
| \pagestyle{fancy} | |||||
| % Set the header/footer width to be the body text block plus the margin | |||||
| % note area. | |||||
| \ifthenelse{\boolean{@tufte@symmetric}} | |||||
| {\fancyhfoffset[LE,RO]{\@tufte@overhang}} | |||||
| {\fancyhfoffset[RE,RO]{\@tufte@overhang}} | |||||
| % The running heads/feet don't have rules | |||||
| \renewcommand{\headrulewidth}{0pt} | |||||
| \renewcommand{\footrulewidth}{0pt} | |||||
| % The 'fancy' page style is the default style for all pages. | |||||
| \fancyhf{} % clear header and footer fields | |||||
| \ifthenelse{\boolean{@tufte@twoside}} | |||||
| {\fancyhead[LE]{\thepage\quad\smallcaps{\theauthor}}% | |||||
| \fancyhead[RO]{\smallcaps{\thetitle}\quad\thepage}} | |||||
| {\fancyhead[RE,RO]{\smallcaps{\thetitle}\quad\thepage}} | |||||
| % The `plain' page style is used on chapter opening pages. | |||||
| % In Tufte's /Beautiful Evidence/ he never puts page numbers at the | |||||
| % bottom of pages -- the folios are unexpressed. | |||||
| \fancypagestyle{plain}{ | |||||
| \fancyhf{} % clear header and footer fields | |||||
| % Uncomment the following five lines of code if you want the opening page | |||||
| % of the chapter to express the folio in the lower outside corner. | |||||
| %\ifthenelse{\boolean{@tufte@twoside}} | |||||
| % {\fancyfoot[LE,RO]{\thepage}} | |||||
| % {\fancyfoot[RE,RO]{\thepage}} | |||||
| } | |||||
| % 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 raggedright and paragraph indentation for document | |||||
| \AtBeginDocument{\@tufte@justification\setlength\parindent{1em}} | |||||
| %% | |||||
| % Prints the list of class options and their states. | |||||
| \newcommand{\typeoutbool}[2]{% | |||||
| \ifthenelse{\boolean{#2}} | |||||
| {\typeout{#1: true}} | |||||
| {\typeout{#1: false}} | |||||
| } | |||||
| \newcommand{\PrintTufteSettings}{% | |||||
| \typeout{-------------------- Tufte-LaTeX settings ----------} | |||||
| \typeoutbool{a4paper}{@tufte@afourpaper} | |||||
| \typeoutbool{load fonts}{@tufte@loadfonts} | |||||
| \typeoutbool{fully-justified}{@tufte@justified} | |||||
| \typeoutbool{letterspacing}{@tufte@letterspace} | |||||
| \typeoutbool{sans-serif sidenotes}{@tufte@sfsidenotes} | |||||
| \typeoutbool{symmetric margins}{@tufte@symmetric} | |||||
| \typeoutbool{titlepage}{@tufte@titlepage} | |||||
| \typeout{----------------------------------------------------} | |||||
| } | |||||
| %% | |||||
| % Color | |||||
| \RequirePackage{xcolor} | |||||
| %% | |||||
| % Produces a full title page | |||||
| \newcommand{\maketitlepage}[0]{% | |||||
| \cleardoublepage | |||||
| { | |||||
| \sffamily | |||||
| \begin{fullwidth} | |||||
| \par\noindent\fontsize{18}{18}\selectfont\textcolor{darkgray}{\allcaps{\thanklessauthor}} | |||||
| \end{fullwidth} | |||||
| \vspace{11.5pc} | |||||
| \begin{fullwidth} | |||||
| \par\noindent\fontsize{36}{36}\selectfont\textcolor{darkgray}{\allcaps{\thanklesstitle}} | |||||
| \end{fullwidth} | |||||
| \vfill | |||||
| \begin{fullwidth} | |||||
| \par\noindent\fontsize{14}{14}\selectfont\allcaps{\thanklesspublisher} | |||||
| \end{fullwidth} | |||||
| } | |||||
| \thispagestyle{empty} | |||||
| \clearpage | |||||
| } | |||||
| %% | |||||
| % Title block | |||||
| \renewcommand{\maketitle}{% | |||||
| \newpage | |||||
| \global\@topnum\z@% prevent floats from being placed at the top of the page | |||||
| \setlength{\parindent}{0pt} | |||||
| \setlength{\parskip}{4pt} | |||||
| \ifthenelse{\boolean{@tufte@sfsidenotes}} | |||||
| {\begingroup | |||||
| % FIXME fails with \thanks | |||||
| \sffamily | |||||
| \par{\Large\allcaps{\@title}} | |||||
| \par{\large\allcaps{\@author}} | |||||
| \par{\large\allcaps{\@date}} | |||||
| \endgroup} | |||||
| {\begingroup | |||||
| \par{\Large\textit{\@title}} | |||||
| \par{\large\textit{\@author}} | |||||
| \par{\large\textit{\@date}} | |||||
| \endgroup} | |||||
| \thispagestyle{plain}% suppress the running head | |||||
| } | |||||
| %% | |||||
| % Title page (if the `titlepage' option was passed to the tufte-handout | |||||
| % class.) | |||||
| \ifthenelse{\boolean{@tufte@titlepage}} | |||||
| {\renewcommand{\maketitle}{\maketitlepage}} | |||||
| {} | |||||
| %% | |||||
| % When \cleardoublepage is called, produce a blank (empty) page -- i.e., | |||||
| % without headers and footers | |||||
| \def\cleardoublepage{\clearpage\if@twoside\ifodd\c@page\else | |||||
| \hbox{} | |||||
| %\vspace*{\fill} | |||||
| %\begin{center} | |||||
| % This page intentionally contains only this sentence. | |||||
| %\end{center} | |||||
| %\vspace{\fill} | |||||
| \thispagestyle{empty} | |||||
| \newpage | |||||
| \if@twocolumn\hbox{}\newpage\fi\fi\fi} | |||||
| %% | |||||
| % Make Tuftian-style section headings and TOC formatting | |||||
| \RequirePackage{titlesec,titletoc} | |||||
| % 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@pkgname}{\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@pkgname}{\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@pkgname}{\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/.} | |||||
| } | |||||
| % Formatting for main TOC (printed in front matter) | |||||
| % {section} [left] {above} {before w/label} {before w/o label} {filler + page} [after] | |||||
| \titlecontents{chapter}% | |||||
| [0em] % distance from left margin | |||||
| {\begin{fullwidth}\fontsize{13pt}{18pt}\selectfont} % above (global formatting of entry) | |||||
| {\contentslabel{2em}\rm\itshape} % before w/label (label = ``Chapter 1'') | |||||
| {\rm\itshape} % before w/o label | |||||
| {\rm\qquad\thecontentspage} % filler + page (leaders and page num) | |||||
| [\vspace{1.5\baselineskip}\end{fullwidth}] % after | |||||
| %\titlecontents{chapter}% | |||||
| % [0em]% distance from left margin | |||||
| % {\fontsize{12pt}{18pt}\selectfont}% above (global formatting of entry) | |||||
| % {\textit}% before w/ label (label = ``Chapter 1'') | |||||
| % {\textit}% before w/o label | |||||
| % {\qquad\thecontentspage}% filler and page (leaders and page num) | |||||
| % [\vspace{1.5\baselineskip}]% after | |||||
| \titleformat{\chapter}% | |||||
| [display]% shape | |||||
| {\relax\begin{fullwidth}}% format applied to label+text | |||||
| {\itshape\fontsize{22}{24}\selectfont\thechapter}% label | |||||
| {0pt}% horizontal separation between label and title body | |||||
| {\fontsize{22}{24}\rm\itshape}% before the title body | |||||
| [\end{fullwidth}]% after the title body | |||||
| %% | |||||
| % A handy command to disable hyphenation for short bits of text. | |||||
| % Borrowed from Peter Wilson's `hyphenat' package. | |||||
| \newlanguage\langwohyphens% define a language without hyphenation rules | |||||
| \newcommand{\nohyphens}[1]{{\language\langwohyphens #1}}% used for short bits of text | |||||
| \newcommand{\nohyphenation}{\language\langwohyphens}% can be used inside environments for longer text | |||||
| %% | |||||
| % If debugging is enabled, print the Tufte-LaTeX options and the list of | |||||
| % files. | |||||
| \ifthenelse{\boolean{@tufte@debug}} | |||||
| {\PrintTufteSettings\listfiles} | |||||
| {} | |||||
| %% | |||||
| % If there is a `tufte-common-local.sty' file, load it up. | |||||
| \IfFileExists{tufte-common-local.sty} | |||||
| {\RequirePackage{tufte-common-local.sty}} | |||||
| {} | |||||
| %% | |||||
| % End of file | |||||
| \endinput | |||||
| @@ -1,552 +1,48 @@ | |||||
| \NeedsTeXFormat{LaTeX2e}[1994/06/01] | \NeedsTeXFormat{LaTeX2e}[1994/06/01] | ||||
| \ProvidesClass{tufte-handout}[2008/11/16 v2.0.1 Tufte-handout class] | |||||
| \ProvidesClass{tufte-handout}[2008/11/16 v3.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} | |||||
| \PassOptionsToPackage{handout}{tufte-common} | |||||
| \DeclareOption*{% pass options to tufte-common package and the article class | |||||
| \PassOptionsToPackage{\CurrentOption}{tufte-common} | |||||
| \PassOptionsToClass{\CurrentOption}{article} | |||||
| \PackageInfo{tufte-handout}{Passing \CurrentOption\space to `article' class} | |||||
| } | } | ||||
| %% | |||||
| % 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 | \ProcessOptions | ||||
| \LoadClass{article} | \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} | |||||
| %% | |||||
| % Detect if we're using pdfLaTeX | |||||
| \IfFileExists{ifpdf.sty}{% | |||||
| \RequirePackage{ifpdf} | |||||
| }{% assume we're not using pdfTex? | |||||
| \newif\ifpdf\pdffalse | |||||
| } | |||||
| %% | |||||
| % Detect if we're using XeLaTeX | |||||
| \IfFileExists{ifxetex.sty}{% | |||||
| \RequirePackage{ifxetex} | |||||
| }{% not using xelatex | |||||
| \newif\ifxetex\xetexfalse | |||||
| } | |||||
| \RequirePackage{tufte-common} | |||||
| % 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} | |||||
| } | |||||
| % Set up any handout-specific stuff now | |||||
| %% | %% | ||||
| % Abstract | % 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 | |||||
| \def\allcapsspacing{\relax} | |||||
| \def\smallcapsspacing{\relax} | |||||
| \newcommand{\allcaps}[1]{\MakeTextUppercase{\allcapsspacing{#1}}} | |||||
| \newcommand{\smallcaps}[1]{\MakeTextLowercase{\textsc{#1}}} | |||||
| \newcommand{\@tufteh@loadsoul}{% | |||||
| \IfFileExists{soul.sty}{% | |||||
| \RequirePackage{soul} | |||||
| \sodef\allcapsspacing{\upshape}{0.15em}{0.65em}{0.6em} | |||||
| \sodef\smallcapsspacing{\scshape}{0.075em}{0.5em}{0.6em} | |||||
| }{ | |||||
| \PackageWarningNoLine{tufte-handout}{Couldn't locate `soul' package.} | |||||
| }% soul not installed... giving up. | |||||
| % TODO The abstract should be printed on its own page of the `titlepage' | |||||
| % option was specified. | |||||
| \renewenvironment{abstract}{% | |||||
| \begin{quotation} | |||||
| \if@tufte@sfsidenotes\begin{sffamily}\fi | |||||
| \begin{small} | |||||
| }{% | |||||
| \end{small} | |||||
| \if@tufte@sfsidenotes\end{sffamily}\fi | |||||
| \end{quotation} | |||||
| } | } | ||||
| % If we're using pdfLaTeX v1.40+, use the letterspace package. | |||||
| % If we're using pdfLaTex < v1.40, use the soul package. | |||||
| % If we're using XeLaTeX, use XeLaTeX letterspacing options. | |||||
| % Otherwise fall back on the soul package. | |||||
| \ifpdf\PackageInfo{tufte-handout}{ifpdf = true} | |||||
| \else\PackageInfo{tufte-handout}{ifpdf = false} | |||||
| \fi | |||||
| \ifxetex\PackageInfo{tufte-handout}{ifxetex = true} | |||||
| \else\PackageInfo{tufte-handout}{ifxetex = false} | |||||
| \fi | |||||
| % Check pdfLaTeX version | |||||
| \def\@tufteh@pdftexversion{0} | |||||
| \ifx\normalpdftexversion\@undefined \else | |||||
| \let\pdftexversion \normalpdftexversion | |||||
| \let\pdftexrevision\normalpdftexrevision | |||||
| \let\pdfoutput \normalpdfoutput | |||||
| \fi | |||||
| \ifx\pdftexversion\@undefined \else | |||||
| \ifx\pdftexversion\relax \else | |||||
| \def\@tufteh@pdftexversion{6} | |||||
| \ifnum\pdftexversion < 140 | |||||
| \def\@tufteh@pdftexversion{5} | |||||
| \fi | |||||
| \fi | |||||
| \fi | |||||
| \ifnum\@tufteh@pdftexversion<6 | |||||
| % pdfLaTeX version is too old or not using pdfLaTeX | |||||
| \ifxetex | |||||
| % TODO use xetex letterspacing | |||||
| \PackageInfo{tufte-handout}{XeTeX detected. Reverting to `soul' package for letterspacing.} | |||||
| \@tufteh@loadsoul | |||||
| \else | |||||
| \PackageInfo{tufte-handout}{Old version of pdfTeX detected. Reverting to `soul' package for letterspacing.} | |||||
| \@tufteh@loadsoul | |||||
| \fi | |||||
| \else | |||||
| \IfFileExists{letterspace.sty}{% | |||||
| \PackageInfo{tufte-handout}{Modern version of pdfTeX detected. Using `letterspace' package.} | |||||
| \RequirePackage{letterspace} | |||||
| % 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 | |||||
| \PackageInfo{tufte-handout}{Modern version of pdfTeX detected, but `letterspace' package not installed. Reverting to `soul' package for letterspacing.} | |||||
| \@tufteh@loadsoul | |||||
| } | |||||
| \fi | |||||
| \DeclareTextFontCommand{\textsmallcaps}{\scshape} | |||||
| \renewcommand{\textsc}[1]{\textsmallcaps{\smallcapsspacing{#1}}} | |||||
| %% | %% | ||||
| % An environment for paragraph-style section | |||||
| % If there is a `tufte-handout-local.sty' file, load it. | |||||
| \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} | |||||
| \providecommand*{\footnotelayout}{\@tufteh@marginfont\@tufteh@justification} | |||||
| \renewcommand{\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}}} | |||||
| \IfFileExists{tufte-handout-local.tex} | |||||
| {\input{tufte-handout-local.tex}} | |||||
| {} | |||||
| %% | %% | ||||
| % 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 | |||||
| } | |||||
| % End of file | |||||
| \endinput | \endinput | ||||