【已解决】新建笔记自动命名增加章节序号

我用obsidian写小说,我创建了一个文件夹,为小说名字。在这个文件夹里,我接下来要写很多章节。每次创建新的笔记时,它都需要自己重命名。我想要解决的问题是:我创建笔记时,它自动生成相对应的章节序号。例如我这个文件夹里已经有“第1章”,接着我创建新笔记的时候,它自动生成“第2章”,以此类推。它会根据,最大的数值生成下一个新笔记的序号。再例如,我已经有了300个章节,在我创建新笔记的时候,它自动命名:第301章。
求一个解决办法,谢谢。

1 个赞

我的思路是使用命令在仓库文件夹一次性新建多个第{1…300}章.md文件

可是我也估算不出来大致要写多少章,300章只是一个举例。之所以要这个功能,是因为之前我另外一本书写到400多章的时候,我创建新笔记的时候写错了序号,导致我上传去网站上的序号不对,让读者以为少了章节。。

我知道用quickadd的宏应该可以实现,但是得会写代码

好吧,但是我不会写代码 :sweat_smile:

可以在 Excel 中生成一个序列,复制到一个目录文件中。如

[[第一章]]
[[第二章]]
...

然后红色链接点进去就是创建文件,创建之后链接就由红色找不到文件,变成蓝色了。需要注意obsidian一个库中不允许相同命名,所以可以加前缀,如[[书名-第一章]]

2 个赞

这个办法可以,新建一个目录笔记,点击之后自动创建笔记是吧?

是的,你可以试试看,点击红色一般就是创建对应名称的文件了。

1 个赞

也可以用Templater写模板,如果文件夹存在了名字为第n章的笔记,就自动重命名为第n+1章

我去研究一下看看,谢谢!

我写了一个quickadd的脚本你可以试试看,这个脚本的效果是返回“测试文件夹”下文件名中最大的数字+1的数字。
配合quick add可以这样使用:

首先在你的库的目录下面创建一个.js格式的文件,然后把下面代码粘贴进去。假设命名为 macro.js

module.exports = async (params) => {
    const {
        quickAddApi,
        app,
    } = params;
    
    const files = app.vault.getFiles().filter(file=>file.parent.name == "测试文件夹")
    
    let num = 0;
    files.forEach(file=>{
    num = Math.max(num,file.name.match(/[0-9]+/)[0])
    })

    return num + 1;
};

把其中的测试文件夹五个字改成你的小说放置的文件夹名称

打开quickadd的设置,点开manage macro新建一个宏,记住这个宏的名字,比如 test-Macro

建好之后,点击你新建的宏下面的configure按钮,拉到user script 的地方,选择刚才创建的js文件macro.js

回到quick add的设置界面,选中macro,输入宏的名字。这里的名字不需要和上面一样,但是这里建议写成一样的,在举例中是 test-Macro 。点击add choice创建一个macro。这时候列表里面应该会出现新建的宏 test-Macro ,点开旁边的设置,选择那个宏的名字 test-Macro 点一下加号

最后再次回到设置界面,选中template(默认选中的就是这个),输入名字,点击add choice创建一个template 。

在新建的那个template 旁边,点击设置按钮,打开file name format的开关,然后输入 第{{MACRO:宏的名字}}章:{{value}}
(在例子中使用的是 {{MACRO:test-Macro}}章:{{value}}

选择好对应的模版和目录

最后点击:zap:标志启动这个指令,你就可以在命令面板里面找到它了

6 个赞

:+1: :+1: :+1: :+1: :+1: :+1:谢谢,感谢!


交作业,谢谢大佬! :+1: :+1: :+1: :+1:

2 个赞

你好,我没有弄明白,可以麻烦你把宏的名字打上例名吗?辛苦你了,我真的没弄懂,求教 :pray: :pray: :pray:

不太懂你的问题是什么…总之我改了一下上面的描述。
这个其实是quickadd的使用问题,实在搞不懂的话去B站搜一下quickadd的macro的教程跟着走一遍就是了

谢谢你!辛苦啦! :blush: :blush: :blush: