Skip to content

模板支持创建子文档 #18119

Description

@Achuan-2

您在什么场景下需要这个功能?

思源现有的文档模板仅能生成单篇文档内容,无法在应用模板时自动创建嵌套子文档

搭建标准化知识库、项目模板、阅读笔记、课程体系时,固定多层级子文档(如「资料、复盘、附件、清单」)需要手动逐个新建、重复操作极多

描述最优解决方案

新增一个模板函数CreateDocTree

  • 支持创建多级子文档
  • 支持指定每一级的文档模板,可调用已有模板,也可以调用本模板文件定义的子文档模板内容(使用define...end语法)
  • 插入模板时自动创建多级子文档

还要有一个函数用于渲染特定子文档为块引用文本,方便制作MOC管理子文档

一些场景需要禁用子文档生成,仅在文档插入模板时生效

  • 预览模板时
  • 数据库模板
  • 日记路径模板

导出父文档,支持选择是否导出父文档与子文档内容为模板,方便复用

示例:

createDocTree:创建多级子文档树

支持在插入模板时,以当前文档为父节点自动创建多级子文档。

函数签名:

createDocTree <tree_definition>

tree_definition 是一个嵌套的字典结构,每个节点可以指定文档标题、使用的模板(已有模板文件名,或本模板内用 define...end 定义的子模板)、以及子节点列表。

示例一:创建固定子文档(不带模板)

.action{createDocTree (list
  (dict "title" "📁 资料")
  (dict "title" "🔁 复盘")
  (dict "title" "📎 附件")
  (dict "title" "✅ 清单")
)}

示例二:引用已有模板文件创建子文档

.action{createDocTree (list
  (dict "title" "📁 资料"   "template" "资料模板.md")
  (dict "title" "🔁 复盘"   "template" "复盘模板.md")
  (dict "title" "✅ 清单"   "template" "清单模板.md")
)}

示例三:使用 define...end 在本模板内定义子文档内容,减少外部模板文件依赖

.action{define "子文档-资料"}
## 资料来源

## 关键摘录
.action{end}

.action{define "子文档-复盘"}
## 做得好的地方

## 需要改进
.action{end}

.action{createDocTree (list
  (dict "title" "📁 资料" "define" "子文档-资料")
  (dict "title" "🔁 复盘" "define" "子文档-复盘")
)}

示例四:多层级嵌套子文档(如课程体系)

.action{createDocTree (list
  (dict "title" "第一章"
    "children" (list
      (dict "title" "1.1 概念")
      (dict "title" "1.2 实践")
    )
  )
  (dict "title" "第二章"
    "children" (list
      (dict "title" "2.1 概念")
      (dict "title" "2.2 实践")
    )
  )
)}

renderDocRef:将子文档渲染为块引用

用于在父文档中生成指向各子文档的块引用列表,方便制作 MOC(内容地图)。

函数签名:

renderDocRef <query_mode> [options]

示例一:渲染当前文档的直接子文档为块引用列表

.action{range $doc := renderDocRef "children" .id}
- ((.action{$doc.RootID} ".action{$doc.HPath}"))
.action{end}

示例二:指定子文档路径前缀渲染

.action{renderDocRef "path" "/第一章/1.1 概念"}

描述候选解决方案

父文档右键菜单选择创建副本,支持选择是否连同子文档一起创建,方便在思源手动创建模板文档,后进行复用

其他信息

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions