Как рассчитать левый отступ первой строки абзаца в документе Word? - PullRequest
0 голосов
/ 09 декабря 2010

Если я читаю файл DOCX напрямую, как мне определить левый отступ первой строки абзаца?Это обычно очень странно, особенно если в маркированном списке.

1 Ответ

0 голосов
/ 09 декабря 2010

Это также опубликовано в Позиционирование отступа в DOCX (где форматирование намного лучше, чем у меня здесь).

Во-первых, чтобы получить конечное состояние любого свойства (включая отступы), нам нужно следовать правилам иерархии стилей в §2.7.2 спецификации

Там правильно указано, что прямое форматирование (pPr под элементом p) заменяет версию в определении списка

Поскольку табуляции являются аддитивными, мы просто собираем их все вместе и имеем полный набор табов

Если есть, то эта вкладка очищается и не только не считается вкладкой, но и очищает любые родительские вкладки (стиль, список), которые находятся в той же позиции.

Теперь мы отображаем список следующим образом:

Сначала проверьте элемент numFmt §2.9.18, чтобы увидеть формат любых чисел в определении списка.

Затем поместите текст в элемент lvlText §2.9.12 в месте последнего левого отступа.

Если numFmt не является "маркером", нам нужно соответствующим образом заменить синтаксис% [1-9].

Теперь посмотрите на суффиксный элемент § 2.9.30, чтобы увидеть, что отличает маркер от текста.

Если это пробел или ничего, добавить пробел или ничего.

Если это вкладка, добавьте вкладку. (Примечание: это значение по умолчанию, если суффикс не установлен!)

Тогда нам просто нужно знать, какова следующая остановка табуляции.

Для этого допустима любая остановка табуляции после окончания отображаемого текста уровня:

Вкладки, установленные с помощью элемента tab

Любой висячий отступ (если не установлен элемент doNotUseIndentAsNumberingTabStop §2.15.3.2)

Вкладка по умолчанию останавливается на расстояниях, установленных элементом defaultTabStop §2.15.1.24

Наконец, мы обосновываем результат - от начала текста уровня до конца строки. Вы оправдываете теперь так, что это всегда относительно тех же самых позиций табуляции.

Еще одна вещь - вкладка «зависания» используется только в Word 2007+ (т.е. 2007, 2010 и более поздних версиях) - и это значение по умолчанию в 2007+, что делает ее немного странной:

Для файла Word xml стандартным поведением Word 2003 и 2007+ является исключение виртуальной вкладки «зависания» (если Word 2007+, у нас есть возможность включить вкладку «Висеть» в Word)

Для обычных документов Word 2003, открытых в Word 2003, вкладка виртуального зависания всегда опускается.

Для обычных файлов документов Word 2003, открытых в Word 2007+, Word 2007+ автоматически установит параметр «Не использовать висячий отступ в качестве табуляции для маркеров и нумерации» и пропустит висячий отступ.

Для обычных файлов Word 2007+ docx, открытых в Word 2007+, Word 2007+ будет использовать висячий отступ в качестве вкладки для маркеров и нумерации по умолчанию.

Для обычных файлов Word 2007+ docx, открытых в Word 2003, Word 2003 пропустит виртуальную вкладку зависания и, следовательно, может выровнять документ. (см. КБ http://support.microsoft.com/kb/937936)

Но есть еще одна оговорка в отношении виртуального отступа - в RTF / DOC / WordML (обратите внимание, что это правило не относится к DOCX) используется виртуальный стопорный отступ отступа - если и только если - нет установленных табуляции в списке, абзаце или стилях (стиль списка / абзаца) после виртуальной позиции.

...