Word Open XML 中上标和下标的呈现器的预期行为



看起来Word Open XML的ECMA规范没有指定如何使用vertAlign属性呈现"运行"。是否有描述预期行为的文档:

  1. 上标和下标使用什么字体大小?
  2. 上标/下标文本相对于基线移动多少?

仅供参考,下面是一个由 MS Word 生成的文档.xml用于包含文本"X²"的琐碎文档(为简洁起见,省略了 XML 命名空间(:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document>
  <w:body>
    <w:p w14:paraId="4B8ED8F1" w14:textId="3891D3E1" 
         w:rsidR="00CE1223" w:rsidRDefault="00886D56">
      <w:r>
        <w:t>X</w:t>
      </w:r>
      <w:r w:rsidRPr="00886D56">
        <w:rPr>
          <w:vertAlign w:val="superscript"/>
        </w:rPr>
        <w:t>2</w:t>
      </w:r>
      <w:bookmarkStart w:id="0" w:name="_GoBack"/>
      <w:bookmarkEnd w:id="0"/>
    </w:p>
    <w:sectPr w:rsidR="00CE1223">
      <w:pgSz w:w="12240" w:h="15840"/>
      <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" 
               w:header="720" w:footer="720" w:gutter="0"/>
      <w:cols w:space="720"/>
      <w:docGrid w:linePitch="360"/>
    </w:sectPr>
  </w:body>
</w:document>

RunProperties 元素具有以下两个子元素,可用于设置具有 VerticalTextAlignment 的 Run 的位置和字体:

    可用于
  • 设置字体类型的 RunFonts 元素
  • Position 元素,可用于降低或提高相对于其默认基线的运行。

使用这些元素,您可以创建一个上标并具有调整字体的运行:

    // Creates an RunProperties instance and adds its children.
    public RunProperties GenerateRunProperties()
    {
        RunProperties runProperties1 = new RunProperties();
        RunFonts runFonts1 = new RunFonts(){ Ascii = "Times New Roman", HighAnsi = "Times New Roman", ComplexScript = "Times New Roman" };
        FontSize fontSize1 = new FontSize(){ Val = "48" };
        VerticalTextAlignment verticalTextAlignment1 = new VerticalTextAlignment(){ Val = VerticalPositionValues.Superscript };
        runProperties1.Append(runFonts1);
        runProperties1.Append(fontSize1);
        runProperties1.Append(verticalTextAlignment1);
        return runProperties1;
    }

这将输出下面的 openxml:

<w:rPr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
   <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" />
  <w:sz w:val="48" />
  <w:vertAlign w:val="superscript" />
</w:rPr>

您可以使用以下元素移动垂直对齐的运行:

    // Creates an RunProperties instance and adds its children.
    public RunProperties GenerateRunProperties()
    {
        RunProperties runProperties1 = new RunProperties();
        RunFonts runFonts1 = new RunFonts(){ Ascii = "Times New Roman", HighAnsi = "Times New Roman", ComplexScript = "Times New Roman" };
        Position position1 = new Position(){ Val = "-10" };
        FontSize fontSize1 = new FontSize(){ Val = "48" };
        VerticalTextAlignment verticalTextAlignment1 = new VerticalTextAlignment(){ Val = VerticalPositionValues.Superscript };
        runProperties1.Append(runFonts1);
        runProperties1.Append(position1);
        runProperties1.Append(fontSize1);
        runProperties1.Append(verticalTextAlignment1);
        return runProperties1;
    }

生成下面的 openXML:

<w:rPr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" />
  <w:position w:val="-10" />
  <w:sz w:val="48" />
  <w:vertAlign w:val="superscript" />
</w:rPr>

根据您分配给位置元素的值,运行将相对于其基线升高或降低:

  • 正 => 提高
  • 负 => 降低

最新更新