V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
larryzhu9952
V2EX  ›  分享创造

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

  •  
  •   larryzhu9952 · 10 天前 · 1779 次点击

    前言

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

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

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

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

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

    效果预览

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

    image.png

    image.png

    仓库地址:https://github.com/LarryZhu-dev/thebookofchanges 来点 star🤣

    结语

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

    14 条回复    2024-05-14 23:55:18 +08:00
    lingeo
        1
    lingeo  
       10 天前
    领人迷惑的项目。
    bzj
        2
    bzj  
       10 天前
    这种项目有 star 的必要吗
    hero1874
        3
    hero1874  
       10 天前
    额,就像二手玫瑰上歌手 2024
    WonderCc
        4
    WonderCc  
       10 天前
    额,跟之前那个算命的相比还是差了些
    SawyerGuo
        5
    SawyerGuo  
       10 天前
    我还以为你整个卦象图出来了呢。原来你自己都不看不懂,那搞个纯古文有什么意义?
    biutcoder
        6
    biutcoder  
       10 天前
    赛博算卦+AI 解卦,命运的骰子攥在自己手里
    larryzhu9952
        7
    larryzhu9952  
    OP
       10 天前
    @SawyerGuo 嗨,学习学习罢了,佬看一乐
    vialon17
        8
    vialon17  
       10 天前
    医、数、卜、相、命理、风水一个都没有,
    只看易是看不懂的。
    Jaeger
        9
    Jaeger  
       10 天前
    牛 B 感谢分享
    WebKit
        10
    WebKit  
       10 天前
    搞个 AI 算命把
    2P99RQ7o4Lds0GaI
        11
    2P99RQ7o4Lds0GaI  
       10 天前
    会算命的人可以用我的这个日历,懂得人都懂 https://apps.apple.com/cn/app/%E9%92%A6%E5%A4%A9/id1619353073?platform=iphone
    pythoner
        12
    pythoner  
       9 天前
    我自己用小六壬,给自己断一些事情,非常的准
    jthoney
        13
    jthoney  
       9 天前
    @1mayi
    下载了 不会用.
    2P99RQ7o4Lds0GaI
        14
    2P99RQ7o4Lds0GaI  
       9 天前 via iPhone
    @jthoney 会周易的人才能体会到作用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1018 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:49 · PVG 04:49 · LAX 13:49 · JFK 16:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.