1
0
Files
PPTX/docs/templates/external-library.md
lanyuanxiaoyao 124ef0e5ce refactor: 重构文档结构,采用渐进式信息披露模式
将 README.md 拆分为多个专题文档,减少认知负荷:
- 用户文档迁移到 docs/ (用户指南、元素、模板、参考等)
- 开发文档迁移到 docs/development/ (架构、模块、规范)
- README.md 精简至 ~290 行,仅保留概览和导航
- 删除 README_DEV.md,内容已迁移
- 归档 OpenSpec 变更 refactor-docs-progressive-disclosure
2026-03-06 15:11:36 +08:00

193 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 外部模板库
外部模板库是一个包含多个模板的 YAML 文件,适合跨文档复用和团队共享。
## 创建模板库文件
创建模板库文件 `templates.yaml`
```yaml
# 模板库元数据(必需)
metadata:
size: "16:9" # 必需:模板库尺寸,必须与使用它的文档一致
description: "公司标准模板库" # 可选:描述信息
fonts: # 可选:模板库字体主题
template-title:
family: "cjk-sans"
size: 44
bold: true
color: "#2c3e50"
template-body:
family: "sans"
size: 20
color: "#34495e"
fonts_default: "@template-body" # 可选:模板库默认字体
# 模板定义(必需)
templates:
title-slide:
description: "标题页模板"
vars:
- name: title
required: true
- name: subtitle
required: false
default: ""
elements:
- type: text
box: [1, 2, 8, 1]
content: "{title}"
font: "@template-title" # 引用模板库字体
- type: text
box: [1, 3.5, 8, 0.5]
content: "{subtitle}"
visible: "{subtitle != ''}"
font:
parent: "@template-title"
size: 24
align: center
content-slide:
description: "内容页模板"
vars:
- name: title
required: true
- name: content
required: true
elements:
- type: text
box: [1, 1, 8, 0.8]
content: "{title}"
font:
parent: "@template-title"
size: 32
- type: text
box: [1, 2, 8, 3]
content: "{content}"
# 未指定 font 时使用 fonts_default
```
## 重要说明
### 1. metadata 字段是必需的
- `metadata.size` 必须指定("16:9" 或 "4:3"
- 模板库的 size 必须与使用它的文档 size 一致,否则会报错
### 2. 字体主题系统
- 模板库可以定义自己的字体主题(`metadata.fonts`
- 文档可以引用模板库的字体(跨域引用)
- 模板库不能引用文档的字体(单向引用)
- 模板库的 `fonts_default` 只能引用模板库内部字体
### 3. 字体级联规则
- 模板元素未指定字体时,使用模板库的 `fonts_default`
- 如果模板库没有 `fonts_default`,使用文档的 `fonts_default`
- 如果都没有,使用系统默认字体
## 使用外部模板库
在命令行中指定模板库文件:
```bash
uv run yaml2pptx.py convert presentation.yaml output.pptx --template ./templates.yaml
```
在 YAML 文件中引用模板:
```yaml
slides:
- template: title-slide
vars:
title: "我的演示文稿"
subtitle: "使用外部模板库"
- template: content-slide
vars:
title: "第一章"
content: "这是内容"
```
## 模板库特性
- 单个文件包含多个模板
- 支持模板库元数据description、version、author
- 每个模板可以有独立的 description
- 便于版本控制和分发
- 支持相对路径的图片资源(相对于模板库文件所在目录)
## 模板库文件结构
```yaml
# 顶层元数据(可选)
description: "模板库描述"
version: "版本号"
author: "作者"
# 模板定义(必需)
templates:
模板名称1:
description: "模板描述(可选)"
vars: [...]
elements: [...]
模板名称2:
description: "模板描述(可选)"
vars: [...]
elements: [...]
```
## 模板 description 字段
模板可以包含可选的 `description` 字段,用于描述模板的用途和设计意图:
```yaml
templates:
title-slide:
description: "用于章节标题页的模板,包含主标题和副标题"
vars:
- name: title
required: true
elements:
- type: text
box: [1, 2, 8, 1]
content: "{title}"
font:
size: 44
bold: true
```
## 资源路径解析
模板库中的图片资源使用相对于模板库文件所在目录的路径:
```yaml
# templates.yaml 所在目录:/path/to/templates/
templates:
logo-slide:
elements:
- type: image
src: "images/logo.png" # 相对于 templates.yaml 所在目录
box: [1, 1, 2, 2]
```
## 与内联模板的对比
| 特性 | 内联模板 | 外部模板库 |
|------|---------|-----------|
| 定义位置 | 源文件中 | 独立文件 |
| 适用场景 | 单文档使用 | 跨文档复用 |
| 命令行参数 | 无需 | 需要 `--template` |
| 模板间引用 | 不支持 | 支持 |
| 字体主题 | 使用文档字体 | 可定义独立字体 |
## 相关文档
- [内联模板](inline.md) - 在源文件中定义模板
- [混合模式](mixing-mode.md) - 模板与自定义元素组合
- [字体主题系统](../fonts.md) - 字体配置和跨域引用
[返回文档索引](../README.md)