OOXML Hacking: PowerPoint Numbering Styles

If you believe the user interface, there are only 7 PowerPoint numbering styles:

PowerPoint Numbering Styles

In fact, there are 41 numbering styles available. About half of these apply to languages using other alphabets. These language variants become available to the user interface when the presentation text and keyboard input method is set to a relevant language.

Microsoft uses “Arabic” for both western European numbers and for numerals in the Arabic language. In this article, I refer to Western numbers for the European/American numbering system.

There are a dozen hidden PowerPoint numbering styles that you can only use if you hack the XML. This subset includes the ever-popular circles within numbers format. Here’s how to implement these.

Hacking PowerPoint Numbering Styles

Here’s a typical listing of a style using numbering. Bold text is the numbering style type.

  <a:lvl1pPr marL="514350" indent="-514350" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
      <a:spcPct val="20000"/>
    <a:buFont typeface="+mj-lt"/>
    <a:buAutoNum type="arabicPeriod"/>
    <a:defRPr sz="3200" kern="1200">
        <a:schemeClr val="tx1"/>
      <a:latin typeface="+mn-lt"/>
      <a:ea typeface="+mn-ea"/>

If we examine the dialog displayed by the program, the styles available from the upper left are arabicPeriod, arabicParenR, romanUcPeriod, alphaUcPeriod, alphaLcParenR, alphaLcPeriod and romanLcPeriod. You can see the full list of styles at Datypic.com.

The illustrated XML is from the bodyStyle section of the slideMaster1.xml, but you can use exactly the same syntax for the otherStyle section of slideMaster1.xml, to format table text, or for p:defaultTextStyle in presentation.xml to handle text boxes.

PowerPoint Numbering Styles – the Complete List

Here are examples of all 41 numbering styles. The text of each line is the XML parameter to use. Uc = Upper case, Lc = Lower case, Db = Double byte, Plain = No character following the number/letter, Period = Following period, ParenR = Following parenthesis, ParenBoth = Parentheses before and after. Please note there are only a few Plain styles and those are mostly for Western numbers. PowerPoint does not have any ability to create custom numbering styles (I’ve tried!), so you’ll have to live with these.

As an alternative to hacking the XML, you can select text and run a VBA snippet to set one of these styles:

Sub NumberStyling()
  With ActiveWindow.Selection.ShapeRange(1).TextFrame2.TextRange.ParagraphFormat.Bullet
    .Type = msoBulletNumbered
    .Style = msoBulletArabicParenBoth
  End With
End Sub

Edit the .Style = msoBulletArabicParenBoth line to one of the style names below, adding msoBullet to the front of the name to get the VBA parameter. So thaiNumParenBoth becomes msoBulletThaiNumParenBoth in VBA. Thanks to John SR Wilson for the VBA.

PowerPoint Numbering Styles 1
PowerPoint Numbering Styles 2
PowerPoint Numbering Styles 3
PowerPoint Numbering Styles 5
PowerPoint Numbering Styles 5

Brandwares can help set up complex numbering and bulleting schemes for PowerPoint and Word. Contact me at production@brandwares.com with your project needs.

6:03 pm

6 thoughts on “OOXML Hacking: PowerPoint Numbering Styles

  1. Hi,
    Is it possible to change the default option of this window. For example if the user clicks the button to insert directly the latin ‘i’ instead of the 1.

    • In the section for a:lvl1pPr, set the bullet like this: a:buAutoNum type=”romanLcPeriod”. Then the first level of text will default to lower case Roman numerals.

      Unfortunately, the display of available numbering styles is hard-coded into PowerPoint, so it can’t be customized.

  2. Hello,

    Very useful article – thank you. Occasionally I have a client who wants to automate appended characters; example below, where we have two spaces and a forward slash after any text that plays a subtitle role:

    My Subtitle Style /

    I’ve looked to see if I could use a bullet and append it rather than prepend-ing it — but just for the subtitle role, not the other bullet lists to be included in the theme. PowerPoint doesn’t want to let me put the bullet on the right, while keeping the language to English. Can this be done via XML hack, or are we simply going to need to leave user notes and hope that people follow them?

    Thanks in advance!

    • Your experiments are correct, you can’t get a bullet on the right without changing the language. I can’t think of any way to do this through XML. My approach to solving this would be to write a macro to do the formatting. After entering the text, the user would press a keyboard shortcut that would add 2 spaces and a forward slash. I done similar workarounds for custom footer numbering.

      Here’s some example code from answers.microsoft.com that shows how a macro can place a bullet on the right of the heading. Look for the second answer from John SR Wilson.

      That said, this is simple to implement in Word but more of a chore in PowerPoint. You would have to create a .pptm file, write the code, then assign it to a QAT button (since custom keyboard shortcuts are otherwise quite difficult in PowerPoint). Brandwares can create this for you if you’re not familiar with VBA, just email me at production at brandwares dot com for a free estimate.

  3. Great tips! Is there a general rule of thumb one should aim for when considering the total file size of a PowerPoint (2016+) file?

    • Thanks!
      A theme or template that uses PowerPoint shapes where possible and vector (EMF) logos should normally be in the 200k to 400k size. If the design uses complex gradient graphics and or photos, file size will quickly shoot up above a megabyte. For final presentations, file size is directly related to the number of photos and can easily get up into 10s of megabytes.

Leave a Reply

*Required fields. Your email address will not be published.

Posting XML? To enter XML code, please replace all less than signs "<" with "&lt;" and greater than signs ">" with "&gt;". Otherwise, Wordpress will strip them out and you will see only a blank area where your code would have appeared.