You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:58:12