我对如何生成本书的目录感到困惑。我打算放弃,直接手动生成。作者希望包含大量实际文本中不存在的结构信息,并且不会像在 ConTeXt 中那样让数字“滚动”。
这是期望的效果:
Narrator 1...
FIRST PART: PART SUBTITLE
1). First Poem // First Poem (Spanish title) . . . . . . . . . . . . . . . . . 1
Author of Poem (b. XXXX d. XXYY)
2). Second Poem // Poema Secunda . . . . . . . . . . . . . . . . . . . . . . . 3
Author of Poem
Narrator 2...
3). Third Poem // Third Poem . . . . . . . . . . . . . . . . . . . . . . . . . 5
Author
SECOND PART: Part 2
4). Fourth Poem // Fourth Poem . . . . . . . . . . . . . . . . . . . . . . . . 7
Author
Narrator 3...
我所遇到的问题基本上可以归结为以下几点:
有一个奇怪的“叙述者”概念,似乎不包含或不包含在部分/诗歌结构中。新的部分并不意味着新的“叙述者”,新的“叙述者”也不意味着新的部分。
我需要用翻译标题和作者来强调每个标题,并且要排版得漂亮。
我需要诗歌来继续跨部分计数。
我认为主要有三种方法:
将每首诗设为一章,并使用 自定义外观
\setuphead[chapter][....]
。然后使用\writebetweenlist[chapter]
添加Narrator
和作者信息。\definelist[poem]
使用和创建新列表\definecombinedlist[content][part,poem]
;继续使用\writebetweenlist[poem]
插入作者和叙述者。这似乎是概念上最有效的选项,但我认为我仍然需要大量自定义。忘记所有关于 ConTeXt 的内容,转而使用纯 TeX,使用 eplain 的
writetocentry
系统。让它看起来正确,忘记可维护性。
答案1
我们先从简单的部分开始:如何处理标题翻译和作者。ConTeXt 方法是将它们指定为 的一部分\starthead
,例如,
\startpoem
[title={First Poem}]
[
translation={Primier Poema},
author={Daniel Lyons},
]
...
\stoppoem
为此,我们指定:
\definehead
[poem]
[section]
[alternative=poemtitle]
\defineheadalternative
[poemtitle]
[alternative=horizontal,
renderingsetup=poemtitle]
\startsetups poemtitle
\vbox {
\headnumbercontent. \headtextcontent
\doifsomething{\structureuservariable{translation}}
{\space//\space
\structureuservariable{translation}}
\doifsomething{\structureuservariable{author}}
{\blank \structureuservariable{author}}}
\stopsetups
接下来,你想要诗歌编号不能用新部分重新设置。请注意,我们将一首诗映射到节(而不是章节)。要控制何时重置节计数器,我们需要使用\definestructureresetset
。解释如下这条信息在邮件列表中。为了达到您的目的,您需要。
\setuphead
[part][placehead=yes]
\definestructureresetset[default][0,0,0,1][1]
% The order of these numbers is: part-chapter-section-subsection
% 0 means do not reset the subsequent section number
% 1 means reset.
%
% So, 0,0,0,1 means that do not reset section (which is what we will map poems
% to) at chapter or part.
如何访问列表中的标题翻译和作者。此信息可在使用 的列表中获得\setupstructurelistvariable
。因此,您可以定义:
\define[1]\PoemListTitle
{#1%
{\doifsomething{\structurelistuservariable{translation}}
{\space//\space
\structurelistuservariable{translation}}%
\doifsomething{\structurelistuservariable{author}}
{\crlf \structurelistuservariable{author}}}
剩下的就是叙述者,可以使用 添加\writebetweenlist
。
下面是一个包含迄今为止所有信息的工作示例。我合并了头部和列表的渲染,以删除冗余信息。
\setuphead
[part][placehead=yes]
\definestructureresetset[default][0,0,0,1][1]
% The order of these numbers is: part-chapter-section-subsection
% 0 means do not reset the subsequent section number
% 1 means reset.
%
% So, 0,0,0,1 means that do not reset section (which is what we will map poems
% to) at chapter or part.
\definehead
[poem]
[section]
[alternative=poemtitle]
\defineheadalternative
[poemtitle]
[alternative=horizontal,
renderingsetup=poemtitle]
\define[1]\PoemExtras
% #1: \structureuservariable for heads
% : \structurelistuservariable for lists
{\doifsomething{#1{translation}}
{\space//\space
#1{translation}}%
\doifsomething{#1{author}}
{\crlf #1{author}}}
\startsetups poemtitle
\vbox {
\headnumbercontent. \headtextcontent
\PoemExtras\structureuservariable
}
\stopsetups
\setuplist
[poem]
[textcommand=\PoemListTitle]
\define[1]\PoemListTitle
{#1\PoemExtras\structurelistuservariable}
\starttext
\placelist[part,poem][alternative=c]
\startpart[title={First Part: Part Subtitle}]
\startpoem
[title={First Poem}]
[
translation={Primier Poema},
author={Daniel Lyons},
]
\input ward
\stoppoem
\startpoem
[title={Second Poem}]
[
translation={Poema Secunda},
author={Author of Poem},
]
\input ward
\stoppoem
\stoppart
\startpart
[title={Second Part: Part 2}]
\startpoem
[title={Third Poem}]
[
translation={Poema Tercer},
author={Author of Poem},
]
\input ward
\stoppoem
\stoppart
\stoptext
这使