# 康奈尔笔记模板调研

## 需求

创建一个康奈尔笔记（Cornell Notes）页面模板：
- 背景使用 SVG
- 内容写在 Markdown 中

---

## 康奈尔笔记布局结构

康奈尔笔记法将一页划分为三个区域：

```
+------------------------+-----------------+
|                        |                 |
|      笔记区            |   关键词区      |
|   （右侧 2/3）         |  （左侧 1/3）   |
|                        |                 |
|                        |                 |
+------------------------+-----------------+
|                                          |
|              总结区（底部）              |
|                                          |
+------------------------------------------+
```

各区域功能：
1. **关键词区（左栏）**：课后写关键词、问题、提示
2. **笔记区（右栏）**：主要记录区，记录讲课/阅读内容
3. **总结区（底部）**：用 1-2 句话概括本页核心

---

## 技术方案

### 方案一：SVG 背景 + Typst 分栏布局

**思路**：SVG 仅作为背景线条（网格/分隔线），内容用 Typst 排版

**实现步骤**：

1. **创建 SVG 背景**
   - 绘制左栏/右栏分隔线（约 1/3 处）
   - 绘制底部总结区分隔线（约底部 15%）
   - 可选：添加横线网格

2. **Markdown 语法设计**
```markdown
::: {#cornell}
bg=images/cornell-bg.svg

[cue]
- 关键词1
- 问题?

[notes]
# 笔记标题
主要内容...

[summary]
本页总结...
:::
```

3. **Typst 实现**
   - 参考现有 `pagebg-impl` 函数
   - 解析三个区块标记 `[cue]`、`[notes]`、`[summary]`
   - 使用 `place()` 或 `grid()` 定位三个区域

**优点**：
- 内容与样式分离
- SVG 背景可复用、易修改
- 符合现有架构（与 pagebg 类似）

**缺点**：
- 需要精确控制三个区域的位置
- Markdown 解析较复杂

---

### 方案二：纯 Typst grid 布局

**思路**：不用 SVG 背景，全部用 Typst `grid()` 实现

```typst
#let cornell(cue, notes, summary) = {
  grid(
    columns: (1fr, 2fr),
    rows: (1fr, auto),
    grid.cell(rowspan: 1, cue),
    grid.cell(rowspan: 1, notes),
    grid.cell(colspan: 2, summary),
  )
}
```

**Markdown 语法**：
```markdown
::: {#cornell}

::: {#cue}
关键词区内容
:::

::: {#notes}
笔记区内容
:::

::: {#summary}
总结区内容
:::

:::
```

**优点**：
- 纯 Typst 实现，更可控
- 无需 SVG 文件

**缺点**：
- 需要嵌套 div 语法
- 背景装饰需额外添加

---

### 方案三：SVG 模板 + 文本层叠

**思路**：SVG 定义完整视觉（包括边框、装饰），Typst 只负责文本定位

```typst
#let cornell-page(cue, notes, summary) = {
  page(
    background: image("cornell-template.svg"),
    {
      // 用 place() 精确定位三个文本区域
      place(left + top, dx: 1cm, dy: 2cm, 
        box(width: 4cm, cue))
      place(left + top, dx: 6cm, dy: 2cm, 
        box(width: 12cm, notes))
      place(left + bottom, dy: -3cm,
        box(width: 18cm, summary))
    }
  )
}
```

**优点**：
- SVG 控制所有视觉元素
- 易于设计复杂的装饰

**缺点**：
- 硬编码位置，不够灵活
- SVG 与 Typst 位置需精确对齐

---

## 推荐方案

**推荐方案一**：SVG 背景 + Typst 分栏布局

理由：
1. 与现有 `pagebg` 架构一致
2. SVG 只负责背景线条/装饰，Typst 负责内容排版
3. 使用 Typst 的 `grid()` 布局更灵活可靠
4. Markdown 语法简洁

---

## 实现要点

### 1. SVG 背景设计

```svg
<svg viewBox="0 0 210 297">
  <!-- 左栏分隔线 (约 1/3 处，70mm) -->
  <line x1="70" y1="20" x2="70" y2="260" 
        stroke="#ccc" stroke-width="0.5"/>
  
  <!-- 底部总结区分隔线 (约距底 40mm) -->
  <line x1="10" y1="260" x2="200" y2="260" 
        stroke="#ccc" stroke-width="0.5"/>
  
  <!-- 可选：横线网格 -->
</svg>
```

### 2. Typst 布局实现

```typst
#let cornell-impl(body, raw-str) = {
  // 解析 bg= 配置
  // 解析 [cue], [notes], [summary] 区块
  
  page(background: image(bg-path)) {
    grid(
      columns: (70mm, 1fr),
      rows: (1fr, 40mm),
      // ... 布局三个区域
    )
  }
}
```

### 3. Markdown 语法

简化版语法（推荐）：
```markdown
::: {#cornell}
bg=images/cornell.svg

## 关键词
- 概念1
- 问题?

---

## 笔记

主要内容...

---

## 总结

本页要点...
:::
```

使用 `---` 分隔三个区域，避免嵌套 div。

---

## 结论

**可行性**：完全可行

**实现难度**：中等
- 需要扩展现有 `pagebg` 机制
- 解析三区块内容需额外逻辑
- SVG 背景制作简单

**建议下一步**：
1. 设计康奈尔笔记 SVG 背景模板
2. 实现 `cornell` Typst 函数
3. 添加 show 规则支持 Markdown 语法
