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)
(remove todo template)
 
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{todo | this page needs to be cleaned up}}
 
  
 
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]
 +
 
 +
\def\currentchapternumber
 +
  {\somenamedheadnumber{chapter}{current}}
 +
 
 +
\def\lastchapternumber
 +
  {\somenamedheadnumber{chapter}{last}}
  
 
\setuppagenumbering
 
\setuppagenumbering
 
   [alternative=doublesided]
 
   [alternative=doublesided]
 
\setupcolors
 
  [state=start]
 
  
 
\setupbackgrounds
 
\setupbackgrounds
Line 22: Line 27:
 
   [\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 47: Line 53:
 
\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
</texcode>
+
</context>
 
 
  
 
== Another Example ==
 
== Another Example ==
 
An example (MkIV) for using Metapost to create thumb indices for chapters.
 
An example (MkIV) for using Metapost to create thumb indices for chapters.
  
<texcode>
+
<context source="yes">
\setuppapersize[A4][A4,oversized]
+
% these first lines are just for wiki layout and visualisation
 +
\setuppapersize[A8][A4] \showframe
 +
\setuppaper[nx=4,ny=4]
 +
\setuparranging[XY]
 +
\usemodule[visual]
  
 
\setuplayout
 
\setuplayout
Line 126: Line 134:
  
 
\starttext  \showframe
 
\starttext  \showframe
\dorecurse{6}{\chapter{Test Chapter #1}
+
\dorecurse{3}{\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
+
     \fakewords{10}{20} \par
 
   }
 
   }
 
}
 
}
 
\stoptext
 
\stoptext
</texcode>
+
</context>
 +
 
 +
[[Category:Sample documents]]
 +
[[Category:Graphics]]

Latest revision as of 08:39, 20 July 2022

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.

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

\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{3}{\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
    \fakewords{10}{20} \par
  }
}
\stoptext