From 700551422529b539b5d8fef7149881b62e9eb44f Mon Sep 17 00:00:00 2001 From: "Kevin M. Godby" Date: Wed, 15 Apr 2009 16:38:06 +0000 Subject: [PATCH] * Sidenotes and other marginal material now better align with their callout/creation points. (Thanks, Andy!) * Captions are now typeset in the margin space instead of below the figure/table. git-svn-id: https://tufte-latex.googlecode.com/svn/trunk@87 516e2f36-ce3a-0410-bea4-1d4a03f5df72 --- sample-book.pdf | Bin 122489 -> 122485 bytes sample-handout.pdf | Bin 126282 -> 125859 bytes sample-handout.tex | 2 +- tufte-common.sty | 303 +++++++++++++++++++++++++++++++++++++++------ 4 files changed, 266 insertions(+), 39 deletions(-) diff --git a/sample-book.pdf b/sample-book.pdf index 2c51f65ffdf47ec4c4db249005077e6f5741c1c4..c079e46a0dee8d5e6a1bf363dcedad3be95344dc 100644 GIT binary patch delta 6980 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 diff --git a/sample-handout.tex b/sample-handout.tex index c3c49f3..7092737 100644 --- a/sample-handout.tex +++ b/sample-handout.tex @@ -203,7 +203,7 @@ Figure~\ref{fig:fullfig} is an example of the \Verb|figure*| environment and figure~\ref{fig:textfig} is an example of the normal \Verb|figure| environment. \begin{figure*} - \includegraphics{sine.pdf} + \includegraphics[width=\linewidth]{sine.pdf} \caption{This graph shows $y = \sin x$ from about $x = [-10, 10]$. \emph{Notice that this figure takes up the full page width.}} \label{fig:fullfig} diff --git a/tufte-common.sty b/tufte-common.sty index 84f0a0a..36abecd 100644 --- a/tufte-common.sty +++ b/tufte-common.sty @@ -293,12 +293,22 @@ -% Compute length used for full-width displays +% Compute lengths used for full-width displays \newlength{\@tufte@overhang} \setlength{\@tufte@overhang}{\marginparwidth} \addtolength{\@tufte@overhang}{\marginparsep} +\newlength{\@tufte@fullwidth} +\setlength{\@tufte@fullwidth}{\textwidth} +\addtolength{\@tufte@fullwidth}{\marginparsep} +\addtolength{\@tufte@fullwidth}{\marginparwidth} + +\newlength{\@tufte@caption@fill} +\setlength{\@tufte@caption@fill}{\textwidth} +\addtolength{\@tufte@caption@fill}{\marginparsep} + + %% % Modified \title, \author, and \date commands. These store the % (footnote-less) values in \thetitle, \theauthor, and \thedate, respectively. @@ -571,10 +581,11 @@ \let\@temp@last@bibkey\@empty% \@for\@temp@bibkey:=\@tufte@citations\do{\let\@temp@last@bibkey\@temp@bibkey}% \marginpar{% - \vspace*{#1}% + \hbox{}\vspace*{#1}% \@tufte@marginfont% \@tufte@justification% \@tufte@margin@par% use parindent and parskip settings for marginal text + \vspace*{-1\baselineskip}% % Loop through all the bibentries, separating them with semicolons and spaces \setcounter{@tufte@num@bibkeys}{0}% \@for\@temp@bibkeyx:=\@tufte@citations\do{% @@ -643,12 +654,12 @@ \renewcommand\@footnotetext[2][0pt]{% \marginpar{% - \vspace*{#1}% + \hbox{}\vspace*{#1}% \def\baselinestretch {\setspace@singlespace}% \ifthenelse{\boolean{@tufte@loadbidi}}{\if@rl@footnote\@rltrue\else\@rlfalse\fi}{}% \reset@font\footnotesize% \@tufte@margin@par% use parindent and parskip settings for marginal text - \noindent% + \vspace*{-1\baselineskip}\noindent% \protected@edef\@currentlabel{% \csname p@footnote\endcsname\@thefnmark% }% @@ -701,7 +712,7 @@ \let\cite\@tufte@infootnote@cite% use the in-sidenote \cite command \gdef\@tufte@citations{}% clear out any old citations \@tufte@margin@par% use parindent and parskip settings for marginal text - \marginpar{\vspace*{#1}\@tufte@marginfont\@tufte@justification\noindent #2}% + \marginpar{\hbox{}\vspace*{#1}\@tufte@marginfont\@tufte@justification\vspace*{-1\baselineskip}\noindent #2}% \@tufte@reset@par% use parindent and parskip settings for body text \@tufte@print@citations% print any citations \let\cite\@tufte@normal@cite% go back to using normal in-text \cite command @@ -722,10 +733,9 @@ {\FloatBarrier% process all floats before this point so the figure numbers stay in order. \begin{lrbox}{\@tufte@marginfigbox}% \begin{minipage}{\marginparwidth}% - \captionsetup{type=figure}% \@tufte@marginfont% \def\@captype{figure}% - \vspace*{#1}% + \hbox{}\vspace*{#1}% \@tufte@justification% \@tufte@margin@par% } @@ -743,10 +753,9 @@ {\FloatBarrier% process all floats before this point so the figure numbers stay in order. \begin{lrbox}{\@tufte@margintablebox}% \begin{minipage}{\marginparwidth}% - \captionsetup{type=table}% \@tufte@marginfont% \def\@captype{table}% - \vspace*{#1}% + \hbox{}\vspace*{#1}% \@tufte@justification% \@tufte@margin@par% } @@ -757,35 +766,252 @@ } +%% +% A collection of macros to be used with the new Tufte-style float environments + +\newcommand{\floatalignment}{x}% holds the current float alignment (t, b, h, p) +\newcommand{\setfloatalignment}[1]{\renewcommand{\floatalignment}{#1}}% manually sets the float alignment + +% Boxes to temporarily store our float and caption +\newsavebox{\@tufte@figure@box} +\newsavebox{\@tufte@caption@box} + +% Save original LaTeX float environment +\let\@tufte@orig@float\@float +\let\@tufte@orig@endfloat\end@float + +% Save original LaTeX \caption and \label commands +\AtBeginDocument{% + \let\@tufte@orig@caption\caption% + \let\@tufte@orig@label\label% +} + +% Store the caption and label contents +\newcommand{\@tufte@stored@shortcaption}{SHORT CAPTION} +\newcommand{\@tufte@stored@caption}{LONG CAPTION} +\newcommand{\@tufte@stored@label}{LABEL} + +\newcommand{\@tufte@caption}[2][]{% + \ifthenelse{\isempty{#1}} + {\gdef\@tufte@stored@shortcaption{#2}}% + {\gdef\@tufte@stored@shortcaption{#1}}% + \gdef\@tufte@stored@caption{#2}% +} + +\newcommand{\@tufte@label}[1]{% + \gdef\@tufte@stored@label{#1}% +} + +\newcommand{\@tufte@fps}{} + +% TODO make sure new caption and figure code can handle [p] and [h] placements well +% TODO handle the symmetric class option (move caption to other side of verso pages) + +%% +% Redefine the figure environment to place the captions in the margin space + +\renewenvironment{figure}[1][htbp] + {% If the float placement specifier is 'b' and only 'b', then bottom-align the mini-pages, otherwise top-align them. + \renewcommand{\@tufte@fps}{#1}% + \ifthenelse{\equal{#1}{b}\OR\equal{#1}{B}}% + {\renewcommand{\floatalignment}{b}}% + {\renewcommand{\floatalignment}{t}}% + \renewcommand{\caption}[2][]{\@tufte@caption[##1]{##2}}% + \renewcommand{\label}[1]{\@tufte@label{##1}}% + \@tufte@orig@float{figure}[#1]% + \begin{lrbox}{\@tufte@figure@box}% + \begin{minipage}[\floatalignment]{\textwidth}\hbox{}% + } + {% end tfigure + \par\vspace{-\prevdepth}%% TODO: DOUBLE-CHECK FOR SAFETY + \end{minipage}% + \end{lrbox}% + % build the caption box + \begin{lrbox}{\@tufte@caption@box}% + \begin{minipage}[\floatalignment]{\marginparwidth}\hbox{}% + \@tufte@orig@caption[\@tufte@stored@shortcaption]{\@tufte@stored@caption}% + \@tufte@orig@label{\@tufte@stored@label}% + \par\vspace{-\prevdepth}%% TODO: DOUBLE-CHECK FOR SAFETY + \end{minipage}% + \end{lrbox}% + % now typeset the stored boxes + \begin{fullwidth}% + \begin{minipage}[\floatalignment]{\paperwidth}% + \usebox{\@tufte@figure@box}% + \hspace{\marginparsep}% + \smash{\usebox{\@tufte@caption@box}}% + \end{minipage}% + \end{fullwidth}% + \@tufte@orig@endfloat% + % reset commands and temp boxes and captions + \let\caption\@tufte@orig@caption% + \let\label\@tufte@orig@label% + \begin{lrbox}{\@tufte@figure@box}\hbox{}\end{lrbox} + \begin{lrbox}{\@tufte@caption@box}\hbox{}\end{lrbox} + \gdef\@tufte@stored@shortcaption{} + \gdef\@tufte@stored@caption{} + } + + +%% +% Redefine the table environment to place the captions in the margin space + +\renewenvironment{table}[1][htbp] + {% If the float placement specifier is 'b' and only 'b', then bottom-align the mini-pages, otherwise top-align them. + \renewcommand{\@tufte@fps}{#1}% + \ifthenelse{\equal{#1}{b}\OR\equal{#1}{B}}% + {\renewcommand{\floatalignment}{b}}% + {\renewcommand{\floatalignment}{t}}% + \renewcommand{\caption}[2][]{\@tufte@caption[##1]{##2}}% + \renewcommand{\label}[1]{\@tufte@label{##1}}% + \@tufte@orig@float{table}[#1]% + \begin{lrbox}{\@tufte@figure@box}% + \begin{minipage}[\floatalignment]{\textwidth}\hbox{}% + } + {% end table + \par\vspace{-\prevdepth}%% TODO: DOUBLE-CHECK FOR SAFETY + \end{minipage}% + \end{lrbox}% + % build the caption box + \begin{lrbox}{\@tufte@caption@box}% + \begin{minipage}[\floatalignment]{\marginparwidth}\hbox{}% + \@tufte@orig@caption[\@tufte@stored@shortcaption]{\@tufte@stored@caption}% + \@tufte@orig@label{\@tufte@stored@label}% + \par\vspace{-\prevdepth}%% TODO: DOUBLE-CHECK FOR SAFETY + \end{minipage}% + \end{lrbox}% + % now typeset the stored boxes + \begin{fullwidth}% + \begin{minipage}[\floatalignment]{\paperwidth}% + \usebox{\@tufte@figure@box}% + \hspace{\marginparsep}% + \smash{\usebox{\@tufte@caption@box}}% + \end{minipage}% + \end{fullwidth}% + \@tufte@orig@endfloat% + % reset commands and temp boxes and captions + \let\caption\@tufte@orig@caption% + \let\label\@tufte@orig@label% + \begin{lrbox}{\@tufte@figure@box}\hbox{}\end{lrbox} + \begin{lrbox}{\@tufte@caption@box}\hbox{}\end{lrbox} + \gdef\@tufte@stored@shortcaption{} + \gdef\@tufte@stored@caption{} + } + + %% % Full-width figure \renewenvironment{figure*}[1]% [htbp]% - {\@float{figure}[#1]% - \ifthenelse{\boolean{@tufte@symmetric}} - {\ifthenelse{\boolean{@tufte@changepage}}{\begin{adjustwidth*}{}{-\@tufte@overhang}}{\begin{adjustwidth}[]{}{-\@tufte@overhang}}} - {\begin{adjustwidth}{}{-\@tufte@overhang}} - \begin{minipage}{\linewidth}% + {% begin figure* + % If the float placement specifier is 'b' and only 'b', then place the caption above the figure, else place the caption below the figure. + \renewcommand{\@tufte@fps}{#1}% + \ifthenelse{\equal{#1}{b}\OR\equal{#1}{B}}% + {\renewcommand{\floatalignment}{b}}% + {\renewcommand{\floatalignment}{t}}% + \renewcommand{\caption}[2][]{\@tufte@caption[##1]{##2}}% + \renewcommand{\label}[1]{\@tufte@label{##1}}% + \@tufte@orig@float{figure}[#1]% + \begin{lrbox}{\@tufte@figure@box}% + \begin{minipage}[\floatalignment]{\linewidth}\hbox{}% + \begin{fullwidth} }% - {\end{minipage}% - \end{adjustwidth}% - \end@float} + {% end figure* + \hbox{}\par\vspace{-\prevdepth}%% TODO: DOUBLE-CHECK FOR SAFETY + \end{fullwidth}% + \end{minipage}% + \end{lrbox}% + % build the caption box + % TODO use \captionaboveskip and \captionbelowskip for spacing between caption and figure boxes + \begin{lrbox}{\@tufte@caption@box}% + \begin{minipage}[\floatalignment]{\marginparwidth}\hbox{}% + \@tufte@orig@caption[\@tufte@stored@shortcaption]{\@tufte@stored@caption}% + \@tufte@orig@label{\@tufte@stored@label}% + \par\vspace{-\prevdepth}%% TODO: DOUBLE-CHECK FOR SAFETY + \end{minipage}% + \end{lrbox}% + % now typeset the stored boxes + \begin{fullwidth}% + \begin{minipage}[\floatalignment]{\paperwidth}% + \hbox{}% + \ifthenelse{\equal{\floatalignment}{b}} + {% place caption above figure + \hspace{\@tufte@caption@fill}\smash{\usebox{\@tufte@caption@box}}\\ + \usebox{\@tufte@figure@box}% + } + {% place caption below figure + \usebox{\@tufte@figure@box}\\ + \hspace{\@tufte@caption@fill}\smash{\usebox{\@tufte@caption@box}}% + } + \end{minipage}% + \end{fullwidth}% + \@tufte@orig@endfloat% + % reset commands and temp boxes and captions + \let\caption\@tufte@orig@caption% + \let\label\@tufte@orig@label% + \begin{lrbox}{\@tufte@figure@box}\hbox{}\end{lrbox} + \begin{lrbox}{\@tufte@caption@box}\hbox{}\end{lrbox} + \gdef\@tufte@stored@shortcaption{} + \gdef\@tufte@stored@caption{} + } %% % Full-width table -\renewenvironment{table*}[1] +\renewenvironment{table*}[1]% [htbp]% - {\@float{table}[#1]% - \ifthenelse{\boolean{@tufte@symmetric}} - {\ifthenelse{\boolean{@tufte@changepage}}{\begin{adjustwidth*}{}{-\@tufte@overhang}}{\begin{adjustwidth}[]{}{-\@tufte@overhang}}} - {\begin{adjustwidth}{}{-\@tufte@overhang}} - \begin{minipage}{\linewidth}% + {% begin table* + % If the float placement specifier is 'b' and only 'b', then place the caption above the table, else place the caption below the table. + \renewcommand{\@tufte@fps}{#1}% + \ifthenelse{\equal{#1}{b}\OR\equal{#1}{B}}% + {\renewcommand{\floatalignment}{b}}% + {\renewcommand{\floatalignment}{t}}% + \renewcommand{\caption}[2][]{\@tufte@caption[##1]{##2}}% + \renewcommand{\label}[1]{\@tufte@label{##1}}% + \@tufte@orig@float{table}[#1]% + \begin{lrbox}{\@tufte@table@box}% + \begin{minipage}[\floatalignment]{\linewidth}\hbox{}% + \begin{fullwidth} }% - {\end{minipage}% - \end{adjustwidth}% - \end@float} + {% end table* + \hbox{}\par\vspace{-\prevdepth}%% TODO: DOUBLE-CHECK FOR SAFETY + \end{fullwidth}% + \end{minipage}% + \end{lrbox}% + % build the caption box + % TODO use \captionaboveskip and \captionbelowskip for spacing between caption and figure boxes + \begin{lrbox}{\@tufte@caption@box}% + \begin{minipage}[\floatalignment]{\marginparwidth}\hbox{}% + \@tufte@orig@caption[\@tufte@stored@shortcaption]{\@tufte@stored@caption}% + \@tufte@orig@label{\@tufte@stored@label}% + \par\vspace{-\prevdepth}%% TODO: DOUBLE-CHECK FOR SAFETY + \end{minipage}% + \end{lrbox}% + % now typeset the stored boxes + \begin{fullwidth}% + \begin{minipage}[\floatalignment]{\paperwidth}% + \hbox{}% + \ifthenelse{\equal{\floatalignment}{b}} + {% place caption above table + \hspace{\@tufte@caption@fill}\smash{\usebox{\@tufte@caption@box}}\\ + \usebox{\@tufte@table@box}% + } + {% place caption below table + \usebox{\@tufte@table@box}\\ + \hspace{\@tufte@caption@fill}\smash{\usebox{\@tufte@caption@box}}% + } + \end{minipage}% + \end{fullwidth}% + \@tufte@orig@endfloat% + % reset commands and temp boxes and captions + \let\caption\@tufte@orig@caption% + \let\label\@tufte@orig@label% + \begin{lrbox}{\@tufte@table@box}\hbox{}\end{lrbox} + \begin{lrbox}{\@tufte@caption@box}\hbox{}\end{lrbox} + \gdef\@tufte@stored@shortcaption{} + \gdef\@tufte@stored@caption{} + } %% % Full-page-width area @@ -800,18 +1026,19 @@ %% % Format the captions in a style similar to the sidenotes -\RequirePackage[format=default,font={rm,footnotesize},justification=raggedright,singlelinecheck=false]{caption} - -% if the `sfsidenotes' option is specified, set the captions in sf, too. -\ifthenelse{\boolean{@tufte@sfsidenotes}} - {\captionsetup{font={sf,footnotesize}}} - {\captionsetup{font={rm,footnotesize}}} - -% 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}} +\long\def\@caption#1[#2]#3{% + \par% + \addcontentsline{\csname ext@#1\endcsname}{#1}% + {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% + \begingroup + \@parboxrestore + \if@minipage + \@setminipage + \fi + \@tufte@marginfont\@tufte@justification% + \noindent\csname fnum@#1\endcsname: \ignorespaces#3\par + %\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} %% % If we're NOT using XeLaTeX and the `nofonts' class option was NOT provided,