ConTeXt:简单项目结构不打开组件文件

ConTeXt:简单项目结构不打开组件文件

我有一个非常简单的 ConTeXt 项目结构,如图所示,基于2013 年手册

/main.tex

\startproject main
\environment layout
\product handbook
\stopproject

/layout.tex

\startenvironment layout
\stopenvironment

/handbook/handbook.tex

\startproduct handbook
\project main
\component intro
\stopproduct

/handbook/intro.tex

\startcomponent intro
\project main
\product handbook
Hello, world!
\stopcomponent

编译 intro.tex 可以按预期工作,但编译 handbook.tex 却不包含 intro 组件。事实上,日志表明intro.tex 甚至没有被打开:

open source     > level 1, order 2, name '../handbook/handbook.tex'
fonts           > preloading latin modern fonts (second stage)
fonts           > 'fallback modern rm 12pt' is loaded
open source     > level 2, order 3, name '../main.tex'
open source     > level 3, order 4, name '../layout.tex'
close source    > level 3, order 4, name '../layout.tex'
close source    > level 2, order 4, name '../main.tex'
close source    > level 1, order 4, name '../handbook/handbook.tex'

我需要在源文件中进行哪些更改才能使此 ConTeXt 功能按预期工作?

是一个类似的问题,但除了一条表明文档不正确的评论外,没有任何答案。

答案1

ConTeXt 从您当前的工作目录开始查找文件,而不是您正在编译的文件的目录。

ConTeXt 只会扫描父目录中的文件,而不会扫描子目录中的文件。(根据 2013 年手册,这显然是有意为之。)但是,这意味着如果您正在编译项目,则必须将工作目录更改为您打算传递给上下文命令的源文件。换句话说,只有context handbook.tex在手册文件夹内才有效。运行类似context handbook/handbook.texcontext ../handbook/handbook.tex(我在问题中尝试执行的操作)之类的操作将无法正确找到文件。这是因为,同样,ConTeXt 不会在子文件夹中查找文件。

在理想情况下,ConTeXt 应该从输入文件的目录开始,然后从那里向上搜索,而不是从当前工作目录开始。但现在,您需要从与文件相同的目录中调用上下文命令。

请注意,此系统还有另一个副作用:您不能将组件存储在产品的子文件夹中。产品必须将其所有组件都放在同一个文件夹中,或者将产品之间共享的组件放在项目的根目录中。

答案2

这不是一个真正的答案,但是对于评论来说有点长。

你可以做

mtxrun --path=FOO --script context BAR.tex

运行上下文BAR.tex,位于FOO

\usepath组件可以位于子目录下,但需要通过或指定路径\usesubpath

文件在父目录中查找(我认为是两级,也许可以配置)。您还可以使用子路径指定组件。

相关内容