Простой способ перекрестных ссылок в MS Word?
Есть ли простой способ добавить перекрестную ссылку, например, сочетание клавиш или метод копирования и вставки? У меня есть документ с множеством уравнений (в сотнях), и добавление перекрестных ссылок к соответствующему уравнению становится болезненным. В общем, я хочу что-то вроде следующего: например, "Alt+q", а затем "5.13" добавляет перекрестную ссылку на уравнение 5.13. Это возможно?
Я использую MS Word 2013.
6 ответов
Я не знаю ни одного встроенного решения, как это, вы можете сделать это с VBA. Ниже приведен пример, он запрашивает номер и вставляет перекрестную ссылку, помещает ее в свой файл normal.dotm, чтобы иметь возможность получить доступ из любого документа и назначить ему ярлык, и у вас есть решение.
Обновленный код
Sub addCrossRefernce()
Dim n As String
Dim v As Variant
Dim i As Integer
Dim referenceAdded As Boolean
referenceAdded = True
v = ActiveDocument.GetCrossReferenceItems("Equation")
Do
n = InputBox("enter number of equation to refer!")
If n <> "" Then
i = LBound(v)
Do Until v(i) = "Equation " & n Or i = UBound(v)
i = i + 1
Loop
If v(i) = "Equation " & n Then
Selection.InsertCrossReference referencetype:="Equation", ReferenceKind:= _
wdOnlyLabelAndNumber, ReferenceItem:=i, InsertAsHyperlink:=True, _
IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "
Else
referenceAdded = False
End If
End If
If Not referenceAdded Then referenceAdded = MsgBox("There is no ""Equation " & n & _
""" in the document, do you want to enter another number?", vbYesNo) = vbNo
Loop Until referenceAdded
End Sub
В Word 2010, по крайней мере, вы можете вызвать диалог с помощью Alt-INR (Alt Chording не является обязательным для N и R). Затем Alt-W, чтобы переключить фокус на нумерованный список элементов. Затем введите номер, который вам нужен. Только идет на верхний уровень нумерации, так что, как если бы у вас был 5.3, он идет только до 5; Вы должны использовать клавиши со стрелками для остальных.
Я понимаю, что это годичный вопрос с принятым ответом, и я даже не уверен, насколько хорошо это работает для уравнений (я использую его в документах в формате структуры), но я наткнулся на это в поиске, и оставив это дополнительная информация для кого-либо еще, это может помочь.
Я написал еще один макрос, который должен обеспечить еще более удобное решение. Вместо того, чтобы что-то печатать, вы просто перемещаете курсор к элементу, на который хотите сделать перекрестную ссылку:
- Поместите курсор туда, где должна быть вставлена перекрестная ссылка
- Нажмите горячую клавишу => вставлена временная закладка (серые квадратные скобки, если вы настроили их для отображения)
- Перейдите к элементу, в который должна быть вставлена перекрестная ссылка, например, к метке рисунка или заголовку. Мне особенно удобно использовать панель навигации / заголовки для быстрой навигации к пункту назначения.
- Нажмите горячую клавишу еще раз. Курсор возвращается к исходному местоположению и вставляет туда перекрестную ссылку.
Вы можете получить доступ к коду и некоторым более подробным инструкциям от GitHub.
Самое удобное решение — макрос. Добавьте его в свой файлnormal.dot и назначьте ему сочетание клавиш. Затем вы можете создавать ссылки, просто введя номер элемента для перекрестной ссылки.
Приведенный ниже макрос можно легко адаптировать для создания ссылок на уравнения, таблицы или рисунки. Версия ниже содержит ссылки на рисунки.
Sub ReferenceFigure()
Dim refLabel As String
refLabel = "Figure"
'Debug.Print Join(ActiveDocument.GetCrossReferenceItems(refLabel), vbNewLine)
Dim refNumber As String, refItemPrefix As String
refNumber = InputBox("Enter Number of '" & refLabel & "' item to reference")
If refNumber = "" Then Exit Sub
refItemPrefix = refLabel & " " & refNumber & ":"
Dim index As Integer, refItems() As String, refItem As String
refItems = ActiveDocument.GetCrossReferenceItems(refLabel)
For index = 1 To UBound(refItems)
refItem = refItems(index)
If Left(refItem, Len(refItemPrefix)) = refItemPrefix Then
Selection.InsertCrossReference ReferenceType:=refLabel, ReferenceKind:=wdOnlyLabelAndNumber, _
ReferenceItem:=index, InsertAsHyperlink:=True
Exit Sub
End If
Next
End Sub
Для других эталонных целей просто измените значениеrefLabel
. Обратите внимание: это также необходимо сделать, если вы используете Word на другом языке. Например, для немецкой версии Word:refLabel = "Figure"
необходимо изменить наrefLabel = "Abbildung"
.
Также обратите внимание, что макрос не работает с надписями в текстовых полях из-за ограничения метода GetCrossReferenceItems .
Вот моя отредактированная версия кода Мате Юхаса
Sub addCrossRefernce()
Dim n As String
Dim v As Variant
Dim i As Integer
Dim referenceAdded As Boolean
referenceAdded = True
v = ActiveDocument.GetCrossReferenceItems("Equation")
Do
n = InputBox("enter number of equation to refer!")
If n <> "" Then
i = LBound(v)
Do Until v(i) = "(" & n & ")" Or i = UBound(v)
i = i + 1
Loop
If v(i) = "(" & n & ")" Then
Selection.InsertCrossReference referencetype:="Equation", ReferenceKind:= _
wdEntireCaption, ReferenceItem:=i, InsertAsHyperlink:=True, _
IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "
Else
referenceAdded = False
End If
End If
If Not referenceAdded Then referenceAdded = MsgBox("There is no ""Equation " & n & _
""" in the document, do you want to enter another number?", vbYesNo) = vbNo
Loop Until referenceAdded
End Sub
Код Máté Juhász адаптирован для добавления перекрестных ссылок на пронумерованные элементы (номера абзацев).
Ссылку на абзац можно добавить, введя его номер следующими способами:
- 7.8.9 или 7,8,9 или 789 для пункта 7.8.9
- 1 для пункта 1
- 11 для пункта 1.1
- 11. для пункта 11 (если есть также 1.1)
Макрос код:
Sub AddNumberedReferenceDialog()
Dim tit As String
Dim chId As String
Dim refItems As Variant
Dim idx As Integer
Dim refAdded As Boolean
Dim chName As String
tit = "Add cross-reference"
refAdded = False
refItems = ActiveDocument.GetCrossReferenceItems(wdRefTypeNumberedItem)
chId = ""
Do
chId = InputBox("Enter paragraph number in a.b.c form (use . or , as a separator or no separator 'abc'; if you need to search '11' instead '1.1' enter '11.')", _
tit, chId)
If chId <> "" Then
chId = Replace(chId, ",", ".")
For idx = LBound(refItems) To UBound(refItems)
chName = Trim(refItems(idx))
If InStr(1, chId, ".") = 0 Then chName = Replace(chName, ".", "")
If InStr(1, chName, chId) = 1 Then
If MsgBox("Paragraph [" & Trim(refItems(idx)) & "] was found. Do you like to insert cross-reference?", vbYesNo, tit) = vbYes Then
Selection.InsertCrossReference referencetype:=wdRefTypeNumberedItem, ReferenceKind:=wdNumberNoContext, ReferenceItem:=idx, _
InsertAsHyperlink:=True, IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "
refAdded = True
Else
Exit Sub
End If
Exit For
End If
Next idx
If Not refAdded Then refAdded = MsgBox("Paragraph [" & chId & "] was not found in the document. Do you like to enter another paragraph number?", vbYesNo, tit) = vbNo
Else
Exit Sub
End If
Loop Until refAdded
End Sub