Difference between revisions of "Thumb index"

From Wiki
Jump to navigation Jump to search
m
(cleaned up first example)
Line 3: Line 3:
 
The following code is an example of how to draw a graphic on every page of a document. The graphic (a grey rectangle) appears in a different place for each chapter, and the chapter number appears in the rectangle as well. This is often called a thumb index - your thumb can flip the pages of a book while you watch the contents flash past...
 
The following code is an example of how to draw a graphic on every page of a document. The graphic (a grey rectangle) appears in a different place for each chapter, and the chapter number appears in the rectangle as well. This is often called a thumb index - your thumb can flip the pages of a book while you watch the contents flash past...
  
<texcode>
 
% by Hans Hagen, of course :-)
 
  
\unprotected \def\rawsectionnumber#1{\countervalue{\??se#1}} % will be in kernel
+
<context source="yes">
 +
% these first lines are just for wiki layout and visualisation
 +
\setuppapersize[A8][A5,landscape] \showframe
 +
\setuppaper[nx=4,ny=2]
 +
\setuparranging[XY]
 +
\usemodule[visual]
  
\setuppagenumbering
+
\def\currentchapternumber
  [alternative=doublesided]
+
   {\somenamedheadnumber{chapter}{current}}
 
 
\setupcolors
 
  [state=start]
 
 
 
\setupbackgrounds
 
  [page]
 
  [background=thumbs]
 
 
 
\defineoverlay
 
   [thumbs]
 
  [\setups{thumbs}]
 
 
 
\def\NOfChapters{4} % i need to make this one available
 
 
 
\startsetups thumbs
 
 
 
    \definemeasure[thumbheight][\dimexpr\paperheight/\NOfChapters\relax]
 
 
 
    \vbox to \paperheight \bgroup
 
        \vskip \rawsectionnumber{section-2} \measure{thumbheight}
 
        \vskip -1                          \measure{thumbheight}
 
        \doifoddpageelse\hfill\donothing
 
        \framed
 
            [background=color,
 
              backgroundcolor=darkgray,
 
              frame=off,
 
              foregroundcolor=white,
 
              height=\measure{thumbheight},width=1cm]
 
            {\bfa \rawsectionnumber{section-2}}
 
        \doifoddpageelse\donothing\hfill
 
        \vss
 
    \egroup
 
 
 
\stopsetups
 
 
 
\starttext
 
  
\chapter{first}  \dorecurse{10}{\input tufte  }
+
\def\lastchapternumber
\chapter{second} \dorecurse{10}{\input davis  }
+
  {\somenamedheadnumber{chapter}{last}}
\chapter{third} \dorecurse{10}{\input zapf  }
 
\chapter{fourth} \dorecurse{10}{\input bryson }
 
 
 
\stoptext
 
</texcode>
 
 
 
 
 
<context>
 
% by Hans Hagen, of course :-)
 
 
 
\unprotected \def\rawsectionnumber#1{\countervalue{\??se#1}} % will be in kernel
 
  
 
\setuppagenumbering
 
\setuppagenumbering
 
   [alternative=doublesided]
 
   [alternative=doublesided]
 
\setupcolors
 
  [state=start]
 
  
 
\setupbackgrounds
 
\setupbackgrounds
Line 75: Line 28:
 
   [\setups{thumbs}]
 
   [\setups{thumbs}]
  
\def\NOfChapters{4} % i need to make this one available
+
\newdimen\thumbheight
  
 
\startsetups thumbs
 
\startsetups thumbs
 
+
    \ifnum \lastchapternumber > 0
    \definemeasure[thumbheight][\dimexpr\paperheight/\NOfChapters\relax]
+
        \thumbheight=\dimexpr\paperheight/\lastchapternumber\relax
 
+
    \fi
 
     \vbox to \paperheight \bgroup
 
     \vbox to \paperheight \bgroup
         \vskip \rawsectionnumber{section-2} \measure{thumbheight}
+
         \vskip \currentchapternumber \thumbheight
         \vskip -1                           \measure{thumbheight}
+
         \vskip -1                   \thumbheight
 
         \doifoddpageelse\hfill\donothing
 
         \doifoddpageelse\hfill\donothing
 
         \framed
 
         \framed
 
             [background=color,
 
             [background=color,
               backgroundcolor=darkgray,
+
               backgroundcolor=blue,
 
               frame=off,
 
               frame=off,
 
               foregroundcolor=white,
 
               foregroundcolor=white,
               height=\measure{thumbheight},width=1cm]
+
               height=\thumbheight,
             {\bfa \rawsectionnumber{section-2}}
+
              width=5mm]
 +
             {\bfa \currentchapternumber}
 
         \doifoddpageelse\donothing\hfill
 
         \doifoddpageelse\donothing\hfill
 
         \vss
 
         \vss
Line 100: Line 54:
 
\starttext
 
\starttext
  
\chapter{first\dorecurse{10}{\input tufte  }
+
\dorecurse{4}
\chapter{second} \dorecurse{10}{\input davis  }
+
  {\chapter{\fakewords{1}{5}}
\chapter{third}  \dorecurse{10}{\input zapf   }
+
   \fakewords{50}{100}}
\chapter{fourth} \dorecurse{10}{\input bryson }
 
  
 
\stoptext
 
\stoptext

Revision as of 08:32, 20 July 2022


TODO: this page needs to be cleaned up (See: To-Do List)


The following code is an example of how to draw a graphic on every page of a document. The graphic (a grey rectangle) appears in a different place for each chapter, and the chapter number appears in the rectangle as well. This is often called a thumb index - your thumb can flip the pages of a book while you watch the contents flash past...


% these first lines are just for wiki layout and visualisation
\setuppapersize[A8][A5,landscape] \showframe
\setuppaper[nx=4,ny=2]
\setuparranging[XY]
\usemodule[visual]

\def\currentchapternumber
   {\somenamedheadnumber{chapter}{current}}

\def\lastchapternumber
   {\somenamedheadnumber{chapter}{last}}

\setuppagenumbering
   [alternative=doublesided]

\setupbackgrounds
   [page]
   [background=thumbs]

\defineoverlay
   [thumbs]
   [\setups{thumbs}]

\newdimen\thumbheight

\startsetups thumbs
     \ifnum \lastchapternumber > 0
        \thumbheight=\dimexpr\paperheight/\lastchapternumber\relax
     \fi
     \vbox to \paperheight \bgroup
         \vskip \currentchapternumber \thumbheight
         \vskip -1                    \thumbheight
         \doifoddpageelse\hfill\donothing
         \framed
             [background=color,
              backgroundcolor=blue,
              frame=off,
              foregroundcolor=white,
              height=\thumbheight,
              width=5mm]
             {\bfa \currentchapternumber}
         \doifoddpageelse\donothing\hfill
         \vss
     \egroup

\stopsetups

\starttext

\dorecurse{4}
 {\chapter{\fakewords{1}{5}}
  \fakewords{50}{100}}

\stoptext

Another Example

An example (MkIV) for using Metapost to create thumb indices for chapters.

\setuppapersize[A4][A4,oversized]

\setuplayout
  [width=middle,
   % margin=\dimexpr\backspace-\margindistance\relax
   location=middle]

\definecolor[chap_frame][g=1,t=1,a=12]
\definecolor[sect_frame][b=1,t=1,a=12]
\definecolor[textcolor] [r=1,t=1,a=12]

\startuseMPgraphic{chapter thumb}
  path chap_frame, sect_frame ;  pair pos,a,b ;  picture text ;

  if  \somenamedheadnumber{chapter}{current} > 0 :
     curr_chap := \somenamedheadnumber{chapter}{current} ; 
  else :
     curr_chap := 1 ;
  fi;
  if \somenamedheadnumber{chapter}{last} > 0 :
     last_chap := \somenamedheadnumber{chapter}{last} ;
  else :
     last_chap := 1 ;
  fi;
  if \somenamedheadnumber{section}{current} > 0 : 
     curr_sect := \somenamedheadnumber{section}{current} ; 
  else: 
     curr_sect := 1 ;
  fi;
  if \somenamedheadnumber{section}{last} > 0 :
     last_sect := \somenamedheadnumber{section}{last};
  else:
     last_sect := 1;
  fi;  

  skip   := TextHeight * (curr_chap-1)/last_chap ;
  height := TextHeight/last_chap ;
  sskip  := height*curr_sect/last_sect ;
 
  text   := textext("\ssbfb\textcolor Chapter\enspace\getmarking[chapternumber]");

  StartPage ;
    chap_frame := fullsquare xyscaled(RightMarginWidth,height) ;

    a := ulcorner chap_frame ;
    b := urcorner chap_frame ;

    sect_frame := a--b--(xpart b,ypart b-sskip)--(xpart a,ypart a-sskip)--cycle;

    pos := urcorner Field[Text][RightMarginSeparator] -
           ulcorner chap_frame - (0,skip);

    fill chap_frame shifted pos withcolor \MPcolor{chap_frame};
    unfill sect_frame shifted pos withcolor white ;
    fill sect_frame shifted pos withcolor \MPcolor{sect_frame};
    draw text rotated 90 shifted pos ;
  StopPage ;
\stopuseMPgraphic


\defineoverlay[chapter thumb][\useMPgraphic{chapter thumb}]

\setupbackgrounds[page][background=chapter thumb]


\starttext  \showframe
\dorecurse{6}{\chapter{Test Chapter #1}
  Chapter \someheadnumber[chapter][current] of
  \someheadnumber[chapter][last]
  \dorecurse{9}{\section{Test Section}
    Section \someheadnumber[section][current] of
    \someheadnumber[section][last] \blank
    \input tufte \par \input knuth \par
  }
}
\stoptext