Cherry Markdown目录生成:TOC自动生成与导航
还在为长文档的导航和结构展示而烦恼?Cherry Markdown的智能目录生成功能让你一键搞定文档结构可视化!
本文将深入解析Cherry Markdown的目录(TOC)生成功能,从基础使用到高级配置,帮助你掌握这个提升文档可读性的强大工具。
📋 目录功能概览
Cherry Markdown提供两种目录生成方式:
| 功能特性 | 描述 | 适用场景 |
|---|---|---|
| 自动目录生成 | 通过[[toc]]语法自动提取文档标题 | 技术文档、教程文章 |
| 悬浮目录导航 | 侧边栏实时显示文档结构 | 长文档阅读、快速导航 |
| 多级嵌套展示 | 支持6级标题的层次化显示 | 复杂结构文档 |
| 点击跳转支持 | 目录项支持锚点跳转 | 文档内部导航 |
🚀 快速开始:基础使用
最简单的目录生成
在Markdown文档中任意位置插入[[toc]]语法:
# 项目文档标题
[[toc]]
## 功能介绍
这里是功能描述...
## 安装指南
安装步骤说明...
## API参考
API详细信息...
效果展示
⚙️ 高级配置选项
TOC语法配置
在Cherry初始化配置中,可以通过engine.syntax.toc进行详细配置:
const config = {
engine: {
syntax: {
toc: {
allowMultiToc: false, // 是否允许多个TOC
showAutoNumber: false, // 是否显示自增序号
tocStyle: 'nested', // 目录样式:nested或plain
tocNodeClass: 'toc-li', // 目录项CSS类名
tocContainerClass: 'toc', // 目录容器CSS类名
tocTitleClass: 'toc-title' // 目录标题CSS类名
}
}
}
};
悬浮目录配置
const config = {
toolbars: {
toc: {
updateLocationHash: true, // 是否更新URL哈希
defaultModel: 'full', // 模式:full完整/pure精简
position: 'absolute', // 定位方式
cssText: '' // 自定义CSS样式
}
}
};
🎨 目录样式定制
嵌套式 vs 平铺式目录
Cherry Markdown支持两种目录展示风格:
嵌套式目录(默认)
<div class="toc">
<p class="toc-title">目录</p>
<ul>
<li class="toc-li">
<a href="#section1" class="level-1">一级标题</a>
<ul>
<li class="toc-li">
<a href="#section1-1" class="level-2">二级标题</a>
</li>
</ul>
</li>
</ul>
</div>
平铺式目录
<div class="toc">
<p class="toc-title">目录</p>
<ul>
<li class="toc-li">
<a href="#section1" class="level-1">一级标题</a>
</li>
<li class="toc-li">
<a href="#section1-1" class="level-2">二级标题</a>
</li>
</ul>
</div>
自定义CSS样式
/* 修改目录容器样式 */
.toc {
background: #f8f9fa;
border-radius: 8px;
padding: 16px;
margin: 16px 0;
}
/* 修改目录标题样式 */
.toc-title {
font-weight: bold;
color: #2c3e50;
margin-bottom: 12px;
border-bottom: 2px solid #3498db;
padding-bottom: 8px;
}
/* 修改目录项样式 */
.toc-li {
margin: 4px 0;
list-style: none;
}
.toc-li a {
color: #34495e;
text-decoration: none;
transition: color 0.3s ease;
}
.toc-li a:hover {
color: #e74c3c;
}
/* 不同级别标题的缩进 */
.toc-li.level-2 { padding-left: 20px; }
.toc-li.level-3 { padding-left: 40px; }
.toc-li.level-4 { padding-left: 60px; }
.toc-li.level-5 { padding-left: 80px; }
.toc-li.level-6 { padding-left: 100px; }
🔧 API接口使用
获取目录数据
通过JavaScript API获取目录信息:
// 获取Cherry实例
const cherry = new Cherry(config);
// 获取目录数据
const tocData = cherry.getToc();
console.log(tocData);
返回的目录数据结构示例:
[
{
level: 1,
id: "section-1",
text: "一级标题",
children: [
{
level: 2,
id: "section-1-1",
text: "二级标题",
children: []
}
]
}
]
编程式插入目录
// 在光标位置插入TOC语法
cherry.toolbar.toolbarHandlers.insert('toc');
// 或者在指定位置插入
cherry.insert('[[toc]]\n\n');
🎯 实用技巧与最佳实践
1. 多文档目录管理
对于大型项目,可以使用多个TOC:
# 主目录
[[toc]]
## 模块一
[[toc::module1]]
### 功能A
### 功能B
## 模块二
[[toc::module2]]
### 功能C
### 功能D
2. 排除特定标题
如果需要排除某些标题不出现在目录中:
// 自定义标题处理逻辑
config.engine.syntax.header = {
anchorStyle: 'default',
strict: false,
// 自定义标题ID生成规则
idGenerator: (text, level) => {
if (text.includes('[no-toc]')) {
return null; // 不生成ID,排除在目录外
}
return text.toLowerCase().replace(/[^\w]+/g, '-');
}
};
3. 目录性能优化
对于超长文档,建议:
config.engine.syntax.toc = {
maxDepth: 4, // 限制目录深度
minDepth: 2 // 设置最小深度
};
🔍 常见问题解答
Q: 目录不显示怎么办?
A: 检查以下几点:
- 确保文档中包含标题(# 语法)
- 确认TOC语法正确:
[[toc]]或[toc] - 检查是否有JavaScript错误
Q: 如何自定义目录标题?
A: 修改配置中的tocTitleClass或通过CSS覆盖:
.toc-title:before {
content: "📑 本文目录";
display: block;
font-size: 1.2em;
font-weight: bold;
}
Q: 支持多语言吗?
A: 是的,通过locale配置:
config.locale = 'en_US'; // 英文目录标题
// 或者自定义
config.engine.syntax.toc.tocTitle = 'Table of Contents';
📊 功能对比表
| 特性 | Cherry Markdown | 其他编辑器 | 优势 |
|---|---|---|---|
| 自动生成 | ✅ | ⚠️ 部分支持 | 完全自动化 |
| 实时更新 | ✅ | ❌ | 编辑时实时刷新 |
| 多级嵌套 | ✅ | ⚠️ 有限支持 | 完整6级支持 |
| 样式定制 | ✅ | ⚠️ 有限定制 | 完全可定制 |
| API支持 | ✅ | ❌ | 完整编程接口 |
🚀 进阶应用场景
场景一:技术文档系统
// 集成到文档系统
function generateDocumentationToc(content) {
const cherryEngine = new CherryEngine();
const html = cherryEngine.makeHtml(content);
const toc = cherryEngine.getToc();
return {
content: html,
navigation: buildNavigationMenu(toc)
};
}
场景二:电子书阅读器
// 电子书目录生成
function generateEbookToc(chapters) {
let markdown = '';
chapters.forEach((chapter, index) => {
markdown += `# ${chapter.title}\n\n`;
markdown += chapter.content + '\n\n';
});
markdown = `[[toc]]\n\n${markdown}`;
return markdown;
}
场景三:API文档自动化
// 自动生成API文档目录
function generateApiToc(apiEndpoints) {
let tocMarkdown = '# API 参考\n\n[[toc]]\n\n';
apiEndpoints.forEach(endpoint => {
tocMarkdown += `## ${endpoint.method} ${endpoint.path}\n\n`;
tocMarkdown += `**描述:** ${endpoint.description}\n\n`;
tocMarkdown += '### 参数\n\n';
// 更多内容...
});
return tocMarkdown;
}
💡 性能优化建议
- 延迟加载: 对于超长文档,可以考虑延迟生成目录
- 缓存机制: 对静态内容启用目录缓存
- 虚拟滚动: 超长目录使用虚拟滚动技术
- 按需生成: 只在需要时生成目录
// 性能优化示例
let tocCache = null;
function getOptimizedToc() {
if (!tocCache) {
tocCache = cherry.getToc();
}
return tocCache;
}
// 监听内容变化清除缓存
cherry.event.afterChange(() => {
tocCache = null;
});
🎉 总结
Cherry Markdown的目录生成功能提供了:
- 🤖 自动化: 一键生成,无需手动维护
- 🎨 可定制: 完全可控的样式和行为
- 🔧 易集成: 丰富的API接口
- ⚡ 高性能: 优化的渲染机制
无论你是编写技术文档、创作电子书,还是构建知识管理系统,Cherry Markdown的TOC功能都能显著提升文档的可读性和导航体验。
💡 提示: 记得在实际项目中使用前进行充分的测试,确保目录功能符合你的具体需求。
下一步行动建议:
- ✅ 在现有项目中尝试
[[toc]]语法 - ✅ 根据品牌风格定制目录样式
- ✅ 探索API接口实现动态目录
- ✅ 分享你的使用经验和技巧
开始使用Cherry Markdown的目录功能,让你的文档更加专业和易用! 🚀
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



