likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 59

前言

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

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

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

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

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

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

vitePress + github pages 快速搭建

vitePress 快速开始

pnpm add -D vitepress
pnpm vitepress init

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

处理《周易》文本

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

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

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

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

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

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

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

即可生成

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

然后写一个在 .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

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

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

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

发布

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

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

效果预览

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

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

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

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

结语

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

转载自:https://juejin.cn/post/7367659849101312015
评论
请登录