互联网+《周易》:我在github学算卦
前言
《周易》乃周文王姬昌所作,是中国传统思想文化中自然哲学与人文实践的理论根源,是古代汉民族思想、智慧的结晶,被誉为“大道之源”。内容极其丰富,对中国几千年来的政治、经济、文化等各个领域都产生了极其深刻的影响。
像这种千古奇书,每个中国人都应该读一读,一是因为这是老祖宗的智慧,我们不能丢弃;二是因为《周易》蕴含宇宙人文的运行规律,浅读可修身养性,熟读可明自我,深究可知未来,参透就可知天命了。
东汉著名史学家、文学家班固在《汉书•艺文志》中提出《周易》的成书是:人更三圣,世历三古。
那么在哪里才可以读到呢?
其实易经的完本在网上随便就可以找到,但是都不适合在摸鱼的时候读 (!🤡),打开花花绿绿或者神神叨叨的小网站,你的 leader 肯定一眼就看出你在摸鱼。
既然没有这种网站,那干脆自己做一个。
vitePress + github pages 快速搭建
vitePress 快速开始
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 页面发布即可。
效果预览
最后,网站运行在:larryzhu-dev.github.io/thebookofch…
仓库地址:github.com/LarryZhu-de… 来点star🤣
结语
现在只有简单的原文,如有 《周易》大佬,欢迎大佬提交注解PR。
来源:juejin.cn/post/7367659849101312015