UPDATE: Thanks to the kindness of Graham Mayor (
http://www.gmayor.com/), I finally have what I wanted.
The following code creates an MS Word macro that takes each in-text citation (e.g. "{Brennan, 2007, #74498}", or "{Brennan, 2007, #74498; George, 2012, #5678; Maddow, 1998, #1234}") and replaces it with a footnote containing the citation.
For folks (like academics) who sometimes must switch between in-text parenthetical citations and footnote citations to please book or journal editors, this will help a lot. It provides a sort of functionality that Zotero has and Bookends lacks. The trick will be to always write using in-text citations, using the macro to convert to footnotes only if needed. Note that you will want all your citations to come at the end of a sentence, as this macro will create a footnote in the middle of a sentence if you place a citation there.
So thanks to G. Mayor, and also to Stefan Blom, whose code is used in the macro to convert the footnotes into "dynamic" ones that will auto-renumber themselves when moved around (source here:
http://www.msofficeforums.com/word-vba/ ... post100159
Code: Select all
Sub IntexttofootnoteGmayorSblom()
Dim oRng As Range
Dim strText As String
Dim i As Long
'Set a range to the document body
Set oRng = ActiveDocument.Range
'set the initial Value for the counter
i = 1
With oRng.Find
Do While .Execute(FindText:=" {", _
MatchWildcards:=False) 'find a space followed by an opening bracket {
'Move the end of the range to the closing bracket
oRng.MoveEndUntil "}"
'move the end of the range outside the bracket }
oRng.End = oRng.End + 1
'Move the end of the range to encompass the period
oRng.MoveEndWhile Chr(46)
'The Mid(oRng.Text, 2) part removes the leading space from the footnote text
ActiveDocument.Footnotes.Add oRng, CStr(i), Mid(oRng.Text, 2)
'oRng.Text = ""
'add back the period
oRng.Text = "."
'increment the counter
i = i + 1
'collapse the range to its end
oRng.Collapse 0
'and look for the next one
Loop
End With
Dim ftText As String
Dim r As Range
Dim ftCount As Long
ftCount = ActiveDocument.Footnotes.Count
For i = ftCount To 1 Step -1
ftText = ActiveDocument.Footnotes(i).Range.Text
Set r = ActiveDocument.Footnotes(i).Reference.Duplicate
ActiveDocument.Footnotes(i).Delete
ActiveDocument.Footnotes.Add Range:=r, Text:=ftText
Next i
lbl_Exit:
Set oRng = Nothing
Exit Sub
End Sub