为什么我的目录在 ConTeXt 中没有出现递归内容?

为什么我的目录在 ConTeXt 中没有出现递归内容?

我正在编写一本有 40 个章节重复结构的教科书。我设置了 TeX 文件来\dorecurse提供该结构,然后使用它\input来将数据输入到每个章节和小节中。这是一个简化的示例:

\starttext
    \dorecurse{40}{%
        \input chapter\recurselevel_metadata
        \chapter{Title}
            \section{Introduction}
                 \input chapter\recurselevel_introduction
            \section{Reading}
                 \input chapter\recurselevel_reading
            \section{Exercises}
                 \input chapter\recurselevel_exercises
    }
\stoptext

例如,文件“chapter1_introduction.tex”包含第 1 章的介绍文本。

我遇到的问题是,虽然某些数据存储在元数据文件中,并且它在章节中正确显示,但它没有正确显示在目录中。

我创建了一个最小的工作示例,不再依赖输入文件,它展示了这个错误:

\setvalue{title1}{Animals}
\setvalue{title2}{Cereals}
\setvalue{title3}{Mountains}

\starttext

    \completecontent

    \dorecurse{3}{%

        \chapter{\getvalue{title\recurselevel}}
            \input knuth
    }

\stoptext

编译后,章节标题正确显示在页面上\chapter,但是无法\completecontent获取值。请注意,我也尝试过简单地使用\define而不是\getvalue,但我看到了同样的错误。

在我的实际情况中,chapter1_metadata文件包含\define\chaptertitleis{Animals},然后\chapter用定义\chapter{\chaptertitleis},并在循环\input chapter\recurselevel_metadata之前被调用。\chapter{\chaptertitleis}\dorecurse

为什么我的目录不能正确呈现?我该如何纠正这个问题?

答案1

\recurselevel是一个全局计数器,因此您可能会遇到扩展问题。一个简单的方法是使用哈希:

\setvalue{title1}{Animals}
\setvalue{title2}{Cereals}
\setvalue{title3}{Mountains}
\starttext
\completecontent
\dorecurse{3}{\chapter{\getvalue{title#1}}\input{knuth}}
\stoptext

但嵌套问题最终会出现。更强大的方法是启用扩展:

\setvalue{title1}{Animals}
\setvalue{title2}{Cereals}
\setvalue{title3}{Mountains}
\setuphead[chapter][expansion=yes]
\starttext
\completecontent
\dorecurse{3}{\chapter{\getvalue{title\recurselevel}}\input{knuth}}
\stoptext

相关内容