XML Hacking: Text Box Styles

PowerPoint’s text boxes could really use styles. But wait: they already do! Text boxes styles are built right into the file format, but there is no access to them thorough the program interface. Formatting text boxes using PowerPoint’s user interface is primitive compared to the styling that can be applied to placeholders in PowerPoint. There is no master where you can format text box defaults. The program interface only allows you to set one style, then right-click and choose Set as Default Textbox. And even this default disappears if you click on the Clear All Formatting button (Home>Font group, look for the icon with an eraser over 1 or 2 letters).

Text Box Styles XML

First, let’s clarify our terminology. Text styles in PowerPoint don’t work like any other program, because there’s no Style menu to apply to selected text. Instead, there are levels that you get to by clicking on the Increase List Level (Windows) or Indent More (Mac) buttons. Each level can have a different style.

Fortunately, with some judicious XML editing, you can create 9 preformatted levels of text for your text boxes. They can become nearly the equivalent of a text placeholder that you can add to any slide. This formatting includes line spacing, bullets, indentation, alignments and many other parameters, so this will have to be a 2-part article.

These text box styles will be saved in a theme, so they can be used in other presentations. However, if the theme is applied to Word or Excel, those programs ignore the custom styles and use their standard single-style text boxes. I guess we could expect that when all these settings are storing in a component called presentation.xml. If you’re new to this subject, read XML Hacking: An Introduction. If you’re using a Mac, you should also read XML Hacking: Editing in OS X.

The XML component that contains the text box text levels is ppt/presentation.xml. This component also contains presentation parameters like slide size, slide master ID and a list of slide IDs for all slides in the deck. Below those items is a tag called <p:defaultTextStyle> that contains 9 levels of text formatting. This structure is nearly identical to the text formatting used for default table text, covered in this article: XML Hacking: Default Table Text

Each of the text levels is identical except of a single digit in the name tag, so we can extract one level for an example that will work for all levels. When this is set up, you’ll be able to insert a text box, then click on the Increase List Level button (called Indent More in OS X) to move between styles, just like a text placeholder. Here’s a sample default level:

<a:lvl1pPr marL="0" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
  <a:defRPr sz="2400" kern="1200">
      <a:schemeClr val="tx1"/>
    <a:latin typeface="+mn-lt"/>
    <a:ea typeface="+mn-ea"/>
    <a:cs typeface="+mn-cs"/>

This contains 2 different sections: the first line with a string of parameters, plus the list of additional parameters on separate lines below. It’s important to create the right data in the correct location, so for this article, I’m only going to cover the first line.

Text Box Style First Line Parameters

From left to right, the default parameters are:

  1. marL – Sets the left margin for that text level in EMUs. 914,400 EMUs equal 1 inch, while 360,000 EMUs equal 1 centimeter.
  2. algn – Horizontal alignment. A value of l means left aligned. You can also use r for right aligned, ctr for center aligned, just for justified text and dist, which distributes text evenly across the line width, kind of like an extreme form of justification.
  3. defTabSz – Default tab size, again in EMUs.
  4. rtl – Is the language right to left? 0 means no.
  5. eaLnBrk – East Asian Line Break: East Asian languages have rules about where a line break occurs. The 1 value turns this attribute on. A 0 breaks the line wherever needed, without consulting the rules.
  6. latinLnBrk – Similar to the eaLnBreak, a 0 will not break the line without a hyphen, a 1 will break the line wherevere needed without a hyphen.
  7. hangingPunct – Online documentation for this is poor and I couldn’t detect any difference in setting this to 0 or 1. I’ll post an edit when I figure out what this does.

Those are the defaults. Then there are several optional parameters that you can add manually:

  • marR – You can set the right margin of text, in EMUs.
  • indent – Set the first line indent of each paragraph, in EMUs.
  • fontAlgn – Vertical alignment. Acceptable values include auto and which both set text on the font baseline, which is the default. You can also use b to align with the bottom of the descenders (like the bottom of a g or y), t to align with the ascenders or c to center text vertically.
  • lvl – Determines the numbering level for this text level, independent of the level’s position in the hierarchy of text box styles.

The picture below illustrates 5 levels of formatting in a text box. There is no local formatting applied, all I did was type the text and click on the Increase Indent button to move between levels, exactly as with a text placeholder.

Text box styles from the first line parameters

5 levels of text box text formatted with only the first line <a:lvl#pPr> tag.

7:58 pm

Leave a Reply

*Required fields. Your email address will not be published.
To enter XML code, please replace greater than > and less than < signs with &gt; and &lt; or Wordpress will strip them out.