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

在word中使用zotero添加参考文献并附带超链接

一、引言

在写大论文时,为了避免文中引用与文末参考文献频繁对照、修改文中引用顺序/引用文献时手动维护参考文献耗易出错,拟在 word 中使用 zotero 插入参考文献,并为每个参考文献附加超链接,实现交互式阅读。

版本:word2016 + zotero7.0.15

二、配置zotero

这里我首先对 zotero 进行了一下更新,原本我是 6.0 版本,更新为 7.0 版本后发现好多东西 zotero 都已经自带了,不需要再自行下载配置。

1. 添加引用文献样式

下载链接
里面有非常多学校的模板,感谢各位大佬的分享。

下载好后,选择自己学校的模板,然后双击 cls 文件,即可添加至 zotero 参考文献样式库。

在这里插入图片描述
安装。

在这里插入图片描述
OK。

调用这个模板后没有出现中英文混杂等任何问题。

2. 配置宏实现超链接

参考链接1
参考链接2

  1. word 选项卡——>视图——>宏——>查看宏
    在这里插入图片描述
  2. 创建一个名为 ZoteroLinkCitation 的宏
    在这里插入图片描述
  3. 在编辑器中填入以下代码并保存
Public Sub ZoteroLinkCitation()' get selected area (if applicable)Dim nStart&, nEnd&nStart = Selection.StartnEnd = Selection.End' toggle screen updatingApplication.ScreenUpdating = False' define variablesDim title As StringDim titleAnchor As StringDim style As StringDim fieldCode As StringDim numOrYear As StringDim pos&, n1&, n2&, n3&ActiveWindow.View.ShowFieldCodes = TrueSelection.Find.ClearFormatting' find the Zotero bibliographyWith Selection.Find.Text = "^d ADDIN ZOTERO_BIBL".Replacement.Text = "".Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForms = FalseEnd WithSelection.Find.Execute' add bookmark for the Zotero bibliographyWith ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="Zotero_Bibliography".DefaultSorting = wdSortByName.ShowHidden = TrueEnd With' loop through each field in the documentFor Each aField In ActiveDocument.Fields' check if the field is a Zotero in-text reference'##################################################If InStr(aField.Code, "ADDIN ZOTERO_ITEM") > 0 ThenfieldCode = aField.Code'#############' Prepare' Plain citation== Format of Textfield shown' must be in BracketsDim plain_Cit As StringplCitStrBeg = """plainCitation"":""["plCitStrEnd = "]"""n1 = InStr(fieldCode, plCitStrBeg)n1 = n1 + Len(plCitStrBeg)n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), plCitStrEnd) - 1 + n1plain_Cit = Mid$(fieldCode, n1 - 1, n2 - n1 + 2)'Reference 'as shown' in word as a string'Title array in fieldCode (all referenced Titles within this field)Dim array_RefTitle(32) As Stringi = 0Do While InStr(fieldCode, """title"":""") > 0n1 = InStr(fieldCode, """title"":""") + Len("""title"":""")n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), """,""") - 1 + n1If n2 < n1 Then 'Exception the type 'Article'n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), "}") - 1 + n1 - 1End Ifarray_RefTitle(i) = Mid(fieldCode, n1, n2 - n1)fieldCode = Mid(fieldCode, n2 + 1, Len(fieldCode) - n2 - 1)i = i + 1LoopTitles_in_Cit = i'Number array with References shown in PlainCit'Numer is equal or less than Titels, depending on the type'[3], [8]-[10]; [2]-[4]; [2], [4], [5]' All citations have to be in Brackets each! [3], [8] not [3, 8]' This doesnt work otherwise!' --> treatment of other delimiters could be implemented hereDim RefNumber(32) As Stringi = 0Do While (InStr(plain_Cit, "]") Or InStr(plain_Cit, "[")) > 0n1 = InStr(plain_Cit, "[")n2 = InStr(plain_Cit, "]")RefNumber(i) = Mid(plain_Cit, n1 + 1, n2 - (n1 + 1))plain_Cit = Mid(plain_Cit, n2 + 1, Len(plain_Cit) - (n2 + 1) + 1)i = i + 1LoopRefs_in_Cit = i'treat only the shown references (skip the rest)'[3], [8]-[10] --> skip [9]'Order of titles given from fieldcode, not checked!If Titles_in_Cit > Refs_in_Cit Thenarray_RefTitle(Refs_in_Cit - 1) = array_RefTitle(Titles_in_Cit - 1)i = 1Do While Refs_in_Cit + i <= Titles_in_Citarray_RefTitle(Refs_in_Cit + i - 1) = ""i = i + 1LoopEnd If'#############'Make the linksFor Refs = 0 To Refs_in_Cit - 1 Step 1title = array_RefTitle(Refs)array_RefTitle(Refs) = ""' make title a valid bookmark nametitleAnchor = titletitleAnchor = MakeValidBMName(titleAnchor)ActiveWindow.View.ShowFieldCodes = FalseSelection.GoTo What:=wdGoToBookmark, Name:="Zotero_Bibliography"'' locate the corresponding reference in the bibliography'' by searching for its titleSelection.Find.ClearFormattingWith Selection.Find.Text = Left(title, 255).Replacement.Text = "".Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForms = FalseEnd WithSelection.Find.Execute' select the whole caption (for mouseover tooltip)Selection.MoveStartUntil ("["), Count:=wdBackwardSelection.MoveEndUntil (vbBack)lnkcap = "[" & Selection.Textlnkcap = Left(lnkcap, 70)' add bookmark for the reference within the bibliographySelection.ShrinkWith ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:=titleAnchor.DefaultSorting = wdSortByName.ShowHidden = TrueEnd With' jump back to the fieldaField.Select' find and select the numeric part of the field which will become the hyperlinkSelection.Find.ClearFormattingWith Selection.Find.Text = RefNumber(Refs).Replacement.Text = "".Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForms = FalseEnd WithSelection.Find.ExecutenumOrYear = Selection.Range.Text & ""' store current stylestyle = Selection.style' Generate the Hyperlink -->Forward!ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", SubAddress:=titleAnchor, ScreenTip:=lnkcap, TextToDisplay:="" & numOrYear' reset the style' comment if you want standard link styleaField.SelectWith Selection.Font.Underline = wdUnderlineNone.ColorIndex = wdBlackEnd WithNext Refs 'References in CitEnd If  'If Zotero-Field'#########################Next aField ' next field' go back to original range selectedActiveWindow.View.ShowFieldCodes = FalseActiveDocument.Range(nStart, nEnd).SelectEnd SubFunction MakeValidBMName(strIn As String)Dim pFirstChr As StringDim i As LongDim tempStr As StringstrIn = Trim(strIn)pFirstChr = Left(strIn, 1)If Not pFirstChr Like "[A-Za-z]" ThenstrIn = "A_" & strInEnd IfFor i = 1 To Len(strIn)Select Case Asc(Mid$(strIn, i, 1))Case 49 To 57, 65 To 90, 97 To 122tempStr = tempStr & Mid$(strIn, i, 1)Case ElsetempStr = tempStr & "_"End SelectNext itempStr = Replace(tempStr, "  ", " ")MakeValidBMName = Left(tempStr, 40)End Function
  1. 添加超链接
    回到Word,切换到视图栏,然后打开宏窗口,找到刚刚创建好的宏,然后点击运行:
    在这里插入图片描述
    即可为每篇文献添加超链接。

三、问题

1. 新建宏

这里我首先用了 zotero 自带的 ZoteroLinkCitation 宏,运行后出现了如下问题:
在这里插入图片描述
然后我又新建了一个 ZoteroLinkCitation 宏,复制了 CSDN 上另外一个大佬分享的代码,但是运行时出现了如下错误:
在这里插入图片描述
搜索了一下好像是因为选中的文本中包含了换行符?我改了一下没有改好,然后又换成了上面那位大佬分享的代码,没有选择任何文本,直接运行之后没有错误,成功添加了超链接。

2. 在同一个位置引用多篇文献的方法

经典视图中点击“多重来源”,并且可以调整多个文献的相对顺序:

在这里插入图片描述

在这里插入图片描述

3.无法在同一个位置添加多个超链接

1. 问题描述

这里我使用新建宏添加了超链接后,出现了一个问题,即 1 个方括号只能为 1 篇参考文献添加超链接。具体来讲,就是当 1 个位置同时引用了多篇参考文献时,只能添加最后 1 篇参考文献的链接:
在这里插入图片描述
由于 zoero 实际上是通过书签的方式添加超链接的,因此我们先查看一下参考文献中是不是每篇都添加了书签。

word 选项卡——>文件——>选项——>高级——>显示书签
在这里插入图片描述

然后看到参考文献中的确有些文献没有附上书签,例如文献 2、4:

在这里插入图片描述
或者查看所有书签的名称:
在这里插入图片描述
宏代码中是使用文献名称作为书签名的,可以发现书签数量与文献数量并不相符。因此确实有些文献没有成功创建超链接。

2. 解决方案

来看一下这段 VBA 代码写了什么(不得不说有大模型太方便了,分分钟解释清楚代码在干嘛):

' 声明一个公共子程序(宏)ZoteroLinkCitation
Public Sub ZoteroLinkCitation()' 获取当前选中的文本区域(如果存在选择)
' 定义长整型变量存储选区起始和结束位置Dim nStart&, nEnd&nStart = Selection.Start  ' 记录选区开始位置nEnd = Selection.End      ' 记录选区结束位置' 关闭屏幕刷新(提升执行速度)Application.ScreenUpdating = False' 定义变量Dim title As String           ' 存储文献标题Dim titleAnchor As String     ' 存储有效书签名Dim style As String           ' 存储文本样式Dim fieldCode As String       ' 存储字段代码Dim numOrYear As String       ' 存储引用编号或年份Dim pos&, n1&, n2&, n3&       ' 存储位置索引ActiveWindow.View.ShowFieldCodes = True  ' 显示字段代码Selection.Find.ClearFormatting          ' 清除查找格式,确保查找操作不会受到之前格式设置的影响。' 查找Zotero参考文献目录字段With Selection.Find.Text = "^d ADDIN ZOTERO_BIBL"  ' 查找特殊字段标识.Replacement.Text = "".Forward = True                 ' 向前查找.Wrap = wdFindContinue          ' 查找范围为整个文档.Format = False                 ' 不匹配格式.MatchCase = False              ' 不区分大小写.MatchWholeWord = False         ' 不匹配整个单词.MatchWildcards = False         ' 不使用通配符.MatchSoundsLike = False        ' 不匹配发音相似的单词.MatchAllWordForms = False      ' 不匹配所有词形End WithSelection.Find.Execute              ' 执行查找' 为找到的参考文献目录添加书签With ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="Zotero_Bibliography"  ' 创建书签.DefaultSorting = wdSortByName                            ' 默认按名称排序.ShowHidden = True                                        ' 显示隐藏书签End With' 遍历文档中的所有字段For Each aField In ActiveDocument.Fields' 检查是否是Zotero的引用字段If InStr(aField.Code, "ADDIN ZOTERO_ITEM") > 0 ThenfieldCode = aField.Code  ' 获取字段代码'############# 准备阶段 #############' 提取纯文本引用(例如[3])Dim plain_Cit As StringplCitStrBeg = """plainCitation"":""["  ' 定义引用开始标记plCitStrEnd = """]"""                   ' 定义引用结束标记n1 = InStr(fieldCode, plCitStrBeg)       ' 查找开始位置n1 = n1 + Len(plCitStrBeg)n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), plCitStrEnd) - 1 + n1plain_Cit = Mid$(fieldCode, n1 - 1, n2 - n1 + 2)  ' 提取引用内容' 提取所有文献标题到数组Dim array_RefTitle(32) As String  ' 最多存储32个标题i = 0Do While InStr(fieldCode, """title"":""") > 0  ' 循环查找所有标题n1 = InStr(fieldCode, """title"":""") + Len("""title"":""")n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), """,""") - 1 + n1If n2 < n1 Then  ' 处理特殊类型(如文章)n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), "}") - 1 + n1 - 1End Ifarray_RefTitle(i) = Mid(fieldCode, n1, n2 - n1)  ' 存储标题fieldCode = Mid(fieldCode, n2 + 1, Len(fieldCode) - n2 - 1)i = i + 1LoopTitles_in_Cit = i  ' 记录找到的标题数量' 提取引用编号(例如[3]中的3)Dim RefNumber(32) As Stringi = 0Do While (InStr(plain_Cit, "]") Or InStr(plain_Cit, "[")) > 0n1 = InStr(plain_Cit, "[")n2 = InStr(plain_Cit, "]")RefNumber(i) = Mid(plain_Cit, n1 + 1, n2 - (n1 + 1))  ' 提取编号plain_Cit = Mid(plain_Cit, n2 + 1, Len(plain_Cit) - (n2 + 1) + 1)i = i + 1LoopRefs_in_Cit = i  ' 记录引用编号数量' 处理标题与引用编号数量不一致的情况If Titles_in_Cit > Refs_in_Cit Thenarray_RefTitle(Refs_in_Cit - 1) = array_RefTitle(Titles_in_Cit - 1)i = 1Do While Refs_in_Cit + i <= Titles_in_Citarray_RefTitle(Refs_in_Cit + i - 1) = ""i = i + 1LoopEnd If'############# 创建链接 #############For Refs = 0 To Refs_in_Cit - 1 Step 1title = array_RefTitle(Refs)array_RefTitle(Refs) = ""' 生成有效书签名(调用函数处理非法字符)titleAnchor = MakeValidBMName(title)' 跳转到参考文献书签位置ActiveWindow.View.ShowFieldCodes = FalseSelection.GoTo What:=wdGoToBookmark, Name:="Zotero_Bibliography"' 在参考文献中查找对应标题Selection.Find.ClearFormattingWith Selection.Find.Text = Left(title, 255)  ' 限制搜索长度.Replacement.Text = "".Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForms = FalseEnd WithSelection.Find.Execute' 选择完整的引用条目Selection.MoveStartUntil ("["), Count:=wdBackwardSelection.MoveEndUntil (vbBack)lnkcap = "[" & Selection.Text  ' 创建悬浮提示文本lnkcap = Left(lnkcap, 70)      ' 截断前70个字符' 为文献条目添加书签Selection.ShrinkWith ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:=titleAnchor.DefaultSorting = wdSortByName.ShowHidden = TrueEnd With' 返回原引用位置aField.Select' 查找引用编号所在位置Selection.Find.ClearFormattingWith Selection.Find.Text = RefNumber(Refs).Replacement.Text = "".Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForms = FalseEnd WithSelection.Find.ExecutenumOrYear = Selection.Range.Text & ""  ' 获取显示的编号' 创建超链接ActiveDocument.Hyperlinks.Add _Anchor:=Selection.Range, _Address:="", _SubAddress:=titleAnchor, _ScreenTip:=lnkcap, _TextToDisplay:="" & numOrYear' 重置字体样式(取消下划线)aField.SelectWith Selection.Font.Underline = wdUnderlineNone.ColorIndex = wdBlackEnd WithNext Refs  ' 处理下一个引用End If  ' 结束Zotero字段判断Next aField  ' 处理下一个字段' 恢复原始视图和选区ActiveWindow.View.ShowFieldCodes = FalseActiveDocument.Range(nStart, nEnd).SelectEnd Sub' 辅助函数:生成有效书签名(移除非法字符)
Function MakeValidBMName(strIn As String)Dim pFirstChr As StringDim i As LongDim tempStr As StringstrIn = Trim(strIn)pFirstChr = Left(strIn, 1)If Not pFirstChr Like "[A-Za-z]" Then  ' 首字符非字母时加前缀strIn = "A_" & strInEnd IfFor i = 1 To Len(strIn)Select Case Asc(Mid$(strIn, i, 1))  ' 只保留字母数字Case 49 To 57, 65 To 90, 97 To 122  ' 允许1-9, A-Z, a-ztempStr = tempStr & Mid$(strIn, i, 1)Case ElsetempStr = tempStr & "_"        ' 替换其他字符为下划线End SelectNext itempStr = Replace(tempStr, "  ", " ")  ' 替换双空格MakeValidBMName = Left(tempStr, 40)    ' 截断为前40字符End Function
1)参考文献以逗号形式隔开

参考链接

当遇到引用形式类似 [2, 3] 这种情况时,在执行完下面这段代码后:

 'Title array in fieldCode (all referenced Titles within this field) fieldCode中的标题数组(此字段中引用的所有标题)Dim array_RefTitle(32) As Stringi = 0Do While InStr(fieldCode, """title"":""") > 0n1 = InStr(fieldCode, """title"":""") + Len("""title"":""")n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), """,""") - 1 + n1If n2 < n1 Then 'Exception the type 'Article'n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), "}") - 1 + n1 - 1End Ifarray_RefTitle(i) = Mid(fieldCode, n1, n2 - n1)fieldCode = Mid(fieldCode, n2 + 1, Len(fieldCode) - n2 - 1)i = i + 1Loop

可以看到 array_RefTitle 确实存入了文献 2 和文献 3 的标题:
在这里插入图片描述
在执行完下面这段代码后,RefNumber 变为了 ‘2, 3’, Refs_in_Cit 变为了 1:

'Number array with References shown in PlainCit 'PlainCit中显示了引用的数字数组'Numer is equal or less than Titels, depending on the type 'Numer等于或小于Titels,具体取决于类型'[3], [8]-[10]; [2]-[4]; [2], [4], [5] '[3], [8]-[10]; [2]-[4]; [2], [4], [5]' All citations have to be in Brackets each! [3], [8] not [3, 8] 所有引文都必须用括号括起来![3] [8]不是[3,8]' This doesnt work otherwise! 否则,这行不通!' --> treatment of other delimiters could be implemented hereDim RefNumber(32) As Stringi = 0Do While (InStr(plain_Cit, "]") Or InStr(plain_Cit, "[")) > 0n1 = InStr(plain_Cit, "[")n2 = InStr(plain_Cit, "]")RefNumber(i) = Mid(plain_Cit, n1 + 1, n2 - (n1 + 1))plain_Cit = Mid(plain_Cit, n2 + 1, Len(plain_Cit) - (n2 + 1) + 1)i = i + 1LoopRefs_in_Cit = i

在这里插入图片描述

在这里插入图片描述
在执行完下面这段代码后,array_RefTitle 就只剩下了文献 3 的标题:

              'treat only the shown references (skip the rest) 仅处理显示的引用(跳过其余部分)'[3], [8]-[10] --> skip [9] [3] ,[8]-[10]-->跳过[9]'Order of titles given from fieldcode, not checked! 从字段代码给出的标题顺序,未选中!If Titles_in_Cit > Refs_in_Cit Thenarray_RefTitle(Refs_in_Cit - 1) = array_RefTitle(Titles_in_Cit - 1)i = 1Do While Refs_in_Cit + i <= Titles_in_Citarray_RefTitle(Refs_in_Cit + i - 1) = ""i = i + 1Loop

在这里插入图片描述
在执行到下面这段代码时:

 ' find and select the numeric part of the field which will become the hyperlink 查找并选择将成为超链接的字段的数字部分Selection.Find.ClearFormattingWith Selection.Find.Text = RefNumber(Refs).Replacement.Text = "".Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForms = FalseEnd WithSelection.Find.ExecutenumOrYear = Selection.Range.Text & ""' store current stylestyle = Selection.style' Generate the Hyperlink -->Forward!ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", SubAddress:=titleAnchor, ScreenTip:=lnkcap, TextToDisplay:="" & numOrYear

可以看到,插入超链接的文本就是 RefNumber,这里即为 ‘2, 3’。

看到这里问题已经很明白了。现在的代码是为每个方括号添加了超链接,且只能添加最后 1 篇文献的超链接。而我们需要的实际上是为每个引文编号添加超链接。
因此,我们只需要将插入超链接的文本由每个方括号的内容改为每个引用编号即可。将 RefNumber 部分的代码改为如下形式:

'Number array with References shown in PlainCit 'PlainCit中显示了引用的数字数组'Numer is equal or less than Titels, depending on the type 'Numer等于或小于Titels,具体取决于类型'[3], [8]-[10]; [2]-[4]; [2], [4], [5] '[3], [8]-[10]; [2]-[4]; [2], [4], [5]' All citations have to be in Brackets each! [3], [8] not [3, 8] 所有引文都必须用括号括起来![3] [8]不是[3,8]' This doesnt work otherwise! 否则,这行不通!' --> treatment of other delimiters could be implemented hereDim RefNumber(32) As Stringi = 0' 初始化起始位置和数组startPosition = InStr(plain_Cit, "[")commaPosition = 0ReDim commaPositions(0 To 0)Do While (InStr(plain_Cit, "]") Or InStr(plain_Cit, "[")) > 0' 查找逗号的位置commaPosition = InStr(plain_Cit, ",")  ' 这里查找的是第一个逗号的位置If commaPosition = 0 Then    ' 引文数量 = 1commaPosition = InStr(plain_Cit, "]")RefNumber(i) = Mid(plain_Cit, startPosition + 1, commaPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, commaPosition + 1, Len(plain_Cit) - (commaPosition + 1) + 1)Else    ' 引文数量 > 1RefNumber(i) = Mid(plain_Cit, startPosition + 1, commaPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, commaPosition + 2, Len(plain_Cit) - (commaPosition + 2))' 检查是否为空字符串If Len(Trim(plain_Cit)) = 0 Thenplain_Cit = plain_CitElseplain_Cit = "[" & plain_Cit & "]"End IfEnd Ifi = i + 1LoopRefs_in_Cit = i

以逗号为分隔,为每个引用编号添加超链接。这里由于我使用的引用文献样式中每个逗号后面都会有一个空格,所以提取字符串部分使用的是 commaPosition + 2,若没有空格则应该改为 commaPosition + 1。

运行后发现 4、5 分别引用成功了:
在这里插入图片描述
可以看到参考文献部分添加的书签也明显多了,例如2、4,都成功添加了书签:
在这里插入图片描述

2)参考文献以短横线连接

除了形如 [2, 3] 类的引用形式外,还存在 [6-8] 这类的形式。显然,这种形式的引用也只能添加最后 1 篇参考文献的链接:
在这里插入图片描述
以上如为例,我们需要的是为文献 2、6、8 分别添加超链接,这里 2 添加成功了,但是 6-8 只添加了文献 8 的链接。因此我们只需要再查找一下 “-” 的位置即可。

将 RefNumber 部分的代码改为如下形式:

'Number array with References shown in PlainCit 'PlainCit中显示了引用的数字数组'Numer is equal or less than Titels, depending on the type 'Numer等于或小于Titels,具体取决于类型'[3], [8]-[10]; [2]-[4]; [2], [4], [5] '[3], [8]-[10]; [2]-[4]; [2], [4], [5]' All citations have to be in Brackets each! [3], [8] not [3, 8] 所有引文都必须用括号括起来![3] [8]不是[3,8]' This doesnt work otherwise! 否则,这行不通!' --> treatment of other delimiters could be implemented hereDim RefNumber(32) As Stringi = 0' 初始化起始位置和数组startPosition = InStr(plain_Cit, "[")commaPosition = 0   ' 初始化逗号位置dashPosition = 0    ' 初始化短横线位置ReDim commaPositions(0 To 0)Do While (InStr(plain_Cit, "]") Or InStr(plain_Cit, "[")) > 0' 查找逗号的位置commaPosition = InStr(plain_Cit, ",")  ' 这里查找的是第一个逗号的位置' 查找短横线的位置dashPosition = InStr(plain_Cit, "-")  ' 这里查找的是第一个短横线的位置If commaPosition = 0 And dashPosition = 0 Then   ' 情况0:都不存在commaPosition = InStr(plain_Cit, "]")RefNumber(i) = Mid(plain_Cit, startPosition + 1, commaPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, commaPosition + 1, Len(plain_Cit) - (commaPosition + 1) + 1)ElseIf commaPosition > 0 And dashPosition > 0 Then   ' 情况1/2:两者都存在If commaPosition < dashPosition Then   ' 逗号在前RefNumber(i) = Mid(plain_Cit, startPosition + 1, commaPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, commaPosition + 2, Len(plain_Cit) - (commaPosition + 2))' 检查是否为空字符串If Len(Trim(plain_Cit)) = 0 Thenplain_Cit = plain_CitElseplain_Cit = "[" & plain_Cit & "]"End IfElse   ' 短横线在前RefNumber(i) = Mid(plain_Cit, startPosition + 1, dashPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, dashPosition + 1, Len(plain_Cit) - (dashPosition + 1))' 检查是否为空字符串If Len(Trim(plain_Cit)) = 0 Thenplain_Cit = plain_CitElseplain_Cit = "[" & plain_Cit & "]"End IfEnd IfElseIf commaPosition > 0 Then   ' 情况3:只有逗号RefNumber(i) = Mid(plain_Cit, startPosition + 1, commaPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, commaPosition + 2, Len(plain_Cit) - (commaPosition + 2))' 检查是否为空字符串If Len(Trim(plain_Cit)) = 0 Thenplain_Cit = plain_CitElseplain_Cit = "[" & plain_Cit & "]"End IfElse   ' 情况4:只有短横线RefNumber(i) = Mid(plain_Cit, startPosition + 1, dashPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, dashPosition + 1, Len(plain_Cit) - (dashPosition + 1))' 检查是否为空字符串If Len(Trim(plain_Cit)) = 0 Thenplain_Cit = plain_CitElseplain_Cit = "[" & plain_Cit & "]"End IfEnd Ifi = i + 1LoopRefs_in_Cit = i

运行结束后可以分别为每个引用编号添加超链接:
在这里插入图片描述
再次查看参考文献部分,每篇论文都成功添加了书签,所有论文都被成功引用了。
修改后完整的代码如下:

Public Sub ZoteroLinkCitation()' get selected area (if applicable)获取选定区域(如果适用)Dim nStart&, nEnd&nStart = Selection.StartnEnd = Selection.End' toggle screen updating 切换屏幕更新Application.ScreenUpdating = False' define variables 定义变量Dim title As StringDim titleAnchor As StringDim style As StringDim fieldCode As StringDim numOrYear As StringDim pos&, n1&, n2&, n3&ActiveWindow.View.ShowFieldCodes = TrueSelection.Find.ClearFormatting' find the Zotero bibliography 查找Zotero参考目录With Selection.Find.Text = "^d ADDIN ZOTERO_BIBL".Replacement.Text = "".Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForms = FalseEnd WithSelection.Find.Execute' add bookmark for the Zotero bibliography 为Zotero参考目录添加书签With ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="Zotero_Bibliography".DefaultSorting = wdSortByName.ShowHidden = TrueEnd With' loop through each field in the document 遍历文档中的每个字段For Each aField In ActiveDocument.Fields' check if the field is a Zotero in-text reference 检查文本引用中的字段是否为Zotero'##################################################If InStr(aField.Code, "ADDIN ZOTERO_ITEM") > 0 ThenfieldCode = aField.Code'#############' Prepare' Plain citation== Format of Textfield shown  纯文本引用' must be in Brackets      必须放在方括号中Dim plain_Cit As StringplCitStrBeg = """plainCitation"":""["plCitStrEnd = "]"""n1 = InStr(fieldCode, plCitStrBeg)n1 = n1 + Len(plCitStrBeg)n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), plCitStrEnd) - 1 + n1plain_Cit = Mid$(fieldCode, n1 - 1, n2 - n1 + 2)'Reference 'as shown' in word as a string'Title array in fieldCode (all referenced Titles within this field) fieldCode中的标题数组(此字段中引用的所有标题)Dim array_RefTitle(32) As Stringi = 0Do While InStr(fieldCode, """title"":""") > 0n1 = InStr(fieldCode, """title"":""") + Len("""title"":""")n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), """,""") - 1 + n1If n2 < n1 Then 'Exception the type 'Article'n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), "}") - 1 + n1 - 1End Ifarray_RefTitle(i) = Mid(fieldCode, n1, n2 - n1)fieldCode = Mid(fieldCode, n2 + 1, Len(fieldCode) - n2 - 1)i = i + 1LoopTitles_in_Cit = i'Number array with References shown in PlainCit 'PlainCit中显示了引用的数字数组'Numer is equal or less than Titels, depending on the type 'Numer等于或小于Titels,具体取决于类型'[3], [8]-[10]; [2]-[4]; [2], [4], [5] '[3], [8]-[10]; [2]-[4]; [2], [4], [5]' All citations have to be in Brackets each! [3], [8] not [3, 8] 所有引文都必须用括号括起来![3] [8]不是[3,8]' This doesnt work otherwise! 否则,这行不通!' --> treatment of other delimiters could be implemented hereDim RefNumber(32) As Stringi = 0' 初始化起始位置和数组startPosition = InStr(plain_Cit, "[")commaPosition = 0   ' 初始化逗号位置dashPosition = 0    ' 初始化短横线位置ReDim commaPositions(0 To 0)Do While (InStr(plain_Cit, "]") Or InStr(plain_Cit, "[")) > 0' 查找逗号的位置commaPosition = InStr(plain_Cit, ",")  ' 这里查找的是第一个逗号的位置' 查找短横线的位置dashPosition = InStr(plain_Cit, "-")  ' 这里查找的是第一个短横线的位置If commaPosition = 0 And dashPosition = 0 Then   ' 情况0:都不存在commaPosition = InStr(plain_Cit, "]")RefNumber(i) = Mid(plain_Cit, startPosition + 1, commaPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, commaPosition + 1, Len(plain_Cit) - (commaPosition + 1) + 1)ElseIf commaPosition > 0 And dashPosition > 0 Then   ' 情况1/2:两者都存在If commaPosition < dashPosition Then   ' 逗号在前RefNumber(i) = Mid(plain_Cit, startPosition + 1, commaPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, commaPosition + 2, Len(plain_Cit) - (commaPosition + 2))' 检查是否为空字符串If Len(Trim(plain_Cit)) = 0 Thenplain_Cit = plain_CitElseplain_Cit = "[" & plain_Cit & "]"End IfElse   ' 短横线在前RefNumber(i) = Mid(plain_Cit, startPosition + 1, dashPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, dashPosition + 1, Len(plain_Cit) - (dashPosition + 1))' 检查是否为空字符串If Len(Trim(plain_Cit)) = 0 Thenplain_Cit = plain_CitElseplain_Cit = "[" & plain_Cit & "]"End IfEnd IfElseIf commaPosition > 0 Then   ' 情况3:只有逗号RefNumber(i) = Mid(plain_Cit, startPosition + 1, commaPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, commaPosition + 2, Len(plain_Cit) - (commaPosition + 2))' 检查是否为空字符串If Len(Trim(plain_Cit)) = 0 Thenplain_Cit = plain_CitElseplain_Cit = "[" & plain_Cit & "]"End IfElse   ' 情况4:只有短横线RefNumber(i) = Mid(plain_Cit, startPosition + 1, dashPosition - (startPosition + 1))plain_Cit = Mid(plain_Cit, dashPosition + 1, Len(plain_Cit) - (dashPosition + 1))' 检查是否为空字符串If Len(Trim(plain_Cit)) = 0 Thenplain_Cit = plain_CitElseplain_Cit = "[" & plain_Cit & "]"End IfEnd Ifi = i + 1LoopRefs_in_Cit = i'treat only the shown references (skip the rest) 仅处理显示的引用(跳过其余部分)'[3], [8]-[10] --> skip [9] [3] ,[8]-[10]-->跳过[9]'Order of titles given from fieldcode, not checked! 从字段代码给出的标题顺序,未选中!If Titles_in_Cit > Refs_in_Cit Thenarray_RefTitle(Refs_in_Cit - 1) = array_RefTitle(Titles_in_Cit - 1)i = 1Do While Refs_in_Cit + i <= Titles_in_Citarray_RefTitle(Refs_in_Cit + i - 1) = ""i = i + 1LoopEnd If'#############'Make the linksFor Refs = 0 To Refs_in_Cit - 1 Step 1title = array_RefTitle(Refs)array_RefTitle(Refs) = ""' make title a valid bookmark nametitleAnchor = titletitleAnchor = MakeValidBMName(titleAnchor)ActiveWindow.View.ShowFieldCodes = FalseSelection.GoTo What:=wdGoToBookmark, Name:="Zotero_Bibliography"'' locate the corresponding reference in the bibliography'' by searching for its titleSelection.Find.ClearFormattingWith Selection.Find.Text = Left(title, 255).Replacement.Text = "".Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForms = FalseEnd WithSelection.Find.Execute' select the whole caption (for mouseover tooltip) 选择整个标题(用于鼠标悬停工具提示)Selection.MoveStartUntil ("["), Count:=wdBackwardSelection.MoveEndUntil (vbBack)lnkcap = "[" & Selection.Textlnkcap = Left(lnkcap, 70)' add bookmark for the reference within the bibliography 为参考目录中的参考添加书签Selection.ShrinkWith ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:=titleAnchor.DefaultSorting = wdSortByName.ShowHidden = TrueEnd With' jump back to the fieldaField.Select' find and select the numeric part of the field which will become the hyperlink 查找并选择将成为超链接的字段的数字部分Selection.Find.ClearFormattingWith Selection.Find.Text = RefNumber(Refs).Replacement.Text = "".Forward = True.Wrap = wdFindContinue.Format = False.MatchCase = False.MatchWholeWord = False.MatchWildcards = False.MatchSoundsLike = False.MatchAllWordForms = FalseEnd WithSelection.Find.ExecutenumOrYear = Selection.Range.Text & ""' store current stylestyle = Selection.style' Generate the Hyperlink -->Forward!ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", SubAddress:=titleAnchor, ScreenTip:=lnkcap, TextToDisplay:="" & numOrYear' reset the style' comment if you want standard link styleaField.SelectWith Selection.Font.Underline = wdUnderlineNone.ColorIndex = wdBlackEnd WithNext Refs 'References in CitEnd If  'If Zotero-Field'#########################Next aField ' next field' go back to original range selectedActiveWindow.View.ShowFieldCodes = FalseActiveDocument.Range(nStart, nEnd).SelectEnd SubFunction MakeValidBMName(strIn As String)Dim pFirstChr As StringDim i As LongDim tempStr As StringstrIn = Trim(strIn)pFirstChr = Left(strIn, 1)If Not pFirstChr Like "[A-Za-z]" ThenstrIn = "A_" & strInEnd IfFor i = 1 To Len(strIn)Select Case Asc(Mid$(strIn, i, 1))Case 49 To 57, 65 To 90, 97 To 122tempStr = tempStr & Mid$(strIn, i, 1)Case ElsetempStr = tempStr & "_"End SelectNext itempStr = Replace(tempStr, "  ", " ")MakeValidBMName = Left(tempStr, 40)End Function

相关文章:

在word中使用zotero添加参考文献并附带超链接

一、引言 在写大论文时&#xff0c;为了避免文中引用与文末参考文献频繁对照、修改文中引用顺序/引用文献时手动维护参考文献耗易出错&#xff0c;拟在 word 中使用 zotero 插入参考文献&#xff0c;并为每个参考文献附加超链接&#xff0c;实现交互式阅读。 版本&#xff1a…...

在Linux系统中将html保存为PNG图片

1 前言 之前使用Pyecharts库在Windows系统中生成图表并转换为PNG格式图片&#xff08;传送门&#xff09;&#xff0c;现将代码放于Linux服务器上运行&#xff0c;结果发现错误&#xff0c;生成html文件之后无法保存图片。 2 原理 基于Selenium库的保存方案&#xff0c;其原…...

presto任务优化参数

presto引擎业内通常用它来做即席查询&#xff0c;它基于内存计算效率确实快&#xff0c;不过它自身的任务优化参数比较杂&#xff0c;不同类型的catalog能用的参数不完全一样&#xff0c;在官网上倒是可以看到相关资料&#xff0c;配置文件中写的见https://prestodb.io/docs/cu…...

uniapp + Axios + 小程序封装网络请求

前言 小程序自带的网络请求使用起来比较麻烦&#xff0c;不便于管理&#xff0c;就需要封装网络请求&#xff0c;减少繁琐步骤&#xff0c;封装最终效果&#xff0c;根据类别将网络请求封装在文件中&#xff0c;使用得时候调用文件名名称加文件中得自定义名称&#xff0c;就可…...

《网络管理》实践环节01:OpenEuler22.03sp4安装zabbix6.2

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1 环境 openEuler 22.03 LTSsp4PHP 8.0Apache 2Mysql 8.0zabbix6.2.4 表1-1 Zabbix网络规划&#xff08;用你们自己的特征网段规划&#xff09; 主机名 IP 功能 备注 zbx6svr 19…...

4.6js面向对象

js原型继承 JavaScript 的原型链继承是其核心特性之一&#xff0c;理解原型链对于掌握 JavaScript 的面向对象编程至关重要。 1. ​原型&#xff08;Prototype&#xff09;基础 在 JavaScript 中&#xff0c;每个对象都有一个内部属性 [[Prototype]]&#xff08;可以通过 __p…...

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建&#xff0c;Fabric 模组详细搭建教程 一、 服务器介绍二、安装 JDK 21三、搭建 Minecraft 服务端四、本地测试连接五、如何添加模组&#xff08;mods&#xff09;六、添加服务&#xff0c;并设置开…...

SQL SELECT DISTINCT 语句详解:精准去重的艺术

SQL SELECT DISTINCT 语句详解&#xff1a;精准去重的艺术 一、为什么需要数据去重&#xff1f; 在日常数据库操作中&#xff0c;我们经常会遇到这样的场景&#xff1a;查询客户表时发现重复的邮箱地址&#xff0c;统计销售数据时出现冗余的订单记录&#xff0c;分析用户行为…...

从ChatGPT到AutoGPT——AI Agent的范式迁移

一、AI Agent的范式迁移 1. ChatGPT的局限性与Agent化需求 单轮对话的“工具属性” vs. 多轮复杂任务的“自主性” ChatGPT 作为强大的生成式AI,虽然能够进行连贯对话,但本质上仍然是“工具型”AI,依赖用户提供明确的指令,而无法自主规划和执行任务。 人类介入成本过高:提…...

SQL EXISTS 与 NOT EXISTS 运算符

EXISTS 和 NOT EXISTS 是 SQL 中的逻辑运算符&#xff0c;用于检查子查询是否返回任何行。它们通常用在 WHERE 子句中&#xff0c;与子查询一起使用。 EXISTS 运算符 EXISTS 运算符用于检查子查询是否返回至少一行数据。如果子查询返回任何行&#xff0c;EXISTS 返回 TRUE&…...

AGI 的概念、意义与未来展望

随着人工智能技术的飞速发展&#xff0c;我们已经见证了在图像识别、自然语言处理等特定领域取得的巨大突破。然而&#xff0c;这些成就都属于弱人工智能&#xff08;Narrow AI&#xff09;的范畴&#xff0c;它们只能在预设的任务范围内高效工作。 人们对于一种拥有更广泛、更…...

基于Java与Go的下一代DDoS防御体系构建实战

引言:混合云时代的攻防对抗新格局 2024年某金融平台遭遇峰值2.3Tbps的IPv6混合攻击,传统WAF方案在新型AI驱动攻击面前全面失效。本文将以Java与Go为技术栈,揭示如何构建具备智能决策能力的防御系统。 一、攻击防御技术矩阵重构 1.1 混合攻击特征识别 攻击类型Java检测方案…...

FPGA调试笔记

XILINX SSTL属性电平报错 错误如下&#xff1a; [DRC BIVRU-1] Bank IO standard Vref utilization: Bank 33 contains ports that use a reference voltage. In order to use such standards in a bank that is not configured to use INTERNAL_VREF, the banks VREF pin mu…...

Axure项目实战:智慧城市APP(七)我的、消息(显示与隐藏交互)

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;智慧城市APP 主要内容&#xff1a;我的、消息、活动模块页面 应用场景&#xff1a;消息页设计、我的页面设计以及活动页面设计 案例展示&#xff…...

深度学习——图像余弦相似度

计算机视觉是研究图像的学问&#xff0c;在图像的最终评价时&#xff0c;往往需要用到一些图像相似度的度量指标&#xff0c;因此&#xff0c;在本文中我们将详细地介绍原生和调用第三方库的计算图像余弦相似度的方法。 使用原生numpy实现 import numpy as npdef image_cosin…...

求矩阵某列的和

设计函数sum_column( int A[E1(n)][E2(n)], int j )&#xff0c;E1(n)和E2(n)分别为用宏定义的行数和列数&#xff0c;j为列号。在该函数中&#xff0c;设计指针ptr&A[0][j]&#xff0c;通过*ptr及ptrptrE2(n)访问第j列元素&#xff0c;从而求得第j列元素的和。在主函数中定…...

【论文分析】无人机轨迹规划,Fast-Planner:实时避障+全局最优的路径引导优化算法

这篇论文《Robust Real-time UAV Replanning Using Guided Gradient-based Optimization and Topological Paths》由香港科技大学提出&#xff0c;主要针对无人机&#xff08;UAV&#xff09;在复杂环境中的实时轨迹重新规划问题&#xff0c;提出了一种结合梯度优化和拓扑路径搜…...

李飞飞、吴佳俊团队新作:FlowMo如何以零卷积、零对抗损失实现ImageNet重构新巅峰

目录 一、摘要 二、引言 三、相关工作 四、方法 基于扩散先前的离散标记化器利用广告 架构 阶段 1A&#xff1a;模式匹配预训练 阶段 1B&#xff1a;模式搜索后训练 采样 第二阶段&#xff1a;潜在生成建模 五、Coovally AI模型训练与应用平台 六、实验 主要结果 …...

AutoDev 2.0 正式发布:智能体 x 开源生态,AI 自动开发新标杆

在我们等待了几个月之后&#xff0c;国内终于有模型&#xff08;DeepSeek V3-0324&#xff09;能支持 AutoDev 的能力&#xff0c;也因此是时候发布 AutoDev 2.0 了&#xff01;在 AutoDev 2.0 中&#xff0c;你可以&#xff1a; 编码智能体 Sketch 进行自动化编程自动化编程的…...

PHP 应用MYSQL 架构SQL 注入跨库查询文件读写权限操作

MYSQL 注入&#xff1a;&#xff08;目的获取当前 web 权限&#xff09; 1 、判断常见四个信息&#xff08;系统&#xff0c;用户&#xff0c;数据库名&#xff0c;版本&#xff09; 2 、根据四个信息去选择方案 root 用户&#xff1a;先测试读写&#xff0c;后测试获取…...

鸿蒙-全屏播放页面(使用相对布局)---持续更新中

最终实现效果图&#xff1a; 实现步骤 创建FullScreenPlay.ets全品播放页面 并将其修改为启动页面。 全屏播放&#xff0c;屏幕必然横过来&#xff0c;所以要将窗口横过来。 编辑 src/main/ets/entryability/EntryAbility.ets 若写在/EntryAbility.ets中&#xff0c;则所有…...

第4期:重构软件测试体系——生成式AI如何让BUG无所遁形

真实战场报告 某金融系统上线前&#xff0c;测试团队用AI生成3000条边缘用例&#xff0c;发现了一个隐藏极深的并发漏洞——该BUG在传统用例覆盖下需要7年才会触发一次。这次发现直接避免了可能上亿元的资金风险&#xff01; 一、测试革命&#xff1a;当AI遇见质量保障 场景1&…...

力扣.旋转矩阵Ⅱ

59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; class Solution {const int MAX25; public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans;vector<int> hang;int len_nn;int arry[25][25]…...

Docker 安装部署Harbor 私有仓库

Docker 安装部署Harbor 私有仓库 系统环境:redhat x86_64 一、首先部署docker 环境 定制软件源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum install -y yum-utils device-mapper-persistent-data lvm2…...

SQL Server 中常见的数据类型及其详细解释、内存占用和适用场景

以下是 SQL Server 中常见的数据类型及其详细解释、内存占用和适用场景&#xff1a; 数据类型类别数据类型解释内存占用适用场景整数类型bigint用于存储范围较大的整数&#xff0c;范围是 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)8 字节需要…...

javascript实现一个函数,将字符串中的指定子串全部替换为另一个字符串的原理,以及多种方法实现。

大白话javascript实现一个函数&#xff0c;将字符串中的指定子串全部替换为另一个字符串的原理&#xff0c;以及多种方法实现。 在JavaScript里&#xff0c;要是你想把字符串里的指定子串都替换成另外一个字符串&#xff0c;有不少方法可以实现。下面我会详细介绍实现的原理&a…...

Python 3 与 MySQL 数据库连接:mysql-connector 模块详解

Python 3 与 MySQL 数据库连接&#xff1a;mysql-connector 模块详解 概述 在Python 3中&#xff0c;与MySQL数据库进行交互是一个常见的需求。mysql-connector是一个流行的Python模块&#xff0c;它提供了与MySQL数据库连接和交互的接口。本文将详细介绍mysql-connector模块…...

HCIA-Datacom高阶:基础的单区域 OSPF 与多区域 OSPF的配置

动态路由协议是实现网络高效通信的关键技术之一。开放式最短路径优先&#xff08;Open Shortest Path First&#xff0c;OSPF&#xff09;协议作为内部网关协议&#xff08;IGP&#xff09;的一种&#xff0c;因其高效性、稳定性和扩展性&#xff0c;在大型网络中得到了广泛应用…...

蓝桥杯单片机刷题——E2PROM记录开机次数

设计要求 使用E2PROM完成数据记录功能&#xff0c;单片机复位次数记录到E2PROM的地址0中。每复位一次数值加1&#xff0c;按下按键S4&#xff0c;串口发送复位次数。串口发送格式如下&#xff1a; Number&#xff1a;1 备注&#xff1a; 单片机IRC振荡器频率设置为12MHz。 …...

杂草YOLO系列数据集4000张

一份开源数据集——杂草YOLO数据集&#xff0c;该数据集适用于农业智能化、植物识别等计算机视觉应用场景。 数据集详情 ​训练集&#xff1a;3,664张高清标注图像​测试集&#xff1a;180张多样性场景样本​验证集&#xff1a;359张严格筛选数据 下载链接 杂草YOLO数据集分…...

Python自动化面试通关秘籍

Python自动化测试工程师面试&#xff0c;不仅仅是考察你的代码能力&#xff0c;更看重你如何在项目中灵活运用工具和框架解决实际问题。如果你正准备面试&#xff0c;这篇文章将为你总结最常见的高频考题及答题技巧&#xff0c;帮助你快速上手&#xff0c;通关面试&#xff0c;…...

机器学习的一百个概念(1)单位归一化

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…...

Python 笔记 (二)

Python Note 2 1. Python 慢的原因2. 三个元素3. 标准数据类型4. 字符串5. 比较大小: 富比较方法 rich comparison6. 数据容器 (支持*混装* )一、允许重复类 (list、tuple、str)二、不允许重复类 (set、dict)1、集合(set)2、字典(dict)3、特殊: 双端队列 deque 三、数据容器的共…...

【商城实战(97)】ELK日志管理系统的全面应用

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配,乃至运营推广策略,102 章内容层层递进。无论是想…...

3.使用epoll实现单线程并发服务器

目录 1. epoll的概述 2. 多线程与epoll的处理流程 2.1 多线程处理流程 2.2 epoll处理流程 3. epoll与多线程的比较 4. epoll的操作函数 4.1 epoll_create() 4.2 epoll_ctl() 4.3 epoll_wait() 5. 示例代码 6. epoll的工作模式 7. 使用O_NONBLOCK防止阻塞 8.运行代…...

蓝桥杯真题------R格式(高精度乘法,高精度加法)

对于高精度乘法和加法的同学可以学学这几个题 高精度乘法 高精度加法 文章目录 题意分析部分解全解 后言 题意 给出一个整数和一个浮点数&#xff0c;求2的整数次幂和这个浮点数相乘的结果最后四舍五入。、 分析 我们可以发现&#xff0c;n的范围是1000,2的1000次方非常大&am…...

PyCharm操作基础指南

一、安装与配置 1. 版本选择 专业版&#xff1a;支持 Web 开发&#xff08;Django/Flask&#xff09;、数据库工具、科学计算等&#xff08;需付费&#xff09;。 社区版&#xff1a;免费&#xff0c;适合纯 Python 开发。 2. 安装步骤 访问 JetBrains 官网 下载对应版本。…...

21 python __name__ 与 __main__

在办公室里&#xff0c;每个员工都有自己的工牌&#xff0c;上面写着姓名和部门。 一、__name__&#xff1a;模块的名字 Python 模块也有类似的 "工牌"——__name__属性&#xff0c;它记录了模块的身份&#xff1a; 直接运行时 → __name__ "__main__"&…...

NixVis 开源轻量级 Nginx 日志分析工具

NixVis NixVis 是一款基于 Go 语言开发的、开源轻量级 Nginx 日志分析工具&#xff0c;专为自部署场景设计。它提供直观的数据可视化和全面的统计分析功能&#xff0c;帮助您实时监控网站流量、访问来源和地理分布等关键指标&#xff0c;无需复杂配置即可快速部署使用。 演示…...

elementUI el-image图片加载失败解决

是不是&#xff0c;在网上找了一些&#xff0c;都不行&#xff0c;这里一行代码&#xff0c;解决&#xff0c;后端返回图片路径&#xff0c;el-image图片加载失败的问题 解决办法&#xff0c; vue项目里&#xff0c;index.html文件里加一行代码就可 <meta name"refe…...

lxd-dashboard 图形管理LXD/LXC

前言 LXD-WEBGUI是一个完全用AngularJS编写的Web应用程序,无需应用服务器、数据库或其他后端服务支持。只需要简单地托管静态HTML和JavaScript文件,就能立即投入使用。这个项目目前处于测试阶段,提供了直观的用户界面,帮助用户便捷地管理和控制LXD实例。 安装lxd-dashboa…...

C# MemoryStream 使用详解

总目录 前言 在.NET开发中&#xff0c;流&#xff08;Stream&#xff09;是一个用于处理输入和输出的抽象类&#xff0c;MemoryStream是流的一个具体实现&#xff0c;它允许我们在内存中读写数据&#xff0c;就像操作文件一样&#xff0c;而无需涉及磁盘 I/O 操作。尤其适合需…...

(二)万字长文解析:deepResearch如何用更长的思考时间换取更高质量的回复?各家产品对比深度详解

DeepResearch的研究背景 业务背景&#xff1a;用更长的等待时间&#xff0c;换取更高质量、更具实用性的结果 当前AI技术发展正经历从“即时响应”到“深度思考”的范式转变。用户对延迟的容忍度显著提升&#xff0c;从传统200ms的交互响应放宽至数秒甚至数分钟&#xff0c;以…...

Redis场景问题1:缓存穿透

Redis 缓存穿透是指在缓存系统&#xff08;如 Redis&#xff09;中&#xff0c;当客户端请求的数据既不在缓存中&#xff0c;也不在数据库中时&#xff0c;每次请求都会直接穿透缓存访问数据库&#xff0c;从而给数据库带来巨大压力&#xff0c;甚至可能导致数据库崩溃。下面为…...

数据结构(并查集,图)

并查集 练习版 class UnionFindSet { public:void swap(int* a, int* b){int tmp *a;*a *b;*b tmp;}UnionFindSet(size_t size):_ufs(size,-1){}int UnionFind(int x){}void Union(int x1, int x2){}//长分支改为相同节点int FindRoot(int x){}bool InSet(int x1, int x2)…...

深度学习篇---断点重训模型部署文件

文章目录 前言一、断点重训&#xff08;Checkpoint&#xff09;文件1. 动态图&#xff08;DyGraph&#xff09;模式.pdparams 文件.pdopt 文件.pdscaler 文件.pdmeta 或 .pkl 文件 2. 静态图&#xff08;Static Graph&#xff09;模式.pdparams 和 .pdopt 文件.ckpt 文件 3. 恢…...

chromem-go + ollama + bge-m3 进行文档向量嵌入和查询

Ollama 安装 https://ollama.com/download Ollama 运行嵌入模型 bge-m3:latest ollama run bge-m3:latestchromem-go 文档嵌入和查询 package mainimport ("context""fmt""runtime""github.com/philippgille/chromem-go" )func ma…...

运维面试题(十一)

1.如果一个硬盘 IO 时阻塞了&#xff0c;会发生什么情况&#xff1f; 进程/线程挂起&#xff1a;发起I/O操作的进程或线程会被操作系统置为阻塞状态&#xff08;等待状态&#xff09;&#xff0c;直到I/O完成。CPU资源释放&#xff1a;阻塞的线程会让出CPU&#xff0c;操作系统…...

深度学习中常见的专业术语汇总

本硕博都是搞机械的匠人&#xff0c;当然也想做一下交叉学科的东西&#xff0c;蹭一下人工智能的热点。虽然世界是个草台班子&#xff0c;但是来都来了&#xff0c;咱也要把这场戏演好。 记得之前网上爆料有位大学生发了很多水文&#xff0c;对&#xff0c;是交叉学科的&#x…...

人工智能赋能医疗:开启智慧医疗新时代

在当今数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度渗透到各个行业&#xff0c;其中医疗领域更是成为AI技术大放异彩的重要舞台。从疾病诊断到治疗方案制定&#xff0c;从医疗影像分析到药物研发&#xff0c;AI正在为传统医疗带来…...