答案1
ConTeXt 中的节标题是分层的。默认层次结构为section-1
、section-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
,并将所有其他节移到下一级。