вторник, 29 ноября 2016 г.

Создаём автоматическую нумерацию пунктов договора с помощью стилей

Вечная проблема эти нумерованные пункты в договорах, даже если создать нумерованные списки в каждом разделе договора, все равно кто-то когда-то впишет что-нибудь руками туда, или нужно будет добавить новый раздел, из-за чего придется переделывать отдельно нумерацию внутри каждого раздела. Выход в создании сквозной нумерации по всему договору, вида примерно такого:
Причем, если между третьим и четвёртым разделом вставить еще один, то четвертый раздел станет пятым и пункты раздела также автоматически сменят нумерацию на вид 5.х. То есть нумерация пунктов зависит от номера раздела.
Сразу оговорюсь, что мой вариант мне самому кажется не очень правильным, однако он работает и работает неплохо. Основано всё на стилях. Что такое стили в LibreOffice можно почитать в этом документе.
Как это сделано:
Я создал несколько стилей абзаца, отдельно для:
Заглавия договора
Преамбулы договора
Заголовка раздела договора (будущая нумерация вида 1.)
Основного текста (будущая нумерация вида 1.1)
Основного текста (будущая нумерация вида 1.1.1)
Основного текста (будущая нумерация вида 1.1.1.1)
Эти стили я так и назвал, как указано выше. Настроил выравнивание Заголовков по середине и чтобы после Заголовка раздела договора следовал стиль Основной текст 1.1, что вполне логично.
Советую всегда создавать в документе свои стили, не используя и не изменяя стили, встроенные в LibreOffice. Можно взять любой встроенный стиль, и создать на его основе новый стиль, который будет отличаться исключительно названием, но в остальном будет в точности такой, как исходный стиль.
А дальше открываем диалог Структура нумерации (начиная с версии LibreOffice 6.0 данный пункт стал называться Нумерация глав) из меню Сервис:
И делаем следующее:
Слева выбираем последовательно Уровень, а справа назначаем ему Стиль абзаца. Для уровня 1 у меня назначен Заголовок раздела договора. Для уровня 2 - Текст основной 1.1 и так далее вниз по списку. У меня всего 4 уровня, мне больше было не нужно. Принцип я думаю ясен.
Для каждого уровня необходимо выбрать тип нумерации 1, 2, 3, ... из выпадащего списка Число. В поле После (после нумерации) я задавал каждому уровню точку. 
Обратите внимание - необязательно задавать именно нумерацию, можно выбрать и маркеры и картинки для списка, все зависит от потребностей.
Справа отображается предварительный упрощенный просмотр вашей структуры нумерации.
На вкладке Положение можно настроить отступы для каждого уровня и иные параметры:
После настройки всех уровней нажмите кнопку ОК, чтобы применить изменения и закрыть диалог.
То, что у меня получилось в итоге, можно скачать вот отсюда
Изменять уровень списка можно и классическим способом, используя стрелки на панели инструментов, которая появляется в нижней части окна LibreOffice Writer, если курсор нахоится в списке:
так и применяя соответствующий стиль в абзацу.
Upd: если нужно вставить абзац без нумерации с сохранением существующей нумерации в документе, то читайте тут.
Единственная проблема, которая может возникнуть при использовании данного метода - это содание оглавления документа. Обычно в договоре оглавление не создают, однако если попробовать это сделать, то все пункты договора перекочуют в оглавление. Это происходит потому, что Структура нумерации - это диалог настройки нумерации Заголовков! Будьте осторожны при копировании текста в иной документ, лучше вставлять его как неформатированный текст.

15 комментариев:

  1. Зачем идти в "Структуру нумерации"? Что за глупости?
    Надо:
    1. Создать нужный стиль смвола нумерации (обязательно!!!)
    2. Создать нужный стиль нумерации.
    3. Создать нужное количество стилей абзаца, в которых указать нужный стиль нумерации и уровень нумерации. Этих стилей обычно нужно два-три, а не на каждый уровень нумерации, т.к. для каждого уровня обычно прописываются только отступы, а они указаны в стиле нумерации.

    И вообще, мне совершенно непонятно, почему это не сделано сразу и не положено в дистрибутив?

    ОтветитьУдалить
    Ответы
    1. Сделайте документ по Вашему рецепту и выложите его куда-нибудь, я с удовольствием поучусь и сохраню себе. Я отметил в статье, что мой вариант мне самому не очень нравится, однако то, что я пытался сделать с помощью стилей списков мне не понравилось еще больше.

      Удалить
    2. Отличный алгоритм! +++++

      Удалить
  2. Вот ссылка:
    https://drive.google.com/open?id=0B1mE7YyrwFIvTjJYTHNrWS1nb28

    ОтветитьУдалить
    Ответы
    1. Я так и думал, я пытался сделать то же самое. У Вас при попытке сделать из пункта основного текста Заголовок раздела получается Заголовок да, однако с нумерацией списка того уровня, из чего мы его пытались сделать. Также после двойного нажатия в списке нумерация пропадает. И еще нужно больше ручной работы по настройке уровней списка...Я никого ни в чем не убеждаю, однако мне описанный в статье способ показался быстрее, понятнее и более качественно работающим в целом. Ну и делается все в одном диалоге не отходя от него далеко. пусть этот диалог и предназначен для немного другого =)

      Удалить
    2. Ничего не понял. Чего куда получается и какого уровня? Чего пропадает? Я могу Вам как-то позвонить по телефону или скайпу? Мне можно написать на tenchem at gmail dot com.
      Объясняю, почему надо именно так, как я написал, и обязательно надо включить в дистрибутив. Дело в том, что нумерация в LibreOffice работает достаточно криво. Особенно криво работает нумерация типа структура. Соответственно, всем пользователям, кто её пользуется, я сделал подобные стили. Поскольку многим нужно одновременно и оглавление, и нумерация, смешивать их нельзя.
      Конечно, в рамках одного документа можно наворотить всё, что угодно. Но, когда у вас около 2000 рабочих мест, для которых работа с документами основное занятие, такие вольности непозволительны.
      Поясню, в чём кривизна: формат символа нумерации может оказаться любой. Поскольку Word также является потомком Star Writer, там используется та же концепция стилей. Однако, Word просто автоматически создаёт нужные стили для символов нумерации, чтобы всё работало корректно. В OpenOffice в нумерации типа структура также присутствовал стиль символа, но в LibreOffice его по умолчанию убрали, и сделали стиль "нет". Так вот, по факту это приводит к тому, что фактический формат может оказаться любым. При чём, чтобы его потом исправить, пользователю нужно произвести довольно нетривиальные действия. Ещё хуже ситуация, когда список, по какой-то причине, оказался разорван и состоит из нескольких списков. Очень часто такое бывает, если Вы открываете файл в формате RTF. Word, в этом случае, старается привести всё в более-менее нормальный вид, LibreOffice, мало того, что ничего не старается, так там нет средств и для того, чтобы это всё сделать вручную. Т.е., фактически, я должен просто снести всё форматирование, создать новые стили и отформатировать списки заново. При работе с документами, экспортированными из Гаранта, такое случается просто на каждом шагу.
      Мысль очень простая: или надо делать так, чтобы редактор прикидывался умным и делал всё сам как надо, как это делает Word, или надо дать пользователю доступ ко всем настройкам форматирования. А то мне потом умники тыкают в лицо XML-ными тегами из ODF, я а что, должен заставлять пользователей редактировать всё прямо в исходниках? А Writer тогда на что, если с его помощью это нельзя сделать?

      Удалить
    3. Вот если честно, не вполне понятно, о чём Вы. При том, что есть рациональное зерно в упоминании о нужности и оглавлений, и нумераций, в остальном какая-то мешанина. Особенно порадовала генеалогия Word от Star Writer.

      На самом деле хотелось бы понять, о какой проблеме(ах) идёт речь, но сделать это можно только в виде чёткого описания шагов для воспроизведения (как это принято в багрепортах), и предпочтительно в багзилле. Чтобы можно было проделать описанные вами простые действия или открыть файлы, и понять, о чём речь. Особенно про стили символов.

      Роман предложил вариант удобного использования инструментария не совсем по назначению. И хотя я согласен, что такой подход применим не везде (мы с Романом обсуждали те проблемы, о которых Вы говорите, перед тем, как Роман опубликовал эту статью), всё же это рациональный подход, поскольку исходит из удобства использования, которое не обеспечивается текущей концепцией в достаточной мере (см. https://bugs.documentfoundation.org/show_bug.cgi?id=104206).

      Подход Романа позволяет связать уровень списка со стилем абзаца. Ваш подход не даёт обеспечить такую связь (стиль абзаца связывается со стилем списка, но не с его отдельным уровнем). Поэтому при изменении уровня на "заголовочный" часто приходится делать несколько действий (в частности, выставлять и стиль абзаца, и уровень списка) вместо одного действия. Подход Романа плох единственно тем, что "Структура нумерации" (Outline numbering) - это уникальный метастиль, в обязательном порядке связывающий ещё и уровень структуры. Если бы не это два момента (уникальность - лучше бы была возможность задать множество таких стилей, и связь с уровнем структуры - что мешает оглавлениям и т.п.), то это был бы наиболее правильный вариант.

      Удалить
    4. Я же не зря предлагаю связаться и поговорить.
      Генеалогия, какая есть. Он был первым, поэтому с него все основные принципы и передирали. Я работал ещё с Word под DOS, так что всё это лицезрел.

      Спасибо, что завели проблему в багзилле. На самом деле проблема с нумерацией гораздо глубже. Например: https://bugs.documentfoundation.org/show_bug.cgi?id=97783
      И это только малая часть проблем.
      Подход Романа неправильный именно потому, что нельзя приучать пользователя пользоваться для чего-либо инструментами, для этого не предназначенными. Вместо этого следует признать ошибку в программе и в конце-концов её исправить.
      Я так думаю.

      Проблему со стилем символа нумерации я постараюсь воспроизвести. Это такая проблема, которая почти всегда всплывает при редактировании многостраничного документа с нумерацией, но почему-то её не так просто получить в идеальных тестовых условиях. Ещё раз замечу, что в OOo не было стиля символа нумерации "нет".

      Удалить
    5. >Подход Романа неправильный именно потому, что нельзя приучать пользователя пользоваться для чего-либо инструментами, для этого не предназначенными
      Однако, за неимением лучшего, нужно и можно пользоваться тем, что предлагает софт
      >Вместо этого следует признать ошибку в программе и в конце-концов её исправить.
      признали мы её, да. А вот исправляльщиков что-то не очень видно =(
      >Я так думаю.
      я тоже так думаю, но это не мешает мне эксперименты ставить, н-да

      Удалить
    6. Мы тут полгода уже яростно ищем, кого бы на техподдержку нанять. Деньги готовы платить.
      Никого не нашли. Забили. :-(
      Особенность - мы госструктура, поэтому контрагент только резидент, а контракт только через госзакупки.

      Удалить
    7. > На самом деле <...>
      Не нужно сюда приплетать совершенно не относящиеся к делу проблемы. Эта ошибка никак не связана с принципиальной возможностью использования функционала программы не так, как задумано авторами. И это, кстати, нормально, всегда нормально. Именно так появляются неожиданные способы решения задач, становятся видны направления развития и т.д. Насчёт "нельзя приучить пользователя ..." - если бы Вы случайно оказались правы, это был бы совсем печальный мир.

      Насчёт "Он был первым" - :)) прям даже не знаю, что Вам сказать... разве что напомнить, что в 1983 году его ещё не было...

      > Вместо этого следует признать ошибку в программе и в конце-концов её исправить
      Если меня что-то бесит, то это такие высказывания. Вы кому их адресуете? Себе? Ну так признайте и исправьте. У программы НЕТ "ответственного". Здесь есть только те, кто заинтересован в чём-то, например, сделать её лучше для себя.

      Удалить
    8. Я Вас чем-то обидел? Чего Вы сразу в драку-то?

      Теперь касаемо вопросов.
      1. Я занимаюсь внедрением LibreOffice на тысячах компьютеров. Я не могу позволить себе таких вольностей, как Вы пишете. Если я это позволю, ко мне сразу прибегут десятки пользователей. Если Вы хотите провести реальное внедрение, с пользователями нужно работать.
      2. Кто там был первым, я спорить не буду. По большому счёту, сам MS DOS до версии 2.0 можно вообще не рассматривать. Реально MS DOS начался с версии 3.30. Это я говорю как человек, который с ним работал. К стати, я и с Gem тоже работал. Так что, кто и что у кого передирал, сейчас судить сложно. Одно точно: MS сам вообще ничего никогда не придумал - украдено 100% всех решений.
      3. Без ответственных ни какая система жить не может. Ответственность возникает, когда человек за что-то берётся. И не важно, за деньги он это делает, или ещё по какой-либо причине. Поскольку я не программист, я не могу взять на себя такую ответственность, потому что знаю - не справлюсь. А то, что я могу написать "Hello world!" на добром десятке языков программирования, ещё не делает меня программистом. Если человек не чувствует ответственности за то, что он делает, лучше бы ему этого не делать. Я так думаю.
      4. Мы с Вами, кажется, уже переписывались. И я уже писал, что у нас было и есть желание потратить некоторое количество денег на доводку офиса. Увы, желающих почему-то не находится!
      Открою страшную тайну, я не зацикливаюсь только на LibreOffice. Я рассматриваю все возможные альтернативы, в том числе: SoftMaker, ONLYOFFICE и даже, не приведи господь, МойОфис. Увы, и сами эти продукты далеки от идеала, и разработчики, в большинстве своём, не понимают многих проблем.
      Но, не надейтесь, я пока ещё не сдался. Работа по прежнему ведётся и перспективы ещё есть.

      И таки да, мир, на самом деле, ещё печальней, чем Вы думаете.

      И ещё, большая просьба: если Вас что-то "бесит" в моих комментариях, просьба считать это бредом выжившего из ума старика, которому давно пора на пенсию.

      Удалить
    9. Моё внедрение уже в прошлом... с 2007 по 2015. И да, я работал с пользователями. Я вообще был един во всех ипостасях, кроме пользовательской :)

      Насчёт ответственных. Вот Вы - ответственный у себя на предприятии, потому что Вы за это взялись. Если Вы найдёте себе платный саппорт - он будет ответственным за исполнение обязательств по договору с Вами.
      Но насколько я понимаю, в настоящий момент нет в мире никого, кто был бы ответственным перед Вами за качество LibreOffice. И в этой ситуации неправильно делать заявления, относящиеся к Роману, в его блоге, которые звучат так:
      * 1. "Вы говорите глупости." (см. первый Ваш ответ от 29 ноября, 23-19).
      * 2. "Надо, чтобы Writer был лучше" (самый конец третьего Вашего сообщения - 30 ноября, 20-55, и ссылка на несущественный в данном контексте баг в четвёртом. Интересно, причём тут это...).
      * 3. "Подход Романа неправильный" (четвёртое, 5 декабля, 2-00).
      * 4. Самое шикарное - "то, что Роман делает, фигня (это читается, поскольку Вы непосредственно отвечаете в его теме, пишете про неправильный подход), вместо этого (!!!) следует (кому???) признать ошибку в программе и в конце-концов её исправить".

      Да, я считаю такой способ общения некорректным.
      Вы отказываете человеку (Роману) в возможности творчески пользоваться его (не Вашим!) достоянием. Его время, его копия ЛО... На Вашем предприятии, где есть кто-то (Вы?) ответственный за взаимоувязку разных инструментов между собой для решения специфических задач местной струкруры, для обеспечения внешних коммуникаций принятым там путём - Вы имеете право, даже обязаны ограничивать свободу пользователя делать "неправильно" (= не в соответствии с вашими стандартами). Потому что ограничение числа степеней свободы - необходимое условие эффективной работы механизма.
      Но это ограничение в разных механизмах может быть разным, а эти механизмы будут конкурировать и практикой доказывать, какой из них успешнее, так что практически любое категоричное универсальное заявление, что что-то неправильно, само по себе имеет мало смысла.

      Про деньги: Вы вполне можете обратиться за платной поддержкой в одну из контор, оказывающих такие услуги. Почему Вы говорите об этом, как будто Вам кто-то отказывает? Желающих не находится? Значит, Вы не туда обращаетесь. Правда, я не знаю, какие конторы в России этим занимаются, но в Европе их не одна. Насчёт - альтернатив - тоже правильно, нельзя зацикливаться.

      Удалить
    10. И вот теперь на философские темы.
      * Без ответственных система прекрасно может быть. И есть. Причём самая крупная в обозримом пространстве-времени. Другое дело, что её функционирование не подчинено Вашим задачам - это да.
      * Поскольку Вы не программист... Вы имеете право так считать. Я тоже могу так про себя сказать. Но когда мне потребовался инструмент структурированного хранения информации на моём предприятии - я взялся за это, написал систему, и был ответственным. Потом, когда требовался переход на Thunderbird, а импорт туда из аутлука хромал, мне пришлось взяться за это, и исправить. Хотя я в то время не мог написать hello world на стольких языках. Это я к тому, что когда люди говорят "я не Х, поэтому я не могу на себя брать такую ответственность" - американцы бы посмотрели на Вас с удивлением. Там ты то, за что берёшься. Неважно, какой у тебя диплом.
      Это ни в коем случае не упрёк, Вы вполне можете быть довольны своей работой и своим хобби, и ни в коем случае никому не обязаны программировать для ЛО. Я отвечаю лишь исключительно на аргументацию про "я не программист, *поэтому*..."
      * "Если человек не чувствует ответственности за то, что он делает, лучше бы ему этого не делать" - я могу здесь что-то путать. Я надеюсь, что это Вы писали про себя в контексте нежелания программировать. Потому что мне не хотелось бы думать, что это ещё одно обидное высказывание, теперь уже на мою фразу о том, что нет ответственных за ЛО, в контексте того, что я - его контрибьютор.
      * Насчёт разработчиков, не понимающих многих проблем. Именно поэтому я уверен, что лучшие разработчики - те, кто познакомился со своими проблемами, работая с программой, а не пришедшие с GSoC. Но и те, кто думает, что разработчики чего-то не понимают, но при этом не попробовавшие побыть разработчиками - не способны увидеть реальную картину.
      * И да, на самом деле печален не мир, а отдельное его восприятие. :)

      Удалить
  3. Andre, я почти каждый вечер бываю в IRC канале #libreoffice-ru в сети freenode.net, как и Mike. Приходите, пообщаемся, если есть желание

    ОтветитьУдалить

Внимание! Сообщения проходят премодерацию!