当前位置: 首页 > news >正文

Typora + Hexo 图片路径问题(Typedown)

文章目录

  • 1. 冲突来源
  • 2. 解决思路
  • 3. 实现
    • 1. typora图片路径
    • 2. hexo脚本

1. 冲突来源

Hexo上对于图片在md中的引用,使用了post_asset_folder: true配置,来更好的管理图片。
当一篇名为xxx.md的文章引用1.png图片时,默认让1.png保持在xxx文件夹下,那么md中即可使用{% asset_img 1.png %}来引用图片。

而typora中,或者Typedown中,复制图片时,一般使用![](./xxx/1.png)

2. 解决思路

  1. 让每次图片复制到md时,typora都能将其自动放入和md文件同名同级文件夹下。
  2. 然后在Hexo编译前使用脚本将![](./xxx/1.png)转化为{% asset_img 1.png %},并且保持md源文件不变。

3. 实现

1. typora图片路径

在这里插入图片描述

这很简单。

但是如果你是typedown就会发现,不支持解析${filename},那么只有每次写的时候手动选择同级同名文件夹了。

2. hexo脚本

scripts\before_generate.js中写入

// const path = require('path');// hexo.extend.filter.register('before_post_render', data => {
//   if (data.layout === 'post') {
//     const postName = path.basename(data.source, '.md');
//     const imgRegex = new RegExp(`!\\[.*?\\]\\(\\.\\/${postName}\\/([^\\)]+)\\)`, 'g');//     data.content = data.content.replace(imgRegex, (match, p1) => {
//       return `{% asset_img ${p1} %}`;
//     });
//   }
//   return data;
// });const path = require('path');hexo.extend.filter.register('before_post_render', data => {if (data.layout === 'post') {const postName = path.basename(data.source, '.md');const imgRegex = new RegExp(`!\\[.*?\\]\\(\\.\\/${postName}\\/([^\\)]+)\\)`, 'g');// 原始内容const originalContent = data.content;// 转换内容let match;let modifiedContent = originalContent;while ((match = imgRegex.exec(originalContent)) !== null) {const originalLine = match[0];const newLine = `{% asset_img ${match[1]} %}`;// 打印转换前后的对比console.log(`Original line: ${originalLine}`);console.log(`Converted line: ${newLine}\n`);// 进行替换modifiedContent = modifiedContent.replace(originalLine, newLine);}// 更新数据内容data.content = modifiedContent;}return data;
});

被注释掉了是不会打印日志对比前后修改的,没注释的会。

执行hexo cleanhexo generate,然后hexo server看看效果。

相关文章:

  • Flink Sql Redis Connector
  • 数据结构之B数
  • 在JPA项目启动时新增MySQL字段
  • 华为欧拉 openEuler24.03 更新 阿里 yum源
  • 算是一些Transformer学习当中的重点内容
  • suuk-s.php.jpg-python 库劫持
  • 北京宠物美容护理app,化身奇迹“萌”宠
  • 【Java】Java基础语法
  • 使用Python进行自然语言处理:从基础到实战
  • Python开发日记--手撸加解密小工具(2)
  • 数组元素去重
  • WHAT - NextJS 系列之 Rendering - Server Rendering Strategies
  • @PostConstruct 注解的方法用于资源的初始化
  • HTML(12)——背景属性
  • 图解注意力
  • @jsonView过滤属性
  • 2017年终总结、随想
  • 2018一半小结一波
  • angular学习第一篇-----环境搭建
  • egg(89)--egg之redis的发布和订阅
  • golang 发送GET和POST示例
  • quasar-framework cnodejs社区
  • VUE es6技巧写法(持续更新中~~~)
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 产品三维模型在线预览
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 新版博客前端前瞻
  • - 转 Ext2.0 form使用实例
  • # Redis 入门到精通(七)-- redis 删除策略
  • #define
  • %@ page import=%的用法
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (8)STL算法之替换
  • (done) 声音信号处理基础知识(4) (Understanding Audio Signals for ML)
  • (Git) gitignore基础使用
  • (PySpark)RDD实验实战——取一个数组的中间值
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (SERIES12)DM性能优化
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (分布式缓存)Redis持久化
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)React组件、useState、组件样式
  • (算法)N皇后问题
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)jQuery 基础
  • (转)可以带来幸福的一本书
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)