如果命令返回空文本,则内容不同(ConTeXt)

如果命令返回空文本,则内容不同(ConTeXt)

我的 ConTeXt 环境中有以下代码:

\startsetups[sectioninfo]
\ss
  \rlap{\userpagenumber}
  \hfill
  § \getmarking[sectionnumber][current]
  \emspace
  \bf \getmarking[section][current]
  \hfill
  \llap{}
\stopsetups

\setupheadertexts[\setups{chapterinfo}][]
                 []                    [\setups{sectioninfo}]

我的目的很简单;我想在左边显示页码,在中间显示章节名称。但是,如果本章中尚未定义章节,它将显示上一章中定义的最后一章节的名称,或再前一章节的名称,等等,这是不理想的。在前言中,由于尚未定义任何章节,因此在标题中看到 § 也是不理想的。

因此我问三个问题:

  1. 如何有条件地显示某项内容,特别是当某项内容在某种意义上为空白或空时?我认为我主要是指 TeX 意义上的显示,但如果有特定于 ConTeXt 的显示方式,那也是可以的。
  2. 如何确定是否\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]{}}]

这只是重置每个章节定义上的节标记的廉价方法。它治好了我的症状,但我仍然不确定是什么导致了这种疾病。

相关内容