我正在设计一个稍微复杂的布局,使用 ConTeXt 的图层来布置带有文本和边框图形的页眉和页脚。我试图通过使它们响应章节标记来重用我的图层定义。
我目前在页眉文本中标记工作正常。这没有问题。我遇到的问题是,我不知道如何根据标记选择边框图形。
简单来说,我希望能够使用\getmarking[MyMark]
外部图形名称的一部分,以自动将图层边框图形适配到每个部分。
\externalfigure
这个 MWE 非常小,没有任何关于图层或页眉/页脚的内容,只是我尝试使用标记来设置图形文件名。当任何一行被取消注释时,它就变成了 MnWE(最小非工作示例) :
\definemarking[MyMark]
\starttext
\marking[MyMark]{The Title}
Marking: \getmarking[MyMark][current]
% (1) this fails to run
% Graphic: \externalfigure[\getmarking[MyMark][current]]
% (2) this also fails
% Graphic: \externalfigure[{\getmarking[MyMark][current]}]
% (3) also fails, of course, but is closer to what I want to accomplish
% Graphic: \externalfigure[headerfig-\getmarking[MyMark][current]-recto.pdf]
\stoptext
有没有正确的方法可以将里面的文本用作\getmarking
文件名\externalfigure
?如果我有这个,我可以轻松地将其融入我现有的设置中。
我已经调查了 ConTeXt 邮件列表中的相关主题,并且有位于使用变量定义要加载的文件名的方法。但是,这并不能解决我的问题:尝试使用标记来定义变量会导致相同的错误。这会让我仍然手动设置每个部分顶部的变量。虽然不是无法忍受,但仍然让我无法利用已经设置的标记,或使用任何标记逻辑。
根据这些实验,我怀疑问题与膨胀有关。但我对如何处理膨胀了解不够多,甚至无法开始研究这个想法。
(如果其他方法都失败了,我可以手动做一些事情,要么使用变量,要么使用每个部分的一组宏,或者某种硬编码\doiftext
针对每个已知节名的硬编码链,但我忍不住想到必须有某种方法可以将文本从标记中取出并放入我现有图层设置中使用的文件名中。)
答案1
感谢来自阿迪亚尝试一下\fetchmarking
,我找到了这种方法,可以编译并提供预期的功能,但只有当的输出\fetchmarking
首先通过变量“缓冲”时才可以:
\definemarking[MyMark]
\starttext
\marking[MyMark]{section-image}
Does not work as expected, but compiles:
\externalfigure[\expanded{\fetchmarking[MyMark][][current]}]
% This does not compile
% \externalfigure[\fetchmarking[MyMark][][current]]
Works! Not clear why though:
\setvariable{ThoseMarkings}{title}{\fetchmarking[MyMark][][current]}
\externalfigure[\getvariable{ThoseMarkings}{title}]
Also allows string concatenation to get final filename:
\externalfigure[prefix-\getvariable{ThoseMarkings}{title}-suffix]
\stoptext
这解决了我的问题!