Even though BibDesk has a very useful “Cite Tray” from which you can drag and drop your citations to the document you’re writing, what I consistently end up doing is to use, always, mostly the same format. As an example, I may be saying something like as \citeauthor{Nott:2014} said so eloquently, “repetitions are a sign of laziness.” (\citeyear[10]{Nott:2010}) So in essence, I am dragging and dropping twice, and am then entering (or not) the page I’m quoting from. And as repetitions are obviously a sign of laziness in the sense that for just too long I’m too lazy to automate the process, it took me probably 5,000 citation marks until I decided to do this in a better way using a nice dialog box that fetches the relevant information from the currently selected article in BibDesk, asks for the page number and finally copies the correct citation key to the clipboard:
Here is the script (and here you can download it so that you can try it out directly; look inside the bundle for the source code):
(*
This script copies the BibDesk citation key
*)
on run {}
set message to ""
tell application "BibDesk"
activate
set theBooks to the selection of document 1
repeat with theBook in theBooks
tell theBook
set theAuthor to my cleanString(value of field "Author")
set theYear to my cleanString(value of field "Year")
set theTitle to my cleanString(value of field "Title")
set dlg to ¬
(display dialog ¬
"Enter page you are quoting from for " & theAuthor & " (" & theYear & "). " & theTitle & ¬
"." default answer "" buttons {"CiteP", "Cite Author", "Cite Year"} ¬
default button 3 with icon 1 ¬
with title "Copy Citation")
set thePage to text returned of dlg
if button returned of dlg is "CiteP" then
if thePage = "" then
set the clipboard to "\\citep{" & the cite key & "}"
else
set the clipboard to "\\citep[" & thePage & "]{" & the cite key & "}"
end if
else if button returned of dlg is "Cite Author" then
if thePage = "" then
set the clipboard to "\\citeauthor{" & the cite key & "}"
else
set the clipboard to "\\citeauthor[" & thePage & "]{" & the cite key & "}"
end if
else if button returned of dlg is "Cite Year" then
if thePage = "" then
set the clipboard to "(\\citeyear{" & the cite key & "})"
else
set the clipboard to "(\\citeyear[" & thePage & "]{" & the cite key & "})"
end if
end if
end tell
end repeat
end tell
end run
on cleanString(aString)
set result to aString
set result to my ReplaceInString(result, "{", "")
set result to my ReplaceInString(result, "}", "")
set result to my ReplaceInString(result, "---", " - ")
return result
end cleanString
on ReplaceInString(aString, oldStr, replStr)
set newString to ""
if aString is not "" then
tell AppleScript
set oldDelim to text item delimiters
set text item delimiters to oldStr
set foundList to text items of aString -- tokenise the string
set text item delimiters to oldDelim
end tell
set n to count of foundList
if n ≤ 1 then
set newString to aString
else
set newString to (item 1 of foundList)
repeat with i from 2 to n
set newString to newString & replStr & (item i of foundList)
end repeat
end if
end if
return newString
end ReplaceInString

The AppleScript cannot compile. The applet Works, Applescript does not. Why?
default button 3 displayed publications 1 ¬ Expected “,” but found property.
“Expected “,” but found property.” Somehow downloaded package works, but the script doesn’t want to compile if copied and pasted to AppleScript editor.
Yes, my bad. There was my web editor replacing & by
&– and that messed up the script of course. I’ve fixed in, try again.