《周易》乃周文王姬昌所作,是中国传统思想文化中自然哲学与人文实践的理论根源,是古代汉民族思想、智慧的结晶,被誉为“大道之源”。内容极其丰富,对中国几千年来的政治、经济、文化等各个领域都产生了极其深刻的影响。
像这种千古奇书,每个中国人都应该读一读,一是因为这是老祖宗的智慧,我们不能丢弃;二是因为《周易》蕴含宇宙人文的运行规律,浅读可修身养性,熟读可明自我,深究可知未来,参透就可知天命了。
东汉著名史学家、文学家班固在《汉书•艺文志》中提出《周易》的成书是:人更三圣,世历三古。
其实易经的完本在网上随便就可以找到,但是都不适合在摸鱼的时候读 (!🤡),打开花花绿绿或者神神叨叨的小网站,你的 leader 肯定一眼就看出你在摸鱼。
既然没有这种网站,那干脆自己做一个。
pnpm add -D vitepress
pnpm vitepress init
填写完 cli 里的几个问题,项目就可以直接运行了。可以看到网站直接解析了几个 示例的 md 文件,非常的神奇。
那么哪里才可以找到《周易》的 markdown 版本呢,找了一圈也没有找到,最后找到了一个 txt 的,我觉得写个脚本转换一下。
首先,我拿 vscode 的正则给每个标题加上井号,使其成为一级标题
此时,所有的标题都被改成了 md 格式的一级标题,然后直接将后缀名从 .txt 改为 .md 即可。
看过 vitepress 的文档并经过实操后发现,它的目录是一个一个的小 markdown 文件组成的,而单个 markdown 内的标题等在右侧显示
那么此时就需要把《周易》完本,按照六十四卦分为六十四个 md 文件。
我写了一个 node 脚本:
const fs = require('fs');
// 读取 zhouyi.md 文件
fs.readFile('zhouyi.md', 'utf8', (err, data) => {
if (err) {
console.error('读取文件出错:', err);
return;
}
// 按一级标题进行分割
const sections = data.split('\n# ');
// 循环处理每个一级标题的内容
sections.forEach((section, index) => {
// 提取标题和内容
const lines = section.split('\n');
const title = lines[0];
const content = lines.slice(1).join('\n');
// 写入到单独的文件中
const fileName = `zhouyi_${index + 1}.md`;
fs.writeFile(fileName, `# ${title}\n\n${content}`, err => {
if (err) {
console.error(`写入文件 ${fileName} 出错:`, err);
} else {
console.log(`已创建文件: ${fileName}`);
}
});
});
});
取名为 md-slicer.js ,在控制台输入
node md-slicer.js
即可生成
然后写一个在 .vitepress/config.mts
写 sidebar
的生成函数:
let itemsLength = 64
function getSidebar() {
let items: {}[] = [{
text: '《周易》是什么?',
link: '/what.md'
}]
for (let i = 1; i <= itemsLength; i++) {
items.push({ text: `第${numberToChinese(i)}卦`, link: `/zhouyi_${i}.md` })
}
return items
}
numberToChinese 函数用来将阿拉伯数字转为中文数字,因为周易只有六十四卦,所以不用考虑很多,够用即可
// numberToChinese
function numberToChinese(number) {
const chineseNumbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const chineseUnits = ['', '十', '百', '千', '万', '亿'];
// 将数字转换为字符串,以便于处理每一位
const numStr = String(number);
let result = '';
let zeroFlag = false; // 用于标记是否需要加上“零”
for (let i = 0; i < numStr.length; i++) {
const digit = parseInt(numStr[i]); // 当前位的数字
const unit = chineseUnits[numStr.length - i - 1]; // 当前位的单位
if (digit !== 0) {
if (zeroFlag) {
result += chineseNumbers[0]; // 如果前一位是零,则在当前位加上“零”
zeroFlag = false;
}
result += chineseNumbers[digit] == "一" && unit == "十" ? unit : chineseNumbers[digit] + unit; // 加上当前位的数字和单位,当一十时,省略前面的一
} else {
zeroFlag = true; // 如果当前位是零,则标记为需要加上“零”
}
}
return result;
}
然后,设置一下 vitepress 基础配置和打包输出路径
export default defineConfig({
title: "周易",
description: "周易",
base: "/thebookofchanges/",
head: [
['link', { rel: 'icon', href: 'yi.svg' }] // 这里是你的 Logo 图片路径
],
outDir: 'docs', // 输出到 docs ,可以直接在 github pages 使用
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: '首页', link: '/' },
{ text: '阅读', link: '/zhouyi_1.md' }
],
logo: '/yi.svg',
sidebar: [
{
text: '目录',
items: getSidebar()
}
],
socialLinks: [
{ icon: 'github', link: 'https://github.com/LarryZhu-dev/thebookofchanges' }
]
}
})
然后简单给网站设计一个 logo
字体是华文隶书,转化为路径后,将它拉瘦一点,再导出为 svg 。
最后,用 pnpm run docs:build
打包即可,打包时注意设置基本路径为 github pages 的仓库名。
push 到 github 后,在 Setting/Pages 页面发布即可。
最后,网站运行在:https://larryzhu-dev.github.io/thebookofchanges/
仓库地址:https://github.com/LarryZhu-dev/thebookofchanges 来点 star🤣
现在只有简单的原文,如有 《周易》大佬,欢迎大佬提交注解 PR 。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.