所谓“页边章序号导航”是指在书的页边(边注位置)显示当前页所在章的序号,通常也将此序号使用带底色的矩形或者半圆等修饰一下,便于读者快速定位章的范围,这对一些大部头的书籍尤其有用,如1所展示的效果。
1 实现原理
在stackexchange中给出了一个基本的实现思路:- 首先借助于totcount宏包获取图书总的章数。
- 借助于assoccnt解决了附录会重置章序号问题。
- 使用background宏包将一个矩形或者任意的其他图形作为背景放置到页边。
- 修复了带附录时总章数统计不读的问题。
- 将矩形底色框修改为圆形底色框,似乎更为美观。
- 如果书籍的章数很多,比如超过20章,则章序号线性排列就不太合适了,最好能够设计一个最小章序号宽度的阀值,如果小于这个阀值则考虑更好的算法,比如折回的排列方式。
- vshift的计算应该根据\marginparsep和\marginparwidth自动确定。
% see https://tex.stackexchange.com/questions/202450/show-current-chapter-number-on-each-page-margin-with-appendix % 在\appendix之前执行\cleardoublepage % 在页边显示章节序号 \usepackage[contents={},opacity=1,scale=1,color=white]{background}%将tikz对象置为页面的背景 \usepackage{tikzpagenodes}%定义了页面的text area/header/footer等node \usepackage{totcount}%获取计数器的最大值 \usetikzlibrary{calc} \usepackage{assoccnt}%创建辅助计数器和给定的计数器一起变化 \newif\ifMaterial \definecolor{bgcolor}{rgb}{0,0,1}%页边色块底色 \newlength\LabelSize \setlength\LabelSize{2cm} % auxiliary counter \newcounter{chapshift} %跟踪章序号的变化,即使\appendix之后也可以跟踪(默认的,\appendix会reset chapter counter) \newtotcounter{totalchapters} %记录章的总数 \DeclareAssociatedCounters{chapter}{chapshift,totalchapters} \AtBeginDocument{% \ifnum\totvalue{totalchapters}>0\relax%防止初始没有章的时候报错 \setlength\LabelSize{\dimexpr\textheight/\totvalue{totalchapters}\relax} \ifdim\LabelSize>2cm\relax%TODO没有考虑\LabelSize过小的情况? \global\setlength\LabelSize{2cm} \fi \fi } \newcommand\AddLabels{% \Materialtrue% \AddEverypageHook{% \ifMaterial% \ifodd\value{page} % \backgroundsetup{ angle=90, position={current page.east|-current page text area.north east}, vshift=3pt, hshift=-\thechapshift*\LabelSize+\LabelSize,%TODO是否可以根据hshift超出了\textheight来进行回退处理?可以有效解决\LabelSize过小的情形 contents={% 去掉circle/minimum size将画出矩形 \tikz\node[draw, circle,minimum size=\LabelSize, fill=bgcolor,anchor=west,text width=\LabelSize, align=center,text height=15pt,text depth=23pt,font=\large\sffamily] {\thechapter}; }% } \else \backgroundsetup{ angle=90, position={current page.west|-current page text area.north west}, vshift=-3pt, hshift=-\thechapshift*\LabelSize+\LabelSize, contents={% \tikz\node[draw, circle,minimum size=\LabelSize, fill=bgcolor,anchor=west,text width=\LabelSize, align=center,text height=23pt,text depth=15pt,font=\large\sffamily] {\rotatebox{180}{\thechapter}}; }% } \fi \BgMaterial% \else\relax\fi}% } \AddLabels \chapter{样例章节} \newcommand\RemoveLabels{\Materialfalse}
2 用法
将以上代码加到导言区之后,只需要在第一章的前面增加命令\AddLabels即可,效果如1所示。 图 1: 章序号导航的效果示意3 注意事项
- 适合于双面印刷(twoside)大型书籍的排版,如果是简单的单面文件或者页码比较少的书籍意义不大。
- 虽然在页边画出的是一个圆形,但是裁切完毕后就只剩下一个半圆了。
- 在目录后面和附录前面使用\cleardoublepages命令清理一下,否则可能导致章序号的位置计算失误。
发表评论 取消回复