内容简介:
点击展开/收起
《射雕英雄传》是一部武侠小说,金庸“射雕三部曲”之第一部,又名《大漠英雄传》。它的发表确立了金庸“武林至尊”的地位。该小说被多次改编成同名电影、电视连续剧、电玩游戏。// 指定要搜索的文件夹
const targetFolder = "阅读/作家";
// 可修改的摘要长度(字符数)
const excerptLength = 300;
// 从模板变量接收作者名(可能带引号)
let rawAuthor = `'金庸'`;
let author = rawAuthor.replace(/^['"]+|['"]+$/g, "").trim();
// 获取该目录下所有页面并过滤
let pagesInFolder = dv.pages(`"${targetFolder}"`);
let matching = pagesInFolder.filter(p => p.file.name === author || p.file.name.includes(author));
if (matching.length > 0) {
(async () => {
let note = matching[0];
let path = note.file.path;
let name = note.file.name;
// 输出文件链接
dv.paragraph(`**作者简介:** ${name}`);
// 读取全文
let file = app.vault.getAbstractFileByPath(path);
let content = await app.vault.read(file);
// 去除笔记属性
content = content.replace(/^---\r?\n[\s\S]*?\r?\n---/, "").trim();
// 提取“作家简介”标题后的首个段落,允许标题后空行
const sectionRegex = /^###\s*作家简介[^\n]*\r?\n(?:\r?\n)?([\s\S]*?)(?=\r?\n\s*\r?\n|$)/m;
let excerpt = '';
const secMatch = content.match(sectionRegex);
if (secMatch) {
let body = secMatch[1].trim();
excerpt = body.length > excerptLength ? body.substring(0, excerptLength) + '...' : body;
} else {
// 未找到标题时默认使用首个段落
const paraMatch = content.match(/^([\s\S]*?)(?=\r?\n\s*\r?\n|$)/);
let firstPara = paraMatch ? paraMatch[1].trim() : content.substring(0, excerptLength).trim();
excerpt = firstPara.length > excerptLength ? firstPara.substring(0, excerptLength) + '...' : firstPara;
}
// 使用 <details> 实现可折叠展示摘要
dv.paragraph(
`<details>
<summary>点击展开/收起</summary>
${excerpt}
</details>`
);
})();
} else {
dv.paragraph(`尚未添加 “${author}” 的简介。`);
}
郭靖勒住马头,想起成吉思汗抚养之恩、知遇之隆、杀母之仇、屠戮之惨,一时爱恨交迸,低头不语。忽听得号角吹起,两排箭筒卫士在金帐前列成两行。成吉思汗身披黑貂,扶着拖雷的右肩,从帐中大踏步而出。他脚步虽然豪迈如昔,只是落地微颤,身子随着抖动。郭靖抢上前去,拜伏在地。成吉思汗热泪盈眶,颤声道:“起来,起来!我天天在想着你们。”郭靖站起身来,只见大汗满脸都是皱纹,两颊深陷,看来在世之日已然无多,不禁仇恨之心稍减。成吉思汗另一手扶住郭靖左肩,瞧瞧拖雷,又瞧瞧郭靖,叹了一口长气,遥望大漠远处,呆呆出神。郭靖与拖雷不知他心中所思何事,都不敢作声。过了良久,成吉思汗叹道:“当初我与札木合安答结义起事,哪知到头来我却非杀他不可。我做了天下的大汗,他死在我的手里。再过几天那又怎样呢?我还不是与他一般的同归黄土?谁成谁败,到头来又有甚么差别?”拍拍二人的肩头,说道:“你们须得始终和好,千万别自相残杀。札木合安答是一死完事,我每当想起结义之情,却常常终夜难以合眼。”拖雷与郭靖想起在襄阳城下险些拚个你死我活,都是暗叫惭愧。成吉思汗站了这一阵,但觉全身乏力,正要回帐,忽见一小队人马飞驰而至。当先一人白袍金带,穿的是金国服色。成吉思汗见到是敌人,精神为之一振。
那人在远处下马,急步过来,遥遥拜伏在地,不敢走近。亲卫报道:“金国使者求见大汗。”成吉思汗怒道:“金国不肯归降,派人来见我作甚?”
那使者伏在地下说道:“下邦自知冒犯大汗天威,罪该万死,特献上祖传明珠千颗,以求大汗息怒赦罪。这千颗明珠是下邦镇国之宝,恳请大汗赐纳。”使者禀罢,从背上解下包袱,取出一只玉盘,再从锦囊中倒出无数明珠,跪在地下,双手托起玉盘,成吉思汗斜眼微睨,只见玉盘中成千颗明珠,都有小指头般大小,绕着一颗大母珠滴溜溜的滚动。这些珠儿单就一颗已是希世之珍,何况千颗?更何况除了一颗母珠特大之外,其余的珠儿都是差不多大小。但见珍珠...
——引自章节:第四十回华山论剑
洪七公道:“真经上言道:圆通定慧,体用双修,即动而静,虽撄而宁。这四句话使我茅塞顿开,咱们下去罢。”郭靖不懂这几句话的意思,不敢违拗,抱着他轻轻跃下树来。洪七公定了定神,拉开架子,发出一掌。黑暗之中,郭靖见他身形向前一撞,似要摔倒,抢上去要扶,洪七公却已站定,呼呼喘气,说道:“不碍事。”过了片刻,左手又发一掌。郭靖见他跌跌撞撞,脚步踉跄,显得辛苦异常,数次张口欲劝,岂知洪七公越练精神越是旺盛,初时发一掌喘息半晌,到后来身随掌转,足步沉稳,竟是大有进境。一套降龙十八掌打完,又练了一套伏虎拳。
郭靖待他抱拳收式,大喜叫道:“你伤好啦!”洪七公道:“抱我上去。”郭靖一手揽住他腰,跃上平台,心中喜不自胜,连说:“真好,真好!”洪七公叹了口气,说道:“也没甚么好,这些功夫是中看不中用的。”郭靖不解。洪七公道:“我受伤之后,只知运气调养,却没想到我这门外家功夫,愈是动得厉害,愈是有益。只可惜活动得迟了一些,现下性命虽已无碍,功夫是难得复原了。”
——引自章节:第二十二回骑鲨遨游
🗒️ 我的笔记
读书笔记
// dataviewjs: 根据读书笔记中是否存在“摘抄”部分的标题,选择不同渲染方式。若有摘抄部分,则只显示摘抄部分,否则显示页面封面内容。
(async () => {
// 1. 获取书籍笔记库路径和书名变量
const configPage = dv.pages(`#path`)
.filter(p => String(p.file.path).includes("BookLibPath"))[0];
if (!configPage) {
dv.paragraph("⚠️ 未配置 `BookLibPath` 路径。");
return;
}
const BookNotePath = configPage.BookNotePath;
const rawBook = '射雕英雄传';
const bookName = rawBook.replace(/^['"]+|['"]+$/g, "").trim();
// 2. 查找匹配笔记
const matching = dv.pages(`"${BookNotePath}"`)
.filter(p => p.file.name.includes(bookName));
if (matching.length === 0) {
// 4a. 如果没有笔记
dv.paragraph(`尚未创建 “${bookName}” 的读书笔记。`);
return;
}
// 3. 选第一个匹配的笔记
const note = matching[0];
const path = note.file.path;
const name = note.file.name;
// 4. 读取文件、去除 frontmatter
const file = app.vault.getAbstractFileByPath(path);
let content = await app.vault.read(file);
content = content.replace(/^---\r?\n[\s\S]*?\r?\n---/, "").trim();
// 5. 提取 “摘抄” 节
const lines = content.split('\n');
let capture = false;
const sect = [];
for (const line of lines) {
if (/^#{1,6}\s*摘抄\s*$/.test(line)) {
capture = true;
continue;
}
if (capture && /^#{1,6}\s*\S+/.test(line)) break;
if (capture) sect.push(line);
}
const excerpt = sect.join('\n').trim();
if (excerpt) {
// 6a. 有“摘抄”,渲染带折叠和样式的区域
dv.paragraph(`
<div style="
border:1px solid;
padding:8px;
border-radius:4px;
margin:8px 0;
">
<div>
<strong>📖 书籍笔记:</strong>
</div>
<hr style="
border:none;
border-top:1px dotted;
margin:8px 0;
">
<details>
<summary style="cursor:pointer;">📋 摘抄(点击展开/收起)</summary>
${excerpt}
</details>
</div>
`);
} else {
// 6b. 无“摘抄”,退回到第一段逻辑:展示封面图
dv.paragraph("读书笔记:");
const imagePath = path.replace(/\s+/g, '%20');
dv.paragraph(``);
}
})();
微信读书
- 微信读书 -
高亮划线
let WereadPath = dv.pages(`#path`).filter(p=>String(p.file.path).includes("BookLibPath"))[0].WereadPath;
let link = dv.pages(`"${WereadPath}"`)
.filter(p=>String(p.file.name).includes("射雕英雄傳")).file.path;
if(link[0])
{
let path = link[0].replace(/\s+/g, '%20');
dv.paragraph("");
}
- 微信读书 -
读书笔记
let WereadPath = dv.pages(`#path`).filter(p=>String(p.file.path).includes("BookLibPath"))[0].WereadPath;
let link = dv.pages(`"${WereadPath}"`)
.filter(p=>String(p.file.name).includes("射雕英雄傳")).file.path;
if(link[0])
{
let path = link[0].replace(/\s+/g, '%20');
dv.paragraph("");
}
- 微信读书 -
本书评论
let WereadPath = dv.pages(`#path`).filter(p=>String(p.file.path).includes("BookLibPath"))[0].WereadPath;
let link = dv.pages(`"${WereadPath}"`)
.filter(p=>String(p.file.name).includes("射雕英雄傳")).file.path;
if(link[0])
{
let path = link[0].replace(/\s+/g, '%20');
dv.paragraph("");
}
Zotero
- Zotero -
电子书
let ZoteroPath = dv.pages(`#path`).filter(p=>String(p.file.path).includes("BookLibPath"))[0].ZoteroPath;
let link = dv.pages(`"${ZoteroPath}"`)
.filter(p=>String(p.file.name).includes("射雕英雄傳")).file.path;
if(link[0])
{
let path = link[0].replace(/\s+/g, '%20');
dv.paragraph("");
}
- Zotero -
注释
let ZoteroPath = dv.pages(`#path`).filter(p=>String(p.file.path).includes("BookLibPath"))[0].ZoteroPath;
let link = dv.pages(`"${ZoteroPath}"`)
.filter(p=>String(p.file.name).includes("射雕英雄傳")).file.path;
if(link[0])
{
let path = link[0].replace(/\s+/g, '%20');
dv.paragraph("");
}