我的 ConTeXt 环境中有以下代码:
\startsetups[sectioninfo]
\ss
\rlap{\userpagenumber}
\hfill
§ \getmarking[sectionnumber][current]
\emspace
\bf \getmarking[section][current]
\hfill
\llap{}
\stopsetups
\setupheadertexts[\setups{chapterinfo}][]
[] [\setups{sectioninfo}]
我的目的很简单;我想在左边显示页码,在中间显示章节名称。但是,如果本章中尚未定义章节,它将显示上一章中定义的最后一章节的名称,或再前一章节的名称,等等,这是不理想的。在前言中,由于尚未定义任何章节,因此在标题中看到 § 也是不理想的。
因此我问三个问题:
- 如何有条件地显示某项内容,特别是当某项内容在某种意义上为空白或空时?我认为我主要是指 TeX 意义上的显示,但如果有特定于 ConTeXt 的显示方式,那也是可以的。
- 如何确定是否
\getmarking[section][current]
给我上一章的内容,或者是否有其他参数\getmarking
可以传递以获取最新的章节仅限本章?
如果您能提供任何资源,我将不胜感激!谢谢!
答案1
我找到了一些答案。
对于第一个问题,有一个命令\doiftextelse
。我用它来替换了我对 sectioninfo 的定义,以解决第一部分:
\startsetups[sectioninfo]
\ss
\rlap{\userpagenumber}
\hfill
\doiftextelse{\getmarking[section][current]}
{§ \getmarking[sectionnumber][current]
\emspace
\bf \getmarking[section][current]}
{}
\hfill
\llap{}
\stopsetups
简而言之,\doiftextelse{condition}{true-case}{false-case}
。Wolfgang Schuster 在 NTG-ConTeXt 邮件列表中提供了这个答案。但是,我仍然不知道这样的命令在哪里定义,也不知道在哪里可以学习如何编写它们。这是我非常想要的信息。
至于第二个问题,我不知道我的文档哪里做错了,但我无法创建一个简短的示例,所以一定是我的环境中出了问题。与此同时,我想出了一个似乎可以解决问题的临时解决方案,即:
\setuphead[chapter][after={\marking[section]{}}]
这只是重置每个章节定义上的节标记的廉价方法。它治好了我的症状,但我仍然不确定是什么导致了这种疾病。