在Typst中能否判断当前文件是否为「主文件」?
在Typst中实现类似Python
if __name__ == "__main__" 的功能 在多文件Typst项目开发宏或模板时,要让测试/调试代码仅在直接编译该文件时执行,被其他文件#include引入时不执行,可以通过对比当前文件与主编译文件的路径来实现,具体方案如下:
核心实现逻辑
利用Typst内置的两个函数判断当前文件是否为直接编译的主文件:
file():返回当前正在处理的文件的元数据对象,包含path属性root():返回主编译文件的元数据对象,包含path属性
通过对比两者的path是否相等,即可确定是否直接编译当前文件。
代码示例
假设你有一个宏文件my-macros.typ,里面定义了宏并需要添加测试代码:
// 定义你的宏 #let my-macro(arg) = { "处理后的内容:" + arg } // 类似 __main__ 的判断逻辑 #if file().path == root().path { // 仅直接编译此文件时才会执行的测试代码 #my-macro("测试输入") "这是调试输出,仅在直接编译my-macros.typ时显示" }
当你直接编译my-macros.typ时,会显示测试内容;如果在其他文件中用#include "my-macros.typ"引入该文件,测试代码不会执行。
注意事项
- 路径自动解析:无论使用相对还是绝对路径编译,
file().path和root().path都会自动处理路径匹配,无需手动拼接 - 兼容包管理:即使使用Typst的
@preview等包管理机制,此逻辑依然有效,file()始终指向当前代码所在文件,root()指向用户启动编译的主文件
内容的提问来源于stack exchange,提问作者Refreshing Breeze
相关产品推荐
相关产品推荐

