
Я искал варианты ответа на этот вопрос, но ничего похожего не нашел.
У меня есть набор документов Word, которые включают два типа встроенных ссылок. Первая — стандартная академическая ссылка, вставленная с помощью Zotero, и ее нужно оставить нетронутой и связанной с Zotero.
Второй тип — это обычный текст, который необходимо преобразовать в сноску в той же точке, удалив скобки. Второй тип цитирования всегда начинается с "(File XX_XX", где X — целые числа, или "(Digital file".
Было бы очень полезно, если бы все цитаты этого второго типа можно было бы преобразовать в сноски одновременно. Если это невозможно, то макрос, который преобразует выделенный текст в сноску и удаляет скобки, также будет работать.Мне удалось записать макрос, который делает это по одному, но если есть способ автоматизировать этот процесс по всему документу, это было бы здорово.
Надеюсь, вы сможете помочь, и заранее спасибо.
Вот пример абзаца, включающего оба типа цитирования:
Вторая сфера, в которой правительство провинции Гаутенг имело институциональные полномочия, касалась регулирования операторов общественного транспорта. Закон о переходе на наземный транспорт 2000 года учредил провинциальные советы по выдаче лицензий на эксплуатацию, которые были исключительно ответственны за выдачу лицензий на эксплуатацию на основе маршрутов всем операторам общественного транспорта (Cameron, 2005; Wosiyana, 2005; Palmer, Moodley and Parnell, 2017). Эти OLB были ответственны за управление преобразованием старых разрешений на основе радиуса в лицензии на эксплуатацию на основе маршрутов, а также за выдачу новых лицензий под руководством муниципальных органов власти. Однако ко времени Реа Вайи OLB Гаутенга находился «в административном хаосе» и практически прекратил выдавать лицензии на эксплуатацию, в результате чего городу Йоханнесбургу пришлось подсчитывать потенциально затронутых операторов на основе их квитанций по еще не обработанным заявлениям на получение лицензий (файл 03_05, Фаза 1a Совместной рабочей группы по участию в BRT, встреча между городом Йоханнесбургом и таксомоторной отраслью, 26 марта 2010 г.).
Последняя цитата должна быть представлена в виде сноски следующего содержания:
Файл 03_05, Совместная рабочая группа по участию в проекте BRT, фаза 1a, встреча между городом Йоханнесбургом и таксомоторной отраслью, 26 марта 2010 г.
решение1
Что-то вроде этого, но вам придется решить, сколько усилий приложить, чтобы все заработало, а сколько доделать вручную.
Sub NotesToFootnotes1()
'
Const matchcount As Integer = 2
Dim i As Integer
Dim r As Word.Range
Dim rStart As Word.Range
Dim fn As Word.Footnote
Dim s(1 To matchcount, 1 To 2) As String
' This uses a wildcard search which looks for 3 "groups"
' The first is a "("
' The second is the 'body' of the footnote
' The third is a ")"
s(1, 1) = "([(])(File [0-9][0-9]_[0-9][0-9]*)([)])"
' This replaces the found text by the content of the second group.
s(1, 2) = "\2"
s(2, 1) = "([(])(Digital file*)([)])"
s(2, 2) = "\2"
For i = 1 To matchcount
Set r = ActiveDocument.Content
With r.Find
.Text = s(i, 1)
.Replacement.Text = s(i, 2)
.Forward = True
.Wrap = wdFindStop
.Format = False
' This wil actually match Digital fIle, Digital File, DIGITAL FILE etc.
' If you only want to match Digital file, set it to False
.MatchCase = True
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
' Very important!
.MatchWildcards = True
.Execute Replace:=True
Do While .Found
Set rStart = r.Duplicate
rStart.Collapse WdCollapseDirection.wdCollapseStart
' Initially, create an empty footnote, because if we want to
' put formatted text in the footnote, we can't do it in the .Add
With rStart.Footnotes.Add(Range:=rStart, Text:="")
' Don't copy the newly inserted footnote reference!
r.Start = r.Start + 1
' This copies the content of the range, which would include formatting
' possibly images and so on. If you don't want that, use
' .Range.Text = r.Text
' instead, but be aware that anything other than text will probably not
' copy exactly the way you expect.
.Range.FormattedText = r.FormattedText
End With
Set rStart = Nothing
r.Delete
.Execute Replace:=True
Loop
Set r = Nothing
End With
Next ' i
End Sub