ConTeXt:如何对自己的部分进行独立编号?

ConTeXt:如何对自己的部分进行独立编号?

考虑以下 MWE:

\definehead[mysec][section]

\starttext
\startsection[title=Test]

\stopsection
\startmysec[title=Test]

\stopmysec
\stoptext

在本例中,我mysec根据节定义了一个头部(在我的实际用例中,因为我想复制它的格式、目录条目等)。现在这将输出

上下文输出

但是,我希望mysec独立编号(即从 1 开始)。我尝试过:

  • 使用多个键,其中包括resetnumber
  • \resetnumber[mysec]之前有过。

问题:如何获得派生部分的独立编号?

答案1

ConTeXt 中的节标题是分层的。默认层次结构为section-1section-2、 ... ,section-8定义为strc-def.mkiv

\defineprefixset     [\v!all]  [section-1,section-2,section-3,section-4,section-5,section-6,section-7,section-8] []
% [...]
\definesection[\s!section-1] % part
\definesection[\s!section-2] % chapter
\definesection[\s!section-3] % section
\definesection[\s!section-4] % subsection
\definesection[\s!section-5] % subsubsection
\definesection[\s!section-6] % subsubsubsection
\definesection[\s!section-7] % subsubsubsubsection

这些是内部结构。它们使用以下键映射到面向用户的部分section标题\definehead

\definehead
  [\v!part]
  [\c!section=\s!section-1]

\definehead
  [\v!chapter]
  [\c!section=\s!section-2]

\definehead
  [\v!section]
  [\c!section=\s!section-3]

\definehead
  [\v!subsection]
  [\c!section=\s!section-4,
   \c!default=\v!section]

\definehead
  [\v!subsubsection]
  [\c!section=\s!section-5,
   \c!default=\v!subsection]

\definehead
  [\v!subsubsubsection]
  [\c!section=\s!section-6,
   \c!default=\v!subsubsection]

\definehead
  [\v!subsubsubsubsection]
  [\c!section=\s!section-7,
   \c!default=\v!subsubsubsection]

请注意,section键只能作为的一部分进行设置\definehead,不能使用重置\setuphead。因此,当您执行

\definehead[mysec][section]

密钥section设置为section-3,这就是它们共享同一个计数器的原因。因此,原则您可以先定义自己的section,然后将其设置为section新头部的键:

\definesection[mysection]
\definehead[mysec][section=mysection]

但这行不通。原因是部分编号应该是层次结构的一部分,但我们定义的部分不是。因此,让我们选择一个现有的低位编号,例如section-8(实际上未使用):

\definehead[mysec][section=section-8]

如果您希望它们都具有相同的样式,则只需使用以下命令将样式设置在一起setuphead

\setuphead[section, mysec][ ... ]

(在完整的例子中)给出

在此处输入图片描述

哎呀,这不起作用!哪里出错了?好吧,section-8低于section-3,因此每次出现新的时它都会重置section。因此,让我们创建一个不重置任何部分的重置集:

\defineresetset[myreset][][0] 

并将其设置为重置集:

\definehead[mysec][section=section-8, sectionresetset=myreset]

将其添加到上面的例子可得到:

在此处输入图片描述

好多了。

如何处理列表

让我们尝试一个更大的例子,看看列表会发生什么:

\placelist[section,mysec]

在此处输入图片描述

实际情况是,它mysec处于第 8 节级别,因此它在目录中显示为节的子节...子节。要假装它是一个节,我们必须确保其他节级别不会显示在 mysec 的目录中。这可以通过以下方式实现:

\setuplist[mysec][numbersegments=mysec]

这使

在此处输入图片描述

如何处理参考

默认情况下,使用\in[ref:mysec]将给出节号,后跟 mysec 编号。要从引用中删除节号,请使用:

\setupreferencestructureprefix[mysec] [default][prefixsegments=8:8]

这是一个完整的例子:

\defineresetset[myreset][][0] 

\definehead[mysec][section=section-8, sectionresetset=myreset]

\setuplist[mysec][numbersegments=mysec]
\setupreferencestructureprefix[mysec] [default][prefixsegments=8:8]

\setuphead[section, mysec]
          [
            style=\tfa,
            distance=.75\emwidth,
            textdistance=\emwidth plus \emwidth minus .25\emwidth,
            before={\blank[2*big]},
            after=\blank,
          ]



\starttext

\placelist[section, mysec]

\startsection[title=Section, reference=section]

\stopsection
\startmysec[title=My Section]

  Let's check references \in{Section}[section] and \in{My Section}[mysec]
  and \in[mysec2]

\stopmysec
\startsection[title=Section]

\stopsection
\startmysec[title=My Section, reference=mysec]

\stopmysec
\startmysec[title=My Section, reference=mysec2]

\stopmysec

\startsection[title=Section]

\stopsection

\startsection[title=Section]

\stopsection
\startmysec[title=My Section]

\stopmysec
\startmysec[title=My Section]

\stopmysec
\stoptext

少了什么东西。

到目前为止,我假设只有一个节级。那么,当有章节级或小节级时,我们该如何处理呢?最简单的解决方案是劫持section-4级别mysec,并将所有其他节移到下一级。

相关内容