我正在编写一本有 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