|
在论文写作时候有时候需要对字体数字部分变为蓝色,目前无法endnote里面单独队某个模块颜色定义,所以只能在word里面更改,也比较方便
首先打开word宏,在视图下面
将原本内容全部替换为 Sub HighlightCitationNumbers() Dim fld As Field Dim rng As Range Dim charPos As Long Dim originalRng As Range Dim isTarget As Boolean ' 保存原选区 Set originalRng = Selection.Range ' 关闭屏幕更新提高效率 Application.ScreenUpdating = False For Each fld In ActiveDocument.Fields isTarget = False ' 检查域代码并添加调试信息 On Error Resume Next Dim codeText As String codeText = fld.Code.Text ' 检查域类型(添加更宽泛的条件) If InStr(codeText, "REF") > 0 Or _ InStr(codeText, "ADDIN EN.CITE") > 0 Or _ InStr(codeText, "ADDIN ZOTERO_ITEM") > 0 Then isTarget = True Set rng = fld.Result ' 添加调试输出 Debug.Print "Processing field: " & codeText ' 遍历字符 For charPos = 1 To rng.Characters.Count With rng.Characters(charPos) If IsNumeric(.Text) Or .Text = "[" Or .Text = "]" Or .Text = "-" Then .Font.Color = RGB(0, 0, 255) ' 蓝色 Else .Font.Color = wdColorAutomatic End If End With Next charPos End If ' 添加确认机制 If isTarget Then Debug.Print "Field processed: " & fld.Result.Text End If Next fld ' 恢复设置 Application.ScreenUpdating = True originalRng.Select MsgBox "处理完成!已扫描 " & ActiveDocument.Fields.Count & " 个域", vbInformation End Sub然后CTRL+S保存一下退出,出来之后运行
这个HighlightCitationNumbers就是我们新建的宏文件,运行就可以达到期望的效果
如果想要更改字体颜色,就可以在Font.Color = RGB(0, 0, 255)改动,将RGB(0, 0, 255)变为想要的颜色RGB数值即可,都能搜到。最后结果如下:
如果想要全部高亮化,如下格式
即所有部分全部是蓝色,可以用以下域代码 Sub CitingColor() For i = 1 To ActiveDocument.Fields.Count '遍历文档所有域 ' Word 自带的交叉引用的域代码起始 4 位是 " REF" (注意空格) ' 插入的引用域代码的起始 14 位是 " ADDIN EN.CITE" ' Zotero 插入的引用域代码的起始 31 位是 " ADDIN ZOTERO_ITEM ",可根据需求添加其他类型 If Left(ActiveDocument.Fields(i).Code, 4) = " REF" Or Left(ActiveDocument.Fields(i).Code, 14) = " ADDIN EN.CITE" Or Left(ActiveDocument.Fields(i).Code, 31) = " ADDIN ZOTERO_ITEM CSL_CITATION" Then ActiveDocument.Fields(i).Select ' 选中上述几类域 Selection.Font.Color = wdColorBlue ' 设置字体颜色为蓝色,可改为其他颜色,如 RGB(255,0,0) End If Next End Sub使用方法和之前的一样 如果发现以上宏不能应用的话,本人发现先应用只数字部分变为蓝色的宏片段,再使用前面的所有部分所有引用内容变为蓝色的话会出现无法修改的情况,因此使用进一步修改了宏片段: Sub HighlightCitationNumbersEnhanced() Dim fld As Field Dim originalRng As Range Dim fieldCount As Integer Dim doc As Document Set doc = ActiveDocument Set originalRng = Selection.Range fieldCount = 0 Application.ScreenUpdating = False ' 检查文档是否有域 If doc.Fields.Count = 0 Then MsgBox "文档中没有找到任何域。", vbInformation Exit Sub End If For Each fld In doc.Fields On Error GoTo NextField ' 错误处理 Dim codeText As String codeText = fld.Code.Text ' 更宽松的匹配条件,适应各种引用格式[1,2](@ref) If InStr(codeText, "REF") > 0 Or _ InStr(codeText, "CITE") > 0 Or _ InStr(codeText, "ZOTERO") > 0 Or _ InStr(codeText, "BIBLIOGRAPHY") > 0 Then ' 设置整个引用结果为蓝色[3](@ref) fld.Result.Font.Color = wdColorBlue fieldCount = fieldCount + 1 End If NextField: Next fld Application.ScreenUpdating = True originalRng.Select MsgBox "成功为 " & fieldCount & " 个引用设置蓝色字体颜色。", vbInformation End Sub这样一定能将从endnote、zetore引用的部分变为蓝色 如下
上面的代码会将[]一起变为蓝色,如果只想要里面的内容变为蓝色,那么可以先运行第一段代码: Sub HighlightCitationNumbersEnhanced() Dim fld As Field Dim originalRng As Range Dim fieldCount As Integer Dim doc As Document Set doc = ActiveDocument Set originalRng = Selection.Range fieldCount = 0 Application.ScreenUpdating = False If doc.Fields.Count = 0 Then MsgBox "文档中没有找到任何域。", vbInformation Exit Sub End If For Each fld In doc.Fields On Error GoTo NextField Dim codeText As String codeText = fld.Code.Text If InStr(codeText, "REF") > 0 Or _ InStr(codeText, "CITE") > 0 Or _ InStr(codeText, "ZOTERO") > 0 Or _ InStr(codeText, "BIBLIOGRAPHY") > 0 Then Dim searchRange As Range Dim startRange As Range Dim endRange As Range Dim contentRange As Range Set searchRange = fld.Result.Duplicate ' 查找 '[' With searchRange.Find .Text = "[" .Forward = True .Wrap = wdFindStop If .Execute Then Set startRange = searchRange.Duplicate ' 从 '[' 之后查找 ']' Set endRange = startRange.Duplicate endRange.Start = startRange.End endRange.End = fld.Result.End With endRange.Find .Text = "]" .Forward = True .Wrap = wdFindStop If .Execute Then ' 精确定位方括号内的内容(不包含[]) Set contentRange = fld.Result.Duplicate contentRange.Start = startRange.End ' 从 '[' 之后开始 contentRange.End = endRange.Start ' 到 ']' 之前结束 contentRange.Font.Color = wdColorBlue fieldCount = fieldCount + 1 End If End With End If End With End If NextField: Next fld Application.ScreenUpdating = True originalRng.Select MsgBox "成功为 " & fieldCount & " 个引用设置蓝色字体颜色。", vbInformation End Sub再运行第二段代码即可,用下面的宏代码运行即可 Sub HighlightCitationNumbersEnhanced() Dim fld As Field Dim originalRng As Range Dim fieldCount As Integer Dim doc As Document Set doc = ActiveDocument Set originalRng = Selection.Range fieldCount = 0 Application.ScreenUpdating = False If doc.Fields.Count = 0 Then MsgBox "文档中没有找到任何域。", vbInformation Exit Sub End If For Each fld In doc.Fields On Error GoTo NextField Dim codeText As String codeText = fld.Code.Text If InStr(codeText, "REF") > 0 Or _ InStr(codeText, "CITE") > 0 Or _ InStr(codeText, "ZOTERO") > 0 Or _ InStr(codeText, "BIBLIOGRAPHY") > 0 Then Dim searchRange As Range Dim startRange As Range Dim endRange As Range Dim contentRange As Range Set searchRange = fld.Result.Duplicate ' 查找 '[' With searchRange.Find .Text = "[" .Forward = True .Wrap = wdFindStop If .Execute Then Set startRange = searchRange.Duplicate ' 从 '[' 之后查找 ']' Set endRange = startRange.Duplicate endRange.Start = startRange.End endRange.End = fld.Result.End With endRange.Find .Text = "]" .Forward = True .Wrap = wdFindStop If .Execute Then ' 精确定位方括号内的内容(不包含[]) Set contentRange = fld.Result.Duplicate contentRange.Start = startRange.End ' 从 '[' 之后开始 contentRange.End = endRange.Start ' 到 ']' 之前结束 contentRange.Font.Color = wdColorBlue fieldCount = fieldCount + 1 End If End With End If End With End If NextField: Next fld Application.ScreenUpdating = True originalRng.Select MsgBox "成功为 " & fieldCount & " 个引用设置蓝色字体颜色。", vbInformation End Sub最终格式如下:
|











