在许多参考书或百科全书的页面顶部,总会有一个范围,说明给定区域内涵盖的主题,例如:
- 一本百科全书会写上“AB”,表示以“A”或“B”开头的主题将出现在其中。
- 字典的标题会显示“土豚到动物”,表明可以在该特定页面上找到此类主题。
我有一个格式如下的文档:
\part{A}
\chapter{Animals}
\custommacro{Koalas}
\custommacro{Kangaroos}
\chapter{Animation}
\custommacro{Disney}
\custommacro{Japanese}
\custommacro{South American}
\part{B}
\chapter{Beans}
\custommacro{Kidney Beans}
\custommacro{Green Beans}
\custommacro{Jelly Beans}
从这些数据中,我如何显示这类信息?
- 本卷内容涵盖“AB”。
- 有一个特别部分涵盖“动物动画”。
- 有一章专门讨论“迪士尼-南美”。
- 书中某一页包含有关“绿豆-软糖”的部分文章。
答案1
为了解决这个问题,我采用了标记和 列表。标明主题的卷与目录非常相似,所以我使用了该机制。而不是列出全部所包含的部分,只应显示第一个和最后一个。我定义了一个自定义列表替代方案,它正是这样做的。还包含一个额外的检查来捕获只有一个部分元素的情况,以防止输出如下“本部分涵盖 Beans - Beans”。章节摘要使用相同的机制。章节显示在页面的页脚中,并使用标记 机制,无需任何特殊修改即可运行。
使用 键将自定义列表挂接到部分和章节宏中
insidesection
。此键仅适用于 MkIV 分段样式。因此您必须使用\startchapter … \stopchapter
而不是
\chapter{…}
。
设置:
%% only for the screenshot %%%%%%%%%%%%%%%%%%%%%%%%
\setuppapersize [A6] [A4, landscape] %%
\setuparranging [2SIDE] %%
\setuplayout [marking=on, location=middle] %%
\setupbodyfont [16pt] %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setuplist [alternative=ListRange] %% a custom list alternative is used
\setupfootertexts [\setups{footer}]
%% displays the topic of the current page in the footer
\startsetups [footer]
\getmarking [section] [top] --\space
\getmarking [section] [bottom]
\stopsetups
\setuphead [part] [insidesection=\PartIntro, footer=empty]
\setuphead [chapter] [insidesection=\ChapterIntro]
\starttexdefinition PartIntro
This part covers:
\placecontent [list=chapter]
\stoptexdefinition
\starttexdefinition ChapterIntro
This chapter covers:
\placecontent [list=section]
\stoptexdefinition
%% The default list alternatives don't meet the requirements, but it's easy to
%% define a custom one
\definelistalternative
[ListRange]
[renderingsetup=list:ListRange]
%% The default lists print a list of all structure elements, but in this case
%% only the first and last one is desired.
\startsetups [list:ListRange]
%% catch the case of only one chapter per part
\doifelse\structurelistsize1
{\crlf\currentlistentrytitle}
{\doif\currentlistindex1{\crlf\currentlistentrytitle\space--\space}
\doif\currentlistindex\structurelistsize\currentlistentrytitle}
\stopsetups
内容:
\starttext
\noheaderandfooterlines
This volume covers: \placecontent [list=part]
\startpart [title=A]
\startchapter [title=Animals]
\startsection [title=Koalas]
\stopsection
\startsection [title=Kangaroos]
\stopsection
\stopchapter
\startchapter [title=Animation]
\startsection [title=Disney]
\stopsection
\startsection [title=Japanese]
\stopsection
\startsection [title=South American]
\stopsection
\stopchapter
\stoppart
\startpart [title=B]
\startchapter [title=Beans]
\startsection [title=Kidney Beans]
\stopsection
\startsection [title=Green Beans]
\stopsection
\startsection [title=Jelly Beans]
\stopsection
\stopchapter
\stoppart
\stoptext