注册
web

互联网+《周易》:我在github学算卦

前言


《周易》乃周文王姬昌所作,是中国传统思想文化中自然哲学与人文实践的理论根源,是古代汉民族思想、智慧的结晶,被誉为“大道之源”。内容极其丰富,对中国几千年来的政治、经济、文化等各个领域都产生了极其深刻的影响。


像这种千古奇书,每个中国人都应该读一读,一是因为这是老祖宗的智慧,我们不能丢弃;二是因为《周易》蕴含宇宙人文的运行规律,浅读可修身养性,熟读可明自我,深究可知未来,参透就可知天命了。


东汉著名史学家、文学家班固在《汉书•艺文志》中提出《周易》的成书是:人更三圣,世历三古


那么在哪里才可以读到呢?


其实易经的完本在网上随便就可以找到,但是都不适合在摸鱼的时候读 (!🤡),打开花花绿绿或者神神叨叨的小网站,你的 leader 肯定一眼就看出你在摸鱼。


既然没有这种网站,那干脆自己做一个。


vitePress + github pages 快速搭建


vitePress 快速开始


pnpm add -D vitepress

pnpm vitepress init

填写完 cli 里的几个问题,项目就可以直接运行了。可以看到网站直接解析了几个 示例的 md 文件,非常的神奇。


处理《周易》文本


那么哪里才可以找到《周易》的 markdown 版本呢,找了一圈也没有找到,最后找到了一个 txt 的,我觉得写个脚本转换一下。


首先,我拿 vscode 的正则给每个标题加上井号,使其成为一级标题


QQ2024511-183935.webp


此时,所有的标题都被改成了md格式的一级标题,然后直接将后缀名从 .txt 改为 .md 即可。


看过 vitepress 的文档并经过实操后发现,它的目录是一个一个的小 markdown 文件组成的,而单个 markdown 内的标题等在右侧显示


image.png


那么此时就需要把《周易》完本,按照六十四卦分为六十四个 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

即可生成


image.png


然后写一个在 .vitepress/config.mtssidebar的生成函数:


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


image.png


字体是华文隶书,转化为路径后,将它拉瘦一点,再导出为 svg。


最后,用 pnpm run docs:build打包即可,打包时注意设置基本路径为 github pages 的仓库名。


发布


push到github后,在 Setting/Pages 页面发布即可。


image.png


效果预览


最后,网站运行在:larryzhu-dev.github.io/thebookofch…


image.png


image.png


仓库地址:github.com/LarryZhu-de… 来点star🤣


结语


现在只有简单的原文,如有 《周易》大佬,欢迎大佬提交注解PR。


作者:德莱厄斯
来源:juejin.cn/post/7367659849101312015

0 个评论

要回复文章请先登录注册