
以下是我在整理大论文的格式中遇到的些许问题,互联网上找到的回答并不能很好的解决我的问题。解决方法稍显笨拙,一是为自身的学习成长做一点记录,二是抛砖引玉,为大家提供一点不一样的解决思路。
1.页眉的设置
页眉中需要设置,靠左为“XX大学博(硕)士学位论文”;靠右为章序章名。以硕士论文为例,设置方法如下:
具体步骤:
双击页眉打开页眉编辑,键入XX大学硕士学位论文,键入制表位,点击插入-->文档部件-->域-->StyleRef,域属性选择文档的标题1(即学位论文中的章标题),点击插入。调整制表位间隔与边框下框线。

页眉内容

插入引用域

制表位设置
效果展示:

2.图表自动编号
步骤1:
制作章的编号(域代码实现)。ctrl+F9插入域代码,shift+F9切换域代码格式,F9更新域代码。
将光标定位在第*章中间,插入域代码,键入SEQ Chapter \s。在每一章的标题处都需键入。(建议复制粘贴)。

章的编号
步骤2:
制作图表的自动编号域代码。同样插入域代码后,分别键入:
{ SEQ Chapter \c·}-{ SEQ Table\* ARABIC \s·1}
{ SEQ Chapter \c·}-{ SEQ Fig \* ARABIC \s·1} 其中SEQ是序列域代码,Chapter、Table、Fig是用户自定义的名称。\c表示保持章节号不变,\*ARABIC表示用阿拉伯数字编号(非必需),\s 1表示在一级标题下重新编号。

图的编号设置
步骤3:
制作图表自动编号的文档部件,方便使用。选中图1-1,点击文档部件,将所选内容保存到文档部件。

保存至文档部件
同理制作表的自动编号文档部件。添加至快速访问可以便捷使用。



3.交叉引用
VBA实现。
Sub 图表书签()
Dim selectedText As String
Dim lineText As String
Dim chapterNum As String
Dim figureNum As String
Dim subsequentText As String
Dim string1 As String
Dim string2 As String
Dim isFigure As Boolean
' 检查是否有选中的文本
If Selection.Type <> wdSelectionNormal Then
MsgBox "请选中图表编号文本!", vbExclamation
Exit Sub
End If
' 获取选中的文本
selectedText = Trim(Selection.Text)
lineText = Trim(Selection.Paragraphs(1).Range.Text) ' 获取当前行的文本
' 提取章节号和图号(使用正则表达式)
Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "(图|表)(\d+)-(\d+)"
regex.Global = False
If regex.Test(selectedText) Then
Dim matches As Object
Set matches = regex.Execute(selectedText)
Dim typePrefix As String
typePrefix = matches(0).SubMatches(0) ' 获取图或表的前缀
chapterNum = matches(0).SubMatches(1) ' 获取章节号
figureNum = matches(0).SubMatches(2) ' 获取图号或表号
' 判断是图还是表
isFigure = (typePrefix = "图")
Else
MsgBox "选中的文本格式不正确!", vbExclamation
Exit Sub
End If
' 提取后续文本
subsequentText = Trim(Mid(lineText, Len(selectedText) + 1))
subsequentText = Trim(Replace(subsequentText, vbCr, "")) ' 去掉换行符
' 生成字符串
If isFigure Then
string1 = "第" & chapterNum & "章图" & figureNum & "_" & subsequentText
Else
string1 = "第" & chapterNum & "章表" & figureNum & "_" & subsequentText
End If
' 检查书签名有效性
string2 = Replace(string1, " ", "_") ' 将空格替换为下划线
' 检查是否已有同名书签
If ActiveDocument.Bookmarks.Exists(string2) Then
' 提示用户
MsgBox "书签名称已存在,正在删除旧书签!", vbInformation
ActiveDocument.Bookmarks(string2).Delete ' 删除同名书签
End If
' 添加新书签
ActiveDocument.Bookmarks.Add Name:=string2, Range:=Selection.Range
MsgBox "已创建书签: " & string2
End Sub
' 函数:检查书签名的有效性
Function IsValidBookmarkName(bookmarkName As String) As Boolean
Dim invalidChars As String
Dim i As Integer
invalidChars = "/\[]:;|=," & Chr(0) & Chr(7) ' 书签名中无效字符
IsValidBookmarkName = True ' 默认有效
For i = 1 To Len(invalidChars)
If InStr(bookmarkName, Mid(invalidChars, i, 1)) > 0 Then
IsValidBookmarkName = False
Exit Function
End If
Next i
' 书签名不能以空格开头或结尾
If Trim(bookmarkName) <> bookmarkName Then
IsValidBookmarkName = False
End If
End Function
选中图1-1,运行宏即可生成标签,点击交引用即可实现交叉引用。

1、使用多级列表管理一级标题的编号,数字与章标题的中文间隔异常。因为此问题,后续无法使用题注功能进行交叉引用。

2、以上问题同样导致,新建一个Fig的题注(即给图序做自动编号的名字),可以在交叉引用类型中找到Fig中对应的图,但交叉引用只显示自定义的章节序号,不显示图序号。
