我正在处理文档的 ConTeXt 布局,该文档的章节(而不是部分)应从零开始编号。 正文正在使用从 github 存储库中提取的 markdown 中的 pandoc 进行转换,因此我正在寻找一个可以在之前使用的简单命令\starttext
。
编号结构应如下所示:
类似这样的 MWE 似乎应该可以做我想要的事情,但是输出仍然从 1 开始编号:
\setcounter[chapter][0]
\starttext
\chapter{Zero Unit}
\input knuth
\chapter{One More Time}
\input knuth
\stoptext
使用\setcounter[chapter][-1]
并没有什么效果。
查阅 ConTeXt 手册 (2013),我找到了 的参考\setupheadnumber
。然而这也不起作用,因为如果某个部分有零值数字,编号会因某种原因被抑制:
\setupheadnumber[chapter][-1]
\starttext
\chapter{Zero Unit}
\input knuth
\section{Inner Zero.One}
\chapter{One More Time}
\input knuth
\section{Inner One.One}
\stoptext
该输出尤其糟糕,因为它将第 0 章、第 0.1 节和第 1 章的编号混淆了。
我知道如何使用ownnumber=
分段命令,但这需要为 pandoc 编写一个过滤器来计算并将其嵌入到整个上下文输出中,我真的想避免这种情况。\setupheadnumber
我可以完成 99% 的工作,并手动设置第零章正文中的数字,但我还是想避免对正文进行编程或手动编辑。
是否可以仅使用之前的命令从零开始章节编号\starttext
?
答案1
邮件列表https://www.mail-archive.com/[电子邮件保护]/msg79582.html说不可能将计数器设置为零,但您可以更改外观,使 1 看起来像 0。在我看来,这是一个相当奇怪的解决方案,但它似乎有效:
\defineexpandable[1]\PreviousNumber
{\number\numexpr#1-1\relax}
\defineconversion[PreviousNumber][\PreviousNumber]
\defineconversionset[zerostart][n,PreviousNumber][n]
\setuphead[chapter,section][sectionconversionset=zerostart]
\starttext
\chapter{Zero}
\chapter{One}
\stoptext
自 2018 年 8 月之后的某个时间起,转换zero
已经定义,因此现在您可以使用稍短的转换:
\defineconversionset[zerostart][n,zero][n]
\setuphead[chapter,section][sectionconversionset=zerostart]
\starttext
\chapter{Zero}
\chapter{One}
\stoptext