我正在尝试lecture
从基础section
环境创建一个新的环境。
Lecture <number>: <title>
如果提供了标题,我希望它的标题为,Lecture <number>
如果没有提供,我希望它的标题为。这个标题也应该在左页脚中报告。
这是我目前拥有的代码:
\definehead
[lecture]
[section]
\setuphead
[lecture]
[
command=\Lecture,
style=\bfc,
]
\setuplabeltext
[lecture={Lecture}]
\define[2]\Lecture{\ctxlua{
userdata.format_lecture_title({
label = context.labeltext('lecture'),
number = [==[#1]==],
title = [==[#2]==],
})
}}
\setupfootertexts
[\ctxlua{
userdata.format_lecture_title({
label = context.labeltext('lecture'),
number = context.getmarking({'lecturenumber'}),
title = context.getmarking({'lecture'}),
})
}]
[pagenumber]
\startluacode
userdata = userdata or {}
function userdata.format_lecture_title(args)
if args.title and args.title ~= '' then
context('%s %s: %s', args.label, args.number, args.title)
else
context('%s %s', args.label, args.number)
end
end
\stopluacode
\starttext
% Both title and left footer should be 'Lecture 1: Foo'
\startlecture [title={Foo}]
Foo bar baz
\stoplecture
\page
% Both title and left footer should be 'Lecture 2'
\startlecture []
Foo bar baz
\stoplecture
\stoptext
不幸的是,正文中的标题和页脚中的标题都没有正确报告。前者的格式很简单,如下所示Lecture
:
而后者的格式如下Lecture<number><title>
:
我究竟做错了什么?
答案1
以下内容可能会有所改进,但似乎可以满足您的需要:
\definehead
[lecture]
[section]
\setuplabeltext[lecture=Lecture~]
\setuphead
[lecture]
[placehead=yes, bodypartlabel=lecture, command=\Lecture]
\define[2]\Lecture{%
\doiftextelse{#2}{#1: #2}{#1}
}
\define\LectureFooter{%
\doiftextelse
{\headtextcontent}
{\headnumbercontent: \headtextcontent}
{\headnumbercontent}
}
\setupfootertexts
[\LectureFooter]
[pagenumber]
\starttext
% Both title and left footer should be 'Lecture 1: Foo'
\startlecture [title={Foo}]
Foo bar baz
\stoplecture
\page
% Both title and left footer should be 'Lecture 2'
\startlecture []
Foo bar baz
\stoplecture
\stoptext
至于这是如何工作的......Lecture
标题中的部分直接来自 Wiki 部分\setuphead
(https://www.contextgarden.net/Command/setuphead),特别是“设置部件标签”部分。然后我\setuplabeltext
直接查找(https://wiki.contextgarden.net/Command/_setuplabeltextcommand
) 并找到了选项的实际工作原理示例setuphead
。第一个参数是编号,第二个参数是您的章节的标题。这意味着您所需要的只是一个简单的 if 语句,无需 Lua 即可完成。
由于您的 Lua 代码正在运行,因此我随后inspect
查看了您的 args 表的内容。结果发现它并没有发送讲座名称的直接值,而是上下文命令\headnumbercontent
和\headtextcontent
,我将其取出并直接用于页脚。这也解释了为什么您的讲座 1 显示在讲座 2 下。发布\headtextcontent
时还没有改变……您可以通过在代码中更改为来command
查看效果。command
before