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

229 天前
 larryzhu9952

前言

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

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

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

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

其实易经的完本在网上随便就可以找到,但是都不适合在摸鱼的时候读 (!🤡),打开花花绿绿或者神神叨叨的小网站,你的 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.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

字体是华文隶书,转化为路径后,将它拉瘦一点,再导出为 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 。

2327 次点击
所在节点    分享创造
14 条回复
lingeo
229 天前
领人迷惑的项目。
bzj
229 天前
这种项目有 star 的必要吗
hero1874
229 天前
额,就像二手玫瑰上歌手 2024
WonderCc
229 天前
额,跟之前那个算命的相比还是差了些
SawyerGuo
229 天前
我还以为你整个卦象图出来了呢。原来你自己都不看不懂,那搞个纯古文有什么意义?
biutcoder
229 天前
赛博算卦+AI 解卦,命运的骰子攥在自己手里
larryzhu9952
229 天前
@SawyerGuo 嗨,学习学习罢了,佬看一乐
vialon17
229 天前
医、数、卜、相、命理、风水一个都没有,
只看易是看不懂的。
Jaeger
229 天前
牛 B 感谢分享
WebKit
228 天前
搞个 AI 算命把
2P99RQ7o4Lds0GaI
228 天前
会算命的人可以用我的这个日历,懂得人都懂 https://apps.apple.com/cn/app/%E9%92%A6%E5%A4%A9/id1619353073?platform=iphone
pythoner
228 天前
我自己用小六壬,给自己断一些事情,非常的准
jthoney
227 天前
@1mayi
下载了 不会用.
2P99RQ7o4Lds0GaI
227 天前
@jthoney 会周易的人才能体会到作用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1040138

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX