Ожидаемое поведение средства визуализации для верхних и нижних индексов в Word Open XML

Похоже, что спецификация ECMA для Word Open XML не указывает, как отображать «прогоны» с атрибутом vertAlign. Есть ли документ, описывающий ожидаемое поведение:

  1. Какой размер шрифта использовать для надстрочных и подстрочных индексов?
  2. На сколько сдвинуть надстрочный/подстрочный текст относительно базовой линии?

Просто для справки, вот document.xml, сгенерированный MS Word для тривиального документа, содержащего текст «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>

person johnnyjob    schedule 11.05.2017    source источник


Ответы (1)


Свойства запуска< Элемент /a> имеет следующие два дочерних элемента, которые можно использовать для установки положения и шрифта Выполнить с VerticalTextAlignment:

  • RunFonts элемент, который можно использовать для установки типа шрифта
  • Позиция элемент, который можно использовать для снижения или повышения производительности по сравнению с базовой линией по умолчанию.

Используя эти элементы, вы можете создать прогон, который находится в верхнем индексе и имеет настроенный шрифт:

    // 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>

В зависимости от значения, которое вы присваиваете элементу position, пробег будет повышаться или понижаться по отношению к его базовой линии:

  • Положительный => Повышенный
  • Отрицательный => пониженный
person Discobarry    schedule 17.04.2019
comment
Я добавил образец XML к вопросу. Видно, что он не содержит значений w:position или w:sz. Похоже, в спецификации ничего не сказано о реальных значениях, которые должны использоваться для рендеринга (или я что-то упускаю). - person johnnyjob; 19.04.2019