My CreateSpace formula

Since One Woke Up came out so nicely in the paperback edition, I thought I’d share my process so other authors could take advantage of some of the knowledge I had to pick up mostly through trial and error. I did seek out help from other authors, and got some good advice, but on the book interior I mostly had to wing it. (The following is probably of no interest to anyone who’s not formatting a book for print, unless you want insight into just how much of a perfectionist I am when it comes to putting out a professional product.)

Every writer has their own favorite tool. I used MS Word 2003 to write the book, but put it into OpenOffice later for interior formatting.

Near the end of the editing process, I replaced all the basic quotes and apostrophes with pretty versions. I turn off autocorrect so Word won’t do “smart quotes” for me, because one of the laws of the software universe is that any feature called “smart”, isn’t. I did this manually, but with a little help from Find and Replace for the obvious cases. In Word, you can use wildcard searches, and this means I could find opening quotes and true apostrophes much more easily. I write dashes (Alt+0151) as I go, but if you do it the quick way with two hyphens, this is an easy replacement to make. Open Find and Replace and turn on wildcard searches, then look for “([A-Za-z0-9']) and replace with “\1 where the quote in the replacement is Alt+0147. That should take care of most opening quotes. Now look for ([,.\?!—])” and replace with \1” (the closing quote is Alt+0148). Then ([A-Za-z0-9,.\?!])’ can be converted to \1’ (Alt+0146) for apostrophes and closed single quotes. Finally, with the wildcard flag still on—this forces Word to treat only plain ” and ‘ characters as a match—search for ” and ‘ on their own and make manual adjustments. This should find any remaining double quotes to change, and ambiguous cases where it isn’t clear in a simple find/replace whether an open single quote or apostrophe is needed. (I was able to save a little time finding apostrophes in some obvious cases like ‘em and ’cause.) The open single quote is Alt+0145. I’m not sure how you’d want to approach this in other programs where the find and replace functionality can vary; a macro may serve you well, but you should not trust to automation.

At this point the book can be converted to an ebook, but that’s another subject. To begin the print edition, I copied my text and styles into OpenOffice and used that for the interior. There are several reasons for this:

  1. Word has a longstanding bug in which it will try to insert a line break between a dash and a closing quote if the line is too long, whereas OpenOffice has a similar bug but it’s more manageable.
  2. OpenOffice has infinitely superior page formatting options.

I did have to make some adjustments for styles where I had used extra space between paragraphs, but not between paragraphs of the same style. For example, song lyrics. For these styles I had to break the original down into Song, Song First (as in, first line, so it should have space before it), Song Last, and Song FirstLast. That part was a little tedious, but frankly I should’ve done it that way in Word to begin with, and in fact I went back and did just that to the styles in Word when I was done.

In OpenOffice Writer, you can set up page styles. These are awesome. A page style lets you say the pages should be mirrored, right only, left only, or normal, and lets you define the following page style, whether you’ll want headers and footers, and so on. I made the default style mirrored, for 6″×9″ paper, and gave it margins of 0.5″ for the outside, 0.75″ for the gutter (adequate, but next time I might do a full inch), and 0.35″ for the top and bottom; this is because the headers and footers are 0.2″ tall and have 0.2″ of space to the text, so the actual top and bottom margins are 0.75″ total. The headers and footers are different on each side (left and right), with the page number in the footer and the title or my name in the header depending on whether it was left or right.

Other page styles I used were for the title page, copyright page, new chapter, and “special chapter” (the Afterword and About the Author sections). The special chapters I wanted to start on a right page, but regular chapters I allowed to start on either the right or left. New chapters have footers for the page number, but no header and a bigger top margin. The special chapters are exactly the same, but it’s a right-only page style. Both styles switch back to Default for the next page. The title and copyright pages are always on the right and left, respectively. I did not include a table of contents, but I believe this is pretty easy to do in OpenOffice.

The beauty of page styles is that I could take my Chapter paragraph style, and tell it to insert a page break before, but make the new page in the Chapter Start page style. This was super-easy to do. If I had wanted to, it wasn’t hard to put chapter names in the headers for subsequent pages, either. I did have to do the left and right headers and footers for each page format that used them, but basically that only meant copying and pasting the footer.

Font selection was a big decision. The Book Designer recommended using an old-style typeface for superior readability. One of their articles mentions how to recognize old-style fonts, and talked about some quality choices like Bembo. While looking up various font names to see if I could find out more about them and if they were free—because being free for commercial use matters—I found out that there’s a cousin of Bembo on my favorite font site, FontSquirrel, which only lists free-for-commercial-use fonts. That font is Cardo. At 11 points, Cardo looks terrific in the book. For a sans-serif font when I needed one, I went with Aller at 10 points; it suits my aesthetic for this book but I can see reasons why you might want to keep hunting for a different sans-serif font. Just don’t use Arial or Helvetica, please.

For the page headers I stayed with Cardo, but went with a smaller size (8 pt) and added some spacing between the letters (expanded 2 pt) so it would look nice.

Then there were some little typographical issues to settle. I’ve mentioned before that I had some problems with the dash still not being quite right, and with wanting to handle scene breaks nicely, and ligatures. Having proper scene breaks and ligatures turns a well thought-out book into a professional-looking one. I made a macro in OpenOffice (using OpenOffice Basic) to handle all this for me as a last step before converting to PDF, and I will now share it here:

Sub Clean
    Dim Doc As Object
    Dim Search As Object
    Dim Replace As Object
    Dim Cursor As Object
    Dim UndoManager as Object
    Dim Pos as Object
    Dim Found As Object
    Dim Page as Integer
    Dim KT as Boolean

    Doc = ThisComponent
    UndoManager = Doc.UndoManager
    UndoManager.enterUndoContext("Finalize typography")
    Cursor = Doc.getCurrentController().getViewCursor()
    Pos = Cursor.getStart()

    '' Dash replacement
    Replace = Doc.createReplaceDescriptor

    ' Undo any previous runs
    Replace.SearchString = Chr(8288)+"—"
    Replace.ReplaceString = "—"
    Doc.replaceAll(Replace)

    Replace.SearchString = "—"
    Replace.ReplaceString = Chr(8288)+"—"
    Doc.replaceAll(Replace)

    '' Ligatures
    DocReplaceLigature(Doc, "ffi", chr(64259))
    DocReplaceLigature(Doc, "ffl", chr(64260))
    DocReplaceLigature(Doc, "ff", chr(64256))
    DocReplaceLigature(Doc, "fi", chr(64257))
    DocReplaceLigature(Doc, "fl", chr(64258))

    '' Scene breaks
    Search = Doc.createSearchDescriptor
    Search.SearchStyles = true
    Search.SearchString = "Break"

    Found = Doc.findFirst (Search)
    do until IsNull(Found)
        Cursor.gotoRange(Found.Start, false)
        Page = Cursor.getPage()
        Cursor.goUp(1,false)
        if Page <> Cursor.getPage() then
            Cursor.ParaKeepTogether = true
            if Found.String <> "" Then Found.String = ""
        else
            KT = Doc.StyleFamilies.getByName("ParagraphStyles") _
                 .getByName(Cursor.ParaStyleName).ParaKeepTogether
            if KT <> Cursor.ParaKeepTogether then Cursor.ParaKeepTogether = KT
            Cursor.gotoRange(Found.Start, false)
            Cursor.goDown(1,false)
            if Page <> Cursor.getPage() then
                if Found.String <> "* * *" Then Found.String = "* * *"
            else
                if Found.String <> "" Then Found.String = ""
            end if
        end if

        Found = Doc.findNext (Found.End, Search)
    loop

    '' Final cleanup
    UndoManager.leaveUndoContext()

    Cursor.gotoRange(Pos.Start, false)
    Cursor.gotoRange(Pos.End, true)
end sub

Sub Normalize
    Dim Doc As Object
    Dim Search As Object
    Dim Replace As Object
    Dim Cursor As Object
    Dim UndoManager as Object
    Dim Pos as Object
    Dim Found As Object
    Dim Page as Integer
    Dim KT as Boolean

    Doc = ThisComponent
    UndoManager = Doc.UndoManager
    UndoManager.enterUndoContext("Return typography to normal")
    Cursor = Doc.getCurrentController().getViewCursor()
    Pos = Cursor.getStart()

    '' Dash replacement
    Replace = Doc.createReplaceDescriptor

    Replace.SearchString = Chr(8288)+"—"
    Replace.ReplaceString = "—"
    Doc.replaceAll(Replace)

     '' Ligatures
    Replace.SearchCaseSensitive = true

    Replace.ReplaceString = "ffi"
    Replace.SearchString = chr(64259)
    Doc.ReplaceAll(Replace)

    Replace.ReplaceString = "ffl"
    Replace.SearchString = chr(64260)
    Doc.ReplaceAll(Replace)

    Replace.ReplaceString = "ff"
    Replace.SearchString = chr(64256)
    Doc.ReplaceAll(Replace)

    Replace.ReplaceString = "fi"
    Replace.SearchString = chr(64257)
    Doc.ReplaceAll(Replace)

    Replace.ReplaceString = "fl"
    Replace.SearchString = chr(64258)
    Doc.ReplaceAll(Replace)

    '' Scene breaks
    Search = Doc.createSearchDescriptor
    Search.SearchStyles = true
    Search.SearchString = "Break"

    Found = Doc.findFirst (Search)
    do until IsNull(Found)
        Cursor.gotoRange(Found.Start, false)
        Cursor.goUp(1,false)
        if Found.String <> "* * *" Then Found.String = "* * *"
        KT = Doc.StyleFamilies.getByName("ParagraphStyles") _
             .getByName(Cursor.ParaStyleName).ParaKeepTogether
        if KT <> Cursor.ParaKeepTogether then Cursor.ParaKeepTogether = KT
        Found = Doc.findNext (Found.End, Search)
    loop

    '' Final cleanup
    UndoManager.leaveUndoContext()

    Cursor.gotoRange(Pos.Start, false)
    Cursor.gotoRange(Pos.End, true)
end sub

Function FontHasLigature(Fontname as String, Ligature as String) as Boolean
    FontHasLigature = false
    If Fontname = "Cardo" Then
        If Ligature = "ff" Then FontHasLigature = true
        If Ligature = "ffi" Then FontHasLigature = true
        If Ligature = "fi" Then FontHasLigature = true
        If Ligature = "fl" Then FontHasLigature = true
        If Ligature = "ffl" Then FontHasLigature = true
    End If
End Function

Function DocReplaceLigature(Doc as Object, Ligature as String, Character as String) _
  as Boolean
    Dim Replace as Object
    Dim Found as Object
    Search = Doc.createSearchDescriptor
    Search.SearchCaseSensitive = true
    Search.SearchString = Ligature

    Found = Doc.findFirst(Search)
    Do Until IsNull(Found)
        If FontHasLigature(Found.CharFontName, Ligature) Then
            Found.String = Character
        End If
        Found = Doc.findNext(Found.End, Search)
    Loop
End Function

Use the Clean macro to get pretty typography, Normalize to change it back to normal. The macro will need editing if you use a different font; I was unable to find an easy way to tell which ligatures were in which fonts, so I just kept it simple and did this manually in the FontHasLigature function. I make no claims as to the cleanliness of the code; my goal was something quick and dirty that did the job.

On the subject of typography, I should add that I did not use automatic hyphens in the book. There’s a simple reason: they consistently ended up looking terrible. Soft hyphens for long words may be worth considering, but otherwise it’s probably not worth the bother.

Once this was all done, I exported to PDF. I have printer drivers that will print to a PDF file, but using OpenOffice’s own exporter worked fine and produced a smaller file. The main thing I made sure to do here was check the box that said “Export automatically inserted blank pages”. Between the Afterword and About the Author there is a blank page in my book; the PDF needed to include it.

(Note: If you already have an ISBN, you can put it on your copyright page. I didn’t do this and had to re-upload a new PDF after getting an ISBN from CreateSpace. They give you one at the start of the book creation process, so you can just hold off on your export until then. Including it isn’t strictly required, but it is nice to have.)

Finally, the cover needed to be finished. I won’t go into much detail on that, since it was a lot of Photoshop work and it involved some careful measuring. CreateSpace said I needed 0.125″ of bleed for the cover, so at 300 dpi that meant 38 pixels all the way around. (I had planned for even more bleed, so I was okay.) The book has 379 pages, which is 380 rounded up to an even number, and they say you need 0.0025″ per page—which was 285 pixels for me—with regular cream paper.

When I finally got the proof from CreateSpace, I was ecstatic to see that everything was exactly the way I wanted it to look. The printing wasn’t too light or too dark. There was a very, very slight cover misalignment, noticeable only by looking at the spine, but I knew that was to be expected of the printing process and didn’t worry about it.

Having gotten this process down, I can save myself a lot of time with my next book (The Affix) by creating a template in OpenOffice for the page styles, and the macro is already there. The Photoshop work will suck no matter what, but at least I know what I’m doing now.

About these ads

About Lummox JR

Aspiring to be a beloved supervillain
This entry was posted in Uncategorized and tagged , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s