书砚 插件开发指南 适配 v1.0.0 · PySide2 返回首页
书砚 / 插件开发指南 / 进阶能力

进阶能力

本章介绍书砚的专业导出 / 导入能力,以及编辑器内置的 Markdown 快捷插入与预览——这些能力插件同样可以调用。

导出功能:TXT

书砚支持导出和导入功能,可提供专业的 TXT、Markdown 输出格式,并具备智能导入功能。

封面与统计

开头自动生成书名、描述、总字数和导出日期,例如:

《修仙录》 一个小和尚下山的故事 共 3 章 · 55 字 生成于 2026-10-02

目录页

按卷分组 + 章节序号,导出时可开关(add_index)。

正文首行缩进

每段自动加 2 个全角空格(  ),符合中文网文排版习惯。

附加内容(可开关)

尾部可追加人物库、地点库、物品库。每个条目只导出已有内容,空字段自动跳过。

导出 API

db.export_project_txt(project_id, export_path,
    include_chars=True,     # 附加人物库
    include_locations=True, # 附加地点库
    include_items=True,     # 附加物品库
    add_index=True)         # 生成目录页

导出功能:Markdown

Markdown 导出比 TXT 更丰富,适合发布到博客 / 知识星球 / GitHub。

YAML Front Matter

文件头自动生成元数据区,静态博客引擎可以直接消费:

---
title: "修仙录"
description: "一个小和尚下山的故事"
chapters: 3
words: 55
created: 2026-10-02 11:36:24
exported: 2026-10-02
---

自动目录(TOC)

生成锚点链接的目录,按卷分组。add_toc=False 可关闭。

附加部分

人物库 / 地点库 / 物品库使用 Markdown 无序列表 + 粗体字段名,例如:

#### 张三 <small>主角</small> - **外貌**:穿道袍的小和尚 - **性格**:耿直善良 - **背景**:孤儿被庙里收养

导出 API

db.export_project_md(project_id, export_path,
    include_chars=True,
    include_locations=True,
    include_items=True,
    add_toc=True)

智能导入 TXT

从网文网站复制回来的 TXT,通常包含「第X章」这种章节关键字。书砚可以自动拆分:

  1. 检测文件中是否有 ≥ 2 处 第[一二三...\d]+[章节回卷部] 关键字
  2. 有 → 弹确认框让用户选「拆分」或「单章」
  3. 拆分模式下,每个章节关键字变成独立章节;前言部分自动命名为「前言」
# 强制拆分
db.import_txt(project_id, file_path, smart_split=True)

# 关闭拆分(整文件塞成一章)
db.import_txt(project_id, file_path, smart_split=False)
性能说明:旧版每章导出要单独查一次卷名(N+1 查询)。新版一次性 vol_map = {v['id']: v['name'] ...},100 章导出从约 200ms 降到 < 10ms。导出界面在「文件 → 导出为 TXT / Markdown」,每次导出会先弹一个选项对话框,让你勾选附加内容和目录。

Markdown 快捷插入(📝 MD 菜单)

码字时如果想插入 Markdown 语法,不用手动敲——工具栏最右侧有一个 📝 MD 下拉按钮。位置在 EditorPage 工具栏末尾(📝 MD 按钮,点一下展开菜单)。

分类菜单项语法 / 说明
📌 标题H1 一级#
H2 二级##
H3 三级###
H4 四级####
行内样式**粗体**包裹选中文字
*斜体*包裹选中文字
~~删除线~~包裹选中文字
`行内代码`包裹选中文字
列表 & 引用- 无序列表选多行时每行前都加 -
1. 有序列表同上,每行加序号
> 引用同上
链接 & 图片🔗 链接[text](url) 并自动选中 url 待填
🖼 图片![alt](url)
其他``` 代码块选中内容会被包进 ```
| 表格 |插入 3×3 模板
--- 分割线插入 ---

智能行为

有选中文本时:

  • 粗体 / 斜体 / 删除线 / 行内代码:用标记直接包裹选中内容
  • 链接:[选中的字](url),然后自动选中 url 让你填
  • 无序列表 / 有序列表 / 引用:选中多行时每行前都加前缀
  • 代码块:选中内容包进 ``` 里

没有选中文本时:

  • 包裹型语法会插入占位符并自动选中,你直接打字就替换了
  • 块级语法直接在当前行行首加前缀
  • 链接 / 图片会生成模板并把光标定位到 url 部分

Editor 内置 API(插件可用)

所有 MD 方法都定义在 NovelEditor 类里,插件可以直接调用:

# 插件里拿到 editor 后
api.editor.md_h3()               # 插入 ###
api.editor.md_bold()             # 包裹粗体
api.editor.md_quote()            # 行首加 >
api.editor.md_wrap('==', placeholder='高亮')  # 自定义包裹语法

# 三个底层通用方法
editor.md_wrap(prefix, suffix=None, placeholder='')
editor.md_line_prefix(prefix)    # 行首/多行加前缀
editor.md_insert_line(text)      # 在行尾插入一行

默认没有绑定快捷键(避免与输入法冲突),可以在插件里用 api.add_menu('编辑', '插入 H3', lambda: api.editor.md_h3(), 'Ctrl+Shift+3') 绑定。

Markdown 语法写入的是编辑器的纯文本层,保存后以 HTML 形式存入数据库,导出时会通过 _html_to_plain_indent 转换成带缩进的纯文本。如果需要 HTML 渲染效果,建议用「导出 Markdown」功能生成最终稿。

右键菜单汉化 + Markdown 预览

右键菜单全中文

书砚编辑器(NovelEditor)的右键菜单已完全汉化,不再出现默认的英文 Cut / Copy / Paste。菜单结构如下:

  • ↶ 撤销 Ctrl+Z(无操作时自动禁用)
  • ↷ 重做 Ctrl+Y(无操作时自动禁用)
  • ✂ 剪切 Ctrl+X(未选中时禁用)
  • 📋 复制 Ctrl+C(未选中时禁用)
  • 📌 粘贴 Ctrl+V(剪贴板空时禁用)
  • ☑ 全选 Ctrl+A
  • 📝 Markdown 插入 ▸(子菜单)
  • 👁 Markdown 预览

Markdown 预览

编辑器内置了一个极简的 Markdown预览功能,支持网文常用语法,可以:

  • 工具栏 → 📝 MD → 👁 Markdown 预览
  • 编辑器右键 → 👁 Markdown 预览

预览窗口支持「🔄 刷新」和「关闭」。

语法示例
标题# / ## / ### / ####
粗体**文字** 或 __文字__
斜体*文字* 或 _文字_
删除线~~文字~~
行内代码`code`
无序列表- / * / +
有序列表1. / 2. / 3.
引用> 引用文字
分割线--- / *** / ___
链接[文字](url)
图片![alt](url)
代码块``` ... ```
表格| 列1 | 列2 |
段落普通文本

预览功能不依赖任何第三方库,仅用 Python 标准库 re 模块实现。如果你想要扩展新语法,请查阅