诗集目录(ConTeXt)

诗集目录(ConTeXt)

我对如何生成本书的目录感到困惑。我打算放弃,直接手动生成。作者希望包含大量实际文本中不存在的结构信息,并且不会像在 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...

我所遇到的问题基本上可以归结为以下几点:

  1. 有一个奇怪的“叙述者”概念,似乎不包含或不包含在部分/诗歌结构中。新的部分并不意味着新的“叙述者”,新的“叙述者”也不意味着新的部分。

  2. 我需要用翻译标题和作者来强调每个标题,并且要排版得漂亮。

  3. 我需要诗歌来继续跨部分计数。

我认为主要有三种方法:

  1. 将每首诗设为一章,并使用 自定义外观\setuphead[chapter][....]。然后使用\writebetweenlist[chapter]添加Narrator和作者信息。

  2. \definelist[poem]使用和创建新列表\definecombinedlist[content][part,poem];继续使用\writebetweenlist[poem]插入作者和叙述者。这似乎是概念上最有效的选项,但我认为我仍然需要大量自定义。

  3. 忘记所有关于 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

这使

在此处输入图片描述

相关内容