Nisus Writer Pro 3.2.1

Originally published at: Nisus Writer Pro 3.2.1 - TidBITS

Maintenance update that focuses on fixing a few key issues, including sluggish behavior in macOS 11 Big Sur. ($65 new, free update, 277 MB, macOS 10.11+)

1 Like

I love this app!!! It has been my #1 for a lot of years. All of my Publishing apps, and research apps utilize its files with no complaint. Nisus Writer Pro and Nisus Writer and hugely customizable…fonts, languages, templates you name it and there is every chance Nisus Writer can do it. One of its best features is its Support Staff and Community. Let us not forget the price too!!! And maybe most importantly, Nisus Writer Pro or Nisus are 100% native Mac apps not a boot of some Windows app. Nisus offers an extensive free trial with no limitations… surely worth a try for all Mac users.:100:


I agree entirely with those who praise NisusWriter (as long as you don’t have a document with thousands of footnotes, anyway, which choke it). It’s beautiful and easy to use. The style sheets are powerful and much more accessible than MS Word’s. It has the most powerful regular-expressions-based search and replace feature anywhere. And it has a macro language of great power. I don’t actually LIKE the macro language – the documentation isn’t great, and it’s too object-oriented to be procedural and too procedural to be good for OOP :slight_smile: – but it has all the power you could need and it isn’t Visual Basic. :slight_smile: For those who need a word processor that does everything, NisusWriter Pro is it. Hands down.

1 Like

@waltzmn Totally agree. Also its bookmarks are readily available and easy to apply and use. I agree about the macros, which many times I wish I could use but just can’t figure them out. But I have used this app for many multipage research items that include hyperlinks internally as well as externally and found it flawless and easy to use. Also the ability to set up your own keyboard shortcuts (for example marking something for a table of contents and being able to set that item at whatever level in the TOC you want by a simple command) is invaluable. Superb program and I first learned about it ages ago here at TidBITS. Highly recommend it.

G. Douglas Eddy commented that he doesn’t understand macros.

Don’t entirely give up on NisusWriter macros because the language is hard. :slight_smile: For me at least, almost all of my macros consist of complicated find/replace expressions which I automate. Sometimes you can accomplish this with just a “macroize” command in the find/replace box. But if you want to do multiple find/replaces in a macro, it’s relatively easy to build. You just need to stack up lists of commands of this form:

Find and Replace 'SOMETHING','SOMETHING ELSE','aE'

(The single plain quotes can be important, although you can sometimes use other quote types. The ‘aE’ at the end says to replace all and to use regular expressions.) And here’s the trick: You can assemble your find/change commands using PowerFind, then convert them to PowerFind Pro and Paste the result into your macro. No need to learn real reglular expressions.

So here is an example to change phone numbers of the form (999)999-9999 or (999) 999-9999 to 999-999-9999:

Find and Replace ‘\(([[:digit:]][[:digit:]][[:digit:]])\) ?([[:digit:]][[:digit:]][[:digit:]])-([[:digit:]][[:digit:]][[:digit:]][[:digit:]])‘,‘\1-\2-\3‘,’aE’

And one to convert 999 999 9999 to 999-999-9999:

Find and Replace ‘\(([[:digit:]][[:digit:]][[:digit:]])\) ([[:digit:]][[:digit:]][[:digit:]]) ([[:digit:]][[:digit:]][[:digit:]][[:digit:]])‘,‘\1-\2-\3‘,’aE’

Put them together in one macro and you have a phone-number-standardizing macro.

Perhaps you don’t need that, but the point is, you don’t really need to understand the macro language to make extremely powerful NisusWriter Pro macros. I certainly don’t understand it all, but macros are an important part of what I do even so.

1 Like

Ditto. I have to get help for the fancier macro language work, but collecting a bunch of grep statements like this is tremendously powerful.

Expressions like this are useful, but you should always be aware of their limitations and don’t forget them when new situations arise. In this particular case, you’re explicitly checking only for three specific formats of phone numbers. It will break if you give it some other format (e.g. a 7-digit number or one with a “+1” prefix) or a foreign number.

The generalized task of parsing, validating and normalizing phone numbers is really nasty and actually requires quite a bit of code. Here, for example, is a library that Google released as open source (and which they use inside Android)

This is of course true, but I was offering an example of how to use regular expressions in a macro. I wasn’t trying to offer a fix for every possible phone number. What I offered was two lines out of a many-hundred-line macro for munging data that allows only certain input formats – but, unfortunately, allows some wrong phone number formats. :slight_smile: I wanted an example that could be readily understood – as opposed to, for instance, my macro to convert NisusWriter’s RTF documents into Quark Tag Format that imports into Quark XPress, where you have to know how to read Quark Tag Format.

The point is, using the NisusWriter macro language as a full-bore programming language is hard, but you don’t have to learn much of anything to get substantial use out of it.