使用Zotero在word中建立引用超链接

您所在的位置:网站首页 在文档中插入超链接 使用Zotero在word中建立引用超链接

使用Zotero在word中建立引用超链接

2023-11-07 22:26| 来源: 网络整理| 查看: 265

前言

由于在实际使用过程中,发现在word中插入引用并不能正常的使用超链接进行跳转,因此在网上搜索了一下,得到了如下解决方法:

解决方法编辑宏

以word2019为例:按顺序点击如下内容:视图→宏→查看宏

image-20220419095451217

点击创建

image-20220419095532390

之后进入到编辑框中,在如图所示位置替换全部代码,并将宏名称保存为 ZoteroLinkCitation(其实名字咋样都可以,方便辨认就行)

代码部分 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216Public Sub ZoteroLinkCitation() ' get selected area (if applicable) Dim nStart&, nEnd& nStart = Selection.Start nEnd = Selection.End ' toggle screen updating Application.ScreenUpdating = False ' define variables 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 ' find the Zotero bibliography 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 With Selection.Find.Execute ' add bookmark for the Zotero bibliography With ActiveDocument.Bookmarks .Add Range:=Selection.Range, Name:="Zotero_Bibliography" .DefaultSorting = wdSortByName .ShowHidden = True End With ' loop through each field in the document For Each aField In ActiveDocument.Fields ' check if the field is a Zotero in-text reference '################################################## If InStr(aField.Code, "ADDIN ZOTERO_ITEM") > 0 Then fieldCode = aField.Code '############# ' Prepare ' Plain citation== Format of Textfield shown ' must be in Brackets Dim plain_Cit As String plCitStrBeg = """plainCitation"":""[" plCitStrEnd = "]""" n1 = InStr(fieldCode, plCitStrBeg) n1 = n1 + Len(plCitStrBeg) n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), plCitStrEnd) - 1 + n1 plain_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 String i = 0 Do While InStr(fieldCode, """title"":""") > 0 n1 = InStr(fieldCode, """title"":""") + Len("""title"":""") n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), """,""") - 1 + n1 If n2 < n1 Then 'Exception the type 'Article' n2 = InStr(Mid(fieldCode, n1, Len(fieldCode) - n1), "}") - 1 + n1 - 1 End If array_RefTitle(i) = Mid(fieldCode, n1, n2 - n1) fieldCode = Mid(fieldCode, n2 + 1, Len(fieldCode) - n2 - 1) i = i + 1 Loop Titles_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 here Dim RefNumber(32) As String i = 0 Do While (InStr(plain_Cit, "]") Or InStr(plain_Cit, "[")) > 0 n1 = 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 + 1 Loop Refs_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 Then array_RefTitle(Refs_in_Cit - 1) = array_RefTitle(Titles_in_Cit - 1) i = 1 Do While Refs_in_Cit + i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3