Difference between revisions of "Thumb index"

From Wiki
Jump to navigation Jump to search
(The example in MKIV does not work due to the fact that in the first run the headnumbers are not there yet, so the numeric variables need to get a defined value first. Willi)
m (\somestructureheadnumber renamed as \someheadnumber)
Line 127: Line 127:
 
\starttext  \showframe
 
\starttext  \showframe
 
\dorecurse{6}{\chapter{Test Chapter #1}
 
\dorecurse{6}{\chapter{Test Chapter #1}
   Chapter \somestructureheadnumber[chapter][current] of
+
   Chapter \someheadnumber[chapter][current] of
   \somestructureheadnumber[chapter][last]
+
   \someheadnumber[chapter][last]
 
   \dorecurse{9}{\section{Test Section}
 
   \dorecurse{9}{\section{Test Section}
     Section \somestructureheadnumber[section][current] of
+
     Section \someheadnumber[section][current] of
     \somestructureheadnumber[section][last] \blank
+
     \someheadnumber[section][last] \blank
 
     \input tufte \par \input knuth \par
 
     \input tufte \par \input knuth \par
 
   }
 
   }

Revision as of 14:44, 4 July 2013


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...

% by Hans Hagen, of course :-)

\unprotected \def\rawsectionnumber#1{\countervalue{\??se#1}} % will be in kernel

\setuppagenumbering
   [alternative=doublesided]

\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  }
\chapter{second} \dorecurse{10}{\input davis  }
\chapter{third}  \dorecurse{10}{\input zapf   }
\chapter{fourth} \dorecurse{10}{\input bryson }

\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