1

Тема: Стиль номера абзаца, привязанный к текущему уровню заголовка

Добрый день.

Мне необходимо в Word 2010 создать стили (назовем их HL1, HL2, ... HL9). Это должны быть стили для многоуровнего списка. При этом сами стили не должны иметь уровня заголовка. Основное требование - эти стили должны быть синхронизированы с соответствующими стилями нумерованных уровневых заголовков Heading 1, Heading 2, ... Heading 9. Далее приведу фрагмент примера целевого текста (в начале каждого абзаца имя стиля в скобках):

1 (Heading 1) Текст заголовка уровня 1
1.1 (HL2) Текст абзаца
1.2 (HL2) Текст абзаца
1.3 (Heading 2) Текст заголовка уровня 2
1.3.1 (HL3) Текст абзаца
1.3.2 (HL3) Текст абзаца
2 (Heading 1) Текст заголовка уровня 1
2.1 (HL2) Текст абзаца
2.2 (Heading 2) Текст заголовка уровня 2
2.2.1 (HL3) Текст абзаца

Как видно из примера, стиль HL2 синхронизирован с Heading 1, стиль HL3 - со стилем Heading 2 и т.д. При этом стили одинакового "ранга", напр, HL2 и Heading 2 идут в общем уровне нумерации. Такие фрагменты текста часто встречаются при описании  требований в ТЗ.

Чтобы реализовать такие стили, я переппробовал несколько подходов:
1. Создал стиль HL1 на базе Heading 1, стиль HL2 - на базе стиля Heading 2 и т.д. Получившиеся стили всем устраивают, но невозможно корректно изменить в стиле HLn формат номера (при его изменении меняется и формат номера соответствующего стиля Heading n.
2. Создал стили абзаца HL1, HL2, ... HL9. Затем создал многоуровневый список со ссылками на каждом уровне на соответствующим Hln. В результате стили HLn между собой синхронизируются, но со стилями Heading n синхронизации нет.

В прежней версии Word (2007) мне как-то удалось решить эту задачу, но я забыл, как. К тому же мне необходимо такое решение, которое я смог бы повторить как "руками", так и соответственно программно (т.е., через VBA), т.к. это часть стилевого шаблона, который я создаю на VBA.

Подскажите, как мне создать такие стили.

С уважением, Юрий.

2

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Решение пока еще не найдено, но я нашел у себя файл стилевого шаблона (ESP.dot в прицепе к сообщению), где моя проблема решена - но как мне удалось это сделать, я вспомнить не могу. Мне же нужно повторить это тне только "руками", но и через VBA.

Я это делал, используя подход-1 (описанный в первом моем сообщении): создал стили Subsection X на базе соответствующих стилей Heading X. Если вы откроете приложенный файл, то обратите внимание, что оформление нумерации в стилях Subsection X не совпадают с соответствующим оформлением в стилях Heading X (в последних полужирный шрифт, а в первых - простой).

Как раз загвоздка в том, что теперь, когда я пытаюсь все повторить на "чистом" .dot-файле, я не могу изменить оформление у нумерации для стиля Subsection X (по разным причинам, в том числе потому, что не могу выбрать подходящий образец списка из галереи для текущего уровня заголовка).  Хотя изменение атрибутов для абзаца проходит как мне нужно.

Post's attachments

ESP.dot 182 Кб, 5 скачиваний с 2014-06-19 

You don't have the permssions to download the attachments of this post.

3

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Всем привет.

Я поднял затронутый вопрос на форуме Microsoft по Word
внешняя ссылка

Пока, несмотря на общие советы, итог остается тем же: если вы создаете стиль абзаца (напр., HL1) на базе нумерованного стиля (напр., Heading 1), то, изменяя свойства стиля HL1, вы не имеете возможности изменить атрибуты нумерации стиля HL1 без того, чтобы стиль Heading 1 остался неизмененным.

Хотя иногда это удается (но процесс не стабилен и, соответственно, не воспроизводим 100%).

4

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Всем привет.
Я решил еще раз поднять эту тему: вдруг за прошедшее время кому-то удалось решить описанную в посте проблему (либо она решена каким-то другим способом).
Задача состоит в консистентном ведении заголовков и пунктов/подпунктов документа (что характерно для документов, разрабатываемых по ГОСТ). То есть, пункты синхронизированы по уровню с заголовками.
Во вложении пример решения этой задаче на базе полей LISTNUM. При создании стилей Heading X я применил связанный стиль многоуровневой нумерации zl_Heading, в котором указал общее имя списка Listnum как "Heading". Это же имя списка я использую в поле Listnum в прилагаемом примере.
В этом примере нумерованные абзацы пунктов/подпунктов основаны на стиле Normal, а для самой нумерации используется поле Listnum со ссылкой на соответствующий уровень списка Heading из стилевого шаблона. Напр., для ссылки на второй уровень используется такой код поля:
             { LISTNUM Heading \l 2 \* MERGEFORMAT }
(фигурными скобками обозначены границы поля)
Мне же нужно решение задачи на базе стилей, привязанных как-то либо к самим стилям Heading X, либо к списку Heading (либо каким-то третьим способом). При этом должны быть выполнены условия:
- форматирование номера в пункте (жирность, курсив и т.д.) отличается от форматирования номера в соответствующем Heading X
- поддерживается синхронизация нумерации заголовков и пунктов/подпунктов; напр., пусть очередной заголовок уровня 2 имеет номер 5.4 - тогда подпункт третьего уровня, следующий сразу за этим зпаголовком, должен иметь номер 5.4.1. Но если за этим заголовком вместо подпункта следует подзаголовок третьего уровня (т.е., в стиле Heading 3), то он тоже должен получить номер 5.4.1.

Post's attachments

MultilevOutline2.docx 55.32 Кб, 4 скачиваний с 2017-06-07 

You don't have the permssions to download the attachments of this post.

5

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Не видел раньше темы. Завтра разберусь и подумаю, что можно предпринять.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

6

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

А почему они не должны иметь уровня заголовка? Пользуюсь тем, что в файле.
Иначе вижу только способ создать такое - несколько многоуровневых списков каждый для определённого номера.

Post's attachments

Заголовки.docx 18.26 Кб, 1 скачиваний с 2017-06-08 

You don't have the permssions to download the attachments of this post.
Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

7

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Fck_This пишет:

А почему они не должны иметь уровня заголовка? Пользуюсь тем, что в файле.
Иначе вижу только способ создать такое - несколько многоуровневых списков каждый для определённого номера.

Пункты/подпункты не должны иметь уровня заголовка, т.к. сами пункты и подпункты не являются уровневым текстом (не попадают в оглавление и т.п.). Но самое главное - атрибуты шрифта номера пункта должен отличаться от атрибутов шрифта номера синхронизируемого заголовка. Конечно, можно стиль оглавления и пункта оба сделать с нежирным текстом в номере, но это не решение.

8

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

yshindin пишет:

. . .
Но самое главное - атрибуты шрифта номера пункта должен отличаться от атрибутов шрифта номера синхронизируемого заголовка.
. . .

Кстати, предыдущая родственная дискуссия по данной теме есть (http://wordexpert.ru/forum/viewtopic.php?id=1449). Там пользователь andrkar представил свой шаблон-инструкцию, в котором реализованы пункты. Для полноты информации предлагаю его скачать и посмотреть. В нем, напр., стиль "Пункт 4" основан на стиле "Heading 4", однако в последнем "жирный" шрифт в номере, а в стиле "Пункт 4" - "нежирный". Но как этого добиться (особенно на VBA)?

9

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

yshindin пишет:

Но как этого добиться (особенно на VBA)?

Юрий, вы наверно это знаете, но я повторю:
1) В стиле абзаца есть свойство "основан на стиле". И это единственный способ связать один уровень стиля списка с несколькими стилями абзаца.
2) Стили абзаца легко создаются и редактируются с помощью макросов VBA. Если вы отредактировали стиль списка, и у вас после этого изменились отступы/выступы у стилей абзаца, то просто запускаете макрос, и он все исправит.
3) Стиль списка с помощью макросов нельзя создать. Это мое предположение исходя из того,  что доступ к "шаблонам списка" затруднен.
4) LISTNUM - универсальное и очень надежное решение. Но когда в документе много полей LISTNUM, он начинает тормозить.

Я недавно задумал использовать способы 1 и 2, как альтернативу LISTNUM. Пока меня все устраивает. Но не уверен, что в разных версиях Word с разными обновлениями все будет надежно работать.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

10

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Александр Б. пишет:
yshindin пишет:

Но как этого добиться (особенно на VBA)?

Юрий, вы наверно это знаете, но я повторю:
1) В стиле абзаца есть свойство "основан на стиле". И это единственный способ связать один уровень стиля списка с несколькими стилями абзаца.
2) Стили абзаца легко создаются и редактируются с помощью макросов VBA. Если вы отредактировали стиль списка, и у вас после этого изменились отступы/выступы у стилей абзаца, то просто запускаете макрос, и он все исправит.
3) Стиль списка с помощью макросов нельзя создать. Это мое предположение исходя из того,  что доступ к "шаблонам списка" затруднен.
4) LISTNUM - универсальное и очень надежное решение. Но когда в документе много полей LISTNUM, он начинает тормозить.

Я недавно задумал использовать способы 1 и 2, как альтернативу LISTNUM. Пока меня все устраивает. Но не уверен, что в разных версиях Word с разными обновлениями все будет надежно работать.

Александр, спасибо за отклик, мне важно было слышать ваше мнение.
Все стили (и стилевые шаблоны целиком) я создаю на VBA, на основе описания атрибутов стилей, которые указываю в ini-файле. Естественно, сначала все детали проигрываю вручную. Кстати, стили списка тоже создаю через VBA - это просто стиль другого типа, - но делаю это не как самоцель, а только тогда, когда основной стиль с ним связывается, напр., для стиля Heading 1 (и при этом также создаю имя списка для LISTNUM). В описанном в посте примере этот тип списка - многоуровневый. Вроде напрашивается вывод, что связав с каким-то одним стилем нумерации разные стили абзаца, уже не получится для одного стиля абзаца иметь этот номер с "жирным" шрифтом, а для другого - с "нежирным".
Но меня смущает как мой пример, выложенный в прежней дискуссии, так и пример andrkar. C последним примерно понятно (но не до конца) - как я понял, похоже, там как для заголовков, так и для пунктов используется один и тот же многоуровневый стиль. В случае моего примера сложнее - я тот стилевой шаблон создавал давно, и подозреваю, что при этом Word мне позволил все это сделать, так как в нем еще не был создан (в нынешней реализации) механизм "стиль нумерации+стиль абзаца".
Все спасибо за дискуссию, вопрос откладываю. Пока буду пользоваться полями LISTNUM. Кстати, я написал макрос, который включает или отключает поле LISTNUM в начале абзаца или выделенной группы абзацев. Александр, если чего-то добьетесь (применяя свои методы 1 и 2 как альтернативу LISTNUM), то буду признателен, если вы сообщите детали.

11

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

yshindin пишет:

Во вложении пример решения этой задаче на базе полей LISTNUM.

В вашем файле я отредактировал списковый стиль «zl_Heading». Убрал там со всех уровней полужирное начертание. Никакой проблемы не вижу (или я что-то не понимаю). Прикрепил файл.

Post's attachments

MultilevOutline2 (Бирюков 2017.06.09).docx 56.68 Кб, 1 скачиваний с 2017-06-09 

You don't have the permssions to download the attachments of this post.
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

12

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Александр Б. пишет:
yshindin пишет:

Во вложении пример решения этой задаче на базе полей LISTNUM.

В вашем файле я отредактировал списковый стиль «zl_Heading». Убрал там со всех уровней полужирное начертание. Никакой проблемы не вижу (или я что-то не понимаю). Прикрепил файл.

Александр, как я вижу, ваша корректура устранила в стилях SubheadingItem X жирность в атрибуте шрифта абзаца, но не не в атрибуте шрифта номера абзаца, за что я и борюсь.

13

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Прикрепил скрин документа. Если вы у себя видите то же самое, то я ничего не понимаю. Нумерованные абзацы полностью нормального начертания.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

14

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Вот скрин.

Post's attachments

MultilevOutline2 (Бирюков 2017.06.09).png 74.77 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

15

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Александр Б. пишет:

Вот скрин.

А вот мой вариант oO))

Post's attachments

MultilevelOutline-YShindin.png 41.22 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

16

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

А, понял. Я забыл убрать флажок "Автоматически обновлять стили" в окне "Шаблоны и надстройки". Видимо в этом причина.

Post's attachments

MultilevOutline2 (Бирюков 2017.06.09, ред 2).docx 56.28 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

17

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

yshindin пишет:
Александр Б. пишет:

Вот скрин.

А вот мой вариант oO))

То есть, этот скриншот я снял с файла, выложенного вами.

18

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

yshindin пишет:
yshindin пишет:
Александр Б. пишет:

Вот скрин.

А вот мой вариант oO))

То есть, этот скриншот я снял с файла, выложенного вами.

Скриншот что-то не приложился ((

Post's attachments

MultilevelOutline-YShindin.png 41.22 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

19

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Скриншот вы выложили два раза. И смотрите мое сообщение №16.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

20

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Александр Б. пишет:

Скриншот вы выложили два раза. И смотрите мое сообщение №16.

У меня файл смотрится одинаково как с прикрепленным, так и со снятым флажком автоматического обновления стилей - а именно, с жирным номером и нежирным текстом абзаца в стиле SubheadngItem X

21

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

yshindin пишет:
Александр Б. пишет:

Скриншот вы выложили два раза. И смотрите мое сообщение №16.

У меня файл смотрится одинаково как с прикрепленным, так и со снятым флажком автоматического обновления стилей - а именно, с жирным номером и нежирным текстом абзаца в стиле SubheadngItem X

Кстати, если я этом документе щелкаю по номеру абзаца в абзаце со стилем SubheadingItem 2, а потом убираю жирность, то автоматически жирность убирается и из номеров в абзацев в стиле Heading 2.

22

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

yshindin пишет:
yshindin пишет:
Александр Б. пишет:

Скриншот вы выложили два раза. И смотрите мое сообщение №16.

У меня файл смотрится одинаково как с прикрепленным, так и со снятым флажком автоматического обновления стилей - а именно, с жирным номером и нежирным текстом абзаца в стиле SubheadngItem X

Кстати, если я этом документе щелкаю по номеру абзаца в абзаце со стилем SubheadingItem 2, а потом убираю жирность, то автоматически жирность убирается и из номеров в абзацев в стиле Heading 2.

Александр, пжл, отцепите флажок так:
1. Снимаете флажок
2. Сохраняете файл
3. В пути доступа к шаблону пишете "Normal"
4. Снова сохраняете файл
5. Выкладываете файл
Смысл - я хочу, чтобы все стили заведомо брались из самого документа, когда я его открою.

23

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Но я так и делал. Вот еще раз выкладываю файл.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

24

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Вот

Post's attachments

MultilevOutline2 (Бирюков 2017.06.09, ред 2).docx 56.28 Кб, 3 скачиваний с 2017-06-09 

You don't have the permssions to download the attachments of this post.
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

25

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Александр Б. пишет:

Вот

Да, спасибо, теперь вижу - в документе так, как я хочу.
Видимо, в предыдущий раз я открывал документ, в котором просто был снят флажок, а у меня подозрение, что если стилевой шаблон указан при снятом флажке, а сам шаблон остался на том же месте, то он снова срабатывает ((
Теперь, когда я к вашему последнему варианту прикрепляю этот же стилевой шаблон, то опять все становится неправильно (( Я этот шаблон выкладываю на всякий случай = м.б., вы найдете в нем дефект oO)).
Даже не знаю, как с этим бороться = у нас две разные среды, получается?

Post's attachments

ESP_GOST.dot 84.5 Кб, 1 скачиваний с 2017-06-09 

You don't have the permssions to download the attachments of this post.

26

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

yshindin пишет:

Даже не знаю, как с этим бороться = у нас две разные среды, получается?

Александр, спасибо за помощь. Предлагаю, чтобы не занимать трибуну, перевести наше обсуждение в офлайн (пишите, пжл, в личку, если будут тсоображения по поводу этой проблемы)

27

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

yshindin пишет:

Теперь, когда я к вашему последнему варианту прикрепляю этот же стилевой шаблон, то опять все становится неправильно

Ну, естественно, у вас же в шаблоне стиль zl_Heading имеет другие настройки. Давайте я вам устрою демонстрацию экрана по Skype. Я пару лет назад намучался со списками и теперь отлично в них разбираюсь. Эту тему просто невозможно обсуждать в письменном виде, а вот показать все можно легко и быстро. От вас не потребуется даже задавать вопросы, поскольку я знаю, что надо объяснять. Вот мой скайповский логин: aleksandr_biriukov

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

28

Re: Стиль номера абзаца, привязанный к текущему уровню заголовка

Подведу итог темы. В макросе надо писать:

Sub RunSpecificMacroForStyle()
Dim k As Long
  For k = 2 To 9
      With ActiveDocument.Styles("zl_Heading")
          .ListTemplate.ListLevels(k).Font.Reset
      End With
  Next k
End Sub

Т.е. надо использовать команду Reset. Это сбрасывает настройки шрифта, поэтому управление переходит к стилю абзаца.

Что касается, ручного редактирования стиля списка, то результаты зависят от того, где находится позиция вставки перед тем как вы начнете редактировать стиль. Я рекомендую устанавливать позицию вставки вне любых списков.

Еще я выяснил, что шаблон списка (list template) с помощью VBA создать можно, а вот удалить нельзя (метод Delete отсутствует, есть только Add). Такой вот прикол от разрабов Ворда.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir