Last week's newsletter explained how to make your own typographical fractions in Microsoft Word. You can read about the technique here:
http://www.topica.com/lists/editorium/read/message.html?mid=1709983687
But if your document is full of plain-text fractions, like these--
1/3 2/3 5/8
--why not let a macro do the work? I owe my thanks to Wordmeister Steve Hudson for the idea. Steve would probably take a more elegant approach, but this macro will definitely work. Enjoy! If you don't know how to use macros like this one, you can learn how here.
And now, the macro:
'THE MACRO STARTS HERE
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "([0-9]@)/([0-9]@)"
.Replacement.Text = "|sp|1|sp|" + ChrW(8260) + "|sb|2|sb|"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find.Replacement.Font
.Superscript = True
.Subscript = False
End With
With Selection.Find
.Text = "|sp|([0-9]@)|sp|"
.Replacement.Text = "1"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find.Replacement.Font
.Superscript = False
.Subscript = True
End With
With Selection.Find
.Text = "|sb|([0-9]@)|sb|"
.Replacement.Text = "1"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
'THE MACRO ENDS HERE
What's basically going on here is that Word uses a wildcard search to find all numbers that have a slash between them:
Find What: ([0-9]@)/([0-9]@)
Then it replaces those numbers with *themselves* surrounded by arbitrary codes denoting superscript (|sp|) and subscript (|sb|). It also replaces the slashes with the fraction bar character, Unicode number 8260:
Replace With: "|sp|1|sp|" + ChrW(8260) + "|sb|2|sb|"
(If you were doing this by hand, you could insert the fraction bar into your document using Insert > Symbol [as explained in last week's newsletter], then copying it, and then pasting it into the Replace dialog's "Replace With" box. The result would look something like this: |sp|1|sp|/|sb|2|sb|)
Finally, the macro uses parentheses to group the numbers so that after they and their surrounding codes are found, the numbers can be replaced by *themselves,* properly formatted and without the codes, using the "Find What Expression" wildcard:
Find What: |sp|([0-9]@)|sp|
Replace With: 1 [formatted as superscript]
Find What: |sb|([0-9]@)|sb|
Replace With: 1 [formatted as subscript]
You can learn more about wildcard searches here:
http://www.topica.com/lists/editorium/read/message.html?mid=1705963026
http://www.topica.com/lists/editorium/read/message.html?mid=1706069286
http://www.topica.com/lists/editorium/read/message.html?mid=1706167662
http://www.topica.com/lists/editorium/read/message.html?mid=1706267069
http://www.topica.com/lists/editorium/read/message.html?mid=1706365638
http://www.topica.com/lists/editorium/read/message.html?mid=1706458823
_________________________________________
READERS WRITE
Gentle reader, I've run into a fairly serious problem that I'm hoping you may have some ideas about. The problem is that QuarkXPress doesn't import Unicode characters--the old 256 are all it will deal with. Several people have asked me if there's a way to find and replace Unicode characters in Word with other lower-level characters that Quark could deal with. For example, if you type a, b, c in Quark and then format it with a Greek font, you get alpha, beta, gamma. Maybe a similar approach could be taken with Unicode characters, if you could figure out what to replace them with in Word (and actually do the replacing) before importing the Word document into Quark. I don't know--this looks like an almost insurmountable problem to me. If you are successfully importing Unicode characters into QuarkXPress, especially using XPress Tag files, I'd love to hear from you. Please write to me here: mailto:editor [at symbol] editorium.com
Sage Rountree (srountree@dukeupress.edu) wrote:
"When we insert notes to compositor and authors in electronic manuscript files, we want those inserts to be bold and in either angle brackets (for coding and notes to compositor) or curly brackets (for queries to authors). Sometimes, our freelance copyeditors neglect to toggle on the bold for these queries, and we go through and manually convert them to boldface. (By manually, I mean we search for the opening bracket, highlight, and toggle--a big waste of time.)
"I'm able to figure the search-and-replace for toggling short coding with fixed letters (, ) to boldface, but how can I replace all text between the brackets <> and {} *with the brackets themselves* and the text they contain in bold? The substance of the note can sometimes be a few sentences long, and I don't know how to denote that with wildcards. It's like the opposite of the process you outlined in the 10/25/2000 newsletter on replacing with "find what text."
"This has been an interesting mental puzzle for me, but I'm ready to throw in the towel.
Minutes later, before I could respond, Sage wrote again:
"Jack, I spoke too soon about throwing in the towel, and I added the backslash so Word would recognize the angle brackets as characters, not as the start and end of words. To that end, I wrote this macro:
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Bold = True
With Selection.Find
.Text = "<*>"
.Replacement.Text = "^&"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Many thanks to Sage for this useful macro (which I edited slightly). I'd add that if your comments are between curly brackets, you could replace the sixth line with this:
.Text = "{*}"
_________________________________________
RESOURCES
So, you kind of like all this programming stuff, eh? Want to learn more? There's an excellent tutorial, "Getting to Grips with VBA Basics in 15 Minutes," by Word expert Bill Coan, at the MVPS Web site. You'll find the tutorial here:
http://www.mvps.org/word/FAQs/MacrosVBA/VBABasicsIn15Mins.htm
You must be logged in to post a comment.