LaTeX addresses on the Mac and iOS

A couple of years ago, as I was first learning how to use Shortcuts,1 I wrote a shortcut that grabbed the name and address of the selected person in Contacts, formatted it for use in LaTeX, and put it on the clipboard. The result was something like

John Cheatham\\
Dewey, Cheatham \& Howe\\
1515 Loquitor Lane\\
Amicus OH 44100

where the key is to end each line (except the last) with double backslashes and to backslash escape an ampersands. The shortcut was run from the Share Sheet, and while I’ve made some minor changes to it, it still serves me well when I’m writing on the iPad.

Recently, though, I realized that I didn’t have anything similar when writing on the Mac. Oh, I have a command-line tool for looking up a contact and outputting a LaTeX-formatted address—it’s an extension of this ancient script—but what I wanted was something that worked from the Contacts app, a system parallel to what I have on iOS.2 I got that through a combination of AppleScript and Keyboard Maestro

Let’s start by looking at the current version of my LaTeX Address shortcut.

0 LaTeX Address Step 00 This will appear in the Share Sheet for Contacts
1 LaTeX Address Step 01 Get the Street Address from the contact. We’ll pull more info from it later.
2 LaTeX Address Step 02 Assemble the name and address. By default, the Shortcut Input for contacts returns the full name. The Company also comes directly from the contact. The parts of the address come from the Street Address extracted in Step 1.
3 LaTeX Address Step 03 LaTeX treats ampersands as special characters, so we have to escape them.
4 LaTeX Address Step 04 This looks like an empty text field, but it contains a newline character. The magic variable associated with this action has been renamed Newline.
5 LaTeX Address Step 05 Put two backslashes in front of all the newlines. You might think would be simpler to just add the backslashes directly in Step 2, but that wouldn’t work when the Street part of an address is two lines long.
6 LaTeX Address Step 06 Put the LaTeXified name and address on the clipboard.

If you compare it to the original version, you’ll see that it’s cleaner now, mainly because Shortcuts’ inclusion of parameters in iOS 13 has reduced the need for Set Variable and Use Variable actions. Also, I’ve simplified the text replacement in Step 5 to avoid the messy regular expression I used to use. If you have a need for something like this, you can download it.

So to get the LaTeXified address onto the clipboard when working on iOS, I

  1. Open Contacts.
  2. Find the person.
  3. Open the Share Sheet.
  4. Choose the LaTeX Address shortcut.

For the analogous behavior on the Mac, I use this Keyboard Maestro macro:

LaTeX address macro

It’s triggered by the ⌃⌥⌘L key combination, but only when Contacts is the frontmost application. It runs an AppleScript to put the LaTeXified name and address of the currently selected contact on the clipboard and then hides Contacts itself.3 Here’s the AppleScript:

 1:  set latexList to {}
 2:  tell application "Contacts"
 3:    tell the selection as list
 4:      set thePerson to item 1
 5:      tell thePerson
 6:        set end of latexList to name
 7:        set end of latexList to organization
 8:        set addr to formatted address of address 1
 9:        set latexList to latexList & (paragraphs of addr)
10:        if last item of latexList is equal to "USA" then
11:          set latexList to items 1 through -2 of latexList
12:        end if
13:      end tell
14:    end tell
15:  end tell
17:  set AppleScript's text item delimiters to "\\\\
18:  "
19:  set the clipboard to latexList as string

Basically, it creates a list, latexList, of lines for the name and address and then combines the list items with two backslashes and a newline as separators. Lines 17–18 define the separator (it has to double each backslash because AppleScript treats them as special characters), and the latexList as string part of Line 19 combines them. The only other tricky part of the script is Lines 10–11, which strip the country from the end of the address if it’s “USA.” I’m able to get away with this rather simple way of deleting the country from domestic addresses because I standardized on “USA” many years ago and have stuck with it as I add new Contacts entries.

To get a LaTeXified address onto the clipboard when working on a Mac, I

  1. Activate LaunchBar.
  2. Start typing the person’s name.
  3. Press the Return key when LaunchBar shows the match. This activates Contacts with that person selected.
  4. Type ⌃⌥⌘L to run the LaTeX Address macro.

I would dearly love to be able to run a command directly from LaunchBar after Step 2, never activating Contacts, but I don’t know how. I guess typing Return and then ⌃⌥⌘L isn’t especially onerous.

  1. It was still Workflow back then. 

  2. As we’ll see, what I really wanted was something I could run directly after a contact was found by LaunchBar

  3. I typically work with Contacts open but hidden, so this puts my Mac back to its normal state after getting the address.