将带注释的Word文档改造成点击注释引用即可弹窗显示注释的HTML文档
阅读中国古籍电子书的时候,往往有很多注释。在正文和注释之间来回滚动页面是一件挺麻烦的事,比较方便的做法是将它编辑成通过点击注释引用即将注释弹出显示在引用所在位置的HTML文档,然后利用HTML文档制作成PDF或者epub文件,就比较便于阅读了。
例如下面这首诗,在Word文档中显示的样子:
将它改造成HTML文件,在浏览器中就变成了下面的样子:
本文就介绍快速批量实现这种转换的一个思路。
首先,在Word文档中要定义好样式。本文以诗标题样式为“标题 2”,诗的内容样式为“要点”,诗的注释样式为“正文”,并且每一条注释为一段,中间不得用enter键分段(如确需分行,可用shift+enter进行软分行)。
然后,我们可以编写下面的VBA,对段落进行改造:
Sub 将Word文本改造为带HTML标记的文本()Dim i%, j%On Error Resume NextWith Selection.StartOf wdStoryWith .Find.Forward = True.MatchWildcards = True' 循环查找注释引用进行处理Do' 注释引用形式为①-⑨,如果有更大的编号,可以从①开始再次循环使用' 只要注释引用与注释文本顺序能够一一对应,编号并没有什么关系Found = .Execute(FindText:="[①-⑨]")commentRef = Selection.Range.TextIf Selection.Style = "标题 2" Then' 文档中标题与正文连续编号的i = i + 1' 将①-⑨形式的编号改成#1-#9形式的对应编号,防止查找陷入死循环' 之所以用①-⑨编号,是因为像下面这样利用unicode编码在带圈序号' 与阿拉伯数字之间转换极为方便commentRef = "#" & ChrW(AscW(commentRef) - 9263)' 将带圈数字注释引用改为#加阿拉伯数字形式的注释引用Selection.Range.Text = "<a id=""commentRef" & Trim(Str(i)) & """ href=""#"" class=""commentRef""" + _" data-related-div=""commentDiv" & Trim(Str(i)) & """>" & commentRef & "</a>"' 如果是“标题 2”样式的段落,用<h2>标签包裹起来para_text = Selection.Paragraphs(1).Range.Text' 如果段落中有多个注释,已经在第一个注释处理时包裹了<h2>标签的,不再包裹If Left(para_text, 3) <> "<h2" ThenSelection.Paragraphs(1).Range.Text = "<h2>" & para_text & "</h2>" & vbCrLfEnd IfElseIf Selection.Style = "要点" Theni = i + 1commentRef = "#" & ChrW(AscW(commentRef) - 9263)Selection.Range.Text = "<a id=""commentRef" & Trim(Str(i)) & """ href=""#"" class=""commentRef""" + _" data-related-div=""commentDiv" & Trim(Str(i)) & """>" & commentRef & "</a>"' 对于样式为“要点”的段落,用class为mainPoint的<div>标签包裹para_text = Selection.Paragraphs(1).Range.TextIf Left(para_text, 4) <> "<div" ThenSelection.Paragraphs(1).Range.Text = "<div class=""mainPoint"">" & para_text & "</div>" & vbCrLfEnd IfElseIf Selection.Style = "正文" Then' 注释单独连续编号的j = j + 1Selection.Paragraphs(1).Range.Text = "<div id=""commentDiv" & Trim(Str(j)) & """ class=""commentDiv"">" & _"<a class=""commentRef"" href=""#commentRef" & Trim(Str(j)) & """>" & "#" & ChrW(AscW(commentRef) - 9263) & "</a>" & _Replace(Selection.Paragraphs(1).Range.Text, commentRef, "") & "</div>" & vbCrLfEnd IfLoop While Found '直至找不到注释引用停止循环End WithEnd With
End Sub
运行以上宏,Word文档中的文本成了下面这样(为了演示注释引用可以重复用①-⑨进行编号,只要顺序能够一一对应即可,故意将诗歌内容和注释内容各重复了一次):
<h2>斗鸡<a id="commentRef1" href="#" class="commentRef" data-related-div="commentDiv1">#1</a>
</h2>
<div class="mainPoint">游目极妙伎,倾听厌宫商<a id="commentRef2" href="#" class="commentRef" data-related-div="commentDiv2">#2</a>。主人寂无为,众宾进乐方<a id="commentRef3" href="#" class="commentRef" data-related-div="commentDiv3">#3</a>。长筵坐戏客,斗鸡观闲房<a id="commentRef4" href="#" class="commentRef" data-related-div="commentDiv4">#4</a>。群雄正翕赫,双翅自飞扬<a id="commentRef5" href="#" class="commentRef" data-related-div="commentDiv5">#5</a>。振羽激流风,悍目发朱光<a id="commentRef6" href="#" class="commentRef" data-related-div="commentDiv6">#6</a>。觜落轻毛散,严距往往伤<a id="commentRef7" href="#" class="commentRef" data-related-div="commentDiv7">#7</a>。长鸣入青云,扇翼独翱翔<a id="commentRef8" href="#" class="commentRef" data-related-div="commentDiv8">#8</a>。愿蒙狸膏助,长得擅此场<a id="commentRef9" href="#" class="commentRef" data-related-div="commentDiv9">#9</a>。
</div>
<div class="mainPoint">游目极妙伎,倾听厌宫商<a id="commentRef10" href="#" class="commentRef" data-related-div="commentDiv10">#2</a>。主人寂无为,众宾进乐方<a id="commentRef11" href="#" class="commentRef" data-related-div="commentDiv11">#3</a>。长筵坐戏客,斗鸡观闲房<a id="commentRef12" href="#" class="commentRef" data-related-div="commentDiv12">#4</a>。群雄正翕赫,双翅自飞扬<a id="commentRef13" href="#" class="commentRef" data-related-div="commentDiv13">#5</a>。振羽激流风,悍目发朱光<a id="commentRef14" href="#" class="commentRef" data-related-div="commentDiv14">#6</a>。觜落轻毛散,严距往往伤<a id="commentRef15" href="#" class="commentRef" data-related-div="commentDiv15">#7</a>。长鸣入青云,扇翼独翱翔<a id="commentRef16" href="#" class="commentRef" data-related-div="commentDiv16">#8</a>。愿蒙狸膏助,长得擅此场<a id="commentRef17" href="#" class="commentRef" data-related-div="commentDiv17">#9</a>。
</div>
<div id="commentDiv1" class="commentDiv"><a class="commentRef" href="#commentRef1">#1</a>曹操统一北方后以邺城(今河北省临漳县邺城镇)为都,曹植与其兄曹丕以贵公子身份,与陈琳、王粲、徐幹、阮瑀、应玚、刘桢等建安诸子,经常相聚游园饮宴,诗赋唱和。当时流行斗鸡游戏,在一次斗鸡游戏后各有所作。这是曹植作的诗。现存的还有刘桢、应玚的同题诗。此诗的写作时间大约在建安十六年(211年)前后。前人有谓作于魏明帝筑斗鸡台的太和中,误;盖其时刘桢、应玚早已逝世;近人或谓作于建安二十五年前,亦不准确;盖刘桢、应玚、徐幹、陈琳于建安二十二年(217年)已死于大瘟疫,其时建安七子俱已亡故,此诗之作不会迟于邺下文人集团聚会活动之时。据现存建安诸子作品,他们的聚会活动主要在建安十六年曹丕封五官中郎将、丞相副前后一、二年,以后丕、植争嗣矛盾激化,建安文人分属丕党、植党,集体活动逐渐减少,如应玚、刘桢即分属两党。应玚《斗鸡》诗有“兄弟游戏场,命驾迎众宾”两句,既称“兄弟”和“众宾”,据此推想,此诗也可能作于曹丕任五官中郎将之前或当年。据以上考察,可信此诗是曹植的早期诗作,即十九岁左右的作品。全诗描写斗鸡游戏的热烈场面,对斗鸡的描写细致、传神,巧用比喻和夸饰,显示出青年作者的才华,也展示了当时贵公子生活和文人文艺活动的一个生动的镜头。
</div>
<div id="commentDiv2" class="commentDiv"><a class="commentRef" href="#commentRef2">#2</a>〔游目二句〕游目:游古通流,流目即放目随意观望。极:穷尽。妙伎:优美的舞伎。伎,古代女歌舞艺人。厌:倦。宫商:音调名,代指乐曲。二句意为看遍了舞女优美的舞蹈,听厌了音乐的曲调。
</div>
<div id="commentDiv3" class="commentDiv"><a class="commentRef" href="#commentRef3">#3</a>〔主人〕指曹丕、曹植兄弟。〔无为〕无事做。〔乐方〕娱乐方式。
</div>
<div id="commentDiv4" class="commentDiv"><a class="commentRef" href="#commentRef4">#4</a>〔长筵〕筵,竹席。古人席地而坐,地上铺竹席称筵,筵上再铺一重称席,筵长,席短,故称长筵。〔戏客〕参加游戏的宾客。〔闲房〕殿旁两侧空房。闲,静也。观闲,丁晏《曹集铨评》(以下简称丁本)作“闲观”,《艺文类聚》作“閒观”,宋刊本《曹子建文集》(以下简称宋本)闲作间,闲间古通,间为闲的异体,今规范字为闲。斗鸡观闲房,即在殿房旁空房观斗鸡。
</div>
<div id="commentDiv5" class="commentDiv"><a class="commentRef" href="#commentRef5">#5</a>〔翕(xī)赫〕盛貌,形容斗鸡气势高昂。〔双翅〕丁本作双翘,《艺文类聚》作双翅,按《说文解字》:“翘,尾长毛也。”双翘则欠通,故据《艺文类聚》改。〔飞扬〕形容双翅羽毛竖立若飞。
</div>
<div id="commentDiv6" class="commentDiv"><a class="commentRef" href="#commentRef6">#6</a>〔振羽二句〕激流风,丁本原作“邀清风”,《艺文类聚》作“激流风”。案此句应为挥羽激流风。挥羽,振动羽毛。激,发也。流风,急风。〔悍目〕凶悍的目光。二句意为振动羽毛激起急风,凶悍的目光发出红色光芒。
</div>
<div id="commentDiv7" class="commentDiv"><a class="commentRef" href="#commentRef7">#7</a>〔觜落〕觜同“嘴”。斗鸡以尖嘴相啄,乃至伤损脱落。〔轻毛〕柔细的毛散乱脱落。〔严距〕古代斗鸡用锋利的金属附于鸡爪,斗时用以刺伤对方,又称金距。
</div>
<div id="commentDiv8" class="commentDiv"><a class="commentRef" href="#commentRef8">#8</a>〔长鸣入青云〕斗胜的鸡先鸣,鸣声高昂。此处夸张地形容其响声直彻云霄。〔扇翼〕扇同“搧”,搧动羽翼。〔翱翔〕本义是禽鸟的飞翔,亦指游逛徘徊,这里指自得地绕场急走。
</div>
<div id="commentDiv9" class="commentDiv"><a class="commentRef" href="#commentRef9">#9</a>〔愿蒙二句〕狸膏:黄鼠狼的油膏。丁晏《事类赋注》引《庄子》逸篇:“羊沟之鸡,时以胜人者,以狸膏涂其头也。”盖鸡畏狸,凃狸膏可退敌。长,宋本作“常”。擅,专也。二句意为希望有狸膏的帮助而专擅于斗鸡场。
</div>
<div id="commentDiv10" class="commentDiv"><a class="commentRef" href="#commentRef10">#2</a>〔游目二句〕游目:游古通流,流目即放目随意观望。极:穷尽。妙伎:优美的舞伎。伎,古代女歌舞艺人。厌:倦。宫商:音调名,代指乐曲。二句意为看遍了舞女优美的舞蹈,听厌了音乐的曲调。
</div>
<div id="commentDiv11" class="commentDiv"><a class="commentRef" href="#commentRef11">#3</a>〔主人〕指曹丕、曹植兄弟。〔无为〕无事做。〔乐方〕娱乐方式。
</div>
<div id="commentDiv12" class="commentDiv"><a class="commentRef" href="#commentRef12">#4</a>〔长筵〕筵,竹席。古人席地而坐,地上铺竹席称筵,筵上再铺一重称席,筵长,席短,故称长筵。〔戏客〕参加游戏的宾客。〔闲房〕殿旁两侧空房。闲,静也。观闲,丁晏《曹集铨评》(以下简称丁本)作“闲观”,《艺文类聚》作“閒观”,宋刊本《曹子建文集》(以下简称宋本)闲作间,闲间古通,间为闲的异体,今规范字为闲。斗鸡观闲房,即在殿房旁空房观斗鸡。
</div>
<div id="commentDiv13" class="commentDiv"><a class="commentRef" href="#commentRef13">#5</a>〔翕(xī)赫〕盛貌,形容斗鸡气势高昂。〔双翅〕丁本作双翘,《艺文类聚》作双翅,按《说文解字》:“翘,尾长毛也。”双翘则欠通,故据《艺文类聚》改。〔飞扬〕形容双翅羽毛竖立若飞。
</div>
<div id="commentDiv14" class="commentDiv"><a class="commentRef" href="#commentRef14">#6</a>〔振羽二句〕激流风,丁本原作“邀清风”,《艺文类聚》作“激流风”。案此句应为挥羽激流风。挥羽,振动羽毛。激,发也。流风,急风。〔悍目〕凶悍的目光。二句意为振动羽毛激起急风,凶悍的目光发出红色光芒。
</div>
<div id="commentDiv15" class="commentDiv"><a class="commentRef" href="#commentRef15">#7</a>〔觜落〕觜同“嘴”。斗鸡以尖嘴相啄,乃至伤损脱落。〔轻毛〕柔细的毛散乱脱落。〔严距〕古代斗鸡用锋利的金属附于鸡爪,斗时用以刺伤对方,又称金距。
</div>
<div id="commentDiv16" class="commentDiv"><a class="commentRef" href="#commentRef16">#8</a>〔长鸣入青云〕斗胜的鸡先鸣,鸣声高昂。此处夸张地形容其响声直彻云霄。〔扇翼〕扇同“搧”,搧动羽翼。〔翱翔〕本义是禽鸟的飞翔,亦指游逛徘徊,这里指自得地绕场急走。
</div>
<div id="commentDiv17" class="commentDiv"><a class="commentRef" href="#commentRef17">#9</a>〔愿蒙二句〕狸膏:黄鼠狼的油膏。丁晏《事类赋注》引《庄子》逸篇:“羊沟之鸡,时以胜人者,以狸膏涂其头也。”盖鸡畏狸,凃狸膏可退敌。长,宋本作“常”。擅,专也。二句意为希望有狸膏的帮助而专擅于斗鸡场。
</div>
下面再准备一个HTML模板,内容如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" clickable="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 定义浮动框的样式 */#floatingBox {position: absolute;background-color: white;border: 1px solid gray;padding: 10px;z-index: 999;}/* 定义标题2段落的样式 */h2 {font-size:3em;}/* 定义诗歌内容段落的样式 */.mainPoint{font-size:2em;font-weight:bold;}/* 定义注释段落的样式 */.commentDiv{font-size:1.5em;}/* 注释引用以上标样式显示 */a.commentRef{vertical-align: super;}</style>
</head><body><!--此处插入在Word中用VBA处理过的文本--><div id="floatingBox" style="display:none"></div><script>// 获取浮动框的DOM元素const floatingBox = document.getElementById('floatingBox');// 获取所有带有 commentRef 类的a标签元素const commentRefs = document.querySelectorAll('.commentRef');// 获取所有带有 commentDiv 类的div标签元素const commentDivs = document.querySelectorAll('.commentDiv');// 遍历每个a标签,添加点击事件监听器commentRefs.forEach(function (link) {link.addEventListener('click', function (event) {// 阻止a标签默认的跳转行为event.preventDefault();// 获取当前a标签关联的div的idconst relatedDivId = link.dataset.relatedDiv;// 根据id获取对应的div元素const relatedDiv = document.getElementById(relatedDivId);// 获取要显示的文字内容const text = relatedDiv.textContent;// 设置浮动框的内容floatingBox.textContent = text;// 设置浮动框显示并定位到点击位置floatingBox.style.display = 'block';floatingBox.style.left = event.pageX + 'px';floatingBox.style.top = event.pageY + 'px';});});// 给浮动框添加点击事件监听器,点击浮动框可隐藏浮动框floatingBox.addEventListener('click', function (event) {// 阻止事件冒泡,避免影响后续查找对应的a标签逻辑event.stopPropagation();floatingBox.style.display = 'none';});</script>
</body></html>
当然,如果最后要做成epub文件,以上HTML文档中的样式定义部分应当抽出来做成单独文件,在HTML页面中加以引用即可。样式文件的内容也可以根据自己的喜好字形定义。然后复制在Word文档中用VBA处理后的文本,粘贴到上面的HTML模板中注释“<!--此处插入在Word中用VBA处理过的文本-->”的位置,即可大功告成。本文用于示例的诗替换后的最终内容如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" clickable="width=device-width, initial-scale=1.0"><title>Document</title><style>/* 定义浮动框的样式 */#floatingBox {position: absolute;background-color: white;border: 1px solid gray;padding: 10px;z-index: 999;}h2 {font-size:3em;}.mainPoint{font-size:2em;font-weight:bold;}.commentDiv{font-size:1.5em;}a.commentRef{vertical-align: super;}</style>
</head><body><h2>斗鸡<a id="commentRef1" href="#" class="commentRef" data-related-div="commentDiv1">#1</a>
</h2>
<div class="mainPoint">游目极妙伎,倾听厌宫商<a id="commentRef2" href="#" class="commentRef" data-related-div="commentDiv2">#2</a>。主人寂无为,众宾进乐方<a id="commentRef3" href="#" class="commentRef" data-related-div="commentDiv3">#3</a>。长筵坐戏客,斗鸡观闲房<a id="commentRef4" href="#" class="commentRef" data-related-div="commentDiv4">#4</a>。群雄正翕赫,双翅自飞扬<a id="commentRef5" href="#" class="commentRef" data-related-div="commentDiv5">#5</a>。振羽激流风,悍目发朱光<a id="commentRef6" href="#" class="commentRef" data-related-div="commentDiv6">#6</a>。觜落轻毛散,严距往往伤<a id="commentRef7" href="#" class="commentRef" data-related-div="commentDiv7">#7</a>。长鸣入青云,扇翼独翱翔<a id="commentRef8" href="#" class="commentRef" data-related-div="commentDiv8">#8</a>。愿蒙狸膏助,长得擅此场<a id="commentRef9" href="#" class="commentRef" data-related-div="commentDiv9">#9</a>。
</div>
<div class="mainPoint">游目极妙伎,倾听厌宫商<a id="commentRef10" href="#" class="commentRef" data-related-div="commentDiv10">#2</a>。主人寂无为,众宾进乐方<a id="commentRef11" href="#" class="commentRef" data-related-div="commentDiv11">#3</a>。长筵坐戏客,斗鸡观闲房<a id="commentRef12" href="#" class="commentRef" data-related-div="commentDiv12">#4</a>。群雄正翕赫,双翅自飞扬<a id="commentRef13" href="#" class="commentRef" data-related-div="commentDiv13">#5</a>。振羽激流风,悍目发朱光<a id="commentRef14" href="#" class="commentRef" data-related-div="commentDiv14">#6</a>。觜落轻毛散,严距往往伤<a id="commentRef15" href="#" class="commentRef" data-related-div="commentDiv15">#7</a>。长鸣入青云,扇翼独翱翔<a id="commentRef16" href="#" class="commentRef" data-related-div="commentDiv16">#8</a>。愿蒙狸膏助,长得擅此场<a id="commentRef17" href="#" class="commentRef" data-related-div="commentDiv17">#9</a>。
</div>
<div id="commentDiv1" class="commentDiv"><a class="commentRef" href="#commentRef1">#1</a>曹操统一北方后以邺城(今河北省临漳县邺城镇)为都,曹植与其兄曹丕以贵公子身份,与陈琳、王粲、徐幹、阮瑀、应玚、刘桢等建安诸子,经常相聚游园饮宴,诗赋唱和。当时流行斗鸡游戏,在一次斗鸡游戏后各有所作。这是曹植作的诗。现存的还有刘桢、应玚的同题诗。此诗的写作时间大约在建安十六年(211年)前后。前人有谓作于魏明帝筑斗鸡台的太和中,误;盖其时刘桢、应玚早已逝世;近人或谓作于建安二十五年前,亦不准确;盖刘桢、应玚、徐幹、陈琳于建安二十二年(217年)已死于大瘟疫,其时建安七子俱已亡故,此诗之作不会迟于邺下文人集团聚会活动之时。据现存建安诸子作品,他们的聚会活动主要在建安十六年曹丕封五官中郎将、丞相副前后一、二年,以后丕、植争嗣矛盾激化,建安文人分属丕党、植党,集体活动逐渐减少,如应玚、刘桢即分属两党。应玚《斗鸡》诗有“兄弟游戏场,命驾迎众宾”两句,既称“兄弟”和“众宾”,据此推想,此诗也可能作于曹丕任五官中郎将之前或当年。据以上考察,可信此诗是曹植的早期诗作,即十九岁左右的作品。全诗描写斗鸡游戏的热烈场面,对斗鸡的描写细致、传神,巧用比喻和夸饰,显示出青年作者的才华,也展示了当时贵公子生活和文人文艺活动的一个生动的镜头。
</div>
<div id="commentDiv2" class="commentDiv"><a class="commentRef" href="#commentRef2">#2</a>〔游目二句〕游目:游古通流,流目即放目随意观望。极:穷尽。妙伎:优美的舞伎。伎,古代女歌舞艺人。厌:倦。宫商:音调名,代指乐曲。二句意为看遍了舞女优美的舞蹈,听厌了音乐的曲调。
</div>
<div id="commentDiv3" class="commentDiv"><a class="commentRef" href="#commentRef3">#3</a>〔主人〕指曹丕、曹植兄弟。〔无为〕无事做。〔乐方〕娱乐方式。
</div>
<div id="commentDiv4" class="commentDiv"><a class="commentRef" href="#commentRef4">#4</a>〔长筵〕筵,竹席。古人席地而坐,地上铺竹席称筵,筵上再铺一重称席,筵长,席短,故称长筵。〔戏客〕参加游戏的宾客。〔闲房〕殿旁两侧空房。闲,静也。观闲,丁晏《曹集铨评》(以下简称丁本)作“闲观”,《艺文类聚》作“閒观”,宋刊本《曹子建文集》(以下简称宋本)闲作间,闲间古通,间为闲的异体,今规范字为闲。斗鸡观闲房,即在殿房旁空房观斗鸡。
</div>
<div id="commentDiv5" class="commentDiv"><a class="commentRef" href="#commentRef5">#5</a>〔翕(xī)赫〕盛貌,形容斗鸡气势高昂。〔双翅〕丁本作双翘,《艺文类聚》作双翅,按《说文解字》:“翘,尾长毛也。”双翘则欠通,故据《艺文类聚》改。〔飞扬〕形容双翅羽毛竖立若飞。
</div>
<div id="commentDiv6" class="commentDiv"><a class="commentRef" href="#commentRef6">#6</a>〔振羽二句〕激流风,丁本原作“邀清风”,《艺文类聚》作“激流风”。案此句应为挥羽激流风。挥羽,振动羽毛。激,发也。流风,急风。〔悍目〕凶悍的目光。二句意为振动羽毛激起急风,凶悍的目光发出红色光芒。
</div>
<div id="commentDiv7" class="commentDiv"><a class="commentRef" href="#commentRef7">#7</a>〔觜落〕觜同“嘴”。斗鸡以尖嘴相啄,乃至伤损脱落。〔轻毛〕柔细的毛散乱脱落。〔严距〕古代斗鸡用锋利的金属附于鸡爪,斗时用以刺伤对方,又称金距。
</div>
<div id="commentDiv8" class="commentDiv"><a class="commentRef" href="#commentRef8">#8</a>〔长鸣入青云〕斗胜的鸡先鸣,鸣声高昂。此处夸张地形容其响声直彻云霄。〔扇翼〕扇同“搧”,搧动羽翼。〔翱翔〕本义是禽鸟的飞翔,亦指游逛徘徊,这里指自得地绕场急走。
</div>
<div id="commentDiv9" class="commentDiv"><a class="commentRef" href="#commentRef9">#9</a>〔愿蒙二句〕狸膏:黄鼠狼的油膏。丁晏《事类赋注》引《庄子》逸篇:“羊沟之鸡,时以胜人者,以狸膏涂其头也。”盖鸡畏狸,凃狸膏可退敌。长,宋本作“常”。擅,专也。二句意为希望有狸膏的帮助而专擅于斗鸡场。
</div>
<div id="commentDiv10" class="commentDiv"><a class="commentRef" href="#commentRef10">#2</a>〔游目二句〕游目:游古通流,流目即放目随意观望。极:穷尽。妙伎:优美的舞伎。伎,古代女歌舞艺人。厌:倦。宫商:音调名,代指乐曲。二句意为看遍了舞女优美的舞蹈,听厌了音乐的曲调。
</div>
<div id="commentDiv11" class="commentDiv"><a class="commentRef" href="#commentRef11">#3</a>〔主人〕指曹丕、曹植兄弟。〔无为〕无事做。〔乐方〕娱乐方式。
</div>
<div id="commentDiv12" class="commentDiv"><a class="commentRef" href="#commentRef12">#4</a>〔长筵〕筵,竹席。古人席地而坐,地上铺竹席称筵,筵上再铺一重称席,筵长,席短,故称长筵。〔戏客〕参加游戏的宾客。〔闲房〕殿旁两侧空房。闲,静也。观闲,丁晏《曹集铨评》(以下简称丁本)作“闲观”,《艺文类聚》作“閒观”,宋刊本《曹子建文集》(以下简称宋本)闲作间,闲间古通,间为闲的异体,今规范字为闲。斗鸡观闲房,即在殿房旁空房观斗鸡。
</div>
<div id="commentDiv13" class="commentDiv"><a class="commentRef" href="#commentRef13">#5</a>〔翕(xī)赫〕盛貌,形容斗鸡气势高昂。〔双翅〕丁本作双翘,《艺文类聚》作双翅,按《说文解字》:“翘,尾长毛也。”双翘则欠通,故据《艺文类聚》改。〔飞扬〕形容双翅羽毛竖立若飞。
</div>
<div id="commentDiv14" class="commentDiv"><a class="commentRef" href="#commentRef14">#6</a>〔振羽二句〕激流风,丁本原作“邀清风”,《艺文类聚》作“激流风”。案此句应为挥羽激流风。挥羽,振动羽毛。激,发也。流风,急风。〔悍目〕凶悍的目光。二句意为振动羽毛激起急风,凶悍的目光发出红色光芒。
</div>
<div id="commentDiv15" class="commentDiv"><a class="commentRef" href="#commentRef15">#7</a>〔觜落〕觜同“嘴”。斗鸡以尖嘴相啄,乃至伤损脱落。〔轻毛〕柔细的毛散乱脱落。〔严距〕古代斗鸡用锋利的金属附于鸡爪,斗时用以刺伤对方,又称金距。
</div>
<div id="commentDiv16" class="commentDiv"><a class="commentRef" href="#commentRef16">#8</a>〔长鸣入青云〕斗胜的鸡先鸣,鸣声高昂。此处夸张地形容其响声直彻云霄。〔扇翼〕扇同“搧”,搧动羽翼。〔翱翔〕本义是禽鸟的飞翔,亦指游逛徘徊,这里指自得地绕场急走。
</div>
<div id="commentDiv17" class="commentDiv"><a class="commentRef" href="#commentRef17">#9</a>〔愿蒙二句〕狸膏:黄鼠狼的油膏。丁晏《事类赋注》引《庄子》逸篇:“羊沟之鸡,时以胜人者,以狸膏涂其头也。”盖鸡畏狸,凃狸膏可退敌。长,宋本作“常”。擅,专也。二句意为希望有狸膏的帮助而专擅于斗鸡场。
</div><div id="floatingBox" style="display:none"></div><script>// 获取浮动框的DOM元素const floatingBox = document.getElementById('floatingBox');// 获取所有带有 commentRef 类的a标签元素const commentRefs = document.querySelectorAll('.commentRef');// 获取所有带有 commentDiv 类的div标签元素const commentDivs = document.querySelectorAll('.commentDiv');// 遍历每个a标签,添加点击事件监听器commentRefs.forEach(function (link) {link.addEventListener('click', function (event) {// 阻止a标签默认的跳转行为event.preventDefault();// 获取当前a标签关联的div的idconst relatedDivId = link.dataset.relatedDiv;// 根据id获取对应的div元素const relatedDiv = document.getElementById(relatedDivId);// 获取要显示的文字内容const text = relatedDiv.textContent;// 设置浮动框的内容floatingBox.textContent = text;// 设置浮动框显示并定位到点击位置floatingBox.style.display = 'block';floatingBox.style.left = event.pageX + 'px';floatingBox.style.top = event.pageY + 'px';});});// 给浮动框添加点击事件监听器,点击浮动框可隐藏浮动框floatingBox.addEventListener('click', function (event) {// 阻止事件冒泡,避免影响后续查找对应的a标签逻辑event.stopPropagation();floatingBox.style.display = 'none';});</script>
</body></html>
前面处理后的注释引用,如果不喜欢这个样式,也可以用VBA替换回带圈数字样式,但是带圈数字编号太大时比较麻烦(曹植集注中有的诗注释达到了六七十条),不如只利用查找替换将“#”删掉。如果注释太多编号数量超过Integer数据类型的范围(可能性约等于0),可以将VBA代码中的i,j定义为Long数据类型。
因为本文是由于编辑诗歌电子书引发的,如果点赞超过十个,我就在这个编程序的平台放一首自己写的长诗。☺
相关文章:
将带注释的Word文档改造成点击注释引用即可弹窗显示注释的HTML文档
阅读中国古籍电子书的时候,往往有很多注释。在正文和注释之间来回滚动页面是一件挺麻烦的事,比较方便的做法是将它编辑成通过点击注释引用即将注释弹出显示在引用所在位置的HTML文档,然后利用HTML文档制作成PDF或者epub文件,就比较…...
【Android开发】安装Android Studio(2023.1.1)
下载安装包 Android Studio2023.1.1百度云盘下载,提取码:6666https://pan.baidu.com/s/1vNJezi7aDOP0poPADcBZZg?pwd6666 安装Android Studio 2023.1.1 双击下载好的安装包 弹出界面点击下一步 继续点击【Next】 更改安装路径后继续点击【Next】 点…...
SQLite Truncate Table
SQLite Truncate Table SQLite 是一种轻量级的数据库管理系统,广泛用于各种应用程序中。在数据库管理中,有时候需要快速删除表中的所有数据,这时就可以使用 TRUNCATE TABLE 命令。然而,SQLite 与其他数据库管理系统(如…...
港科夜闻 | 香港科大与荷兰代尔夫特理工大学(TU Delft)建立合作伙伴关系,推动艺术科技教育与研究...
关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与荷兰代尔夫特理工大学(TU Delft)建立合作伙伴关系,推动艺术科技教育与研究。2024年12月6日,合作伙伴计划正式启动,双方期望透过合作加强艺术科技知识交流,借此推…...
谈一谈大数据流式处理,以Spark Streaming为例详细论述
Spark Streaming是构建在Spark上的实时流计算框架,可以进行实时流数据处理。Spark是一个类似于MapReduce的分布式计算框架,其核心是弹性分布式数据集,可以在快速在内存中对数据集进行多次迭代,以支持复杂的数据挖掘算法和图形计算…...
RabbitMQ实现消息发送接收——实战篇(路由模式)
本篇博文将带领大家一起学习rabbitMQ如何进行消息发送接收,我也是在写项目的时候边学边写,有不足的地方希望在评论区留下你的建议,我们一起讨论学习呀~ 需求背景 先说一下我的项目需求背景,社区之间可以进行物资借用,…...
Docker Desktop占用空间问题解决
Windows安装Docker Desktop,没过多久就会发现C盘空间满了,很大可能是Docker Desktop的文件占用了空间,可以通过以下步骤解决: 步骤一:执行清理命令 docker system prune清理磁盘,删除关闭的容器、无用的数…...
系统性能优化
一、概述 性能优化的目标:是提高系统或应用程序的响应时间、吞吐量、cpu、内存、磁盘IO、网络、流量、JVM、Tomcat、DB等方面的性能指标。 性能优化需要有一些技巧:对于整个产品或项目而言,比如可以从前端优化、后端优化、架构优化、高并发…...
golang操作sqlite3加速本地结构化数据查询
目录 摘要Sqlite3SQLite 命令SQLite 语法SQLite 数据类型列亲和类型——优先选择机制 SQLite 创建数据库SQLite 附加数据库SQLite 分离数据库 SQLite 创建表SQLite 删除表 SQLite Insert 语句SQLite Select 语句SQLite 运算符SQLite 算术运算符SQLite 比较运算符SQLite 逻辑运算…...
【NebulaGraph】mac通过Docker安装以及官方查询示例、以及索引详解还有数据构建案例(五)
【NebulaGraph】mac通过Docker安装以及官方查询示例 1. Docker安装NebulaGraph2. 官方查询示例3. Nebula Graph 的 Java 数据解析实践与指导4. 从零到一:如何构建一个企业股权图谱系统?5. Nebula Graph 索引详解6. nGQL 执行计划详解与调优7. 图数据库的…...
【一本通】家庭作业(贪心算法)
【一本通】家庭作业 C语言代码 💐The Begin💐点点关注,收藏不迷路💐 老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分。每个作业的截止日期和学分可能是不同的。例如如果一个作业…...
Kylin麒麟操作系统 | 网络链路聚合配置(team和bond)
目录 一、理论储备1. 链路聚合 二、任务实施1. team模式2. bond模式 一、理论储备 1. 链路聚合 链路聚合是指将多个物理端口捆绑在一起,形成一个逻辑端口,以实现出/入流量在各成员端口中的负载分担。链路聚合在增加链路带宽、实现链路传输弹性和冗余等…...
2024年软件测试面试题大全【含答案】
一、面试基础题 简述测试流程: 1、阅读相关技术文档(如产品PRD、UI设计、产品流程图等)。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例(等价类划分法、边界值分析法等)。 5、用例评审(…...
Stable Diffusion 提示词语法
1.提示词基础 1.提示词之间用英文逗号,分隔 2.提示词之间是可以换行的 3.权重默认为1,越靠前权重越高 4.数量控制在75个单位以内 2.提示词各种符号的意义 2.1 ()、[]、{}符号 权重值()小括号[]中括号{}大括号默认1111层()1.1[]0.9{}1.052层(()) 1.121.21[[]]0.920.81{{}}1.…...
Y20030004基于asp.net+Sql的环保网站的设计与实现(附源码 调试 文档)
环保网站的设计与实现 1.摘要要2. 系统功能3.功能结构图4.界面展示5.源码获取 1.摘要要 近几年国家对于环境管理是高度重视,尤其是对于环境生态的破坏与环境污染,已经严重影响到人类的生存和发展。为了使生态环境能够得到保护和改善,持续发展…...
OpenCV的简单练习
1、读取一张彩色图像并将其转换为灰度图。 import matplotlib.pyplot as pltimg plt.imread("./flower.png") # 灰度化 img_gray img[:,:,0]*0.299 img[:,:,1]*0.587 img[:,:,2]*0.114plt.subplot(121) plt.imshow(img) plt.subplot(122) plt.imshow(img_gray,c…...
VS2019中无法跳转定义_其中之一情况
我习惯了使用VS2019看stm的代码; 遇到的问题,在导入代码后,发现有些函数调用不能跳转到定义; 问题描述步骤 1、导入代码 2、跳转,无法跳转 1、中文路径 2、删除.vs文件 和网上查的都没办法解决 最后发现是VS不支持 …...
虚幻5描边轮廓材质
很多游戏内都有这种描边效果,挺实用也挺好看的,简单复刻一下 效果演示: Linethickness可以控制轮廓线条的粗细 这样连完,然后放到网格体细节的覆层材质上即可 可以自己更改粗细大小和颜色...
【C语言】多线程服务器
多线程服务器 多线程服务器步骤代码 多线程服务器 步骤 主线程创建子线程,用子线程和客户端通信。 步骤: 1.使用socket函数,获取一个socket文件描述符 2.使用setsockopt端口复用 3.使用bind函数允许客户端的哪些ip可以访问服务器 4.使用lis…...
跨平台轻量级RTSP技术设计和使用场景探讨
设计背景 跨平台内网超低延迟直播的创新引擎 为满足安防视频监控、教育培训、工业生产、医疗健康、智能物联网等内网超低延迟需求,避免让用户配置单独的服务器,大牛直播SDK在推送端发布了跨平台(Windows|Linux(含x86_64|aarch64…...
分解质因数
题目描述 给定 n个正整数a,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。 输入格式 第一行包含整数 n。 接下来 n行,每行包含一个正整数 a。 输出格式 对于每个正整数 aiai,按照从小到大的顺…...
wordpress建站--如何用Let‘s Encrypt给网站添加免费ssl证书,支持https访问
本文首发网站:https://www.click234.com 默认情况下我们的网站是http访问,为了增加访问安全性,我们需要添加ssl证书,支持采用https方式访问,今天我们来看下怎么创建免费的ssl证书--Lets Encrypt 使用 Certbot 自动化工…...
web实操7——ServletContext
概念 和服务器通信 功能 解释说明: mime:互联网中一种文件的类型,可以用servletContext对象来获取。 域对象:用来共享数据,里面有一些get,set,removeAttribute,只要搞清楚ServletContext对象的域的范围是什么 如何…...
Android中bindService和startService启动服务有何区别
Android中bindService和startService启动服务有何区别 bindService 和 startService 是 Android 中两种用于与 Service 交互的方式,它们的区别主要在于 生命周期管理 和 使用场景。以下是详细对比: 1. bindService方式 bindService 是一种绑定方式&am…...
Jupyter Notebook 切换虚拟环境
方法 切换到需要添加到Jupyter Notebook中的虚拟环境,执行: python -m ipykernel install --name Jupyter Notebook中显示的虚拟环境名称如果遇到 [Errno 13] Permission denied: /usr/local/share/jupyter类似的权限问题,可能是没有对应的…...
短波红外相机
短波红外相机搭载采用 SenSWIR 技术的 Sony 高灵敏度传感器,能捕获到400nm~1700nm范围的可见光-短波红外宽波段图像信息,该相机可替代传统的“可见光相机短波红外相机”双相机检测方案,降低系统成本、提高处理速度、扩大检测范围,…...
余弦相似度Cosine Sim
what 余弦相似度是一种用于度量向量相似性的metric。 c o s θ A . B ∣ A ∣ . ∣ B ∣ cos\theta \frac{A.B}{|A|.|B|} cosθ∣A∣.∣B∣A.B A.B:向量的内积|A|:向量的模长 c o s θ cos\theta cosθ:的范围$ [ -1 , 1 ] $ why 余弦…...
【从零开始的LeetCode-算法】1338. 数组大小减半
给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。 返回 至少 能删除数组中的一半整数的整数集合的最小大小。 示例 1: 输入:arr [3,3,3,3,5,5,5,2,2,7] 输出:2 解释:选择 {3,7…...
测试工程师八股文05|功能测试、业务测试
一、基础概念 1、软件测试分类 1️⃣按照软件产生的阶段划分 单元测试:针对程序源代码进行测试【开发自测】集成测试:针对模块之间功能交互进行测试系统测试:对整个系统(功能、非功能)进行全面测试验收测试ÿ…...
【电源专题】开关转换器使能(EN)和欠压锁定(UVLO)为什么需要回滞?
在文章:【电源专题】案例:芯片规格书使能定义高电平最小阈值1.4V,那真的是到1.4V时才开始输出?_芯片的电流阀值-CSDN博客中我们提到一般来说开关转换器的使能脚是有一个回滞的,比如下图所示的芯片规格书...
TS的类型守卫、类型约束实践
类型守卫 // 基础类型判断 const arr [30, 50] console.log(typeof arr) // object const set new Set(arr) console.log(typeof set) // object const map new Map() console.log(typeof map) // objectclass Customer {constructor() {}buy(method:string) {console.log(…...
Thread线程基础使用
多线程目的:其实就是希望“并行”执行多任务,提升效率。 单核多线程基于时间片轮询 并发而非并行 线程最大数等于cpu核心数为佳 namespace thinger.ThreadDemo {class Program{//主线程static void Main(string[] args){Console.WriteLine("这个…...
番外篇 | BGF-YOLO:引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8检测性能
前言:Hello大家好,我是小哥谈。本文提出了一种名为BGF-YOLO的新模型,通过引入双层路由注意力、广义特征金字塔网络和第四检测头,提高YOLOv8在脑肿瘤检测中的性能,采用多层特征融合与动态稀疏注意机制以减少特征冗余。 🌈 目录 🚀1.基础概念 🚀2.网络结构 �…...
15-从 TypeScript 到 ArkTS 的适配规则(5)
15-从 TypeScript 到 ArkTS 的适配规则(5) 不支持确定赋值断言 **规则:**arkts-no-definite-assignment 级别:警告 ArkTS不支持确定赋值断言,例如:let v!: T。改为在声明变量的同时为变量赋值。 TypeS…...
UniApp配置使用原子化tailwindcss
参考视频 创建项目 新建项目选择uniapp - vue版本这里我选择3 - 点击创建即可 创建完成后,如果是要编译到小程序的项目则可以先将项目运行到小程序打开了 初始化package.json 执行 npm init -y安装和配置 安装 npm i -D tailwindcss postcss autoprefixer # 安…...
魅族手机刷官方系统
从魅族官网下载固件 https://flyme.cn/firmware.html 找到自己的型号,里面有历史版本、最新版,按照需求下载。 下载的是update.zip,改名就不能升级了 方法1 直接点击下载的update.zip包就可以升级。 方法2 将文件移动到文件管理的根目录&a…...
【欧几里得算法以及扩展欧几里得算法】
欧几里得算法 假设有两个非负整数 a , b a,b a,b,并且 a , b a,b a,b都不等于0,那么 a , b a,b a,b的最大公约数等于其中较小的数和 a , b a,b a,b相除的余数的最大公约数。 用公式表达为 g c d ( a , b ) g c d ( b , a ( m o d b ) ) gcd(a,b)gcd(b,a\pmod{b})…...
CentOS7 Apache安装踩坑
Gnome桌面右键弹出终端。 [rootlocalhost ~]# yum repolist 已加载插件:fastestmirror, langpacks /var/run/yum.pid 已被锁定,PID 为 2611 的另一个程序正在运行。 Another app is currently holding the yum lock; waiting for it to exit... [root…...
c#基于tcp的打印机共享程序可以打印图片
c sharp 基于tcp共享图片打印程序: 基于c#的tcp打印服务程序https://gitee.com/paoxi/tcpprint代码已经开源 执行文件在下方 tcp打印发送端 庖犠/c sharp 基于tcp共享图片打印程序 - Gitee.comhttps://gitee.com/paoxi/tcpprint/releases/tag/0.9...
二分查找算法
目录 1.二分查找 2.在排序数组中查找元素的第一个和最后一个位置 2.1题目解析 2.2算法原理 2.3编写代码 3.x的平方根 3.1题目解析 3.2算法原理 3.3编写代码 4.搜索插入位置 4.1题目解析 4.2算法原理 4.3编写代码 5.山脉数组的峰顶索引 5.1题目解析 5.2算法原理 …...
【Python技术】同花顺wencai涨停分析基础上增加连板分析
周末,有读者加我, 说 之前的涨停分析 是否可以增加连板分析。 这个可以加上。 先看效果 这里附上完整代码: import streamlit as st import pywencai import pandas as pd from datetime import datetime, timedelta import plotly.graph_o…...
多线程的知识总结(8):用 thread 类 或全局 async (...) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数
(40)用 thread 类 或全局 async (…) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数? 弄清楚这个问题,有利于推测和理解线程中代码的执行流程。根据 thread 类 和 async (…࿰…...
mp4影像和m4a音频无损合成视频方法
第一步:复制高清视频地址 url 第二步:打开网址粘贴复制的视频url视频下载 第三步:下载-影像.mp4和-音频.m4a 第四步:合并视频; 使用ffmpeg进行无损合成(如果没有安装ffmpeg请自行下载安装下载 FFmpeg (p2hp.com)&…...
CEF 数据加密与网络安全
随着网络攻击的日益猖獗,确保应用的安全性已经成为开发者的首要任务。特别是在现代Web应用中,如何确保数据的加密存储、网络通信的安全性以及有效的认证机制成为至关重要的问题。对于基于 Chromium Embedded Framework (CEF) 的应用,开发者必…...
【Linux学习】十五、Linux/CentOS 7 用户和组管理
Linux下组和用户的管理都必须是root用户下进行: 一、组的管理 1.组的创建 格式: groupadd 组名参数: -g:指定用户组的组ID(GID),如果不提供则由系统自动分配。 【案例】创建一个名为 oldg…...
C语言实现图片文件的复制
在C语言中,直接处理图片文件(如JPEG、PNG等)的复制,通常涉及到文件I/O操作。这些图片文件是二进制文件,因此需要使用二进制模式读取和写入文件。 图片文件复制代码: #include <stdio.h> #include&l…...
噪杂环境(房车改装市场)离线语音通断器模块
一直在坚持,却很难有机会上热门,在现在这个以流量为导向的时代,貌似很难靠所谓的坚守和热爱把产品成功的推向市场了。目前的客户仍然是以老客户为主,应用场景主要是房车改装,根据九客户的需求定制化一些模块。因为没有…...
网络安全知识点
第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 1.2.3 网络安全的种类P5 (1…...
QT<32>软件子页面最小化后再次点击置顶显示
一、前言 在 Qt 中,当一个窗口被最小化后,再次点击恢复它时,默认情况下,窗口恢复的方式可能并不总是显示在最顶层。这通常是因为窗口恢复后会被置于操作系统的默认层次结构中,而不是直接处于最上层。为了确保恢复后的窗…...
TCP 数据传输的拆包和粘包了解吗?
前言: 上一篇我们了解了什么是 TCP 协议,以及 TCP 协议 3 次握手 4次挥手的原因,本篇来分享一下 TCP 数据的传输过程的拆包和粘包,以及 TCP 数据传输过程中的一些细节。 计算机网络往期文章 TCP 为什么是 3 次握手 4 次挥手&am…...